DXF 概述与基本概念
什么是 DXF
DXF(Drawing Exchange Format,图形交换格式)是 Autodesk 公司推出的一种开放式图形数据交换格式,用于实现 AutoCAD 与其他软件之间的图形数据交换。DXF 格式的核心思想是以带标记数据的形式来表示图形文件中包含的所有信息。
所谓带标记数据,是指文件中的每个数据元素前面都带有一个称为组码(Group Code)的整数。组码的值既指明了后面数据元素的类型(整数、浮点数、字符串等),也指明了该数据元素对于给定对象(或记录)类型的含义。
实际上,图形文件中所有用户指定的信息都可以用 DXF 格式来表示。这使得 DXF 成为 CAD/CAM 领域最广泛使用的数据交换标准之一。
DXF 的两种格式
DXF 文件支持两种存储格式:
- ASCII DXF 文件(.dxf):文本格式,可直接用文本编辑器打开查看和编辑,便于二次开发调试。
- 二进制 DXF 文件:采用二进制格式,文件更小,读写速度更快,但不易直接查看。
本教程主要针对 ASCII DXF 格式进行讲解。
组码(Group Code)的概念
组码是 DXF 格式的核心。一个组码和它后面的数据组成一个“组”,格式为:
- 第 1 行:组码(整数)
- 第 2 行:组码对应的值
例如,以下两组数据表示一个圆的圆心坐标为 (0,0):
10 0.0 20 0.0 30 0.0
其中组码 10、20、30 分别表示点的 X、Y、Z 坐标。
组码值类型
根据组码的范围,可以判断其后数据值的类型:
| 组码范围 | 值类型 |
|---|---|
| 0 - 9 | 字符串 |
| 10 - 39 | 双精度三维点值 |
| 40 - 59 | 双精度浮点值 |
| 60 - 79 | 16 位整数值 |
| 90 - 99 | 32 位整数值 |
| 100 | 字符串(子类标记) |
| 102 | 控制字符串 |
| 105 | 十六进制句柄值 |
| 110 - 149 | 双精度浮点值 |
| 170 - 179 | 16 位整数值 |
| 210 - 239 | 双精度浮点值 |
| 270 - 289 | 16 位整数值 |
| 290 - 299 | 布尔标志值 |
| 300 - 309 | 任意字符串 |
| 310 - 319 | 二进制数据块(十六进制) |
| 320 - 369 | 十六进制句柄/对象ID |
| 370 - 389 | 16 位整数值(线宽等) |
| 390 - 399 | 十六进制句柄值 |
| 400 - 409 | 16 位整数值 |
| 410 - 419 | 字符串 |
| 420 - 429 | 32 位整数值(真彩色) |
| 430 - 439 | 字符串 |
| 440 - 449 | 32 位整数值(透明度) |
| 450 - 459 | 长整数 |
| 460 - 469 | 双精度浮点值 |
| 470 - 479 | 字符串 |
| 999 | 注释(字符串) |
| 1000 - 1009 | 扩展数据字符串 |
| 1010 - 1059 | 扩展数据双精度浮点值 |
| 1060 - 1070 | 扩展数据 16 位整数 |
| 1071 | 扩展数据 32 位整数 |
对象与图元的区别
在 DXF 格式中,对象(Object)和图元(Entity)是两个不同的概念:
- 图元(Entity):有图形表示的对象,也称为图形对象,如直线、圆、圆弧、文字等。图元出现在 DXF 文件的 BLOCKS 段和 ENTITIES 段。
- 对象(Object):没有图形表示的对象,也称为非图形对象,如词典、图层、线型定义等。对象出现在 OBJECTS 段。
组码的固定与可变
部分组码在图元中是固定的,即始终具有相同的用途。例如组码 0 始终表示图元类型,组码 8 始终表示图层名。
如果组码不是固定的,则其用途取决于上下文。例如组码 10 在 LINE 图元中表示起点,在 CIRCLE 图元中表示圆心,在 TEXT 图元中则表示文字插入点。
编写 DXF 处理程序的原则
在编写 DXF 处理程序时,建议遵循以下原则:
- 以表驱动的方式编写,忽略未定义的组码。
- 不对图元中组码的次序做任何假定。
- 这样可以更容易地适配 AutoCAD 以后的新版本,因为每个新版本都可能在图元中添加新组码。
本章小结
本章介绍了 DXF 格式的基本概念,包括组码的定义、值类型、对象与图元的区别等。理解这些基本概念是后续深入学习各章节的基础。下一章将介绍 DXF 文件的整体结构。