DXFLib开发包注解
DXF格式文件时AutoCAD绘图交换文件,用于其他平台或者程序与CAD进行数据交互用的一种格式文件,在工程中十分常见。DXFLib是解析DXF格式图元的开源库文件,用C++实现。通过定义和实现了几个类及其方法来读取、解析和分类原CAD图形文件中的几乎所有元素(图层、点、直线、圆、标注、线型、线宽等)。结合DXFLib,网上已有许多开源代码用于实现程序对CAD文件的读取,但很少分析DXFLib里的结构流程的。笔者这段时间恰好开发完成这一模块,简单做个总结。
- 1.DXF文件格式
HEADERS——文件头域,表示图的总体信息,包括AutoCAD的文件版本号和一些系统变量;
CLASSES——类域,有关应用程序定义类的信息;
TABLES——表域,符号表的信息;
BLOCKS——块域,块定义和组成图形中每个块引用的图形图元;
ENTITIES——实体域,这部分是绘图实体,即图形中的图元,保存了真实的几何实体,还包括块引用,是DXF文件的主题部分;
OBJECTS——对象域,包括非图形对象的数据,可以使用AutoLISP或objectARx等二次开发程序读取;
THUMBNAILJMAGE——图形的预览信息;
EOF——表示DXF文件的结尾;
- 2.各类头文件及其作用
DL_Codes——定义各类常量,如版本、点、颜色等;
DL_Attributes——DXF文件属性,如图层、颜色、线宽、线型等;
DL_Entities——定义每个元素(直线、点、圆弧、圆等)的具体数据(结构体);
DL_Element——定义DXF中每个元素(类)
定义每个类的枚举变量及索引,如DL_Block, DL_Layer等;
属性private:DL_Type EleType; //元素类型
int indexofBlock; //元素所在块的索引
int indexofDXFlist; //DXFList中元素的索引值
DL_CreationInterface——抽象基类,定义各种方法接口(虚函数,不实现),如addLine(), addLayer(), addPoint()等;
DL_CreationAdapter——覆写DL_CreationInterface提供的接口(但同样不实现)
DL_Dxf——读写dxf文件,读取dxf文件中所有数据,分类添加到DXFList中;
用户自定义类:
DL_Data——覆写DL_CreationAdapter提供的接口,定义实现
定义方法:addtoList(): 添加元素到列表DXFList
addtoBlockList()
定义属性:
元素索引值:numofInset, numofPoint, numofLine, numofArc等;
元素列表:QList<DL_Element*> DXFlist;
QList<DL_Block*>DXFBlockList;(Qt里开发的,用上了Qt自带的结构QList)
- 3.元素类型定义
typedef int DLType; //Element类型
#define DLUnkown 0
#define DLLayer 1
#define DLBlock 2
#define DLPoint 3
#define DLLine 4
#define DLArc 5
#define DLCircle 6
#define DLEllipse 7
#define DLPolyline 8
#define DLVertex 9
#define DLSpline 10
#define DLControlPoint 11
#define DLKnot 12
#define DLInsert 13
- 4.读取DXF文件程序流程
变量定义:
DL_Data *dxfdata = new DL_Data(); //用户自定义类DL_Data
DL_Dxf *dxf = new DL_Dxf();