如何 select 闭合内部没有舱口的二维多段线?
How to select closed 2d polylines that don't have a hatch inside?
我在 autocad 中有以下二维折线。
我正在尝试创建一个代码,该代码在选择所有这些代码时会过滤掉那些内部舱口的人。
我从另一个来源获得了以下代码(感谢 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 trough each one of them
(if (ssget "_CP" ;;???defines a crossing poligon inside wich 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 wich 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)))))
)
)
从折线顶点构建此点列表。
所以,这个例程首先提示用户select折线。
然后,遍历 selection 集,并且对于每个 selected 折线,尝试通过将多边形与折线顶点交叉来 select 任何影线。如果有的话,从第一个 select 离子集中删除折线。
在我看来,由于 'Crossing' 选项,这段代码对于您的目标来说并不是真正安全的。将“_CP”替换为“_WP”将使用 Window 多边形 selection,如果多段线没有圆弧段则更安全。
我在 autocad 中有以下二维折线。
我正在尝试创建一个代码,该代码在选择所有这些代码时会过滤掉那些内部舱口的人。
我从另一个来源获得了以下代码(感谢 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 trough each one of them
(if (ssget "_CP" ;;???defines a crossing poligon inside wich 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 wich 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)))))
)
)
从折线顶点构建此点列表。
所以,这个例程首先提示用户select折线。 然后,遍历 selection 集,并且对于每个 selected 折线,尝试通过将多边形与折线顶点交叉来 select 任何影线。如果有的话,从第一个 select 离子集中删除折线。
在我看来,由于 'Crossing' 选项,这段代码对于您的目标来说并不是真正安全的。将“_CP”替换为“_WP”将使用 Window 多边形 selection,如果多段线没有圆弧段则更安全。