程式設計讀寫CAD檔案驗證

九州浪子發表於2021-09-07

背景

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格式檔案
pyautocad - 必須執行在安裝有AutoCAD軟體的機器上

Java

包名 版本 優缺點
kabeja
YCAD
JDXF
jdwglib
Teigha 必須執行在安裝有AutoCAD軟體的機器上
dxf

驗證環境

  • 硬體
    裝置為惠普膝上型電腦,win10系統,64位。
  • 軟體
    • Python 3.7
    • Java8
    • Autocad2015
    • Autocad2016
    • 以及一張dwg格式的工程cad圖紙

驗證過程

  1. 用CAD軟體將DWG格式的工程圖轉成各年份的dxf格式(dxf2000, dxf2004, dxf2007, dxf2010, dxf2013, R12)
  2. 編寫程式碼讀入dxf格式檔案並新建圖層,在新建的圖層上用程式碼畫幾個圓形和正方形,儲存為對應年份的dxf格式檔案
  3. 通過AutoCAD軟體重新開啟程式碼編輯過並儲存的各年份dxf檔案,核對是否畫圖成功,檔案大小是否有改變。
  4. 通過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格式時,開啟會跳出錯誤彈框,需要修復才能開啟展示,修復後內容展示正常並且元素沒有減少。

參考

相關文章