====== 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 个主要段以及文件的基本读取算法。接下来的章节将逐一深入讲解每个段的详细组码。