DXF文件结构

DXF是一种常见的CAD文件格式,由多个段组成,包括HEADER、ENTITIES等。文件以'码-值'的形式存储,如LINE和ARC图元在ENTITIES段中。解析DXF文件时,需按段读取并解析'码-值',存储为'码-值'列表,再根据图元类型构建图形结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.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—”;等等数据(形式存储).

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

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

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

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值