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

数组实体集合

大家好,
 
只是一个简单的问题,如何在执行阵列后检索所有已阵列的实体?
 
我认为一个简单的(entlast)可以做到这一点,但这只检索第一个阵列对象。
 
如果您有任何想法或想法,我们将不胜感激。
 
谢谢
 

ASMI 发表于 2022-7-6 15:12:44

在_ARRAY命令之后
 
使用(entlast)存储ARRAY命令之前的最后一个实体,并使用以下函数检索命令之后的所有新实体:
 
(defun Ent_List_to_End(ent / a)
(reverse
   (if(setq a(entnext ent))
      (cons ent(Ent_List_to_End a))
   ); end if
   ); end reverse
); Ent_List_to_End
 
 
或安全阵列内
 
使用标准(vlax safearray->list(vlax variant->value safearray))表达式将数组转换为列表。

Lee Mac 发表于 2022-7-6 15:15:33

ASMI,非常感谢您的代码-它工作得很好-尽管由于某些原因,留下了1个实体(但我可能用错了)。
 
我排列了两个实体,一个圆和一条线。
 
(命令圆。。。
(setq c1(entlast))
(命令行。。。。
(setq l1(entlast))
(命令-数组。。。。
(setq ents(Ent\u List\u to\u End l1))
 
我需要单独排列实体吗?但这很奇怪,因为虽然我在代码中只包含了“line”实体,但所有的阵列圆也都被提取了。。
 
你能解释一下你的代码是怎么工作的吗?
 
谢谢
 

Lee Mac 发表于 2022-7-6 15:17:37

啊,我想我现在明白了。。。对实体进行阵列后,阵列的实体将作为子实体存储在原始实体中。
 
我知道您的LISP代码返回了原始实体中包含的所有子实体的列表我会在接近正确的地方吗?
 
因此,我可以理解,只有一次排列一个实体时,这才有效。

Lee Mac 发表于 2022-7-6 15:21:33

老实说,我印象深刻,我从来没有想过在函数本身中嵌套函数。。。

Lee Mac 发表于 2022-7-6 15:26:28

这也行吗?
 

(defun get_array_ents (ent / ent eLst)
(while (setq ent (entnext ent))
   (setq eLst (cons ent eLst)))
(reverse eLst))

Lee Mac 发表于 2022-7-6 15:28:01

好吧,现在我完全困惑了。。。似乎如果我排列了多个项目,所有排列的实体都会被代码检索到,但排列的原始实体中的一个不知何故被遗漏了

wizman 发表于 2022-7-6 15:30:54

您好,李,您可能希望将您的选择集(要排列的项目)与从asmi的递归lisp派生的新选择集相结合。看看它是否适用于复杂实体,如块和多段线。

CarlB 发表于 2022-7-6 15:34:14

李,
 
在这种情况下,使用“entnext”并不是检索子图元,而是单步遍历所有图元的图形数据库。首先,“entlast”检索最后创建的实体。然后创建新实体。”Entnext’遍历这些新实体,并将其名称添加到列表中。如果其中一个实体是复杂实体(如具有属性的块),则entnext将逐步遍历子实体。
 
希望这有助于破译阿斯米的密码

Lee Mac 发表于 2022-7-6 15:40:29

非常感谢您的解释,卡尔-它是非常清楚和简洁。
 
我只真正使用过“entnext”进入子实体,例如块属性和多段线顶点。。等等,所以我没有看到它以这种方式使用-谢谢你澄清这一点。
 
也谢谢你Wizman的建议。我将尝试使用选择集过程,并告诉您结果。
 
谢谢你们的帮助,一如既往,非常感谢。
 
谢谢
 
页: [1] 2
查看完整版本: 数组实体集合