背景
B/S應用系統,根據使用者上傳資料:業務資料和CAD座標資料,經過一系列運籌演算法運算後,輸出一批座標資料,作為給使用者的規劃結果。此時需要方便直觀的給使用者展示座標資料。可選方式有兩個:
- web頁面畫圖直接展示,能夠迅速展示給使用者結果,但使用者只能根據圖形大概位置估計,不能夠看到很精細的位置,故該方式只可作為預覽使用
- 把座標資料輸出到CAD軟體能夠識別的檔案中,使用者下載檔案後,直接用AutoCAD軟體直接開啟該檔案,藉由CAD軟體功能的豐富性,可以看到很精細的座標位置,亦可利用AutoCAD二次人為調整加工。
故:需要調研程式設計讀寫CAD檔案的可行性
AutoCAD檔案格式
檔案格式 | 共同點 | 不同點 |
---|---|---|
DWG | Autocad軟體可直接讀寫並相互轉換 | CAD的圖形檔案,DWG僅是CAD專用檔案格式, |
DXF | ^ | 用於CAD與其它軟體之間進行CAD資料交換的CAD資料檔案格式,文字檔案,檔案可能比dwg大很多 |
故選用dxf格式作為調研格式
目標執行環境
- Linux
程式語言考量
因專案中伺服器端使用到了兩種程式語言,故分別調研該兩種程式語言
- Java
- Python
驗證範圍
本次驗證是為了確認是否能夠通過程式程式碼對CAD的dxf
檔案進行編輯,編輯以後儲存的dxf
檔案能否被Autocad軟體正確開啟,資料是否會缺失,不同dxf年份格式的dxf檔案是否可正確儲存和開啟。
各程式語言的可選開源包
Python
包名 | 版本 | 優缺點 |
---|---|---|
ezdxf | 0.13 | 直接讀寫dxf格式檔案 |
Java
包名 | 版本 | 優缺點 |
---|---|---|
kabeja | ||
YCAD | ||
JDXF | ||
jdwglib | ||
Teigha | ||
dxf |
驗證環境
- 硬體
裝置為惠普膝上型電腦,win10系統,64位。 - 軟體
- Python 3.7
- Java8
- Autocad2015
- Autocad2016
- 以及一張dwg格式的工程cad圖紙
驗證過程
- 用CAD軟體將DWG格式的工程圖轉成各年份的dxf格式(dxf2000, dxf2004, dxf2007, dxf2010, dxf2013, R12)
- 編寫程式碼讀入dxf格式檔案並新建圖層,在新建的圖層上用程式碼畫幾個圓形和正方形,儲存為對應年份的dxf格式檔案
- 通過AutoCAD軟體重新開啟程式碼編輯過並儲存的各年份dxf檔案,核對是否畫圖成功,檔案大小是否有改變。
- 通過AutoCAD自帶的檔案資料提取功能遍歷CAD圖中的所有元素,輸出execl,核對元素數量是否有出入
驗證結果
Python
- ezdxf
能夠正常讀寫dxf檔案通過CAD軟體開啟dxf檔案輸出execl後發現原檔案有887410個元素,程式碼畫圖儲存後的檔案有887415個元素,多出的五個元素為程式碼新增的一個圓形以及四條線段組成的矩形。元素數目是對應的
Java
Java各包文件偏少,多數是讀取dxf檔案,目前沒有找到合適的用例或api去編寫測試程式碼去編輯dxf檔案,故目前給出驗證可行性結論,有待繼續深入研究
注意事項
- DWG檔案轉換為
R12
dxf格式時,會出現轉換後的檔案過大(600M),並且轉換後的檔案打不開。(Auto2015和Auto2016均會出現這種情況),故不能選用該版本的dxf - ezdxf庫儲存的dxf檔案轉換成DWG格式時,開啟會跳出錯誤彈框,需要修復才能開啟展示,修復後內容展示正常並且元素沒有減少。