【CAD】【手把手带你写一个DXF&JAVA解析框架】01——DXF文件组码详细说明,清晰易懂

本文详细介绍了DXF绘图交换文件格式,包括其数据结构、组表达式和组代码,重点解析了圆和直线等图形元素在文件内容中的表示方式,是了解和开发CAD文件读写软件的入门指南。

DWG格式数据是AutoCAD图形文件,内部工作格式,以二进制方式存储,格式不开源。

DXF格式是AutoCAD(Drawing Exchange Format) 绘图交换文件,主要作用就是用于与其他软件进行数据交互。

对外交互,说明格式标准稳定,并可解析,所以如果自己开发CAD文件的读写软件需要从.dxf文件入手。下面我们就一起来揭开.dxf文件格式的面纱

文末附DXF文件格式白皮书


一、数据结构

就如文本章节一般,任何数据内容都有一个格式让你去认识它,dwf文件数据结构简单,行递进式结构,符合机器语言,但是让人阅读还是有点伤脑袋。

使用txt打开dxf,你懵圈了吗?不要慌,我们先认识骨架。

骨架:

Dwf文件由 段—>节—>内容,这样的数据层次构成。段可以理解为文章大章节,节为每章的小标题,内容就是正文内容呐。

组表达式:

Dwf文件数据表达方式为行组,即每两行代表一组具有指定意义的关联数据,第一行为该组的组代码,第二行为具体内容。

如表示段落的一组数据,首行组代码2含义:一个事物的名字,如段、表、块、线型、视图等的名字。第二行HEADER,组内容,即为该段落的名称。

组代码:

即可表示组内容(值)的数据类型,也可表式规定好含义,在不同的应用场景上体现不同的意义,就像外国人觉得一个中文词怎么会具有那么多含义一样。

(1)组代码和组值的类型的关系

组代码为一个非负的不超过三位的整数,而组值由组代码的类型决定。例如:

  • 代码0~9组值类型为字符型。
  • 代码10~59组值类型为实型。
  • 代码60~79组值类型为整型。
  • 代码999表示解释行。


(2)组代码的含义每个组代码均有规定的含义,有些代码含义是固定的,而有些组代码则因应用场合不同而有多个含义,应具体分析。

  • 0:表示一个事物的开始,如一个块、表、图层、实体等。
  • 1:字符型数据的值,如TEXT的字符串、文件名、属性值等。
  • 2:一个事物的名字,如段、表、块、线型、视图等的名字。
  • 3~5:字符型数据的值,如文件名、线型说明等。
  • 6:线型名(固定类型)。
  • 8:图层名(固定类型)。

二、文件内容

DXF文件完整内容结构如下:

HEADER 段

包含有关图形的基本信息。它由 AutoCAD 数据库版本号和一些系统变量组成。每个参数都包含 一个变量名称及其关联的值。

CLASSES 段

包含应用程序定义的类的信息,这些类的实例出现在数据库的 BLOCKS、ENTITIES 和 OBJECTS 段中。类定义在类的层次结构中是固定不变的。

TABLES 段

 包含以下符号表的定义:

  • APPID(应用程序标识表)
  • BLOCK_RECORD(块参照表)
  • DIMSTYLE(标注样式表)
  • LAYER(图层表)
  • LTYPE(线型表)
  • STYLE(文字样式表)
  • UCS(用户坐标系表)
  • VIEW(视图表)
  • VPORT(视口配置表)

BLOCKS 段

包含构成图形中每个块参照的块定义和图形图元。

 ENTITIES 段

包含图形中的图形对象(图元),其中包括块参照(插入图元)。

OBJECTS 段

 包含图形中的非图形对象。除图元、符号表记录以及符号表以外的所有对象都存储在此段。 OBJECTS 段中的条目样例是包含多线样式和组的词典。

THUMBNAILIMAGE 段

包含图形的预览图像数据。此段为可选。

其中最重要的是实体段(ENTITIES)这个段里面包含了所有图形的数据,如 LINE 、ARC、CIRCLE、POINT等。以我绘制的下图为例,包含直线与圆两种图形元素

  0
SECTION
  2
ENTITIES
  0    #图元类型
CIRCLE #圆
  5    #句柄
  12A
  330  #指向所有者的指针
  1F
  100  
AcDbEntity
  8    #图层
  0
  100  #类名
AcDbCircle
  10
  1435.14995076596
  20
  532.7834302205283
  30
  0.0
  40
  219.5725288906973

主要看AcDbCircle下面的那段,其中10 、20、 30下面的数据代表圆的圆心坐标,40下面的数据代表圆的半径,有了圆心和半径,那么这个圆也确定了。

直线

  0
LINE
  5
  12B
  330
  1F
  100
AcDbEntity
  8
  0
  100
AcDbLine
  10
  1050.575605434713
  20
  448.8605050830583
  30
  0.0
  11
  1498.821204005648
  21
  164.0311755091325
  31
  0.0
  0
LINE
  5
  12C
  330
  1F
  100
AcDbEntity
  8
  0
  100
AcDbLine
  10
  1587.960949219491
  20
  209.8073184267351
  30
  0.0
  11
  1837.552248247214
  21
  568.38709841122
  31
  0.0

主要是看AcDbLine下面的数据,10 下面的数据代表起点的X轴坐标,20下面的数据代表起点的Y轴坐标,30下面的数据代表起点的Z轴坐标。11下面的数据代表终点的X轴坐标,21下面的数据代表终点的Y轴坐标,31下面的数据代表终点的Z轴坐标。对于直线,确定了起点和终点的坐标,那么这条直线就确定了。

其他段内容数据格式一样,对照Dxf白皮书即可解析。

Dxf白皮书:https://download.csdn.net/download/qq_42022528/14161610

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wonder ZH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值