前言
在 AutoCAD 二次开发中,entmake
函数相比 command
命令具有三大核心优势:
- 高效性:直接操作图形数据库,避免交互式命令延迟
- 稳定性:消除命令行参数解析导致的不可控错误
- 精确性:支持完整 DXF 组码配置,实现像素级样式控制
本文深度解析使用 entmake
创建标注样式的关键技术细节,包含:
- 必须组码的最小集合与完整参数模板
- 未文档化组码(49/50/69 等)的实战应用
- 箭头样式等特殊参数的解决方案
- 全量 DXF 组码对照表(含类型/默认值/LISP 适配说明)
阅读本文后,您将能够:
- 通过代码批量生成符合企业标准的标注样式
- 精准修改现有标注参数配置
- 开发自动化标注工具插件
- 规避官方文档未说明的兼容性问题
基于 AutoCAD 2023/2025 实测数据,适用于需要高效定制 CAD 标注系统的开发者。
entmake 创建标注样式所需的最小组码列表
经测试必须包含以下组码,才能成功创建标注样式(未指定的组码均为默认值):
lisp
(entmake
(list
(cons 0 "DIMSTYLE") ; 图元类型
(cons 100 "AcDbSymbolTableRecord") ; 子类标记
(cons 100 "AcDbDimStyleTableRecord") ; 子类标记
(cons 2 "my-style") ; 标注样式名称
(cons 70 0) ; 标准标记值(必须项)
)
)
(*测试环境:AutoCAD 2023/2025)
实际创建标注样式时,可根据需要自行增加配置项。
包含全部 DXF 组码的代码示例
lisp
(entmake
(list
(cons 0 "DIMSTYLE") ; 图元类型
(cons 100 "AcDbSymbolTableRecord") ; 子类标记
(cons 100 "AcDbDimStyleTableRecord") ; 子类标记
(cons 2 "my-style") ; 标注样式名称
(cons 70 0) ; 标准标记值(必须项,和下文文字背景颜色的组码数字相同,功能不同)
;; -------------------------------
;; DXF帮助中展示的组码,和对应的系统变量
;; -------------------------------
(cons 3 "") ; DIMPOST---为标注测量值指定文字前缀或后缀(或两者)。
(cons 4 "") ; DIMAPOST---指定用于所有标注类型(角度标注除外)的换算标注测量值的文字前缀或后缀(或两者都指定)。
;; (cons 5 "") ; DIMBLK---【已废弃】现在为对象 ID
;; (cons 6 "") ; DIMBLK1---【已废弃】现在为对象 ID
;; (cons 7 "") ; DIMBLK2---【已废弃】现在为对象 ID
(cons 40 1) ; DIMSCALE---设置应用于标注变量(用于指定尺寸、距离或偏移量)的全局比例因子。
(cons 41 60) ; DIMASZ---控制尺寸线和引线箭头的大小。并控制基线的大小。
(cons 42 0) ; DIMEXO---指定尺寸界线偏离原点的距离。
(cons 43 200) ; DIMDLI---控制基线标注中尺寸线的间距。
(cons 44 40) ; DIMEXE---指定尺寸界线超出尺寸线的距离。
(cons 45 0) ; DIMRND---将所有标注距离舍入为指定值。
(cons 46 0) ; DIMDLE---当使用小斜线代替箭头进行标注时,设置尺寸线超出尺寸界线的距离。
(cons 47 0) ; DIMTP---为标注文字设置最大(即最高)公差限制(当 DIMTOL 或 DIMLIM 设定为开时)。
(cons 48 0) ; DIMTM---为标注文字设置最小(即最低)公差限制(当 DIMTOL 或 DIMLIM 设定为开时)。
(cons 140 70) ; DIMTXT---指定标注文字的高度(除非当前文字样式具有固定的高度)。
(cons 141 0.09) ; DIMCEN---通过 DIMCENTER、DIMDIAMETER 和 DIMRADIUS 命令控制圆或圆弧圆心标记以及中心线的绘制。
(cons 142 0) ; DIMTSZ---指定线性标注、半径标注以及直径标注中绘制的代替箭头的小斜线的尺寸。
(cons 143 25.4) ; DIMALTF---控制换算单位的乘数。
(cons 144 1) ; DIMLFAC---为线性标注测量值设置比例因子。
(cons 145 0) ; DIMTVP---控制标注文字在尺寸线上方或下方的垂直位置。
(cons 146 1) ; DIMTFAC---与通过 DIMTXT 系统变量设置一样,指定分数和公差值的文字高度相对于标注文字高度的比例因子。
(cons 147 20) ; DIMGAP---设置当打断尺寸线以符合标注文字时,标注文字周围的距离。
(cons 148 0) ; DIMALTRND---舍入换算标注单位。
(cons 71 0) ; DIMTOL---将公差附在标注文字中。
(cons 72 0) ; DIMLIM---生成标注界限作为默认文字。
(cons 73 0) ; DIMTIH---控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置。
(cons 74 0) ; DIMTOH---控制标注文字在尺寸界线外的位置。
(cons 75 0) ; DIMSE1---控制是否隐去第一条尺寸界线。
(cons 76 0) ; DIMSE2---控制是否隐去第二条尺寸界线。
(cons 77 1) ; DIMTAD---控制文字相对于尺寸线的垂直位置。
(cons 78 0) ; DIMZIN---控制针对主单位值的消零处理。
(cons 79 0) ; DIMAZIN---针对角度标注进行消零处理。
(cons 170 0) ; DIMALT---控制标注中换算单位的显示。
(cons 171 2) ; DIMALTD---控制换算单位中的小数位数。
(cons 172 1) ; DIMTOFL---控制是否在尺寸界线之间绘制尺寸线(即使标注文字被放置在尺寸界线之外)。
(cons 173 0) ; DIMSAH---控制尺寸线箭头块的显示。
(cons 174 1) ; DIMTIX---在尺寸界线之间绘制文字。
(cons 175 0) ; DIMSOXD---如果尺寸界线内没有足够的空间,则隐去箭头。
(cons 176 1) ; DIMCLRD---为尺寸线、箭头和标注引线指定颜色。
(cons 177 1) ; DIMCLRE---为尺寸界线、圆心标记和中心线指定颜色。
(cons 178 3) ; DIMCLRT---为标注文字指定颜色。
(cons 179 0) ; DIMADEC---控制角度标注中显示的精度小数位数。
;; (cons 270 0) ; DIMUNIT---【已废弃】现在使用 DIMLUNIT 和 DIMFRAC
(cons 271 0) ; DIMDEC---设置标注主单位中显示的小数位数。
(cons 272 0) ; DIMTDEC---设置标注主单位的公差值中显示的小数位数。
(cons 273 2) ; DIMALTU---为所有标注子样式(角度标注除外)的换算单位设定单位格式。
(cons 274 2) ; DIMALTTD---设置换算标注单位中的公差值的小数位数。
(cons 275 0) ; DIMAUNIT---为角度标注设定单位格式。
(cons 276 0) ; DIMFRAC---设置分数格式(当 DIMLUNIT 设定为 4 [建筑] 或 5 [分数] 时)。
(cons 277 2) ; DIMLUNIT---为所有标注类型(角度标注除外)设置单位。
(cons 278 (ascii ".")) ; DIMDSEP---指定创建单位格式为小数的标注时要使用的单字符小数分隔符。(输入为 ASCII 值)
(cons 279 0) ; DIMTMOVE---设置标注文字的移动规则。
(cons 280 0) ; DIMJUST---控制标注文字的水平位置。
(cons 281 0) ; DIMSD1---控制是否隐去第一条尺寸线和箭头。
(cons 282 0) ; DIMSD2---控制是否隐去第二条尺寸线和箭头。
(cons 283 1) ; DIMTOLJ---设置公差值相对于表面标注文字的垂直对正方式。
(cons 284 0) ; DIMTZIN---控制对公差值的消零处理。
(cons 285 0) ; DIMALTZ---控制对换算单位标注值的消零处理。
(cons 286 0) ; DIMALTTZ---控制对公差值的消零处理。
;; (cons 287 0) ; DIMFIT---【已废弃】现在使用 DIMATFIT 和 DIMTMOVE
(cons 288 0) ; DIMUPT---控制用户定位文字的选项。
(cons 289 3) ; DIMATFIT---尺寸界线内的空间不足以同时放下标注文字和箭头时,此系统变量将确定这两者的排列方式。
(cons 340 (tblobjname "STYLE" "Standard")) ; DIMTXSTY---指定标注的文字样式。(输入为 STYLE 图元名)
(cons 371 -2) ; DIMLWD---为尺寸线指定线宽。
(cons 372 -2) ; DIMLWE---为尺寸界线指定线宽。
;; -------------------------------
;; 箭头样式相关组码,比较特殊,具体参见下文标注箭头说明
;; -------------------------------
;; (cons 341 "") ; DIMLDRBLK---指定引线箭头的类型。(输入为 BLOCK_RECORD 图元名)
;; (cons 342 "") ; DIMBLK---设置尺寸线末端显示的箭头块。(输入为 BLOCK_RECORD 图元名)
;; (cons 343 "") ; DIMBLK1---为尺寸线的第一个端点设置箭头(当 DIMSAH 处于打开状态时)。(输入为 BLOCK_RECORD 图元名)
;; (cons 344 "") ; DIMBLK2---为尺寸线的第二个端点设置箭头(当 DIMSAH 处于打开状态时)。(输入为 BLOCK_RECORD 图元名)
;; -------------------------------
;; DXF帮助中未说明的组码,和对应的系统变量
;; -------------------------------
(cons 50 (/ pi 4)) ; DIMJOGANG---决定折弯半径标注中,尺寸线的横向线段的角度。(输入为弧度值)
(cons 49 1) ; DIMFXL---设置起始于尺寸线,直至标注原点的尺寸界线总长度。
(cons 69 1) ; DIMTFILL---控制标注文字的背景。
(cons 70 0) ; DIMTFILLCLR---为标注中的文字背景设置颜色。
(cons 90 0) ; DIMARCSYM---控制弧长标注中圆弧符号的显示。
(cons 290 0) ; DIMFXLON---控制是否将尺寸界线设定为固定长度。
(cons 345 (tblobjname "LTYPE" "ByLayer")) ; DIMLTYPE---设置尺寸线的线型。(输入为 LTYPE 图元名)
(cons 346 (tblobjname "LTYPE" "ByLayer")) ; DIMLTEX1---设置第一条尺寸界线的线型。(输入为 LTYPE 图元名)
(cons 347 (tblobjname "LTYPE" "ByLayer")) ; DIMLTEX2---设置第二条尺寸界线的线型。(输入为 LTYPE 图元名)
)
)
DXF 组码对照表
以下是 DXF 组码对照表,包含 CAD 帮助文档中的系统变量类型和默认值。
注意其中默认值均为系统变量的默认值,部分不能直接用于 lisp 代码,使用注意事项查看对应备注。
组码 | 系统变量 | 说明 | 类型 | 默认值 | 备注 |
---|---|---|---|---|---|
0 | - | 图元类型 | 字符串 | "DIMSTYLE" | 【必须项】【不可变】 |
100 | - | 子类标记 | 字符串 | "AcDbSymbolTableRecord" | 【必须项】【不可变】 |
100 | - | 子类标记 | 字符串 | "AcDbDimStyleTableRecord" | 【必须项】【不可变】 |
2 | - | 标注样式名称 | 字符串 | 无 | 【必须项】 |
70 | - | 标准标记值 | 整数 | 0 | 【必须项】和下文文字背景颜色的组码数字相同,功能不同 |
3 | DIMPOST | 为标注测量值指定文字前缀或后缀(或两者)。 | 字符串 | 无 | |
4 | DIMAPOST | 指定用于所有标注类型(角度标注除外)的换算标注测量值的文字前缀或后缀(或两者都指定)。 | 字符串 | "" | |
5 | DIMBLK | 【已废弃】现在为对象 ID | 字符串 | "" | 【已废弃】 |
6 | DIMBLK1 | 【已废弃】现在为对象 ID | 字符串 | "" | 【已废弃】 |
7 | DIMBLK2 | 【已废弃】现在为对象 ID | 字符串 | "" | 【已废弃】 |
40 | DIMSCALE | 设置应用于标注变量(用于指定尺寸、距离或偏移量)的全局比例因子。 | 实数 | 1 | |
41 | DIMASZ | 控制尺寸线和引线箭头的大小。并控制基线的大小。 | 实数 | 0.1800(英制)或 2.5000(公制) | |
42 | DIMEXO | 指定尺寸界线偏离原点的距离。 | 实数 | 0.0625(英制)或 0.6250(公制) | |
43 | DIMDLI | 控制基线标注中尺寸线的间距。 | 实数 | 0.3800(英制)或 3.7500(公制) | |
44 | DIMEXE | 指定尺寸界线超出尺寸线的距离。 | 实数 | 0.1800(英制)或 1.2500(公制) | |
45 | DIMRND | 将所有标注距离舍入为指定值。 | 实数 | 0 | |
46 | DIMDLE | 当使用小斜线代替箭头进行标注时,设置尺寸线超出尺寸界线的距离。 | 实数 | 0 | |
47 | DIMTP | 为标注文字设置最大(即最高)公差限制(当 DIMTOL 或 DIMLIM 设定为开时)。 | 实数 | 0 | |
48 | DIMTM | 为标注文字设置最小(即最低)公差限制(当 DIMTOL 或 DIMLIM 设定为开时)。 | 实数 | 0 | |
140 | DIMTXT | 指定标注文字的高度(除非当前文字样式具有固定的高度)。 | 实数 | 0.1800(英制)或 2.5000(公制) | |
141 | DIMCEN | 通过 DIMCENTER、DIMDIAMETER 和 DIMRADIUS 命令控制圆或圆弧圆心标记以及中心线的绘制。 | 实数 | 0.0900(英制)或 2.5000(公制) | |
142 | DIMTSZ | 指定线性标注、半径标注以及直径标注中绘制的代替箭头的小斜线的尺寸。 | 实数 | 0 | |
143 | DIMALTF | 控制换算单位的乘数。 | 实数 | 25.4000(英制)或 0.0394(公制) | |
144 | DIMLFAC | 为线性标注测量值设置比例因子。 | 实数 | 1 | |
145 | DIMTVP | 控制标注文字在尺寸线上方或下方的垂直位置。 | 实数 | 0 | |
146 | DIMTFAC | 与通过 DIMTXT 系统变量设置一样,指定分数和公差值的文字高度相对于标注文字高度的比例因子。 | 实数 | 1 | |
147 | DIMGAP | 设置当打断尺寸线以符合标注文字时,标注文字周围的距离。 | 实数 | 0.0900(英制)或 0.6250(公制) | |
148 | DIMALTRND | 舍入换算标注单位。 | 实数 | 0 | |
71 | DIMTOL | 将公差附在标注文字中。 | 参数 | 0 | |
72 | DIMLIM | 生成标注界限作为默认文字。 | 参数 | 0 | |
73 | DIMTIH | 控制所有标注类型(坐标标注除外)的标注文字在尺寸界线内的位置。 | 参数 | 1(英制)或 0(公制) | |
74 | DIMTOH | 控制标注文字在尺寸界线外的位置。 | 参数 | 1(英制)或 0(公制) | |
75 | DIMSE1 | 控制是否隐去第一条尺寸界线。 | 参数 | 0 | |
76 | DIMSE2 | 控制是否隐去第二条尺寸界线。 | 参数 | 0 | |
77 | DIMTAD | 控制文字相对于尺寸线的垂直位置。 | 整数 | 0(英制)或 1(公制) | |
78 | DIMZIN | 控制针对主单位值的消零处理。 | 整数 | 0(英制)或 8(公制) | |
79 | DIMAZIN | 针对角度标注进行消零处理。 | 整数 | 0 | |
170 | DIMALT | 控制标注中换算单位的显示。 | 参数 | 0 | |
171 | DIMALTD | 控制换算单位中的小数位数。 | 整数 | 2(英制)或 3(公制) | |
172 | DIMTOFL | 控制是否在尺寸界线之间绘制尺寸线(即使标注文字被放置在尺寸界线之外)。 | 参数 | 0(英制)或 1(公制) | |
173 | DIMSAH | 控制尺寸线箭头块的显示。 | 参数 | 0 | |
174 | DIMTIX | 在尺寸界线之间绘制文字。 | 参数 | 0 | |
175 | DIMSOXD | 如果尺寸界线内没有足够的空间,则隐去箭头。 | 参数 | 0 | |
176 | DIMCLRD | 为尺寸线、箭头和标注引线指定颜色。 | 整数 | 0 | |
177 | DIMCLRE | 为尺寸界线、圆心标记和中心线指定颜色。 | 整数 | 0 | |
178 | DIMCLRT | 为标注文字指定颜色。 | 整数 | 0 | |
179 | DIMADEC | 控制角度标注中显示的精度小数位数。 | 整数 | 0 | |
270 | DIMUNIT | 【已废弃】现在使用 DIMLUNIT 和 DIMFRAC | 【已废弃】 | ||
271 | DIMDEC | 设置标注主单位中显示的小数位数。 | 整数 | 4(英制)或 2(公制) | |
272 | DIMTDEC | 设置标注主单位的公差值中显示的小数位数。 | 整数 | 4(英制)或 2(公制) | |
273 | DIMALTU | 为所有标注子样式(角度标注除外)的换算单位设定单位格式。 | 整数 | 2 | |
274 | DIMALTTD | 设置换算标注单位中的公差值的小数位数。 | 整数 | 2(英制)或 3(公制) | |
275 | DIMAUNIT | 为角度标注设定单位格式。 | 整数 | 0 | |
276 | DIMFRAC | 设置分数格式(当 DIMLUNIT 设定为 4 [建筑] 或 5 [分数] 时)。 | 整数 | 0 | |
277 | DIMLUNIT | 为所有标注类型(角度标注除外)设置单位。 | 整数 | 2 | |
278 | DIMDSEP | 指定创建单位格式为小数的标注时要使用的单字符小数分隔符。 | 单字节字符 | . (英制)或(公制) | lisp 使用时,字符需要转成 ASCII 码值 |
279 | DIMTMOVE | 设置标注文字的移动规则。 | 整数 | 0 | |
280 | DIMJUST | 控制标注文字的水平位置。 | 整数 | 0 | |
281 | DIMSD1 | 控制是否隐去第一条尺寸线和箭头。 | 参数 | 0 | |
282 | DIMSD2 | 控制是否隐去第二条尺寸线和箭头。 | 参数 | 0 | |
283 | DIMTOLJ | 设置公差值相对于表面标注文字的垂直对正方式。 | 整数 | 1(英制)或 0(公制) | |
284 | DIMTZIN | 控制对公差值的消零处理。 | 整数 | 0(英制)或 8(公制) | |
285 | DIMALTZ | 控制对换算单位标注值的消零处理。 | 整数 | 0 | |
286 | DIMALTTZ | 控制对公差值的消零处理。 | 整数 | 0 | |
287 | DIMFIT | 【已废弃】现在使用 DIMATFIT 和 DIMTMOVE | 【已废弃】 | ||
288 | DIMUPT | 控制用户定位文字的选项。 | 参数 | 0 | |
289 | DIMATFIT | 尺寸界线内的空间不足以同时放下标注文字和箭头时,此系统变量将确定这两者的排列方式。 | 整数 | 3 | |
340 | DIMTXSTY | 指定标注的文字样式。 | 字符串 | Standard | lisp 中使用时输入STYLE 类型的图元名,可以使用tblobjname 获得 |
341 | DIMLDRBLK | 指定引线箭头的类型。 | 字符串 | "" | lisp 中使用时输入BLOCK_RECORD 类型的图元名,比较特殊,参考下文标注箭头说明 |
342 | DIMBLK | 设置尺寸线末端显示的箭头块。 | 字符串 | "" | lisp 中使用时输入BLOCK_RECORD 类型的图元名,比较特殊,参考下文标注箭头说明 |
343 | DIMBLK1 | 为尺寸线的第一个端点设置箭头(当 DIMSAH 处于打开状态时)。 | 字符串 | "" | lisp 中使用时输入BLOCK_RECORD 类型的图元名,比较特殊,参考下文标注箭头说明 |
344 | DIMBLK2 | 为尺寸线的第二个端点设置箭头(当 DIMSAH 处于打开状态时)。 | 字符串 | "" | lisp 中使用时输入BLOCK_RECORD 类型的图元名,比较特殊,参考下文标注箭头说明 |
371 | DIMLWD | 为尺寸线指定线宽。 | 枚举 | -2 | |
372 | DIMLWE | 为尺寸界线指定线宽。 | 枚举 | -2 | |
49* | DIMFXL | 设置起始于尺寸线,直至标注原点的尺寸界线总长度。 | 实数 | 1 | |
50* | DIMJOGANG | 决定折弯半径标注中,尺寸线的横向线段的角度。 | 实数 | 45 | lisp 中使用时输入弧度值 |
69* | DIMTFILL | 控制标注文字的背景。 | 整数 | 0 | |
70* | DIMTFILLCLR | 为标注中的文字背景设置颜色。 | 整数 | 0 | |
90* | DIMARCSYM | 控制弧长标注中圆弧符号的显示。 | 整数 | 0 | |
290* | DIMFXLON | 控制是否将尺寸界线设定为固定长度。 | 参数 | 0 | |
345* | DIMLTYPE | 设置尺寸线的线型。 | 字符串 | "" | lisp 中使用时输入LTYPE 类型的图元名,可以使用tblobjname 获得(包括 ByLayer 和 ByBlock 都需要输入对应图元名) |
346* | DIMLTEX1 | 设置第一条尺寸界线的线型。 | 字符串 | "" | lisp 中使用时输入LTYPE 类型的图元名,可以使用tblobjname 获得(包括 ByLayer 和 ByBlock 都需要输入对应图元名) |
347* | DIMLTEX2 | 设置第二条尺寸界线的线型。 | 字符串 | "" | lisp 中使用时输入LTYPE 类型的图元名,可以使用tblobjname 获得(包括 ByLayer 和 ByBlock 都需要输入对应图元名) |
(*符号表示该组码未在 DXF 参考手册中列出,本人通过实际测试得出。)
标注箭头说明
组码 341~344 比较特殊,输入的是 BLOCK_RECORD 类型的图元名,但是 BLOCK_RECORD 类型的图元又比较特殊,无法通过正常的 tblobjname 函数取得。所以如果想要实现使用entmake
自定义标注箭头样式,有两种方法。
方法一:在图纸内通过标注样式对话框让 CAD 自动生成对应箭头块
具体操作如下:
-
随便创建一个的样式,将箭头样式改成你准备用程序设置的样式(如:空心闭合箭头)。这一步是为了让 AutoCAD 先加载箭头对应的块,否则块没有创建的时候查找块名会报错。
-
在 AutoCAD 的帮助文档中,DIMBLK(系统变量)的页面找到你想要的箭头样式,记下对应的块名(如:空心闭合箭头对应的块名为"_CLOSEDBLANK")。此时如果使用
(cdr (assoc 330 (entget (tblobjname "BLOCK" "\_CLOSEDBLANK"))))
命令,即可获得该箭头样式对应的 BLOCK_RECORD 图元名。(其中"_CLOSEDBLANK"可以改成你需要的箭头样式块名) -
假设你需要两个箭头均为空心闭合,只需要在 entmake 创建标注样式的代码段中添加:
(cons 342 (cdr (assoc 330 (entget (tblobjname "BLOCK" "\_CLOSEDBLANK")))))
,就能成功创建箭头样式是空心闭合的标注样式了。(如果需要两个箭头独立设置,可以分别设置 343 和 344 组码,并且记得将 173 组码设置为 1,这样才能使 343 和 344 组码起效)
方法二:直接在代码中使用 entmake 生成对应箭头块
此方法需要先在程序中生成对应箭头块,以空心闭合箭头块为例,以下是生成箭头块的函数:
lisp
(defun create-closed-blank-arrow-block (/ line-lists)
;; 创建块定义 (BLOCK)
(entmake
(list
'(0 . "BLOCK") ; 实体类型为块定义
'(2 . "_CLOSEDBLANK") ; 块名(根据实际需要修改)
'(10 . (0 0)) ; 基点(插入点)
'(70 . 0) ; 标志位:0表示普通块
'(8 . "0") ; 图层(默认"0"层)
)
)
;; 添加块内容(根据实际需要修改)
(setq line-lists '(((-1 0.166666666) (0 0))
((0 0) (-1 -0.166666666))
((-1 0.166666666) (-1 -0.166666666))
)
) ; 空心闭合箭头的三条线段
(foreach line line-lists
(entmake
(list
'(0 . "LINE") ; 实体类型为直线
(cons 10 (car line)) ; 起点坐标
(cons 11 (cadr line)) ; 终点坐标
'(8 . "0") ; 图层(与块定义一致)
'(62 . 0) ; 颜色 ByBlock 【必须】
'(6 . "ByBlock") ; 线型 ByBlock 【必须】
'(370 . -2) ; 线宽 ByBlock 【必须】
)
)
) ; 使用 entmake 生成三条线段
;; 结束块定义 (ENDBLK)
(entmake '((0 . "ENDBLK")))
)
注意:块内所有元素的颜色、线型、线宽均需要设置为ByBlock
,否则在使用时箭头颜色无法保持与尺寸线颜色一致。
注意:箭头块定义的名称和图形需要和 CAD 自动生成的一致。虽然不一致也能使用,但是尺寸线会有一些小问题。(例如以_Small
(空心小点)为块名,但是实际箭头块为空心闭合箭头时,尺寸线会一直延伸到尺寸界限)
具体操作如下:
-
使用生成箭头块的函数生成对应箭头块,并记录箭头块的名称。此时如果使用
(cdr (assoc 330 (entget (tblobjname "BLOCK" "\_CLOSEDBLANK"))))
命令,即可获得该箭头样式对应的 BLOCK_RECORD 图元名。(其中"_CLOSEDBLANK"可以改成你需要的箭头样式块名) -
假设你需要两个箭头均为空心闭合,只需要在 entmake 创建标注样式的代码段中添加:
(cons 342 (cdr (assoc 330 (entget (tblobjname "BLOCK" "\_CLOSEDBLANK")))))
,就能成功创建箭头样式是空心闭合的标注样式了。(如果需要两个箭头独立设置,可以分别设置 343 和 344 组码,并且记得将 173 组码设置为 1,这样才能使 343 和 344 组码起效)
以下是一些补充说明:
如果需要箭头样式为『无』,此时只需要创建一个名为_NONE
的空块即可。以下是生成空箭头块的函数:
lisp
(defun create-none-arrow-block ()
;; 创建空箭头块定义
(entmake
(list
'(0 . "BLOCK")
'(2 . "_NONE") ; 空箭头专用名称
'(10 (0 0))
'(70 . 0)
'(8 . "0")
)
)
;; 直接结束块定义,不添加任何几何实体
(entmake '((0 . "ENDBLK")))
)
如果需要用户自定义箭头样式,操作方式和上面一样,只是注意块名称要和系统预留的箭头块名不一样。
用户自定义箭头块绘制标准:
- 箭头绘制方向为从左(-X)到右(+X),且右顶点为原点
- 整体尺寸建议上下宽度 0.2-0.3,左右长度 1.0
- 复杂箭头建议使用多段线或面域实体
附:DIMBLK 系统变量说明内的预留箭头块名
箭头样式 | 块名 |
---|---|
实心闭合 | 无 |
点 | _DOT |
小点 | _DOTSMALL |
空心点 | _DOTBLANK |
原点标记 | _ORIGIN |
原点标记 2 | _ORIGIN2 |
打开 | _OPEN |
直角 | _OPEN90 |
30 度角 | _OPEN30 |
闭合 | _CLOSED |
空心小点 | _SMALL |
无 | _NONE |
倾斜 | _OBLIQUE |
实心框 | _BOXFILLED |
方框 | _BOXBLANK |
空心闭合 | _CLOSEDBLANK |
实心基准三角形 | _DATUMFILLED |
基准三角形 | _DATUMBLANK |
完整标记 | _INTEGRAL |
建筑标记 | _ARCHTICK |
其他系统变量说明
以下以 DIM 开头的系统变量不保存在标注样式中,需要通过setvar
单独设置。
系统变量 | 说明 | 类型 | 默认值 | 备注 |
---|---|---|---|---|
DIMANNO | 指示当前标注样式是否为注释性样式。 | 整数 | 0 | 只读 |
DIMASSOC | 控制标注对象的关联性以及是否分解标注。 | 整数 | 2 | |
DIMCONSTRAINTICON | 控制标注约束的锁定图标的显示。 | 位码 | 3 | 保存于注册表 |
DIMCONTINUEMODE | 确定连续标注或基线标注的标注样式和图层是否继承自正在连续使用的标注。 | 整数 | 1 | 保存于注册表 |
DIMLAYER | 为新的标注指定默认图层。 | 字符串 | 使用当前值 | |
DIMPICKBOX | 在 DIM 命令中设置对象选择目标高度(以像素为单位)。 | 整数 | 5 | 保存于注册表 |
DIMSTYLE | 显示图形中的标注使用的单位类型(英制/标准或 iso-25/公制)。 | 字符串 | Standard(英制)或 ISO-25(公制) | |
DIMTXTDIRECTION | 指定标注文字的阅读方向。 | 整数 | 0 | |
DIMTXTRULER | 在编辑标注文字时,控制标尺的显示。 | 参数 | 1 | 保存于注册表 |
参考资料
[1] Autodesk AutoCAD 2025 系统变量
[2] Autodesk AutoCAD 2025 DXF 参考手册
[3] entmake 创建图元必要条件 & 对指定对像生成 entmake 所需的必要条件函数