设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 927|回复: 6

[工具] 直角矫正插件

[复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-8-30 16:52:57 | 显示全部楼层 |阅读模式
  • 插件名称 : 直角矫正
  • 作  者 : newer
  • 运行环境 :XDRX API 晓东工具箱 
  • 发布时间 :2018-08-30
  • 命令名称 :xdtb_rangcorrection
  • 插件介绍 :直角矫正插件
  • 备  注 : (点击图片可以放大)
(点击图片可以放大)

晓东温馨提示 1、运行环境为 晓东工具箱XDRX API 的插件,请下载最新版本的 晓东工具箱XDRX API开发环境 一键安装
2、在ACAD中如何加载插件,请看 论坛插件使用方法
3、如果您有要求需要定制插件,请到 编程申请 论坛发帖求助

插件详细内容

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 newer 于 2018-8-30 16:57 编辑

1、可设置精度,在精度范围内(同90度)比,转换成直角
2、强制转换,所有角都转成90度

请在 2018.08.30日以后更新的API上运行。

  1. (defun c:xdtb_rangcorrection (/            #endpoint          #startpoint        ang    cur    dist
  2.              dists  g1           g2          i         inx        nums   nums1  numverts
  3.              p&n    p1           prev          pt         ss        tf     tf1    tol
  4.              v1            v2           val          vp         x
  5.             )
  6.   (xdrx_begin)
  7.   (xdrx_initget "Y N")
  8.   (if (not #xd_var_global_tol_angle)
  9.     (setq #xd_var_global_tol_angle 1.0)
  10.   )
  11.   (if (= (xdrx_yesorno "\n强制转换吗" 0) 0)
  12.     (progn (if (setq val (getreal (xdrx_prompt
  13.                                     "\n精度精度(度)<"
  14.                                     #xd_var_global_tol_angle
  15.                                     ">:"
  16.                                     t
  17.                                   )
  18.                          )
  19.                )
  20.              (setq #xd_var_global_tol_angle val)
  21.            )
  22.            (setq tol (* pi (/ #xd_var_global_tol_angle 180)))
  23.     )
  24.     (setq tol (/ pi 2.0))
  25.   )
  26.   (setq        nums 0
  27.         nums1 0
  28.   )
  29.   (if (and (xdrx_initssget "\n选择要矫正直角的多段线<退出>:")
  30.            (setq ss (xdrx_ssget '((0 . "*POLYLINE"))))
  31.       )
  32.     (progn
  33.       (mapcar
  34.         '(lambda (x)
  35.            (setq tf nil)
  36.            (if (xdrx_object_iskindof x "AcDb2dPolyline")
  37.              (progn (setq tf t) (xdrx_polyline_convertfrom x))
  38.            )
  39.            (setq numverts (xdrx_getpropertyvalue x "numverts")
  40.                  inx          nil
  41.            )
  42.            (setq i     0
  43.                  dists (xdrx_getpropertyvalue x "lengths")
  44.            )
  45.            (setq tf1 nil)
  46.            (repeat (1- numverts)
  47.              (setq prev        i
  48.                    cur        (setq i (1+ i))
  49.                    p1        (xdrx_polyline_getpointat x cur)
  50.                    p&n        (xdrx_getpropertyvalue x "prevnextindex" cur)
  51.              )
  52.              (if (and (= (xdrx_getpropertyvalue x "segtype" prev) 0)
  53.                       (= (xdrx_getpropertyvalue x "segtype" cur) 0)
  54.                  )
  55.                (progn
  56.                  (if (not (member prev inx))
  57.                    (setq inx (cons prev inx))
  58.                  )
  59.                  (if (not (member cur inx))
  60.                    (setq inx (cons cur inx))
  61.                  )
  62.                  (setq g1   (xdrx_polyline_getlinesegat x prev t)
  63.                        g2   (xdrx_polyline_getlinesegat x cur t)
  64.                        dist (xdge::getpropertyvalue g2 "length")
  65.                        dist (nth cur dists)
  66.                        ang  (xdge::getpropertyvalue g1 "angle" g2 t)
  67.                  )
  68.                  (if (and (not (equal ang (/ pi 2.0) 1e-5))
  69.                           (equal ang (/ pi 2.0) tol)
  70.                      )
  71.                    (progn
  72.                      (setq tf1         t
  73.                            nums1 (1+ nums1)
  74.                      )
  75.                      (xdge::getpropertyvalue g1 "startpoint" "endpoint")
  76.                      (setq v1 (xdrx_vector_normalize
  77.                                 (mapcar '- #endpoint #startpoint)
  78.                               )
  79.                      )
  80.                      (xdge::getpropertyvalue g2 "startpoint" "endpoint")
  81.                      (setq v2 (xdrx_vector_normalize
  82.                                 (mapcar '- #endpoint #startpoint)
  83.                               )
  84.                      )
  85.                      (setq vp (xdrx_vector_perpvector v1))
  86.                      (if (not (xdrx_vector_iscodirectional vp v2 t))
  87.                        (setq vp (xdrx_vector_negate vp))
  88.                      )
  89.                      (setq
  90.                        pt (mapcar '+ p1 (xdrx_vector_product vp dist))
  91.                      )
  92.                      (if (and (xdrx_curve_isclosed x)
  93.                               (= (1+ cur) numverts)
  94.                               (member 0 inx)
  95.                          )
  96.                        (progn (setq nums1 (1+ nums1)
  97.                                     pt          (car (xdrx_getinters
  98.                                                  (list #startpoint pt)
  99.                                                  (xdrx_polyline_getlinesegat x 0)
  100.                                                  3
  101.                                                )
  102.                                           )
  103.                               )
  104.                        )
  105.                      )
  106.                      (xdrx_polyline_setpointat x (cadr p&n) pt)
  107.                    )
  108.                  )
  109.                )
  110.              )
  111.              (and tf (xdrx_polyline_convertto x))
  112.            )
  113.            (if tf1
  114.              (setq nums (1+ nums))
  115.            )
  116.          )
  117.         (xdrx_pickset->ents ss)
  118.       )
  119.       (xdrx_prompt
  120.         "\n成功矫正了 "        nums " 个多段线. 包括了 " nums1        " 个直角.")
  121.     )
  122.   )
  123.   (xdrx_end)
  124.   (princ)
  125. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 5875个

财富等级: 富甲天下

发表于 2018-8-30 19:10:03 | 显示全部楼层
这个插件有一定意义
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 100个

财富等级: 招财进宝

发表于 2018-8-30 22:03:29 | 显示全部楼层
这个插件不错,试一下!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 86个

财富等级: 招财进宝

发表于 2018-8-31 16:58:58 | 显示全部楼层
这个不错,用来校正从pkpm里面导出的剪力墙模板。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2018-9-6 09:03:59 | 显示全部楼层
感谢楼主分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3529个

财富等级: 富可敌国

发表于 2018-9-7 08:40:15 | 显示全部楼层
感谢楼主分享!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 42个

财富等级: 招财进宝

发表于 2018-9-7 08:43:21 | 显示全部楼层
支持一下,大神级别的。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )  

GMT+8, 2021-9-22 16:40 , Processed in 0.670187 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表