明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4434|回复: 9

[讨论] [讨论]将字段转换为文字lisp

  [复制链接]
发表于 2010-9-13 17:27:00 | 显示全部楼层 |阅读模式
AutoCAD2004之后的版本,增加了一个字段命令,字段是包含说明的文字,这些说明用于显示可能会在图形生命周期中修改的数据,后续版本的图纸集也使用了字段功能来排序等等。
没有值的字段将显示连字符 (----)。 例如,在“图形特性”对话框中设置的“作者”字段可能为空。 无效字段将显示井号 (####)。 例如,“当前图纸名”字段仅在图纸空间中有效,将它放置到模型空间中则显示井号。
我们通常在编辑或分开某些含有字段的图形的时候,就会丢失字段链接对象,造成无效字段。
为了避免出现此类问题,可以通过转换为文字来解决,因此有了下面的lisp。
  1. ;将字段转换为文字.lsp
  2. ;modified by edata
  3. ;setupdata@qq.com
  4. ;2010年9月13日17:07:08
  5. (vl-load-com)
  6. (defun c:FLD2TXT (/ ss n bn an ad s)
  7.   (prompt
  8.     "请选择需要转换的对象(块,单行/多行文字,标注): "
  9.   )
  10.   (setq ss (ssget '((0 . "INSERT,MTEXT,DIMENSION,TEXT,MULTILEADER"))))
  11.   (setq n 0)
  12.   
  13.   (while (< n (sslength ss))
  14.     (setq bn (ssname ss n))
  15.     (setq ad (entget bn))
  16.     (cond
  17.       ((= "INSERT" (cdr (assoc 0 ad)))
  18.        (setq an (entnext bn))
  19.        (while (and an
  20.                    (setq ad (entget an))
  21.                    (= "ATTRIB" (cdr (assoc 0 ad)))
  22.               )
  23.          (setq s (cdr (assoc 1 ad)))
  24.          (entmod (list (assoc -1 ad) (cons 1 "")))
  25.          (entmod (list (assoc -1 ad) (cons 1 s)))
  26.          (entupd an)
  27.          (setq an (entnext an))
  28.        )
  29.       )
  30.       ((= "MULTILEADER" (cdr (assoc 0 ad)))
  31.        (setq ad (vlax-ename->vla-object bn)
  32.              s (vla-get-TextString ad)
  33.              )
  34.        (vla-put-TextString ad "")
  35.        (vla-put-TextString ad s)
  36.       )
  37.       ((= "MTEXT" (cdr (assoc 0 ad)))
  38.        (setq ad (vlax-ename->vla-object bn)
  39.              s (vla-get-TextString ad)
  40.              )
  41.        (vla-put-TextString ad "")
  42.        (vla-put-TextString ad s)
  43.       )
  44.       (t
  45.        (setq s (cdr (assoc 1 ad)))
  46.        (entmod (list (assoc -1 ad) (cons 1 "")))
  47.        (entmod (list (assoc -1 ad) (cons 1 s)))
  48.        (entupd an)
  49.       )
  50.     )
  51.     (setq n (1+ n))
  52.   )
  53.   (setq ss nil)
  54.   (gc)
  55.   (princ)
  56. )
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-8-9 12:43:28 | 显示全部楼层
没看懂什么意思
发表于 2015-4-10 10:51:08 | 显示全部楼层
好东西,我配铝模板正好用上了。哈哈
发表于 2015-4-10 10:56:05 | 显示全部楼层
令: FLD2TXT 请选择需要转换的对象(块,单行/多行文字,标注):
选择对象: 指定对角点: 找到 6 个
选择对象:  ; 错误: 参数类型错误: lentityp nil
多选的时候出错了
发表于 2021-4-12 19:31:41 | 显示全部楼层
帮大忙了啊,500多张图打算复制黏贴来着,抱着试试的心态来找找居然找到了
发表于 2021-9-19 14:10:38 | 显示全部楼层
帮大忙了啊,500多张图打算复制黏贴来着,抱着试试的心态来找找居然找到了
发表于 2022-7-1 12:16:28 | 显示全部楼层
有一点小错误,我修正了一下
  1. ;;;将字段转换为文字.lsp;modified by edata;setupdata@qq.com;2010年9月13日17:07:08
  2. ;;;modified by yjtdkj---------------yjtdkj8156262@163.com-------------2022.07.01
  3. (vl-load-com)
  4. (defun c:FLD2TXT (/ ss n bn an ad s)
  5.   ;;;========更新图元组码===========================yjtdkj.2021.07======
  6. ;;;参数
  7. ;;;en      图元名
  8. ;;;number  群码代号(整数)
  9. ;;;content 更新后的新内容
  10. ;;;返回:无
  11. (defun put-dxf (en number content / en_data new-list old-list)
  12.   (setq en_data (entget en))
  13.   (setq old-list (assoc number en_data))
  14.   (setq new-list (cons number content))
  15.   (setq en_data (subst new-list old-list en_data))
  16.   (entmod en_data)
  17.   (entupd en)
  18. ) ;_ 结束defun
  19.   (prompt "请选择需要转换的对象(块,单行/多行文字,标注): ")
  20.   (setq ss (ssget '((0 . "INSERT,MTEXT,DIMENSION,TEXT,MULTILEADER"))))
  21.   (setq n 0)
  22.   (while (< n (sslength ss))
  23.     (setq bn (ssname ss n))
  24.     (setq ad (entget bn))
  25.     (cond ((= "INSERT" (cdr (assoc 0 ad)))
  26.      (setq an (entnext bn))
  27.      (while (and an
  28.            (setq ad (entget an))
  29.            (= "ATTRIB" (cdr (assoc 0 ad)))
  30.       )
  31.        (setq s (cdr (assoc 1 ad)))
  32.        (put-dxf an 1 "")
  33.        (put-dxf an 1 s)
  34.        ;(entmod (list (assoc -1 ad) (cons 1 "")))
  35.        ;(entmod (list (assoc -1 ad) (cons 1 s)))
  36.        ;(entupd an)
  37.        (setq an (entnext an))
  38.      )
  39.     )
  40.     ((= "MULTILEADER" (cdr (assoc 0 ad)))
  41.      (setq ad (vlax-ename->vla-object bn)
  42.      s  (vla-get-TextString ad)
  43.      )
  44.      (vla-put-TextString ad "")
  45.      (vla-put-TextString ad s)
  46.     )
  47.     ((= "MTEXT" (cdr (assoc 0 ad)))
  48.      (setq ad (vlax-ename->vla-object bn)
  49.      s  (vla-get-TextString ad)
  50.      )
  51.      (vla-put-TextString ad "")
  52.      (vla-put-TextString ad s)
  53.     )
  54.     ((= "DIMENSION" (cdr (assoc 0 ad)))
  55.      (setq ad (vlax-ename->vla-object bn)
  56.      s  (vla-get-TextOverride ad)
  57.      )
  58.      (vla-put-TextOverride ad "")
  59.      (vla-put-TextOverride ad s)
  60.     )
  61.     (t
  62.      (setq s (cdr (assoc 1 ad)))
  63.      (put-dxf bn 1 "")
  64.      (put-dxf bn 1 s)
  65.      ;(entmod (list (assoc -1 ad) (cons 1 "")))
  66.      ;(entmod (list (assoc -1 ad) (cons 1 s)))
  67.      ;(entupd ad)
  68.     )
  69.     )
  70.     (setq n (1+ n))
  71.   )
  72.   (setq ss nil)
  73.   (gc)
  74.   (princ)
  75. )

发表于 2022-9-2 18:53:42 | 显示全部楼层
好像高版本   直接  X 炸开也可以
发表于 2023-8-8 17:53:41 | 显示全部楼层
常用字段功能才会碰到的困扰,顶一个!
发表于 2024-10-12 17:14:26 | 显示全部楼层
用了字段,分图会很困扰
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 04:22 , Processed in 0.197877 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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