求教:遇到了属性转文字的问题
自己实现了块属性转文字,可问题一大堆,特此求教各位大师:块属性转普通文字,
1、未在屏幕上显示的内容,不转或转后删除;
2、图层特性为“不打钱”的内容,不转或转后删除;
3、文字的对正方式不变。
目前自己通过只转length值特定属性,部分实现了,但局限性很大。特此求教各位达人。
(princ "\n att2txt - 属性文字转普通文本:输入att2txt后选择带属性的块参照")
(defun c:att2txt (/ ss i ent blkobj atts att obj pt txt hgt rot col sty doc ms)
(princ "\n=== LENGTH属性转文本工具 (AutoCAD 2008兼容版) ===")
;; 获取当前文档和模型空间
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
ms (vla-get-ModelSpace doc)
)
;; 选择带属性的块参照
(setq ss (ssget '((0 . "INSERT") (-4 . "&") (66 . 1)))); 筛选带属性的块
(if (not ss)
(progn (princ "\n未选择带属性的块参照!") (exit))
)
(setq i 0)
(princ (strcat "\n共选择 " (itoa (sslength ss)) " 个块,开始处理..."))
;; 循环处理每个块(按HANDLE唯一标识)
(while (< i (sslength ss))
(setq ent (ssname ss i)
blkobj (vlax-ename->vla-object ent)
atts (vlax-invoke blkobj 'GetAttributes)
found nil
)
;; 遍历属性查找可见的LENGTH标签
(foreach att atts
(if (and (eq (strcase (vla-get-TagString att)) "LENGTH"); 标签匹配LENGTH长度
(= (vla-get-Visible att) :vlax-true); 属性可见(屏幕显示)
)
(progn
;; 获取属性核心特性参数(移除对正样式相关代码)
(setq txt (vla-get-TextString att); 属性值
pt (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint att))); 原坐标(含对正信息)
hgt (vla-get-Height att); 文字高度
rot (vla-get-Rotation att); 旋转角度
col (vla-get-Color att); 颜色
sty (vla-get-StyleName att); 文字样式
)
;; 创建普通文本对象(直接使用原属性坐标)
(setq obj (vla-addText ms txt (vlax-3d-point pt) hgt))
;; 继承文字特性(不含对正样式调用)
(vla-put-Rotation obj rot)
(vla-put-Color obj col)
(vla-put-StyleName obj sty)
(setq found t)
(princ (strcat "\n已转换块 (HANDLE: " (vlax-get blkobj 'Handle) "): LENGTH=\"" txt "\""))
)
)
)
;; 删除原块(仅处理成功的块)
(if found
(vla-delete blkobj)
(princ (strcat "\n块 (HANDLE: " (vlax-get blkobj 'Handle) ") 无可见LENGTH属性,已跳过"))
)
(setq i (1+ i))
)
(princ "\n=== 处理完成!已转换并删除符合条件的块 ===")
(princ)
) CAD自带,属性文字转普通文字,burst命令 战神凯哥 发表于 2025-9-29 16:15
CAD自带,属性文字转普通文字,burst命令
附条件部分转屏幕已显示的对象。未显示的属性不要转 scnc001 发表于 2025-9-29 13:41
(princ "\n att2txt - 属性文字转普通文本:输入att2txt后选择带属性的块参照")
(defun c:att2txt (/ ss i ...
自己费了点事,把所有用到的属性块,只转需要的属性,达到了同样的目的,只是通用性没了
页:
[1]