我在 AutoCAD 中有以下 2D 折线。
我正在尝试创建一个代码,当选择所有这些时,它将过滤掉那些内部有舱口的代码。
从另一个来源我得到了以下代码(感谢 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)
)
初学者,如果这不是一个好问题,抱歉。
“_CP”实际上代表交叉多边形。 此选项需要点列表(多边形顶点)。
(mapcar 'cdr ;;???
(vl-remove-if-not '(lambda (p) (= (car p) 10))
(entget (setq sn (ssname ss (setq i (1- i)))))
)
)
从折线顶点构建点列表。
因此,该例程首先提示用户选择折线。 然后,迭代选择集,并针对每条选定的多段线,尝试通过将多边形与多段线顶点交叉来选择任何剖面线。如果有的话,折线将从第一个选择集中删除。
在我看来,由于“交叉”选项,这段代码对于您的目标来说并不真正安全。将“_CP”替换为“_WP”将使用窗口多边形选择,如果多段线没有圆弧段,这会更安全。