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://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中的解析見下一篇