簡述FreeCAD在vs2017下的編譯與dxf導入


最近發現 FreeCAD 官方在發布 0.19_pre 時已提供 vs2017 x64的LibPack,現在就再來測試一下。

編譯

下載 FreeCADLibs_12.1.2_x64_VC15.7z 官方LibPack之后,解壓后可以將vs2017的生成目錄與LibPack重合,也可以不重合。不重合的話可以更好地看清楚編譯后的 FreeCAD 都會產生哪些文件。

不重合 LibPack,使用cmake生成vs2017工程項目文件,這里邊最主要的是二個變量的設定:FREECAD_LIBPACK_DIR要設置到LibPack解壓目錄,另外需要將 BUILD_QT5 開啟,然后就可以了。

運行

啟動編譯成功的 FreeCAD 有點注意事項 (不重合的情況下):

  • 有可能啟用后找不到python的相關文件而啟動失敗。這個時候建議設置 FC_PYTHONHOME 至 FreeCAD-LibPack 解壓后目錄的 bin 子文件夾;因為在FreeCAD啟動代碼里會取 FC_PYTHONHOME 重置 PYTHONHOME 環境變量。
  • 有可能因為找不到 Qt 的platform插件而啟動失敗。建議向 編譯后 FreeCAD_d.exe 所在目錄添加 qt.conf 文件,使得Qt知道他的庫路徑在哪個地方。如果是重合LibPack目錄的此項不用設置。

qt.conf 的內容舉例如下:

[Paths]
Prefix=E:/sources/FreeCAD/FreeCAD-vs2017-build/../FreeCADLibs_12.1.2_x64_VC15

導入dxf, dwg

導入dxf, dwg類型的文件,是在 Draft 模塊之下的 Init.py 里邊增加的,dxf 由 importDXF.py 負責,dwg 由 importDWG.py 負責。

其中 importDWG.py 是采用 ODA 的 TeighaFileConverter.exe 來進行中轉的,也就是說如果導入dwg,那么它先用 TeighaFileConverter.exe 將dwg轉換成為 dxf,然后將dxf格式的文件導入;導出也是如此,先轉換成為dxf文件,再由 TeighaFileConverter.exe 將dxf轉換成為dwg。

第一次看到這樣的轉換思路,在缺少穩定可靠的dwg導入導出庫時,這樣的思路感覺不錯。

導入 dxf 格式,在 importDXF.py 內是這樣處理,首先從 user.cfg 讀取設置,如果 BaseApp/Preferences/Mod/Draft/dxfUseLegacyImporter 的設置為True,則啟用 python 語言的庫進行導入,這個庫沒有的話,會從github上下載。然后還有一個配置項,是否每次都去嘗試下載最新的。下載的4個文件(dxfLibrary.py, ...) 會放在 Macro 目錄或者是 UserAppData。

默認情況第一次啟動時,user.cfg 內是沒有設置 BaseApp/Preferences/Mod/Draft/dxfUseLegacyImporter 的,則取默認值為False,這時就采用 Import 模塊的 readDXF() 來執行dxf文件的導入,這是C++寫成的。

dxf文件的格式

dxf格式的描述,網上有一大堆這方面的文章,AutoDesk也有幫助文檔闡述了dxf格式。文本形式的比較友好,它總是采用一個組碼+相關值的方式,而且組碼與相關值都各自占一行。

不同的組碼代表不同的類型,比如 0 SECTION 表示段的開始, 0 ENDSEC 表示段結束;然后 0 HEADER表示為HEADER段,圖形對象在 ENTITIES 段內。

很多庫並不會處理dxf的全部內容,比如 FreeCAD 內帶的 dxf.h/dxf.cpp ,就是只讀取 ENTITIES 段之下的圖元的,其余的信息都丟棄處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM