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();
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwleNRkTzEEVNhXS6hFMG1mYw50MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TO0UTMxUjMyIjNxQDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)