1.引言
CAD是工程中常见的画图软件,dxf是CAD中经常用到的文件,在工作中有用到对dxf文件进行解析的情况。这篇文章将说明如何用代码将dxf文件中的信息解析出来。
2.dxf文件(可以了解一下)
DXF是一种开放的矢量数据格式,可以分为两类:ASCII格式和二进制格式;ASCII具有可读性好的特点,但占用的空间较大;二进制格式则占用的空间小、读取速度快。
DXF文件是由很多的"代码"和"值"组成的"数据对"构造而成,这里的代码称为"组码"(group code),指定其后的值的类型和用途。每个组码和值必须为单独的一行的。
DXF文件是由很多的"代码"和"值"组成的"数据对"构造而成,这里的代码称为"组码"(group code),指定其后的值的类型和用途。每个组码和值必须为单独的一行的。
DXF 文件的基本组成如下所示:
●HEADER 部分 - 图的总体信息。每个参数都有一个变量名和相应的值。
●CLASSES 部分 - 包括应用程序定义的类的信息,这些实例将显示在 BLOCKS、ENTITIES 以及
●OBJECTS 部分-通常不包括用于充分用于与其它应用程序交互的信息。
●TABLES 部分 - 这部分包括命名条目的定义。
Application ID (APPID) 表
Block Recod (BLOCK_RECORD) 表
Dimension Style (DIMSTYPE) 表
Layer (LAYER) 表
Linetype (LTYPE) 表
Text style (STYLE) 表
User Coordinate System (UCS) 表
View (VIEW)表
Viewport configuration (VPORT) 表
●BLOCKS 部分- 这部分包括 Block Definition 实体用于定义每个 Block 的组成。
●ENTITIES 部分 - 这部分是绘图实体,包括 Block References 在内。
●OBJECTS 部分 -- 包括非图形对象的数据,供 AutoLISP 以及 ObjectARX应用程序所使用。
●THUMBNAILIMAGE 部分 -- 包括 DXF 文件的预览图。
●END OF FILE
3.开始进入解析(先从文件的ASCII码中的组码解析)
需要准备dxf的解析库dxflib,链接如下:
https://download.csdn.net/download/weixin_40196271/12471365
以及在CAD中安装好帮助文件。可以去官网进行下载,需要安装在CAD中
https://knowledge.autodesk.com/zh-hans/support/autocad/learn-explore/caas/downloads/downloads/CHS/content/download-install-autocad-2021-product-help.html
也可以用下面的链接进行下载,直接的帮助文档
https://download.csdn.net/download/weixin_40196271/12471381
一般我们需要解析的部分会有两个,一个是dxf中的层的信息,一个是具体的图中的线,圆,圆弧,多段线等信息。
先来解析层。
(1)层的解析
层信息可以通过TABLES部分来进行解析。以下是帮助文档中对layer做的说明,打开dxf文件,查找到TABLES中layer的部分,可以对照找到相关的层的信息。
dxflib中也是通过组码的信息来解析具体信息的。通常层信息比较有用的是图层名的信息。
(2)线的解析
线的信息可以通过ENTITIES部分来进行解析。以下是帮助文档中对line的说明。
其中10,20,30后面对应的数字为起点的x,y,z左边,11,21,31后面对应的数字为终点的x,y,z坐标。
(3)圆的解析
圆的信息可以通过ENTITIES部分来进行解析。以下是帮助文档中对circle的说明。
其中10,20,30为x,y,z对应的圆心坐标,40为圆的半径。
(4)圆弧的解析
圆弧的信息可以通过ENTITIES部分来进行解析。以下是帮助文档中对arc的说明。
其中,10,20,30为x,y,z的圆心坐标,40为圆的半径,50为圆的起点角度(弧度制),51为圆的终点角度(角度制)
(5)多段线的解析
多段线的信息可以通过ENTITIES部分来进行解析。多段线是由多个角点连接起来的。一般我们解析LWPOLYLINE,POLYLINE属于旧版本了,不过有的时候也会出现。以下是帮助文档中对lwpolyline的说明:
其中,90为多段线中角点的个数,10,20为多段线中的角点的x,y坐标,42为角点的凸度,为角点对应的圆弧的圆心角的四分之一的正切(这么说有点复杂,后面会具体讲到)。一般我们会把角点信息进一步解析出来,变成线和圆的信息。
(6)椭圆的解析
椭圆的信息可以通过ENTITIES部分来进行解析。以下是帮助文档中对ellipse的说明。
其中,10,20,30为椭圆圆心的x,y,z坐标。11,21,31为相对于中心的长轴端点的x,y,z坐标,40为短轴与长轴的比例,可以用来计算长短轴半径。41,42为起始和终止角度(弧度制)。
4.未完待续
由于内容较多,具体的用dxflib中的解析见下一篇