将属性添加到现有d中
你好不知是否有人可以帮我提供一些代码建议。我需要向现有的动态块中添加新属性。我知道块名,我只是想自动添加属性,这样用户就不必手动为数百个块添加属性。我不想分解这些块,只想添加到其中。我很熟悉AutoLISP,但我认为在VLISP中可能更容易实现。任何帮助都将受到感谢。
谢谢
账单 欢迎来到CADTutor Bill
除非我误解了您的要求,否则您能否使用块编辑器(BEDIT)将必要的属性定义(ATTDEF)添加到动态块定义中,然后使用ATTSYNC命令将更改应用于动态块的所有引用?
谢谢你的回复-
我可以用Bedit命令做我想做的事情,但我想自动化它以添加到许多块中。如果没有对话框,我似乎无法在LISP例程中调用Bedit命令。我尝试了cmddia=0,attdia=0,dia,Attreq=0。
可以从LISP调用BEDIT命令吗?
谢谢
B 如果您需要自动化该过程,我建议使用addattribute方法将VLA属性定义对象直接添加到要更新的动态块的块定义集合对象,然后使用ATTSYNC更新动态块的所有引用。
下面是一个简单的示例,可以为您指明正确的方向:
(defun c:addattrib ( / blk )
(while
(not
(or (= "" (setq blk (getstring t "\nName of block to update: ")))
(tblsearch "BLOCK" blk)
)
)
(princ (strcat "\nBlock \"" blk "\" not found."))
)
(if (/= "" blk)
(progn
(vla-addattribute
(vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) blk)
(getvar 'textsize)
acattributemodelockposition
"New Attribute"
(vlax-3D-point 0 0)
"NEW_TAG"
"New Value"
)
(command "_.attsync" "_N" blk)
)
)
(princ)
)
(vl-load-com) (princ) 嗨,李
你能告诉我如何在这个代码中添加多个属性吗?代码工作得很好,但我不知道如何添加到它。
谢谢
Adsk公司
代码使用ActiveX addattribute方法将属性定义添加到块定义中,因此,要添加多个属性定义,需要多次调用addattribute方法-但是,我建议将块定义参数(vla项表达式)分配给局部变量,以避免重复检索此对象。 嗨,李
你能举个例子吗?我的lisp知识非常有限
当做
Adsk公司 bhull1985年
你说得对,我不知道为什么我漏掉了那些台词。答案已经在那里了。下次我会更加注意的
我的任命,
弗莱德 没问题 谢谢Brandon
效率方面的一个次要问题:由于所有属性定义都被添加到同一块定义中,我建议将块定义对象分配给局部变量,以避免需要从块集合中为每个添加的属性定义检索应用程序对象、文档对象、块集合和块定义,例如:
(defun c:addattribs ( / blk def )
(while
(not
(or (= "" (setq blk (getstring t "\nName of block to update: ")))
(tblsearch "BLOCK" blk)
)
)
(princ (strcat "\nBlock \"" blk "\" not found."))
)
(if (/= "" blk)
(progn
(setq def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) blk))
(vla-addattribute def
(getvar 'textsize)
acattributemodelockposition
"New Attribute 1"
(vlax-3D-point 0 0)
"NEW_TAG1"
"New Value 1"
)
(vla-addattribute def
(getvar 'textsize)
acattributemodelockposition
"New Attribute 2"
(vlax-3D-point 0 (- (* 1.5 (getvar 'textsize))))
"NEW_TAG2"
"New Value 2"
)
(command "_.attsync" "_N" blk)
)
)
(princ)
)
(vl-load-com) (princ)
页:
[1]
2