ibach 发表于 2022-7-6 07:02:53

如何比较对象集

我有两个集合(变量),包含一个对象列表和一个属性列表。
 
“属性”是“对象”中某些对象的层。
 
我需要得到的是一组新的对象“OBJECTS2”,其中只包含属性中存在层的对象。

Lee Mac 发表于 2022-7-6 07:14:06

(setq objects2 (vl-remove-if-not '(lambda ( obj ) (member (vla-get-layer obj) properties)) objects))
 
假设“对象列表”是指VLA对象列表,而“特性列表”是指图层名称列表。
另请注意,上述内容区分大小写。

ibach 发表于 2022-7-6 07:18:12

如果我知道你在说什么。。。好的,我会努力学习。。。我现在在你的网站上。。。

ibach 发表于 2022-7-6 07:29:36

好吧,我放弃了,我该如何创建VLA对象的列表,对象是视口?!
我是否使用
(vlax ename->vla object entname)
要使ename的所有实体成为vla对象并生成新的vla对象集?
 
天啊,我真傻。。。

Lee Mac 发表于 2022-7-6 07:32:06

项目不一定需要是VLA对象,我在编写代码时考虑了VLA对象,因为您声明了“对象列表”,它可以是实体名称列表,甚至是选择集,您只需要更改迭代方法和/或检索图层特性的方式;e、 g.实体名称列表:
 
(vl-remove-if-not '(lambda ( e ) (member (cdr (assoc 8 (entget e))) <list-of-layer-names>) <list-of-entity-names>)

ibach 发表于 2022-7-6 07:41:53

当我使用这个时,我在输入上得到了格式错误的列表。图层列表是一组图层名称,ALLVIEWPORTLIST是(视口)的列表。。。其中九个是vla对象。。。
我想我失踪)某处。。。

ibach 发表于 2022-7-6 07:48:02

(setq VPL2 (vl-remove-if-not '(lambda ( e ) (member (cdr (assoc 8 (entget e))) LAYERLIST)) ALLVIEWPORTLIST))
 
我明白了
; 错误:错误的参数类型:lentyp(2(0.0 0.0)(1.0 1.0))

Lee Mac 发表于 2022-7-6 07:53:59

变量ALLVIEWPORTLIST是否是所需的实体名称列表?

ibach 发表于 2022-7-6 08:02:24

我得到了ALLVIEWPORTLIST
使用
(setq ALLVIEWPORTLIST (vports))并且在开始时声明为变量,如下所示:
伙计,我会给你这个代码的所有作者权限

Lee Mac 发表于 2022-7-6 08:04:34

 
vports函数不会返回视口实体名称列表,如文档所述:
 
因此,我建议您使用ssget函数来检索当前布局中的视口选择集,例如:
但是,请注意,除了在布局中创建的视口外,此集合还包括图纸空间视口本身。
 
然后,您可以迭代该集合并收集所需列表:
 
7
页: [1]
查看完整版本: 如何比较对象集