Lee Mac 发表于 2022-7-5 15:27:24

使用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项目,但我可能错了。

ronjonp 发表于 2022-7-5 15:36:36

我想你回答了自己的问题。就我个人而言,我会这样使用tblobjname方法:
 
(defun getlayer (name / olyr)
(if (and (setq olyr (tblobjname "layer" name))
          (setq olyr (vlax-ename->vla-object olyr))
   )
   olyr
)
)

Lee Mac 发表于 2022-7-5 15:39:18

 
我想这是“更干净”,但我仍然对这个“vla项目”感兴趣,它是如何使用的?

ronjonp 发表于 2022-7-5 15:45:41

你想要这样的李?
 
(vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
         "0"
)

Lee Mac 发表于 2022-7-5 15:49:30

 
啊,我明白了,谢谢你,罗恩,你帮了我很大的忙。
 
我在ACAD帮助中阅读了关于VLA项的文章,其中提到了对象在集合中的索引位置,我不知道如何指定。
 
但您已经演示了指定图层名称也会将其拉出。

Lee Mac 发表于 2022-7-5 15:55:36

谢谢你的帮助-这真的很有用,只是尝试一下,你可以很快地在块子实体之间循环:
 

(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)

 
干杯,罗恩
 

ronjonp 发表于 2022-7-5 16:03:11

很乐意帮忙。

DineshPawar 发表于 2022-7-5 16:06:11

 
这段代码是否适用于我在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))
                     )..................................

zixuan203344 发表于 2022-7-5 16:13:54

使用vla项时,需要指定特定元素的名称

Roy_043 发表于 2022-7-5 16:16:55

@就餐者:
您需要更好地了解对象模型。
(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
查看完整版本: 使用VLA项