乐于分享
好东西不私藏

CAD插件分享:如何将多个单行文字(Text)一键转为属性定义(AttDef)?

CAD插件分享:如何将多个单行文字(Text)一键转为属性定义(AttDef)?

我们在制作CAD动态块、图框或明细表时,通常需要使用属性定义 。 但在实际绘图中,为了排版方便,我们往往习惯先用普通的“单行文字”把内容排好位置、调好大小。

等到要制作成块的时候,痛苦就来了:你需要删掉文字,用 ATT 命令重新创建属性,还得重新对齐坐标……

今天分享一段不到60行的 Lisp 代码,它的功能很简单:把你选中的普通文字,瞬间变成属性定义。

【代码分享】

(defun c:T2A (/ ss n ent ent_data str pt lay hgt sty wid tag_val)  (prompt "\nSelect text to convert: ")  (setq ss (ssget '((0 . "TEXT"))))  (if ss    (progn      (setq n 0)      (repeat (sslength ss)        (setq ent (ssname ss n))        (setq ent_data (entget ent))        ;; --- 1. 获取原文字信息 ---        (setq str (cdr (assoc 1 ent_data)))       ; 内容        (setq pt  (cdr (assoc 10 ent_data)))      ; 坐标        (setq lay (cdr (assoc 8 ent_data)))       ; 图层        (setq hgt (cdr (assoc 40 ent_data)))      ; 高度        (setq sty (cdr (assoc 7 ent_data)))       ; 样式        ;; [新增修复] 获取宽度因子 (DXF 41)        (setq wid (cdr (assoc 41 ent_data)))        (if (null wid) (setq wid 1.0))            ; 如果获取不到,默认为1.0        ;; --- 2. 处理标签 (Tag---        (setq tag_val str)        (if vl-string-translate            (setq tag_val (vl-string-translate " " "_" str))        )        ;; --- 3. 创建属性定义 ---        (entmake (list                   '(0 . "ATTDEF")                   '(100 . "AcDbEntity")                   (cons 8 lay)                   '(100 . "AcDbText")                   (cons 10 pt)                   (cons 40 hgt)                   (cons 41 wid)                  ; [新增修复] 这里应用宽度因子                   (cons 1 str)                   (cons 7 sty)                   '(100 . "AcDbAttributeDefinition")                   (cons 3 str)                   (cons 2 tag_val)                   '(70 . 0)                 ))        (entdel ent)        (setq n (1+ n))      )      (princ (strcat "\nConverted: " (itoa n)))    )    (princ "\nNo text selected.")  )  (princ))

使用方法】

  1. 加载插件:在 CAD 中输入命令 AP (Appload),找到刚才保存的 TextToAtt.lsp 并加载。或者直接把文件拖入 CAD 绘图区。

  2. 运行命令:输入快捷键 T2A (Text to Attribute)。

  3. 选择对象:框选你需要转换的一个或多个单行文字,回车。

  4. 完成:文字已变为属性定义!

【注意事项】

  • 关于标签:由于属性的“标签(Tag)”不允许包含空格,插件会自动将空格替换为下划线 _

  • 最后一步:转换完成后,这些对象目前只是“属性定义”,你必须用 B (Block) 命令将它们制作成,它们才会变成真正的可编辑属性。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » CAD插件分享:如何将多个单行文字(Text)一键转为属性定义(AttDef)?

评论 抢沙发

3 + 4 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮