明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 443|回复: 3

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

[复制链接]
发表于 2025-9-28 23:25:36 | 显示全部楼层 |阅读模式
自己实现了块属性转文字,可问题一大堆,特此求教各位大师:


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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复

使用道具 举报

 楼主| 发表于 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)
)

评分

参与人数 1明经币 +1 收起 理由
USER2128 + 1 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2025-9-29 16:15:31 | 显示全部楼层
CAD自带,属性文字转普通文字,burst命令
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-29 16:43:41 | 显示全部楼层
战神凯哥 发表于 2025-9-29 16:15
CAD自带,属性文字转普通文字,burst命令

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-11-26 17:05 , Processed in 0.165754 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表