找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 194|回复: 8

[求助] 【已解决】线批量打断申请

[复制链接]
发表于 2024-5-1 09:27:57 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 zyxi19 于 2024-5-5 10:15 编辑

【已解决】求助大佬编写个批量打断的插键:功能如下:

根据输入打断距离,(可框选,可点选)批量打断交点处的垂直竖线(正交),不打断横线。(或打断横线,不打断竖线,通常默认前者仅仅打断竖线,横线不断),

其中直线类型包括line、pline等常见直线类型,

交点仅仅是线交点,排除线与矩形,或与其他图形交点,

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

已领礼包: 145个

财富等级: 日进斗金

发表于 2024-5-4 04:43:29 | 显示全部楼层
zyxi19 发表于 2024-5-3 10:23
谢谢大大提心,补充个图片



Video_2024-05-04_044019.gif


  1. (defun c:xdtb_brkgap ( / an ent ints mode p1 p2 ss ss1 vec verts x y)
  2.   (defun _break-line (an)
  3.     (if        (and (setq
  4.                ss1 (ssget "f"
  5.                           verts
  6.                           '((0 . "*polyline,line")
  7.                             (-4 . "<not")
  8.                             (-4 . "&=")
  9.                             (70 . 1)
  10.                             (-4 . "not>")
  11.                            )
  12.                    )
  13.              )
  14.              (progn
  15.                (ssdel x ss1)
  16.                t
  17.              )
  18.              (> (sslength ss1) 0)
  19.         )
  20.       (progn
  21.         (if (setq ints (xdrx-get-inters x ss1))
  22.           (progn
  23.             (setq ints
  24.                        (xdrx-points-sortoncurve x ints)
  25.                   ints (mapcar 'car ints)
  26.             )
  27.             (setq ent x)
  28.             (mapcar '(lambda (y)
  29.                        (setq p1        (polar
  30.                                   y
  31.                                   an
  32.                                   (/
  33.                                     #xd-var-global-break-gap-distance
  34.                                     2.0
  35.                                   )
  36.                                 )
  37.                              p2        (polar
  38.                                   y
  39.                                   (+ an pi)
  40.                                   (/
  41.                                     #xd-var-global-break-gap-distance
  42.                                     2.0
  43.                                   )
  44.                                 )
  45.                        )
  46.                        (xdrx-curve-break ent p1 p2)
  47.                        (setq ent (entlast))
  48.                      )
  49.                     ints
  50.             )
  51.           )
  52.         )
  53.       )
  54.     )
  55.   )
  56.   (xdrx-begin)
  57.   (xd::doc:getdouble
  58.     (xdrx-string-multilanguage
  59.       "\n打断距离"
  60.       "\nBreak Gap Distance"
  61.     )
  62.     "#xd-var-global-break-gap-distance"
  63.     3.5
  64.   )
  65.   (if (not #xd-var-global-slope-mode)
  66.     (setq #xd-var-global-slope-mode "0")
  67.   )
  68.   (xdrx-initget 0 "0 1")
  69.   (if (setq mode
  70.              (getkword
  71.                (xdrx-string-formatex
  72.                  (xdrx-string-multilanguage
  73.                    "\n打断方式[竖线(0)/水平线(1)]<%s>"
  74.                    "\nInterruption method [vertical line (0)/horizontal line (1)]<%s>"
  75.                  )
  76.                  #xd-var-global-slope-mode
  77.                )
  78.              )
  79.       )
  80.     (setq #xd-var-global-slope-mode mode)
  81.   )
  82.   (if (setq ss (xdrx-ssget
  83.                  (xdrx-string-multilanguage
  84.                    "\n选择要处理的线<退出>:"
  85.                    "\nSelect lines to process <Exit>:"
  86.                  )
  87.                  '((0 . "*polyline,line")
  88.                    (-4 . "<not")
  89.                    (-4 . "&=")
  90.                    (70 . 1)
  91.                    (-4 . "not>")
  92.                   )
  93.                )
  94.       )
  95.     (progn
  96.       (xdrx-begin)
  97.       (xdrx-document-safezoom ss)
  98.       (mapcar '(lambda (x)
  99.                  (if (or (xdrx-object-iskindof x "line")
  100.                          (and (xdrx-object-iskindof x "*polyline")
  101.                               (= (xdrx-getpropertyvalue x "numverts") 2)
  102.                               (xdrx-polyline-isonlylines x)
  103.                          )
  104.                      )
  105.                    (progn
  106.                      (setq verts (xdrx-getpropertyvalue x "vertices")
  107.                            vec         (xdrx-vector-normalize
  108.                                    (mapcar '- (last verts) (car verts))
  109.                                  )
  110.                      )
  111.                      (if (= #xd-var-global-slope-mode "0")
  112.                        (progn
  113.                          (if (xdrx-vector-isparallelto '(0 1 0) vec)
  114.                            (_break-line (/ pi 2.0))
  115.                          )
  116.                        )
  117.                        (progn
  118.                          (if (xdrx-vector-isparallelto '(1 0 0) vec)
  119.                            (_break-line 0.0)
  120.                          )
  121.                        )
  122.                      )
  123.                    )
  124.                  )
  125.                )
  126.               (xdrx-ss->ents ss)
  127.       )
  128.       (xdrx-end)
  129.     )
  130.   )
  131.   (princ)
  132. )


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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

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

使用道具 举报

 楼主| 发表于 2024-5-3 10:23:53 | 显示全部楼层
谢谢大大提心,补充个图片

                               
登录/注册后可看大图

点评

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

使用道具 举报

 楼主| 发表于 2024-5-4 10:21:04 | 显示全部楼层
本帖最后由 zyxi19 于 2024-5-4 11:56 编辑

感谢大大百忙之中帮忙制作,目前有个问题,前面没有说清楚,能不能只打断十字相交的地方,圆圈处不打断,仅仅打断相交且为十字相交的情况,如下图

                               
登录/注册后可看大图

仅仅打断十字相交处

仅仅打断十字相交处

打断.rar

122.74 KB, 下载次数: 5, 下载积分: D豆 -1 , 活跃度 1

原DWG文件

点评

试下下面的代码 [attachimg]108638[/attachimg]  详情 回复 发表于 2024-5-4 14:57
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2024-5-4 14:57:44 | 显示全部楼层
zyxi19 发表于 2024-5-4 10:21
感谢大大百忙之中帮忙制作,目前有个问题,前面没有说清楚,能不能只打断十字相交的地方,圆圈处不打断,仅 ...



试下下面的代码, 如果可以了,请编辑下主题贴,在前面填上【已解决】,谢谢

Video_2024-05-04_135344.gif


  1. (defun c:xdtb_brkgap ( / verts1 an ent ints mode p1 p2 ss ss1 vec verts x y)
  2.   (defun _break-line (ent an)
  3.     (if        (and (setq
  4.                ss1 (ssget "f"
  5.                           verts
  6.                           '((0 . "*polyline,line")
  7.                             (-4 . "<not")
  8.                             (-4 . "&=")
  9.                             (70 . 1)
  10.                             (-4 . "not>")
  11.                            )
  12.                    )
  13.              )
  14.              (progn
  15.                (ssdel x ss1)
  16.                t
  17.              )
  18.              (> (sslength ss1) 0)
  19.         )
  20.       (progn
  21.         (mapcar        '(lambda (x)
  22.                    (setq verts1 (xdrx-getpropertyvalue x "vertices"))
  23.                    (if (and (setq ints (xdrx-get-inters ent x))
  24.                             (setq ints (vl-remove-if
  25.                                          '(lambda (y)
  26.                                             (or (member y verts1)
  27.                                                 (member y verts))
  28.                                           )
  29.                                          ints
  30.                                        )
  31.                             )
  32.                             (> (length ints) 0)
  33.                        )
  34.                      (progn
  35.                        (setq ints
  36.                                   (xdrx-points-sortoncurve ent ints)
  37.                              ints (mapcar 'car ints)
  38.                        )
  39.                        (mapcar '(lambda        (y)
  40.                                   (setq        p1 (polar
  41.                                              y
  42.                                              an
  43.                                              (/
  44.                                                #xd-var-global-break-gap-distance
  45.                                                2.0
  46.                                              )
  47.                                            )
  48.                                         p2 (polar
  49.                                              y
  50.                                              (+ an pi)
  51.                                              (/
  52.                                                #xd-var-global-break-gap-distance
  53.                                                2.0
  54.                                              )
  55.                                            )
  56.                                   )
  57.                                   (xdrx-curve-break ent p1 p2)
  58.                                   (setq ent (entlast))
  59.                                 )
  60.                                ints
  61.                        )
  62.                      )
  63.                    )
  64.                  )
  65.                 (xdrx-ss->ents ss1)
  66.         )
  67.       )
  68.     )
  69.   )
  70.   (xdrx-begin)
  71.   (xd::doc:getdouble
  72.     (xdrx-string-multilanguage
  73.       "\n打断距离"
  74.       "\nBreak Gap Distance"
  75.     )
  76.     "#xd-var-global-break-gap-distance"
  77.     3.5
  78.   )
  79.   (if (not #xd-var-global-slope-mode)
  80.     (setq #xd-var-global-slope-mode "0")
  81.   )
  82.   (xdrx-initget 0 "0 1")
  83.   (if (setq mode
  84.              (getkword
  85.                (xdrx-string-formatex
  86.                  (xdrx-string-multilanguage
  87.                    "\n打断方式[竖线(0)/水平线(1)]<%s>"
  88.                    "\nInterruption method [vertical line (0)/horizontal line (1)]<%s>"
  89.                  )
  90.                  #xd-var-global-slope-mode
  91.                )
  92.              )
  93.       )
  94.     (setq #xd-var-global-slope-mode mode)
  95.   )
  96.   (if (setq ss (xdrx-ssget
  97.                  (xdrx-string-multilanguage
  98.                    "\n选择要处理的线<退出>:"
  99.                    "\nSelect lines to process <Exit>:"
  100.                  )
  101.                  '((0 . "*polyline,line")
  102.                    (-4 . "<not")
  103.                    (-4 . "&=")
  104.                    (70 . 1)
  105.                    (-4 . "not>")
  106.                   )
  107.                )
  108.       )
  109.     (progn
  110.       (xdrx-begin)
  111.       (xdrx-document-safezoom ss)
  112.       (mapcar '(lambda (x)
  113.                  (if (or (xdrx-object-iskindof x "line")
  114.                          (and (xdrx-object-iskindof x "*polyline")
  115.                               (= (xdrx-getpropertyvalue x "numverts") 2)
  116.                               (xdrx-polyline-isonlylines x)
  117.                          )
  118.                      )
  119.                    (progn
  120.                      (setq verts (xdrx-getpropertyvalue x "vertices")
  121.                            vec         (xdrx-vector-normalize
  122.                                    (mapcar '- (last verts) (car verts))
  123.                                  )
  124.                      )
  125.                      (if (= #xd-var-global-slope-mode "0")
  126.                        (progn
  127.                          (if (xdrx-vector-isparallelto '(0 1 0) vec)
  128.                            (_break-line x (/ pi 2.0))
  129.                          )
  130.                        )
  131.                        (progn
  132.                          (if (xdrx-vector-isparallelto '(1 0 0) vec)
  133.                            (_break-line x 0.0)
  134.                          )
  135.                        )
  136.                      )
  137.                    )
  138.                  )
  139.                )
  140.               (xdrx-ss->ents ss)
  141.       )
  142.       (xdrx-end)
  143.     )
  144.   )
  145.   (princ)
  146. )


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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2024-6-2 11:42:31 | 显示全部楼层
XDSoft 发表于 2024-5-4 14:57
试下下面的代码, 如果可以了,请编辑下主题贴,在前面填上【已解决】,谢谢

大大发现个bug,测试文件中迂回多段线无法剪断,另外大大方便的话加入个容差(竖线与垂直竖线30°也可以打断,横线同样。)

建议大大给个码,请大大喝杯奶茶啥的

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

使用道具 举报

 楼主| 发表于 2024-6-2 11:46:39 | 显示全部楼层
本帖最后由 zyxi19 于 2024-6-2 11:47 编辑

测试文件


大大能给个码,请你喝杯奶茶啥的

无法打断.rar

26.06 KB, 下载次数: 0, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-10 21:11 , Processed in 0.622146 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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