如何选择内部没有剖面线的闭合二维多段线?

问题描述 投票:0回答:1

我在 AutoCAD 中有以下 2D 折线。

enter image description here

我正在尝试创建一个代码,当选择所有这些时,它将过滤掉那些内部有舱口的代码。

从另一个来源我得到了以下代码(感谢 tharwat),但是,尽管我理解其中的每一部分,但从第二个

ssget
开始,我无法理解这些元素在一起的含义。

(defun c:test (/ ss i sn e)
   (if (setq ss (ssget '((0 . "POLYLINE")))) ;;selects all the polylines in a window
      (repeat (setq i (sslength ss))  ;;cycles through each one of them
    
         (if (ssget "_CP" ;;???defines a crossing polygon inside which the polylines will be considered???
                   (mapcar 'cdr ;;??? 
                             (vl-remove-if-not '(lambda (p) (= (car p) 10))
                              (entget (setq sn (ssname ss (setq i (1- i)))))
                       )
                    )
                    '((0 . "HATCH"))
      )
    (ssdel sn ss) ;;deletes the entities which belong to the selection set
  )
)
  )
  (sssetfirst nil ss)
  (princ)

初学者,如果这不是一个好问题,抱歉。

autocad autocad-plugin autolisp
1个回答
0
投票

“_CP”实际上代表交叉多边形。 此选项需要点列表(多边形顶点)。

           (mapcar 'cdr ;;??? 
                     (vl-remove-if-not '(lambda (p) (= (car p) 10))
                      (entget (setq sn (ssname ss (setq i (1- i)))))
               )
            )

从折线顶点构建点列表。

因此,该例程首先提示用户选择折线。 然后,迭代选择集,并针对每条选定的多段线,尝试通过将多边形与多段线顶点交叉来选择任何剖面线。如果有的话,折线将从第一个选择集中删除。

在我看来,由于“交叉”选项,这段代码对于您的目标来说并不真正安全。将“_CP”替换为“_WP”将使用窗口多边形选择,如果多段线没有圆弧段,这会更安全。

© www.soinside.com 2019 - 2024. All rights reserved.