Bill McKown 发表于 2022-7-6 00:04:54

将属性添加到现有d中

你好
 
不知是否有人可以帮我提供一些代码建议。我需要向现有的动态块中添加新属性。我知道块名,我只是想自动添加属性,这样用户就不必手动为数百个块添加属性。我不想分解这些块,只想添加到其中。我很熟悉AutoLISP,但我认为在VLISP中可能更容易实现。任何帮助都将受到感谢。
 
谢谢
账单

Lee Mac 发表于 2022-7-6 00:10:59

欢迎来到CADTutor Bill
 
除非我误解了您的要求,否则您能否使用块编辑器(BEDIT)将必要的属性定义(ATTDEF)添加到动态块定义中,然后使用ATTSYNC命令将更改应用于动态块的所有引用?

Bill McKown 发表于 2022-7-6 00:14:06

 
谢谢你的回复-
我可以用Bedit命令做我想做的事情,但我想自动化它以添加到许多块中。如果没有对话框,我似乎无法在LISP例程中调用Bedit命令。我尝试了cmddia=0,attdia=0,dia,Attreq=0。
可以从LISP调用BEDIT命令吗?
 
谢谢
B

Lee Mac 发表于 2022-7-6 00:17:30

如果您需要自动化该过程,我建议使用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)

ADSK2007 发表于 2022-7-6 00:19:36

嗨,李
 
你能告诉我如何在这个代码中添加多个属性吗?代码工作得很好,但我不知道如何添加到它。
 
谢谢
 
Adsk公司

Lee Mac 发表于 2022-7-6 00:22:47

 
代码使用ActiveX addattribute方法将属性定义添加到块定义中,因此,要添加多个属性定义,需要多次调用addattribute方法-但是,我建议将块定义参数(vla项表达式)分配给局部变量,以避免重复检索此对象。

ADSK2007 发表于 2022-7-6 00:26:26

嗨,李
 
你能举个例子吗?我的lisp知识非常有限
 
当做
 
Adsk公司

ADSK2007 发表于 2022-7-6 00:32:02

bhull1985年
 
你说得对,我不知道为什么我漏掉了那些台词。答案已经在那里了。下次我会更加注意的
我的任命,
 
弗莱德

Bhull1985 发表于 2022-7-6 00:36:10

没问题

Lee Mac 发表于 2022-7-6 00:39:15

谢谢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
查看完整版本: 将属性添加到现有d中