====== OBJECTS 段 ======
===== 什么是 OBJECTS 段 =====
OBJECTS 段(对象段)存储图形中的**非图形对象**,即没有直接图形表示的对象。这些对象包括词典、布局、材质、组、标注关联等。OBJECTS 段是 DXF 中结构最复杂的段之一。
OBJECTS 段的结构与 ENTITIES 段类似,每个对象以组码 **0** 后跟对象类型名开始。
===== 常用对象组码 =====
以下组码适用于 OBJECTS 段中的所有对象:
^ 组码 ^ 说明 ^
| 0 | 对象类型名 |
| 5 | 句柄 |
| 8 | 图层名(某些对象) |
| 100 | 子类标记 |
| 102 | 控制字符串 |
| 330 | 软所有者 ID |
| 340 | 硬指针句柄 |
| 350 | 软所有者句柄 |
| 360 | 硬所有者句柄 |
===== 主要对象类型 =====
==== DICTIONARY(词典) ====
词典是最重要的非图形对象之一,用于组织和管理其他对象。AutoCAD 使用根词典(Named Object Dictionary)来管理所有的词典。
^ 组码 ^ 说明 ^
| 100 | AcDbDictionary |
| 2 | 词典名称 |
| 281 | 硬标签标志(0=软,1=硬) |
| 3 | 条目名称(可重复) |
| 350 | 软所有者句柄(与条目对应) |
预定义的根词典条目:
| 条目名 | 说明 |
| ACAD_GROUP | 组集合 |
| ACAD_LAYOUT | 布局集合 |
| ACAD_MATERIAL | 材质集合 |
| ACAD_MLEADERSTYLE | 多重引线样式 |
| ACAD_MLINESTYLE | 多线样式 |
| ACAD_PLOTSETTINGS | 打印设置 |
| ACAD_TABLESTYLE | 表格样式 |
| ACAD_VBA_PROJECT | VBA 项目 |
| ACAD_VISUALSTYLE | 视觉样式 |
示例:
0
DICTIONARY
5
F0
100
AcDbDictionary
280
1
2
ACAD_LAYOUT
350
F1
2
ACAD_MATERIAL
350
F2
==== DICTIONARYVAR(词典变量) ====
^ 组码 ^ 说明 ^
| 100 | AcDbDictionaryVar |
| 1 | 变量值字符串 |
==== LAYOUT(布局) ====
布局对象定义图纸空间中的布局设置:
^ 组码 ^ 说明 ^
| 100 | AcDbLayout |
| 1 | 布局名称 |
| 2 | 与该布局关联的块表记录名称 |
| 7 | 布局关联的块名 |
| 10,20,30 | 布局插入点(基点) |
| 11,21,31 | 布局左上角延伸范围 |
| 12,22,32 | 布局右下角延伸范围 |
| 14,24,34 | 打印区域左上角 |
| 15,25,35 | 打印区域右下角 |
| 70 | 布局标志位 |
| 71 | 打印比例相关标志 |
| 72 | 打印图纸单位 |
| 73 | 打印比例因子 |
| 40 | 打印区域宽度 |
| 41 | 打印区域高度 |
| 42 | 打印比例分子 |
| 43 | 打印比例分母 |
| 44 | 打印偏移 X |
| 45 | 打印偏移 Y |
| 76 | 打印参数 |
| 331 | 块表记录句柄 |
==== PLOTSETTINGS(打印设置) ====
^ 组码 ^ 说明 ^
| 100 | AcDbPlotSettings |
| 1 | 页面设置名称 |
| 2 | 打印设备 |
| 3 | 打印样式表 |
| 4 | 打印配置(.pc3 文件名) |
| 6 | 打印范围 |
| 10,20 | 打印原点 |
| 11,21 | 图纸尺寸(宽、高) |
| 12,22 | 打印区域 |
| 40 | 打印比例 |
| 41 | 单位 |
| 70 | 标志位 |
| 72 | 打印方向 |
==== MATERIAL(材质) ====
^ 组码 ^ 说明 ^
| 100 | AcDbMaterial |
| 1 | 材质名称 |
| 2 | 材质类别 |
| 3 | 材质描述 |
| 40 | 环境色因子 |
| 41 | 漫射色因子 |
| 42 | 镜面色因子 |
| 43 | 发光色因子 |
| 44 | 不透明度 |
| 45 | 反射度 |
| 46 | 粗糙度 |
| 47 | 折射率 |
| 70 | 材质标志 |
| 140 | 贴图缩放 U |
| 141 | 贴图缩放 V |
| 142 | 贴图偏移 U |
| 143 | 贴图偏移 V |
==== GROUP(组) ====
组对象用于将多个图元组织在一起:
^ 组码 ^ 说明 ^
| 100 | AcDbGroup |
| 2 | 组名 |
| 300 | 组描述 |
| 70 | 组标志(0=未命名,1=命名) |
| 340 | 成员图元句柄(可重复) |
==== MLINESTYLE(多线样式) ====
^ 组码 ^ 说明 ^
| 100 | AcDbMLineStyle |
| 2 | 多线样式名称 |
| 3 | 多线样式描述 |
| 40 | 默认偏移 |
| 41 | 元素数量 |
| 49 | 元素偏移(可重复) |
| 62 | 元素颜色(可重复) |
| 6 | 元素线型(可重复) |
| 70 | 填充颜色(-1=无填充) |
| 71 | 起点闭合标志 |
| 72 | 终点闭合标志 |
| 73 | 起点角度 |
| 74 | 终点角度 |
==== TABLESTYLE(表格样式) ====
^ 组码 ^ 说明 ^
| 100 | AcDbTableStyle |
| 2 | 表格样式名称 |
| 3 | 描述 |
| 70 | 方向(0=向下,1=向上) |
| 71 | 单元类型数量 |
| 40 | 水平单元间距 |
| 41 | 垂直单元间距 |
| 62 | 背景色(可选) |
| 7 | 文字样式(可选) |
| 140 | 文字高度 |
| 170 | 对齐方式 |
| 280 | 数据单元的标志位 |
==== XRECORD(扩展记录) ====
XRECORD 用于存储任意应用程序定义的数据:
^ 组码 ^ 说明 ^
| 100 | AcDbXrecord |
| 280 | 复制记录标志 |
| 1+ | 各种组码数据 |
XRECORD 可以包含各种标准组码(1-369 范围)来存储数据。
==== DIMASSOC(标注关联) ====
^ 组码 ^ 说明 ^
| 100 | AcDbDimAssoc |
| 1 | 关联路径数据 |
==== FIELD(字段) ====
^ 组码 ^ 说明 ^
| 100 | AcDbField |
| 1 | 字段代码字符串 |
| 2 | 字段值 |
| 3 | 字段格式字符串 |
| 4 | 字段表达式 |
| 90 | 字段类型 |
| 91 | 求值标志 |
| 92 | 字段格式类型 |
==== IMAGEDEF / IMAGEDEF_REACTOR ====
用于光栅图像参照:
^ 组码 ^ 说明 ^
| 100 | AcDbRasterImageDef |
| 1 | 图像文件名 |
| 10,20 | 图像尺寸(像素) |
| 11,21 | 默认图像尺寸(单位) |
==== VBA_PROJECT ====
^ 组码 ^ 说明 ^
| 100 | AcDbVbaProject |
| 1 | VBA 项目数据 |
===== 对象所有权关系 =====
OBJECTS 段中的对象之间存在所有权关系,由句柄引用表示:
* **软所有权**(组码 350-359):所有者可以删除被所有者,但不强制执行
* **硬所有权**(组码 360-369):所有者可以删除被所有者,强制执行
* **软指针**(组码 330-339):引用其他对象,但不拥有
* **硬指针**(组码 340-349):引用其他对象,视为强引用
典型的对象层次结构:
Named Object Dictionary (ACAD_LAYOUT)
└── LAYOUT "Model" (模型空间布局)
└── LAYOUT "Layout1" (图纸空间布局)
Named Object Dictionary (ACAD_MATERIAL)
└── MATERIAL "ByLayer"
└── MATERIAL "ByBlock"
Named Object Dictionary (ACAD_GROUP)
└── GROUP "MyGroup"
Named Object Dictionary (ACAD_TABLESTYLE)
└── TABLESTYLE "Standard"
===== 编程注意事项 =====
1. **根词典**:OBJECTS 段通常以根词典(Named Object Dictionary)开始,该词典句柄通常固定为 "F0"。
2. **布局对象**:每个 DXF 文件至少应有一个 LAYOUT 对象(模型空间布局)。
3. **句柄一致性**:OBJECTS 段中的句柄引用必须与文件中其他地方的对象 ID 一致。
4. **对象可选性**:简单的 DXF 文件可以省略 OBJECTS 段,但包含复杂对象(如布局、填充图案)时必须包含。
5. **XRECORD 应用**:自定义应用程序数据通常存储在 XRECORD 对象中,通过词典组织。
===== 本章小结 =====
OBJECTS 段虽然不如 ENTITIES 段常用,但在处理布局、材质、组等高级特性时必不可少。理解 OBJECTS 段的结构和对象间的关系有助于开发更完善的 DXF 应用程序。