乐筑天下

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

[编程交流] 将属性添加到现有d中

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:04:54 | 显示全部楼层 |阅读模式
你好
 
不知是否有人可以帮我提供一些代码建议。我需要向现有的动态块中添加新属性。我知道块名,我只是想自动添加属性,这样用户就不必手动为数百个块添加属性。我不想分解这些块,只想添加到其中。我很熟悉AutoLISP,但我认为在VLISP中可能更容易实现。任何帮助都将受到感谢。
 
谢谢
账单
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:10:59 | 显示全部楼层
欢迎来到CADTutor Bill
 
除非我误解了您的要求,否则您能否使用块编辑器(BEDIT)将必要的属性定义(ATTDEF)添加到动态块定义中,然后使用ATTSYNC命令将更改应用于动态块的所有引用?
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 00:14:06 | 显示全部楼层
 
谢谢你的回复-
我可以用Bedit命令做我想做的事情,但我想自动化它以添加到许多块中。如果没有对话框,我似乎无法在LISP例程中调用Bedit命令。我尝试了cmddia=0,attdia=0,dia,Attreq=0。
可以从LISP调用BEDIT命令吗?
 
谢谢
B
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:17:30 | 显示全部楼层
如果您需要自动化该过程,我建议使用addattribute方法将VLA属性定义对象直接添加到要更新的动态块的块定义集合对象,然后使用ATTSYNC更新动态块的所有引用。
 
下面是一个简单的示例,可以为您指明正确的方向:
  1. (defun c:addattrib ( / blk )
  2.    (while
  3.        (not
  4.            (or (= "" (setq blk (getstring t "\nName of block to update: ")))
  5.                (tblsearch "BLOCK" blk)
  6.            )
  7.        )
  8.        (princ (strcat "\nBlock "" blk "" not found."))
  9.    )
  10.    (if (/= "" blk)
  11.        (progn
  12.            (vla-addattribute
  13.                (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) blk)
  14.                (getvar 'textsize)
  15.                acattributemodelockposition
  16.                "New Attribute"
  17.                (vlax-3D-point 0 0)
  18.                "NEW_TAG"
  19.                "New Value"
  20.            )
  21.            (command "_.attsync" "_N" blk)
  22.        )
  23.    )
  24.    (princ)
  25. )
  26. (vl-load-com) (princ)
回复

使用道具 举报

10

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 00:19:36 | 显示全部楼层
嗨,李
 
你能告诉我如何在这个代码中添加多个属性吗?代码工作得很好,但我不知道如何添加到它。
 
谢谢
 
Adsk公司
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:22:47 | 显示全部楼层
 
代码使用ActiveX addattribute方法将属性定义添加到块定义中,因此,要添加多个属性定义,需要多次调用addattribute方法-但是,我建议将块定义参数(vla项表达式)分配给局部变量,以避免重复检索此对象。
回复

使用道具 举报

10

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 00:26:26 | 显示全部楼层
嗨,李
 
你能举个例子吗?我的lisp知识非常有限
 
当做
 
Adsk公司
回复

使用道具 举报

10

主题

53

帖子

44

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
50
发表于 2022-7-6 00:32:02 | 显示全部楼层
bhull1985年
 
你说得对,我不知道为什么我漏掉了那些台词。答案已经在那里了。下次我会更加注意的
我的任命,
 
弗莱德
回复

使用道具 举报

15

主题

243

帖子

228

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-6 00:36:10 | 显示全部楼层
没问题
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 00:39:15 | 显示全部楼层
谢谢Brandon
 
效率方面的一个次要问题:由于所有属性定义都被添加到同一块定义中,我建议将块定义对象分配给局部变量,以避免需要从块集合中为每个添加的属性定义检索应用程序对象、文档对象、块集合和块定义,例如:
 
  1. (defun c:addattribs ( / blk [color=red]def[/color] )
  2.    (while
  3.        (not
  4.            (or (= "" (setq blk (getstring t "\nName of block to update: ")))
  5.                (tblsearch "BLOCK" blk)
  6.            )
  7.        )
  8.        (princ (strcat "\nBlock "" blk "" not found."))
  9.    )
  10.    (if (/= "" blk)
  11.        (progn
  12.            [color=red](setq def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) blk))[/color]
  13.            (vla-addattribute [color=red]def[/color]
  14.                (getvar 'textsize)
  15.                acattributemodelockposition
  16.                "New Attribute 1"
  17.                (vlax-3D-point 0 0)
  18.                "NEW_TAG1"
  19.                "New Value 1"
  20.            )
  21.            (vla-addattribute [color=red]def[/color]
  22.                (getvar 'textsize)
  23.                acattributemodelockposition
  24.                "New Attribute 2"
  25.                (vlax-3D-point 0 (- (* 1.5 (getvar 'textsize))))
  26.                "NEW_TAG2"
  27.                "New Value 2"
  28.            )
  29.            (command "_.attsync" "_N" blk)
  30.        )
  31.    )
  32.    (princ)
  33. )
  34. (vl-load-com) (princ)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:28 , Processed in 0.544769 second(s), 72 queries .

© 2020-2025 乐筑天下

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