Bhull1985 发表于 2022-7-5 22:55:22

从复制属性定义

嘿,大家好——尽管有各种各样的属性例程可以复制属性值,复制属性标签/提示,等等,放在互联网上的各种论坛上,但经过一个多小时的查找,我还没有找到一个可以完成以下任务的例程,希望有人能够提供一个。
 
 
*允许选择“源”块
*将所有属性定义从源块复制到位于同一空间内的任意数量的其他块。
 
 
这些“其他块”此时将没有属性-此例程应是在选择源块后创建这些定义并将其添加到所选每个块的例程。
 
 
提前感谢!!

Lee Mac 发表于 2022-7-5 23:15:05

请尝试以下代码:

;; Copy Attribute Definitions-Lee Mac

(defun c:copyattdef ( / blk bln cmd doc idx lst sel src tmp )
   (if
       (and
         (princ "\nSelect source block...")
         (setq src (ssget "_+.:E:S" '((0 . "INSERT") (66 . 1))))
         (princ "\nSelect blocks to copy attributes to...")
         (setq sel (ssget '((0 . "INSERT"))))
       )
       (progn
         (setq doc (vla-get-activedocument (vlax-get-acad-object))
               blk (vla-get-blocks doc)
         )
         (vlax-for obj (vla-item blk (LM:blockname (vlax-ename->vla-object (ssname src 0))))
               (if (= "AcDbAttributeDefinition" (vla-get-objectname obj))
                   (setq lst (cons obj lst))
               )
         )
         (if (setq lst (reverse lst))
               (progn
                   (repeat (setq idx (sslength sel))
                     (if (not (member (setq bln (LM:blockname (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))) tmp))
                           (progn
                               (setq tmp (cons bln tmp))
                               (vlax-invoke doc 'copyobjects lst (vla-item blk bln))
                           )
                     )
                   )
                   (setq cmd (getvar 'cmdecho))
                   (setvar 'cmdecho 0)
                   (foreach itm tmp (vl-cmdf "_.attsync" "_n" itm))
                   (setvar 'cmdecho cmd)
               )
         )
       )
   )
   (princ)
)

;; Block Name-Lee Mac
;; Returns the true (effective) name of a supplied block reference
                     
(defun LM:blockname ( obj )
   (if (vlax-property-available-p obj 'effectivename)
       (defun LM:blockname ( obj ) (vla-get-effectivename obj))
       (defun LM:blockname ( obj ) (vla-get-name obj))
   )
   (LM:blockname obj)
)

(vl-load-com) (princ)

Bhull1985 发表于 2022-7-5 23:40:01

美丽的李,像一个迷人的作品
问题:这是否需要我进入beditor将def保存到文件中,或者在我的块上执行此例程的过程中会处理好吗?
非常感谢。

Lee Mac 发表于 2022-7-5 23:40:39

 
不客气Brandon
 
 
我不确定您所说的“将定义保存到文件”是指使用WBLOCK命令将块定义导出到外部图形文件吗?
 
程序将在源块中找到的属性定义复制到选定“目标块”的块定义中,然后执行ATTSYNC,将这些新属性定义同步到修改的块定义的所有块引用中。

Bhull1985 发表于 2022-7-5 23:56:16

 
嘿,又来了。为了澄清,是的,这些块定义都有自己的定义。存储在服务器网络上的dwg文件。
我想知道使用此例程添加属性是否会永久添加它们,或者只是将它们添加到执行例程的图形中当前正在使用的块中。
Blerg,这很有意思,但我只是想确定是否需要“保存到文件”,然后在运行此例程后覆盖现有的块定义。
为了安全起见,也为了不想在我两次创建的区块库上运行这个公认的、非常好的例程。。。我继续通过这个例程添加属性,然后右键单击块,块编辑器,保存。。。保存到文件。。。但是有必要吗?
 
 
干杯,希望一切顺利
页: [1]
查看完整版本: 从复制属性定义