从选择中筛选对象
大家好,我做了一个例程,其中有一个具有不同层的不同对象的选择集。
请帮助我了解如何逐步通过选择集并从特定层中拾取对象。
当做
Aaryan。 您应该查看SSNAME和ENTGET函数;该层存储在DXF代码8下。
或者,当创建选择集时,可以仅过滤特定层中的实体:
(ssget "_X" (list (cons 8 MyLayer))) 谢谢你Mircea
但我想从选择集中选择一个对象,并将其保存为变量以供进一步使用。我不能使用
ssget "X"功能,因为我必须选择具有不同层的多个对象。到目前为止,我做了如下工作。
(defun c:test(/ Objectlist)
(prompt "\nSelect Objects to generate")
(setq sel1 (ssget '((0 . "POLYLINE,LWPOLYLINE") (8 . "Xpro,Fpro,Cpro"))))
(setq cntr 0
Objectlist '())
(repeat (sslength sel1)
(setq entityname (ssname sel1 cntr)
Objectlist (append (list entityname) Objectlist))
(setq cntr (1+ cntr)))
(setq check (mapcar '(lambda (a) (= (cdr (assoc 8 (entget a))) "Fpro")) Objectlist))
(princ))
我只需要check变量将对象保存在层Fpro中
请做需要的事
当做
Aaryan公司 您可以在解析选择集时创建列表-只需保留来自所述层的项目:
(defun c:test( / Objectlist sel1 cntr check )
(prompt "\nSelect Objects to generate")
(setq sel1 (ssget '((0 . "POLYLINE,LWPOLYLINE") (8 . "Xpro,Fpro,Cpro"))))
(setq cntr 0
Objectlist '()
check '())
(repeat (sslength sel1)
(setq entityname (ssname sel1 cntr))
(if (= (strcase (cdr (assoc 8 (entget entityname)))) "FPRO")
(setq check (append (list entityname) check))
)
(setq Objectlist (append (list entityname) Objectlist))
(setq cntr (1+ cntr)))
(princ)) 如果要直接从主列表处理:
(setq check (vl-remove-if-not '(lambda(x) (= (strcase (cdr (assoc 8 (entget x)))) "FPRO"))
Objectlist))
或:
(setq check (vl-remove-if '(lambda(x) (/= (strcase (cdr (assoc 8 (entget x)))) "FPRO"))
Objectlist)) 非常感谢米尔恰。
现在清楚了。
当做
Aaryan公司 很高兴听你这么说Aaryan。不客气!
页:
[1]