[首创]向块中添加块属性并修改
本帖最后由 和尚777 于 2023-4-15 09:58 编辑向块中增加属性后再修改 不会破坏原块属性,无属性的直接增加
新发现一个函数acet-attsync,可代替command(defun C:tt (/ b blkref bname doc ent i list0 list1 num ss);向块中添加属性
(setq doc(vla-get-ActiveDocument(vlax-get-acad-object)))
;"和尚777"
(if(and (setq bName (cdr(assoc 2 (entget (car(entsel))))))
(setq b(vla-item (vla-get-Blocks doc) bName)))
(progn
(vla-AddAttribute b
50 4 "表示长度" (vlax-3D-point '(0 0 0)) "c" "777")
(acet-attsync bName);(command "attsync" "n" bname)
(if(setq ss(ssget "x"(list'(0 . "insert")(cons 2 bName))))
(progn
(setq i -1)
(while(setq ent(ssname ss (setq i(1+ i))))
(if (= (vla-Get-ObjectName (setq blkref (vlax-Ename->vla-Object ent))) "AcDbBlockReference")
(if (vla-Get-HasAttributes blkref)
(progn (setq liST0 (vlax-safearray->list(vlax-variant-value (vla-GetAttributes blkref))))
(setq liST1 (mapcar 'vla-Get-TagStringliST0))
(setq num (vl-position "c" list1))
(vla-put-TextString (nth num liST0) (itoa i))
)
)
)
)
)
)
)
)(princ)
)
attsync是一个cad自带的命令
将块定义中的属性更改应用于所有块参照。
查找
使用该命令来更新包含属性的块的实例,曾经使用 BLOCK 或 BEDIT 命令重定义这些属性。ATTSYNC 不更改现有块中指定给属性的任何值。
注: ATTSYNC 删除所有使用 ATTEDIT 或 EATTEDIT 命令进行的格式更改或特性更改。也将删除所有与块关联的扩展数据,并可能影响动态块和第三方应用程序创建的块。
ACET-ATTSYNC大概率也是用command调用的
liuhe 发表于 2023-4-19 09:47
attsync是一个cad自带的命令
将块定义中的属性更改应用于所有块参照。
attsync命令,只能针对一个块,是否有什么命令,可以批量操作呢,刚好要批量对多个不同块,添加同一个定义属性,但是添加之后,需要每个块使用一次attsync,感觉比较麻烦 本帖最后由 KO你 于 2023-4-18 01:25 编辑
测试了,提示显示
调用(*push-error-using-command*)前无法从 *error* 调用(command)。
建议将(command)调用转换为(command-s)。
增加不了,什么问题
添加的属性文字能按所需要指定位置添加吗,经测试有时不行,有时添加在右下角,还有添加的属性文字不可以带点拖动
首赞
谢谢分享
很牛逼的功能 感谢分享,支持源码,,,, 谢谢大佬无私奉献 牛逼谢谢分享!! 太强了,感谢楼主分享 提示函数ACET-ATTSYNC未定义 增加属性文字的位置 是怎么定的 厉害力哈哈哈 厉害。请问acet-attsync怎样加载出来呢?另外就是新加的属性位置怎样定义呢?