292
CULTURE 区域治理
作者简介:梁小锋,生于1992年,本科,测绘助理工程师,研究方向为国土空间规划,地理空间数据的开发与应用相关工作。
基于dxflib 库的dxf 格式文件读取和写入方法研究
dxf文件怎么打开梁小锋1,张海洋2
1.江门市江海区自然资源信息中心;
2.广东省海洋地质调查院
摘要:dxf格式文件是一种采用度较高的通用图形格式,本文基于可移植性高的dxflib库,通过构建的图元对象完成了dxf文件读取和写入操作该方法基于开源C++库,具有很大的灵活性,能满足不同用户对dxf文件使用的需求。关键词:dxflib;dxf 中图分类号:U692.4+2
文献标识码:A
文章编号:2096-4595(2020)41-0292-0001
dxf 格式文件是常见图形交换格式之一,在多行业中都得到广泛应用[1-2],但是由于其数据结构复杂,解析dxf 文件还是相对繁琐的。dxflib 库是一个开源的C++库,使用dxflib 库进行dxf 文件的读写,可以很方便进行移植到自己的程序中去。
一、dxf 格式文件介绍
dxf 文件是一种开放的矢量数据格式,由多个SECTION 组成,每个SECTION 依次记录了文件的四至、图层、块表、实体等信息。为嵌套结构,本文主要对BLOCK 段和ENTITIES 段进行了研究。其中BLOCK 段记录了块表信息,包含了该块中的包含的点、多段线、圆等图元信息。在dxf 文件中,模型空间和布局都也是作为一个块表保存。
二、dxflib 库介绍
dxflib 库是一个开源的c++库,方便进行调用。该库中的核心类为dl_dxf 和dl_creationinterface ,此外还对图元数据进行了定义,如直线图元数据定义为DL_LineData 结构体,保存直线的起点和端点坐标。圆图元数据定义为DL_CircleData 结构体,保存圆心坐标和半径。
dl_dxf 类对dxf 文件进行了解析,构建了dxf 文件读取和写入的模块,对各个图元的读取都给出了定义,
并调用dl_creationinterface 类中的可供覆写的虚函数供用户保存。dl_creationinterface 类中定义了虚函数,供用户定义的派生类进行覆写,用户可以根据要提取的实体进行覆写。
三、利用dxflib 库对dxf 格式文件进行读写
dxflib 库虽然对dxf 文件进行了图元提取,并定义了图元的属性以及图元的数据,但是并没有定义图元对象,仅定义了保存图元的虚函数,因此并不能对提取的图元
进行保存。为此需要定义图元对象,以直线图元LINE 为例,构造图元LINE 的对象为LineObj ,包括了图元数据DL_LineData 的字段,以及图元通用属性DL_Attributes 类型的变量atribute 。构建好图元对象之后,需构建块表图元BLOCK 的对象BlockObj ,包括了图元数据DL_BlockData 中的字段,以及BLOCK 中包含的各种图元的集合,以直线图元LINE 为例,dxflines 是LINE 对象LineObj 的集合,用以保存BLOCK 中包含的所有LINE 类型的图元。定义好了数据结构之后,就可以进行dxflib 库的调用,首先建立DL_CreationAdapter 类派生类MyDxfFilter ,然后在派生类中MyDxfFilter 覆写addPoint、addCircle 和addPolyline 等添加图元对象的虚方法。图1为dxflib 库中向一个BLOCK 中添加指定类型图元的流程。
以多段线图元POLYLINE 为例,说明使用dxflib 库保存图元对象的过程,添加多段线共使用到两个方法addPolyline 和addVertex ,其中addPolyline 用来保存多段线,addVertex 用来保存多段线的顶点。
文件流中的所有图元都通过对应的图元对象进行保存。当文件流读完后,dxfblocks 里也就保存了所有BLOCK 图元,以及BLOCK 图元里包含的POLYLINE ,CIRCLE 等图元。
利用dxflib 库对dxf 文件进行读取并保存图元到图元对象后,dxf 的写入就相对简单了,提取图元对象中的图元属性和图层等信息后,按照dxf 格式要求写入文件即可。
四、实验结果与分析
本文选用dxflib 库中demo.dxf 文件为研究对象,该文件包含由多种类型图元构成的块,包含常见的多段线,圆等图元,通过本程序对该文件进行了读取和写入。
五、总结
本文先是对dxf 文件格式和dxflib 库进行了介绍,给出了创建和保存图元对象的方法,实现了对常见的图元进行了提取和写入。
参考文献
[1]汪晓宇.DXF 图形文件的坐标转换[J].地理空间信息,2018,16(6):108-111.
[2]石鑫.AutoCAD 环境下DXF 文件格式分析与处理[D].沈阳:沈阳航空航天大学
,2015.
图1 BLOCK 图元保存流程
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论