AutoCAD字段
字段是包含说明的文字,这些说明用于显示可能会在图形生命周期中更改的数据。
字段更新时,将显示最新的数据。例如,“文件名”字段的值就是文件的名称。如果该文件名更改,字段更新时将显示新的文件名。字段还可以将图元属性(多段线长度、填充面积等)与静态文字进行关联,实现动态更新,也可以对数学表达式进行计算后显示。
尽管字段功能强大,然而直接使用Autocad原生命令创建、修改字段都是一件麻烦的事情。如下是用户手册中
使用字段显示对象特性的步骤:
- 双击文字对象,显示相应的文字编辑对话框。
- 将光标放在要显示字段文字的位置,然后单击鼠标右键。单击“插入字段”。
- 在“字段”对话框的“字段类别”中,选择“全部”。
- 在“字段名称”列表中,选择“对象”。
- 在“对象类型”中,单击“选择对象”按钮,并在图形中选择一个对象。
- 在“字段”对话框的“特性”中,选择其值要显示在文字中的特性。
- 例如,字段可以显示选定圆的半径。
- 选择一种文字格式。
- 单击“确定”。
AutoLisp创建字段
以创建面积字段为例,其他如面积字段、内容字段、计算字段可以参考执行,操作步骤:
- 选取有面积属性的对象(如多段线、填充图案等)
- 选择要应用属性的文字(只能是CAD文字)
在没有函数的情况下使用AutoLisp创建字段的重难点是理解字段表达式(如下图),在成功得到字段表达式后将其替换CAD文字内容即可(努力尝试且幸运的发现)。
具体代码及实现效果如下:
(defun c:f6(/ ss ent ed ename oid pre suf str)
(setvar 'cmdecho 0)
(prompt "面积字段")
(setq ss (entsel "\n选择有面积属性的对象:"))
(if ss (setq ent (car ss) ename (cdr (assoc 0 (entget ent)))))
(command "_undo" "be")
(if (or (= ename "LWPOLYLINE") (= ename "CIRCLE") (= ename "HATCH"))
(progn
(redraw ent 3)
(if fkit-f6-times t (setq fkit-f6-times 1))
(if (= fkit-f6-times 1) (setq fkit-f6 (getpoint "\n左键单击表示mm单位绘制/右键单击表示M单位绘制:")))
(setq fkit-f6-times 2)
(setq pre "%<\\AcObjProp Object(%<\\_ObjId "
oid (FKIT-H->O ent)
)
(if fkit-f6 (setq suf ">%).Area \\f \"%lu2%pr2%ct8[1e-006]\">%") (setq suf ">%).Area \\f \"%lu2%pr2\">%"))
(setq str (strcat pre oid suf))
)
)
(if str (setq ss (entsel "\n选择要应用字段的文字:")))
(if (and ss str) (setq ent (car ss) ename (cdr (assoc 0 (entget ent)))))
(if (and str (= ename "TEXT"))
(progn
(setq ed (entget ent)
ed (subst (cons 1 str) (assoc 1 ed) ed)
)
(entmod ed)
)
)
(command "_regen" "_undo" "e")
(princ)
)
直接使用:https://download.csdn.net/download/qq_28501179/23787658?spm=1001.2014.3001.5501
相关源码:
原创内容、水平有限、技术问题、欢迎交流!