自AutoCAD2004之后的版本,增加了一个字段命令,字段是包含说明的文字,这些说明用于显示可能会在图形生命周期中修改的数据,后续版本的图纸集也使用了字段功能来排序等等。
没有值的字段将显示连字符 (----)。 例如,在“图形特性”对话框中设置的“作者”字段可能为空。 无效字段将显示井号 (####)。 例如,“当前图纸名”字段仅在图纸空间中有效,将它放置到模型空间中则显示井号。
我们通常在编辑或分开某些含有字段的图形的时候,就会丢失字段链接对象,造成无效字段。
为了避免出现此类问题,可以通过转换为文字来解决,因此有了下面的lisp。-
- ;将字段转换为文字.lsp
- ;modified by edata
- ;setupdata@qq.com
- ;2010年9月13日17:07:08
- (vl-load-com)
- (defun c:FLD2TXT (/ ss n bn an ad s)
- (prompt
- "请选择需要转换的对象(块,单行/多行文字,标注): "
- )
- (setq ss (ssget '((0 . "INSERT,MTEXT,DIMENSION,TEXT,MULTILEADER"))))
- (setq n 0)
-
- (while (< n (sslength ss))
- (setq bn (ssname ss n))
- (setq ad (entget bn))
- (cond
- ((= "INSERT" (cdr (assoc 0 ad)))
- (setq an (entnext bn))
- (while (and an
- (setq ad (entget an))
- (= "ATTRIB" (cdr (assoc 0 ad)))
- )
- (setq s (cdr (assoc 1 ad)))
- (entmod (list (assoc -1 ad) (cons 1 "")))
- (entmod (list (assoc -1 ad) (cons 1 s)))
- (entupd an)
- (setq an (entnext an))
- )
- )
- ((= "MULTILEADER" (cdr (assoc 0 ad)))
- (setq ad (vlax-ename->vla-object bn)
- s (vla-get-TextString ad)
- )
- (vla-put-TextString ad "")
- (vla-put-TextString ad s)
- )
- ((= "MTEXT" (cdr (assoc 0 ad)))
- (setq ad (vlax-ename->vla-object bn)
- s (vla-get-TextString ad)
- )
- (vla-put-TextString ad "")
- (vla-put-TextString ad s)
- )
- (t
- (setq s (cdr (assoc 1 ad)))
- (entmod (list (assoc -1 ad) (cons 1 "")))
- (entmod (list (assoc -1 ad) (cons 1 s)))
- (entupd an)
- )
- )
- (setq n (1+ n))
- )
- (setq ss nil)
- (gc)
- (princ)
- )
|