DXF 文件结构
DXF 文件的整体结构
一个完整的 ASCII DXF 文件由 6 个段(Section)组成,按以下顺序排列:
0 SECTION 2 HEADER ; 标题段 0 ENDSEC 0 SECTION 2 CLASSES ; 类段 0 ENDSEC 0 SECTION 2 TABLES ; 符号表段 0 ENDSEC 0 SECTION 2 BLOCKS ; 块段 0 ENDSEC 0 SECTION 2 ENTITIES ; 图元段 0 ENDSEC 0 SECTION 2 OBJECTS ; 对象段 0 ENDSEC
每个段以 0/SECTION 开始,以 0/ENDSEC 结束,用组码 2 指定段名称。
各段的作用
| 段名称 | 作用说明 |
|---|---|
| HEADER | 存储图形相关的系统变量设置,如图形范围、尺寸标注变量等 |
| CLASSES | 存储应用程序定义的类信息,使 DXF 能够包含自定义对象 |
| TABLES | 存储符号表定义,包括图层、线型、文字样式、标注样式、视图等 |
| BLOCKS | 存储块定义和块中的图元 |
| ENTITIES | 存储图形中的主要图元(图形对象),如直线、圆、文字等 |
| OBJECTS | 存储非图形对象,如词典、布局、材质定义等 |
文件级组码
在文件结构层面,以下组码被用作段标记:
| 组码 | 说明 |
|---|---|
| 0 | 标记 SECTION、ENDSEC、EOF 等 |
| 2 | 段名称 |
文件末尾使用组码 0 后跟 EOF 作为结束标记:
0 EOF
完整的 DXF 文件示例
以下是一个只包含一条直线的简单 DXF 文件示例:
0 SECTION 2 HEADER 9 $ACADVER 1 AC1027 0 ENDSEC 0 SECTION 2 CLASSES 0 ENDSEC 0 SECTION 2 TABLES 0 TABLE 2 LAYER 70 2 0 LAYER 2 0 70 0 62 7 6 CONTINUOUS 0 ENDTAB 0 ENDSEC 0 SECTION 2 BLOCKS 0 BLOCK 2 *MODEL_SPACE 70 0 10 0.0 20 0.0 30 0.0 0 ENDBLK 0 BLOCK 2 *PAPER_SPACE 70 0 10 0.0 20 0.0 30 0.0 0 ENDBLK 0 ENDSEC 0 SECTION 2 ENTITIES 0 LINE 8 0 10 0.0 20 0.0 30 0.0 11 100.0 21 100.0 31 0.0 0 ENDSEC 0 SECTION 2 OBJECTS 0 DICTIONARY 2 ACAD_GROUP 0 ENDSEC 0 EOF
读取 DXF 文件的基本算法
无论使用何种编程语言,读取 DXF 文件的基本流程都是相同的:
1. 打开 DXF 文件,逐行读取 2. 每两行为一个"组"(第一行组码,第二行值) 3. 遇到 "0/SECTION" 开始新的段 4. 根据 "0/ENDSEC" 结束当前段 5. 在 ENTITIES 段中,根据组码 0 后的字符串判断图元类型 6. 读取该图元的所有组码,直到遇到下一个组码 0
组码 0 的三种用途
组码 0 在 DXF 文件中具有三种不同的用途:
- 标记段的开始/结束:0/SECTION、0/ENDSEC
- 标记图元/对象类型:0/LINE、0/CIRCLE、0/TEXT 等
- 标记文件结束:0/EOF
THUMBNAILIMAGE 段
在某些 DXF 文件中还存在一个 THUMBNAILIMAGE 段,用于存储图形的缩略图预览图像。该段通常位于 OBJECTS 段之后。如果需要处理 DXF 文件的预览图,可以关注此段。
本章小结
理解 DXF 文件的整体结构是二次开发的第一步。本章介绍了 DXF 文件的 6 个主要段以及文件的基本读取算法。接下来的章节将逐一深入讲解每个段的详细组码。