scnc001 发表于 2025-9-28 23:25:36

求教:遇到了属性转文字的问题

自己实现了块属性转文字,可问题一大堆,特此求教各位大师:


块属性转普通文字,
1、未在屏幕上显示的内容,不转或转后删除;
2、图层特性为“不打钱”的内容,不转或转后删除;
3、文字的对正方式不变。

目前自己通过只转length值特定属性,部分实现了,但局限性很大。特此求教各位达人。

scnc001 发表于 2025-9-29 13:41:37

(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)
)

战神凯哥 发表于 2025-9-29 16:15:31

CAD自带,属性文字转普通文字,burst命令

scnc001 发表于 2025-9-29 16:43:41

战神凯哥 发表于 2025-9-29 16:15
CAD自带,属性文字转普通文字,burst命令

附条件部分转屏幕已显示的对象。未显示的属性不要转

scnc001 发表于 前天 10:06

scnc001 发表于 2025-9-29 13:41
(princ "\n att2txt - 属性文字转普通文本:输入att2txt后选择带属性的块参照")
(defun c:att2txt (/ ss i ...

自己费了点事,把所有用到的属性块,只转需要的属性,达到了同样的目的,只是通用性没了
页: [1]
查看完整版本: 求教:遇到了属性转文字的问题