MiGo 发表于 2022-7-6 14:36:54

所有块的选择集w

是否存在允许您选择所有具有属性的块的选择集?
 

(setq ss (ssget "c" (getvar "extmax") (getvar "extmin") '((0 . "insert"))))

 
我通常可以选择所有块,但我只想选择具有属性的块。

Lee Mac 发表于 2022-7-6 14:41:45

也许 吧:
 

(ssget "_X" '((0 . "INSERT") (66 . 1)))

Lee Mac 发表于 2022-7-6 14:43:50

或者,另一种方法:
 

(defun GetBlkWithAtt (/ ss)
(vl-load-com)
(if (setq ss (ssget "_X" '((0 . "INSERT"))))
   (vl-remove-if-not
   '(lambda (x) (eq :vlax-true
                      (vla-get-HasAttributes x)))
       (mapcar 'vlax-ename->vla-object
         (mapcar 'cadr (ssnamex ss))))))

 
将返回具有属性的块列表(VL表单)

The Buzzard 发表于 2022-7-6 14:48:46

李,
 
为什么在X之前加下划线

Lee Mac 发表于 2022-7-6 14:52:08

我相信这使它与语言兼容,我可能错了。

The Buzzard 发表于 2022-7-6 14:55:01

我曾认为这适用于命令,但我不确定它适用于这里。
无论如何,它不会给出任何错误。

Freerefill 发表于 2022-7-6 14:56:41

当你这么做的时候。。。
 
我通常这样写:
 
(ssget“X”(列表(cons 0“行”))
 
然而,我看到很多人这样写:
 
(ssget“X”'((cons 0“LINE”))
 
这只是个人喜好,还是有任何赞成/反对的清单?我可以看出,这将减少“整洁”代码的字符数,但这是真的吗?有什么非常实际的原因吗?

MiGo 发表于 2022-7-6 15:02:14

谢谢李。看起来效果很好。尽管我喜欢使用extmin和extmax选择当前空间的交叉点,以仅获得当前空间的选择集。如果使用X,则它会选择整个图形。

Lee Mac 发表于 2022-7-6 15:05:10

只需添加
 
(cons 410(getvar“CTAB”))
 
到过滤器列表,以仅选择当前空间对象。

Lee Mac 发表于 2022-7-6 15:07:05

 
两者都有效,撇号只是表示不要在其后立即评估术语。
页: [1] 2
查看完整版本: 所有块的选择集w