最近發現 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 段之下的圖元的,其余的信息都丟棄處理。