乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 54|回复: 11

[编程交流] 使用VLA项

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:27:24 | 显示全部楼层 |阅读模式
很多问题同时出现似乎。。。
 
我对使用这个函数不是完全有信心,但我想掌握它。
 
目前,当从集合中提取项目时,我使用vlax for在集合中循环,并在循环中使用某种条件来获取所需的对象,例如:
 
  1. (vlax-for lay (vla-get-layers
  2.                (vla-get-ActiveDocument
  3.                  (vlax-get-acad-object)))
  4. (if (eq "LayerName" (vla-get-Name lay))
  5.    (setq layer lay)))

 
但是有没有办法直接进入这个项目?我认为可能是vla项目,但我可能错了。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:36:36 | 显示全部楼层
我想你回答了自己的问题。就我个人而言,我会这样使用tblobjname方法:
 
  1. (defun getlayer (name / olyr)
  2. (if (and (setq olyr (tblobjname "layer" name))
  3.           (setq olyr (vlax-ename->vla-object olyr))
  4.      )
  5.    olyr
  6. )
  7. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:39:18 | 显示全部楼层
 
我想这是“更干净”,但我仍然对这个“vla项目”感兴趣,它是如何使用的?
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 15:45:41 | 显示全部楼层
你想要这样的李?
 
  1. (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  2.          "0"
  3. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:49:30 | 显示全部楼层
 
啊,我明白了,谢谢你,罗恩,你帮了我很大的忙。
 
我在ACAD帮助中阅读了关于VLA项的文章,其中提到了对象在集合中的索引位置,我不知道如何指定。
 
但您已经演示了指定图层名称也会将其拉出。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 15:55:36 | 显示全部楼层
谢谢你的帮助-这真的很有用,只是尝试一下,你可以很快地在块子实体之间循环:
 
  1. (defun test  (/ lst)
  2. (vlax-for Obj
  3.    (vla-item
  4.      (vla-get-blocks
  5.        (vla-get-ActiveDocument
  6.          (vlax-get-acad-object))) "blockname")
  7.    (setq lst (cons Obj lst)))
  8. lst)

 
干杯,罗恩
 
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:03:11 | 显示全部楼层
很乐意帮忙。
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 16:06:11 | 显示全部楼层
 
这段代码是否适用于我在ObjectDBX包装器函数上尝试的ObjectDBX方法,如下所示,但它显示了错误。
 
代码如下
 
  1. (defun LM:DBXAttChange ( dwg lst BlkName / doc flg val )
  2.    (if (setq doc (LM:GetDocumentObject dwg))
  3.        (progn
  4.   (get-item (vla-get-block (vla-get-modelspace doc)) blkname)
  5.            (vlax-for lyt (vla-get-layouts doc)
  6.                   (vlax-for (vla-item obj (vla-get-block lyt) blkname)
  7.                    (if (and (= "AcDbBlockReference" (vla-get-objectname obj))
  8.                             (= :vlax-true (vla-get-hasattributes obj))
  9.                        )..................................
回复

使用道具 举报

4

主题

73

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-5 16:13:54 | 显示全部楼层
使用vla项时,需要指定特定元素的名称
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:16:55 | 显示全部楼层
@就餐者:
您需要更好地了解对象模型。
  1. (defun Test (dwg blkName / doc)
  2. (setq blkName (strcase blkName))
  3. (if (setq doc (LM:GetDocumentObject dwg))
  4.    (vlax-for lyt (vla-get-layouts doc)
  5.      (vlax-for obj (vla-get-block lyt)
  6.        (if
  7.          (and
  8.            (= "AcDbBlockReference" (vla-get-objectname obj))
  9.            (= blkName (strcase (vla-get-effectivename obj)))
  10.            (= :vlax-true (vla-get-hasattributes obj))
  11.          )
  12.          (progn
  13.            ...
  14.          )
  15.        )
  16.      )
  17.    )
  18. )
  19. )
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-14 21:05 , Processed in 0.564435 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表