多段线打断并删除
经常碰到,需要某段多段线,划线再修剪太麻烦了,各位大侠能否实现直接打断后直接删除,如图打断的时候从红色段开始就删除红色段,保留绿色段本帖最后由 foolishzy 于 2023-6-6 09:53 编辑
wanhongron 发表于 2023-6-5 16:31
如果想删除左边就从左边开始往前找打断点,想删除右边从右边开始往前找打断点(defun c:tt (/ a getaverpt e1 e2 n1 n2 avpt1 avpt2)
(defun getaverpt (ename num / n lst sum_aver_pt)
(setq n 0
lst (list)
)
(while (< n num)
(setq lst(append lst (list (vlax-curve-getPointAtParam ename n)))
n(1+ n)
)
)
(setq sum_aver_pt (list 0 0 0))
(mapcar (function (lambda (x)
(princ x)
(setq sum_aver_pt
(list
(+ (car sum_aver_pt) (car x))
(+ (cadr sum_aver_pt) (cadr x))
0
)
)
)
)
lst
)
(setq sum_aver_pt
(list
(/ (car sum_aver_pt) num)
(/ (cadr sum_aver_pt) num)
0
)
)
)
(vl-cmdf "BREAK" (setq p1 (getpoint)) (setq p2 (getpoint)))
(setq e1 (entlast))
(entdel (entlast))
(setq e2 (entlast))
(entdel e1)
(setqn1 (cdr (assoc 90 (entget e1)))
n2 (cdr (assoc 90 (entget e2)))
)
(setqavpt1 (getaverpt e1 n1)
avpt2 (getaverpt e2 n2)
)
(if (and
(< (distance avpt1 p1) (distance avpt1 p2))
(> (distance avpt2 p1) (distance avpt2 p2))
)
(entdel e1)
(if
(and
(> (distance avpt1 p1) (distance avpt1 p2))
(< (distance avpt2 p1) (distance avpt2 p2))
)
(entdel e2)
(princ "\n 手动删除")
)
)
)
(defun c:tt( / a)
(vl-cmdf "BREAK" pause pause)
(setq a (entlast))
(entdel(entlast))
(entdel(entlast))
(entdel a)
) foolishzy 发表于 2023-6-6 09:51
wanhongron 发表于 2023-6-5 16:31
如果想删除左边就从左边开始往前找打断点,想删除右边从右边开始往前找 ...
会报错呢?numberp:nil 过滤红色多义线,也很快。还是分两步走稳妥 本来是一条多段线,为了区分才标示颜色 打断再删除 保留一条线的一部分的话,指定两个点后,求这两个点在线上的最近点,把这两个最近点之外的点去掉得到需要保留的部分的点集,用点集修改线,其它要素当没见说。。。 思路是对了,麻烦大侠帮写一下程序 两点打断,另一点超出线不行吗? wanhongron 发表于 2023-6-3 16:13
思路是对了,麻烦大侠帮写一下程序
你不会写吗 谢谢foolishzy大侠,老是从一个方向删除,如果能从开始捕捉的位置删除就更好了
页:
[1]
2