DXF文件分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DXF文件分析
一、DXF文件数据总览
DXF是AutoCAD的一种绘图交换文件,可以与其他软件进行数据较换的一种文件格式。
DXF是一种开放的矢量数据格式,可以分为两类:ASCII格式和二进制格式;ASCII具有可读性好的特点,但占有空间较大;二进制格式则占有空间小、读取速度快。
DXF文件是由很多的“代码”和“值”组成的“数据对”构造而成,这里的代码称为“组码”(group code),指定其后的值的类型和用途。
每个组码和值必须为单独的一行的。
DXF文件被组织成为多个“段”(section),每个段以组码“0”和字符串“SECTION”开头,紧接着是组码“2”和表示段名的字符串(如HEADER)。
段的中间,可以使用组码和值定义段中的元素。
段的结尾使用组码“0”和字符串“ENDSEC”来定义。
二、DXF文件数据格式分析
图1.1为DXF文件数据格式的总体框图
图2.1DXF数据格式框图
由图1.1可知,DXF的数据格式有HEADER(标题段)、CLASSES(类段)、TABLES (表段)、BLOCKS(块段)、ENTITIES(实体段)、OBJECTS(对象段)、EOF(结束)。
出了这七个段之外还有一个THUMBNAILIMAGE段。
类/子类,组码,组值的格式如下:
类/子类
组码
组值
比如:
AcDbCircle ARC的子类
10 组码,起点的X坐标
2860.382264303673 组值X的坐标为2860.382264303673
组码比起类/子类以及组值有一个空格的缩进。
2.1 HEADER(标题段)
DXF 文件的HEADER 段包含与图形关联的变量的设置。
它由AutoCAD 数据库版本号和一些系统变量组成。
每个变量由给出变量名称的组码9 指定,其后是提供变量值的组。
下面给出了HEADER段的一般格式。
0 HEADER 段的开始
SECTION
2
HEADER
9 变量名称标识符(仅在DXF 文件的HEADER 段中使用)
为每个标题变量重复一次
$<变量>
<组码>
<值>
0 HEADER 段的结束
ENDSEC
2.2 CLASSES(类段)
CLASSES 段。
包含应用程序定义的类的信息,这些类的实例出现在数据库的BLOCKS、ENTITIES 和OBJECTS 段中。
类定义在类的层次结构中是固定不变的。
0 CLASSES 段的开始
SECTION
2
CLASSES
0 为每个条目(CLASS)重复一次
CLASS
1
<类dxf 记录>
2
<类名>
3
<应用程序名>
90
<标志>
280
<标志>
281
<标志>
0 CLASSES 段的结束
ENDSEC
2.3 TABLES(表段)
TABLES 段包含若干个表,每个表都包含多个条目。
APPID(应用程序标识表)
BLOCK_RECORD(块参照表)
DIMSTYLE(标注样式表)
LAYER(图层表)
LTYPE(线型表)
STYLE(文字样式表)
UCS(用户坐标系表)
VIEW(视图表)
VPORT(视口配置表)
以下是DXF 文件TABLES 段的样例。
0 TABLES 段的开始
SECTION
2
TABLES
0 常用表组码;为每个条目重复一次
TABLE
2
<表类型>
5
<句柄>
100
AcDbSymbolTable
70
<最大条目数量>
0 表条目数据;为每个表记录重复一次
<表类型>
5
<句柄>
100
AcDbSymbolTableRecord
.
. <数据>
.
0 表的结束
ENDTAB
0 TABLES 段的结束
ENDSEC
2.4 BLOCKS(块段)
本段包含块定义和组成图形中每个块引用的图形图元。
以下是DXF 文件BLOCKS 段的样例:
0 BLOCKS 段的开始
SECTION
2
BLOCKS
0 每个块条目的开始(块图元定义)BLOCK
5
<句柄>
100
AcDbEntity
8
<图层>
100
AcDbBlockBegin
2
<块名>
70
<标志>
10
<X 值>
20
<Y 值>
30
<Z 值>
3
<块名>
1
<外部参照路径>
0 块中的每个图元定义有一个条目
<图元类型>
.
. <数据>
.
0 每个块条目的结束(endblk 图元定义)ENDBLK
5
<句柄>
100
AcDbBlockEnd
0 BLOCKS 段的结束
ENDSEC
2.5 ENTITIES(实体段)
实体段,这部分是绘图实体,即图形中的图元,保存了真是的几何实体,是DXF文件的主体部分。
以下是DXF 文件ENTITIES 段的样例:
0 ENTITIES 段的开始
SECTION
2
ENTITIES
0 每个图元定义一个条目
<图元类型>
5
<句柄>
330
<指向所有者的指针>
100
AcDbEntity
8
<图层>
100
AcDb<类名>
.
. <数据>
.
0 ENTITIES 段的结束
ENDSEC
2.6 OBJECTS(对象段)
对象段,包括非图形对象的数据。
以下是DXF 文件OBJECTS 段的样例:
SECTION
2
OBJECTS
0 命名对象词典(根词典对象)的开始
DICTIONARY
5
<句柄>
100
AcDbDictionary
3 为每个条目重复一次
<词典名>
350
<子对象句柄>
0 对象数据组
<对象类型>
.
. <数据>
.
0 OBJECTS 段的结束
ENDSEC
2.7 THUMBNAILIMAGE段
本段包含着图形的预览信息。
2.8 EOF(结束)
表示DXF文件的结尾。
三、DXF文件ENTITIES(实体段)的具体分析
这是一段ENTITIES(实体段)的DXF文件,下面将具体分析这段数据。
下面这段分析了直线图元与圆弧图元
SECTION
2
ENTITIES
0 每个图元定义一个条目
LINE 图元类型,直线
5 组码,句柄,为1FB
1FB
330 所有者对象的软指针ID/句柄
1F
100 子类标记
AcDbEntity 实体标记
8 组码,图层名
0 组值,0代表所在图层为0图层
100 子类标记
AcDbLine 直线图元扩展出的子类
10 直线的起点X值
1106.834898161781 起点X值为1106.834898161781
20 直线的起点Y值
1395.871562996274 起点Y值为1395.871562996274
30 直线的起点Z值
0.0 起点Z值为0
11 直线的终点X值
1851.561830338484 终点X值为1851.561830338484
21 直线的终点Y值
1395.871562996274 终点Y值为1395.871562996274
31 直线的终点Z值
0.0 终点Z值为0
0 每个图元开始的标志,也就是说开始下一个图元LINE 直线图元
5
1FC
330
1F
100
AcDbEntity
8
100
AcDbLine
10
1851.561830338484
20
1395.871562996274
0.0
11
2317.016160236603
21
1806.193446730996
31
0.0
0 开始下一个图元
ARC 图元类型,圆弧图元
5 句柄
1FD
330 所有者对象的软指针ID/句柄
1F
100 子类标记,开始了ARC图元的子类AcDbEntity ARC的子类,实体,它下面定义了图层
8
100 子类标记
AcDbCircle ARC的子类
10 起点的X坐标
2860.382264303673
20 起点的Y坐标
2136.93813430701
30 起点的Z坐标
0.0
40 半径
968.620479908 半径为968.620479908
100 子类标记
AcDbArc ARC的子类
50 起点角度
241.7119094458038 起点角度为241.7119094458038 51 终点坐标
318.7885317906761 终点角度为318.7885317906761 0
ARC
5
1FE
330
1F
100
AcDbEntity
8
AcDbCircle
10
3123.701489314559
20
1371.966190047819
30
0.0
40
618.3937446020411
100
AcDbArc
50
50.14292471420428
51
134.7143313830589
ENDSEC
注:圆弧图元角度的计算方法
起始角度,就是起始点到圆心点直线与原点所在水平直线顺时针角度,构成的角的顶点都是在圆心点。