查找重叠的线段
本帖最后由 wide 于 2024-12-14 07:30 编辑在dwg图中如何找出选择部分线段中完全重叠的直线,即首尾(或尾首)点重合,不是删除。部分重合不包含在内。有这样的代码更好,谢谢。{:1_1:}
(defun c:cc()
(setq ss(ssadd))
(prompt "\n选择处理直线对象:")
(setq ss1(ssget '((0 . "line"))))
(setq i (1- (sslength ss1)))
(while (>= i 0)
(setq ll(ssname ss1 i))
(setq p10(cdr (assoc 10 (entget ll)))
p11(cdr (assoc 11 (entget ll))))
(setq tmp_ss(ssget "x" (list '(0 . "line")(cons 10 p10) (cons 11 p11))))
(if (> (sslength tmp_ss) 1)
(progn
(setq j 0)
(repeat (sslength tmp_ss)
(setq ss(ssadd (ssname tmp_ss j) ss)
ss1(ssdel (ssname tmp_ss j) ss1))
(setq j(1+ j))
)
)
(setqss1(ssdel (ssname tmp_ss 0) ss1))
)
(setq i (1- (sslength ss1)))
)
(sssetfirstnil ss)
) 本帖最后由 wide 于 2024-12-13 19:54 编辑
第一个找不全的问题应该是有组码10和11颠倒的,增加一个颠倒的就可以了,不知道怎么写。还望赐教。 我也在寻找{:1_1:} wide 发表于 2024-12-13 19:43
第一个找不全的问题应该是有组码10和11颠倒的,增加一个颠倒的就可以了,不知道怎么写。还望赐教。
把前面代码里(setq tmp_ss...那句改成:
(setq tmp_ss(ssget "x" (list '(0 . "line") '(-4 . "<OR")
'(-4 . "<AND")(cons 10 p10) (cons 11 p11)'(-4 . "AND>")
'(-4 . "<AND")(cons 10 p11) (cons 11 p10)'(-4 . "AND>")
'(-4 . "OR>"))))
就可以了 杨小五 发表于 2024-12-13 14:12
没有理解你写的第二点,现在代码处理的就是选定的直线查找重叠线的 第二点主要是怕影响速度,因为是全选图形,而后循环。非常感谢大佬的帮助。{:1_1:}
页:
[1]