DXF文件解析
DXF文件中几种主要数据的定义方法,以及数据的保存方式
DXF的几个基本单位
DXF主要由图块、图元、图层这三者组成。
图元
图元 由各种不同的几何类型组成包括但不限于线、多线、弧线、点、圆、椭圆等组成
每个图元都有各种属性,如线性、颜色、大小、名称、句柄等。
图块
图块其实可以理解为各种不同图元的固定组合。通过图块,能够重复使用一些设计起来较为复杂但一致的细节。如同样的门、桌子、洗手盆等,使用统一类型的
一个门图块可能包含了弧线和线两个图元,其中弧线代表门的打开路径、线代表门的宽度等信息。不同的图元可能由不同的线性组成。由此形成一个独特的图块结构。同时图块也有自己的属性,除了插入点、颜色等等外,还包括了旋转角度、缩放角度等。同一个图块在不同的地方,使用不同的缩放大小代表不一致的规格。如大门与室内的小门可用不同缩放的门进行表示。
图层
图层通过对不同元素进行分别绘制,以达到更好的规划管理数据的功能。通常将室内建筑数据分为、装饰物、墙面、家具、门窗等不同类型的图层。使用图层可快速筛选需要的数据。
各section的作用
DXF 文件本质上由代码及关联值对组成。代码(通常称为 组码)表明其后的值的类型。使用这些组码和值对,可以将 DXF 文件组织到由记录组成的区域中,这些记录由组码和数据项目组成。在 DXF 文件中,每个组码和值都各占一行。每段都以一个后跟字符串 SECTION 的组码 0 开始,其后是组码 2 和表示该段名称的字符串(例如,HEADER)。每段都由定义其元素的组码和值组成。每段都以一个后跟字符串 ENDSEC 的组码 0 结束。
从小图形中生成 DXF 文件,打印出来并在阅读本文时参考,可能会有助于用户理解本文的内容。
DXF 文件完整的结构如下:
- HEADER 段。包含图形的基本信息。它由 AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含一个变量名称及其关联的值。
- CLASSES 段。包含应用程序定义的类的信息,这些类的实例出现在数据库的 BLOCKS、ENTITIES 和 OBJECTS 段中。类定义在类的层次结构中是固定不变的。
- TABLES 段。包含以下符号表的定义:
APPID(应用程序标识表)
BLOCK_RECORD(块参照表)
DIMSTYLE(标注样式表)
LAYER(图层表)
LTYPE(线型表)
STYLE(文字样式表)
UCS(用户坐标系表)
VIEW(视图表)
VPORT(视口配置表)
- BLOCKS 段。包含构成图形中每个块参照的块定义和图形图元。
- ENTITIES 段。包含图形中的图形对象(图元),其中包括块参照(插入图元)。
- OBJECTS 段。包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。OBJECTS 段中的条目样例是包含多线样式和组的词典。
- THUMBNAILIMAGE 段。包含图形的预览图像数据。此段为可选。
TABLE用于保存各种类型数据的属性,相当于dxf中各种数据的元数据,如TABLE中的layer中保存各个图层的名字、ID、图形类型(线性或弧形)等等与图层有关的数据
BLOCKS段主要用来设计图块的各种几何形状、属性、颜色等。
ENTITIES段则是DXF最关键的段落。用于描述具体图层下具体图元的几何、属性等数据。
图层
图层的属性保存在table中的layer中,具体开始的位置在table中的
0
TABLE
2
LAYER ----->(这代表着以下是table中用来描述layer图层)
接下来的
0
layer---------->代表着这是table中的layer中的各图层。
以下将开始描述各个图层的详细信息包括图层名字、id、符号类型等等
以下这是各种组码对应的含义
以下为layer图层非公共组码对应含义
不止layer类、其他类也都有一部分在特定类中起作用的唯一的组码。
Entities
适用于所有图形对象的组码 | ||
---|---|---|
组码 | 说明 | 如果省略, 默认为 … |
-1 | APP:图元名(每次打开图形时都会发生变化) | 未省略 |
0 | 图元类型 | 未省略 |
5 | 句柄 | 未省略 |
102 | 应用程序定义的组的开始 “{application_name”(可选) | 无默认值 |
应用程序定义的代码 | 102 组中的代码和值由应用程序定义(可选) | 无默认值 |
102 | 组的结束“}”(可选) | 无默认值 |
102 | “{ACAD_REACTORS”表示 AutoCAD 永久反应器组的开始。仅当将永久反应器附加到此对象时,此组才存在(可选) | 无默认值 |
330 | 所有者词典的软指针 ID/句柄(可选) | 无默认值 |
102 | 组的结束“}”(可选) | 无默认值 |
102 | “{ACAD_XDICTIONARY”表示扩展词典组的开始。仅当将扩展词典附加到此对象时,此组才存在(可选) | 无默认值 |
360 | 所有者词典的硬所有者 ID/句柄(可选) | 无默认值 |
102 | 组的结束“}”(可选) | 无默认值 |
330 | 所有者 BLOCK_RECORD 对象的软指针 ID/句柄 | 未省略 |
100 | 子类标记 (AcDbEntity) | 未省略 |
67 | 不存在或零表示图元位于模型空间中。1 表示图元位于图纸空间中(可选) | 0 |
410 | APP:布局选项卡名 | 未省略 |
8 | 图层名 | 未省略 |
6 | 线型名(如果不是“随层”,则出现)。特殊名称“随块”表示可变的线型(可选) | BYLAYER |
347 | 材质对象的硬指针 ID/句柄(如果不是“随层”,则出现) | BYLAYER |
62 | 颜色号(如果不是“随层”,则出现);零表示“随块”(可变的)颜色;256 表示“随层”;负值表示层已关闭(可选) | BYLAYER |
370 | 线宽枚举值。作为 16 位整数存储和移动。 | 未省略 |
48 | 线型比例(可选) | 1.0 |
60 | 对象可见性(可选):0 = 可见;1 = 不可见 | 0 |
92 | 后面的 310 组(二进制数据块记录)中表示的代理图元图形中的字节数(可选) | 无默认值 |
310 | 代理图元图形数据(多行;每行最多 256 个字符)(可选) | 无默认值 |
420 | 一个 24 位颜色值,应按照值为 0 到 255 的字节进行处理。最低字节是蓝色值,中间字节是绿色值,第三个字节是红色值。最高字节始终为 0。该组码不能用于自定义图元本身的数据,因为该组码是为 AcDbEntity 类级别颜色数据和 AcDbEntity 类级别透明度数据保留的。 | 无默认值 |
430 | 颜色名。该组码不能用于自定义图元本身的数据,因为该组码是为 AcDbEntity 类级别颜色数据和 AcDbEntity 类级别透明度数据保留的。 | 无默认值 |
440 | 透明度值。该组码不能用于自定义图元本身的数据,因为该组码是为 AcDbEntity 类级别颜色数据和 AcDbEntity 类级别透明度数据保留的。 | 无默认值 |
390 | 打印样式对象的硬指针 ID/句柄 | 无默认值 |
284 | 阴影模式 0 = 投射和接收阴影 1 = 投射阴影 2 = 接收阴影 3 = 忽略阴影 | 无默认值 |
NOTES:
1、需要提到的是,在java库中,kabeja中对应的图层ID-LAYERID其实就是图层的名称。
2、使用了java库kabeja提取dxf的数据。通过检验发现是由第三方cad编辑软件生成的格式不符合要求。通过使用autocad软件进行转换生成的dxf格式才能够被该库识别。