利用AutoLisp创建字段(Field)

      AutoCAD字段

        字段是包含说明的文字,这些说明用于显示可能会在图形生命周期中更改的数据。
字段更新时,将显示最新的数据。例如,“文件名”字段的值就是文件的名称。如果该文件名更改,字段更新时将显示新的文件名。字段还可以将图元属性(多段线长度、填充面积等)与静态文字进行关联,实现动态更新,也可以对数学表达式进行计算后显示。

       尽管字段功能强大,然而直接使用Autocad原生命令创建、修改字段都是一件麻烦的事情。如下是用户手册中

使用字段显示对象特性的步骤:

  1. 双击文字对象,显示相应的文字编辑对话框。
  2. 将光标放在要显示字段文字的位置,然后单击鼠标右键。单击“插入字段”。
  3. 在“字段”对话框的“字段类别”中,选择“全部”。
  4. 在“字段名称”列表中,选择“对象”。
  5. 在“对象类型”中,单击“选择对象”按钮,并在图形中选择一个对象。
  6. 在“字段”对话框的“特性”中,选择其值要显示在文字中的特性。
  7. 例如,字段可以显示选定圆的半径。
  8. 选择一种文字格式。
  9. 单击“确定”。

AutoLisp创建字段

        以创建面积字段为例,其他如面积字段、内容字段、计算字段可以参考执行,操作步骤:

  1. 选取有面积属性的对象(如多段线、填充图案等)
  2. 选择要应用属性的文字(只能是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

相关源码:

Autolisp图元名十六进制转十进制程序-CSDN博客

原创内容、水平有限、技术问题、欢迎交流!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有个城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值