DXF文件结构

来源:互联网 发布:只有我知上海见面会 编辑:程序博客网 时间:2024/05/22 01:53

一.Dxf文件简介

就是CAD生成的一种文件格式, 使用非常普遍. 以字符形式存储(二进制形式存储也有, 但少用). 例如机械加工的设备中, 可以导入dxf文件, 解析文件, 然后加工出该dxf文件中的有的零件.

 

二. Dxf文件格式

2.1. Dxf文件中的最小单元

Dxf文件的最小单元是”码---值”. 码和值各占一行.  代表某种意思;  代表这个意思

例如

/////////////////////////////////////////////

2                                            //2, 这个在这里的意思代表段名

HEARER                               //这里,段名的值是” HEARER”

/////////////////////////////////////////////

 

同一个在不同的上下文代表不同的意思.

 

 

2.2. Dxf文件的整体结构

dxf文件就是由这7个段组成.

 

2.3. dxf文件中的字符格式结构

///////////////////////////////////////////////////////////////////////////

0                                            //0--SECTION码值代表"段开始"

SECTION

2                                            //2--段名码值代表"段名";这里是HEADER

HEADER                              //例如2--HEADER (HEADER);2--BLOCKS(BLOCKS)

                                          //各段的不同的"--"

...

...

0                                            //0--ENDSEC码值代表"段结束"

ENDSEC

0                                            //0--SECTION码值代表"段开始"

SECTION

2                                            //2--段名码值代表"段名";这里是CLASSES

CLASSES                              //例如2--HEADER (HEADER);2--BLOCKS(BLOCKS)

                                          //各段的不同的"--"

...

...

0                                            //0--ENDSEC码值代表"段结束"

ENDSEC

...

......

其他段

......

0                                            //0--EOF码值代表"整个文件结束"

EOF

///////////////////////////////////////////////////////////////////////////

 

其中每个段在文件中的结构都是这样:

///////////////////////////////////////////////////////////////////////////

0                                            // 0--SECTION码值代表"段开始"

SECTION

2                                            // 2--段名码值代表"段名";这里是HEADER

HEADER                               // 例如2--HEADER (HEADER); 2--BLOCKS(BLOCKS)

                                          //各段的不同的"--"

...

...

0                                            // 0--ENDSEC码值代表"段结束"

ENDSEC

///////////////////////////////////////////////////////////////////////////

 

2.4. ENTITIES 段

ENTITIES 段包含图形数据. 例如LINE 直线, ARC圆弧


2.4.1 ENTITIES段中图元数据说明

看图元数据(LINE和ARC)在文件中的格式

////////////////////////////////////////////////////////////////////////////////////////////////

0                                                               // 0--图元码值代表"新图元开始"

LINE                                                         //0--LINE代表直线

5                                                               // 5--代表"句柄"

D640

8                                                               // 8--代表"图层名"

BOT-AL-FRAME

6                                                               //具体其他的"码值"意思可参考DXF的说明文档,因为太多了

CONTINUOUS

10

2232.4029275168591

20

1056.158312627997

30

0.0

11

2256.9029153003012

21

1056.158315364697

31

0.0

0                                                               //0--图元码值代表"新图元开始"       

ARC                                                         //0--ARC代表圆弧

5                                           

D641

8

BOT-AL-FRAME

6

CONTINUOUS

10

1870.4529275168611

20

1059.908312627997

30

0.0

40

3.750000000000032

50

138.18968510434721

51

270.0

////////////////////////////////////////////////////////////////////////////////////////////////

 

2.4.2 LINE和ARC图元


LINE图元中, 包含两个端点的坐标值; ARC图元中包含圆心, 半径, 起始角度等. 每中图元都有它对应的”码—值”数据.


2.5. 其他段

和ENTITIES段一样, 其他段也有它的数据和结构, 都可以参考DXF的说明文档来了解.但是无论有多少段,这些段的结构式怎样的,最小单元都是由的形式组成的.

 

三.解析DXF文件

3.1 解析


其实解析的最主要明白的就是dxf文件的最小单元是”码—值”, 然后文件里面的任何结构都是由”码—值”组成.


A.     读取一个”码—值”(也就是读取两行).

B.     判断”段”开始

C.     根据”段”类型, 进入对应的”段”解析函数.

D.     在进入”段开始”后, 要时刻判断”段结束”.

E.      在进入”段开始”后, 你要根据该段的结构去解析. 例如HEADER段的结构与ENTITIES段的结构是不一样的, HEADER包含了很多变量信息; 而ENTITIES段包含了图元信息, 而且不同的图元, 其结构也不一样(例如LINE和ARC).

所以你在解析不同的段甚至是图元时,你的解析流程可能都不一样.

 

3.2 图元的解析


我自己的实现中,为了简单和通用性,在解析图元时,我使用相同的结构来存储图元.就是在图元中,我存储的是”,而不是对应图元具体结构值.例如: LINE图元有两个端点的坐标,在解析过程中我只存储”10—”; “11—”;等等数据(形式存储).

这样的好处是, 在解析图元时,所有图元的数据结构是一样的,只定义一个列表变量来存储即可.而且解析流程统一.

在得到各个图元的列表后,在根据图元的类型,解析出具体的图形.把解析流程与图形结构分离.

         在其他段也有类似的解析, 都可以分离.

 

 

 

 

0 0
原创粉丝点击