使用VLA项
很多问题同时出现似乎。。。我对使用这个函数不是完全有信心,但我想掌握它。
目前,当从集合中提取项目时,我使用vlax for在集合中循环,并在循环中使用某种条件来获取所需的对象,例如:
(vlax-for lay (vla-get-layers
(vla-get-ActiveDocument
(vlax-get-acad-object)))
(if (eq "LayerName" (vla-get-Name lay))
(setq layer lay)))
但是有没有办法直接进入这个项目?我认为可能是vla项目,但我可能错了。 我想你回答了自己的问题。就我个人而言,我会这样使用tblobjname方法:
(defun getlayer (name / olyr)
(if (and (setq olyr (tblobjname "layer" name))
(setq olyr (vlax-ename->vla-object olyr))
)
olyr
)
)
我想这是“更干净”,但我仍然对这个“vla项目”感兴趣,它是如何使用的? 你想要这样的李?
(vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
"0"
)
啊,我明白了,谢谢你,罗恩,你帮了我很大的忙。
我在ACAD帮助中阅读了关于VLA项的文章,其中提到了对象在集合中的索引位置,我不知道如何指定。
但您已经演示了指定图层名称也会将其拉出。 谢谢你的帮助-这真的很有用,只是尝试一下,你可以很快地在块子实体之间循环:
(defun test(/ lst)
(vlax-for Obj
(vla-item
(vla-get-blocks
(vla-get-ActiveDocument
(vlax-get-acad-object))) "blockname")
(setq lst (cons Obj lst)))
lst)
干杯,罗恩
李 很乐意帮忙。
这段代码是否适用于我在ObjectDBX包装器函数上尝试的ObjectDBX方法,如下所示,但它显示了错误。
代码如下
(defun LM:DBXAttChange ( dwg lst BlkName / doc flg val )
(if (setq doc (LM:GetDocumentObject dwg))
(progn
(get-item (vla-get-block (vla-get-modelspace doc)) blkname)
(vlax-for lyt (vla-get-layouts doc)
(vlax-for (vla-item obj (vla-get-block lyt) blkname)
(if (and (= "AcDbBlockReference" (vla-get-objectname obj))
(= :vlax-true (vla-get-hasattributes obj))
).................................. 使用vla项时,需要指定特定元素的名称 @就餐者:
您需要更好地了解对象模型。
(defun Test (dwg blkName / doc)
(setq blkName (strcase blkName))
(if (setq doc (LM:GetDocumentObject dwg))
(vlax-for lyt (vla-get-layouts doc)
(vlax-for obj (vla-get-block lyt)
(if
(and
(= "AcDbBlockReference" (vla-get-objectname obj))
(= blkName (strcase (vla-get-effectivename obj)))
(= :vlax-true (vla-get-hasattributes obj))
)
(progn
...
)
)
)
)
)
)
页:
[1]
2