乐筑天下

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

[编程交流] 获取vla对象的层名称

[复制链接]

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:44:55 | 显示全部楼层 |阅读模式
你好
我将下面的代码片段作为lisp代码的一部分
 
  1. (setq obj1 (vlax-ename->vla-object (car (entsel "\nPick object 1"))))

 
您能帮我获取obj1的层名称吗。
我试过了
  1. (setq VLA_OBJ_LAYER (vla-get-layer obj1))
  2.    (setq VLA_ACT_DOC (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  3.    (setq LAYERNAME (vla-Item (vla-get-Layers VLA_ACT_DOC) VLA_OBJ_LAYER))

 
但它会出错。
谢谢
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 16:01:59 | 显示全部楼层
  1. (setq LAYERNAME (vla-get-layer obj1))
回复

使用道具 举报

2

主题

12

帖子

10

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:09:35 | 显示全部楼层
完美的非常感谢您的帮助Marko Ribar。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 16:23:55 | 显示全部楼层
FWIW您的尝试应写成:
 
  1. (setq LAYERNAME (vla-get-layer obj1))
  2. (setq VLA_ACT_DOC (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  3. (setq VLA_OBJ_LAYER (vla-Item (vla-get-Layers VLA_ACT_DOC) LAYERNAME))

 
因此,您只需反转“VLA\u OBJ\u LAYER”和“LAYERNAME”的符号名,以引用其(正确)值。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:25:12 | 显示全部楼层
你会发现这非常方便,它会显示属性,其中很多属性你可以用VLA-get-xxxxxxx obj获得。你也可以做相反的事情,使用VLA-PUT-xxxxxx obj来更改值。
 
  1. ;;;===================================================================;
  2. ;;; DumpIt                                                            ;
  3. ;;;-------------------------------------------------------------------;
  4. ;;; Dump all methods and properties for selected objects              ;
  5. ;;;===================================================================;
  6. (defun C:DumpIt ( / ent)
  7. (while (setq ent (entsel))
  8.    (vlax-Dump-Object
  9.      (vlax-Ename->Vla-Object (car ent))
  10.   T )
  11. )
  12. (princ)
  13. )

 
  1. ;   EndPoint = (513.775 345.565 0.0)
  2. ;   Layer = "DEFAULT"
  3. ;   Length (RO) = 250.296
  4. ;   Linetype = "ByLayer"
  5. ;   LinetypeScale = 1.0
  6. ;   Lineweight = -1
  7. ;   Material = "ByLayer"
  8. ;   Normal = (0.0 0.0 1.0)
  9. ;   ObjectID (RO) = 42
  10. ;   ObjectName (RO) = "AcDbLine"
  11. ;   OwnerID (RO) = 43
  12. ;   PlotStyleName = "ByLayer"
  13. ;   StartPoint = (263.479 345.565 0.0)
  14. ;   Thickness = 0.0
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-5 16:44:12 | 显示全部楼层
要获得这些方法,您需要包括vlax dump对象的“T”,如下所示:
  1. (vlax-dump-object (vlax-ename->vla-object (car ent)) t)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:48:49 | 显示全部楼层
谢谢修复
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 23:50 , Processed in 0.372283 second(s), 66 queries .

© 2020-2025 乐筑天下

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