wide 发表于 2024-12-13 09:36:06

查找重叠的线段

本帖最后由 wide 于 2024-12-14 07:30 编辑

在dwg图中如何找出选择部分线段中完全重叠的直线,即首尾(或尾首)点重合,不是删除。部分重合不包含在内。有这样的代码更好,谢谢。{:1_1:}

杨小五 发表于 2024-12-13 14:12:22

(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:43:15

本帖最后由 wide 于 2024-12-13 19:54 编辑

第一个找不全的问题应该是有组码10和11颠倒的,增加一个颠倒的就可以了,不知道怎么写。还望赐教。

weijiewen 发表于 2024-12-14 16:42:17

我也在寻找{:1_1:}

杨小五 发表于 2024-12-15 14:08:17

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-15 14:12:12

杨小五 发表于 2024-12-13 14:12


没有理解你写的第二点,现在代码处理的就是选定的直线查找重叠线的

wide 发表于 2024-12-15 20:38:11

第二点主要是怕影响速度,因为是全选图形,而后循环。非常感谢大佬的帮助。{:1_1:}
页: [1]
查看完整版本: 查找重叠的线段