FreeCAD對於3D模型處理這塊的東西封裝的還是很完善的,所以移植這塊的東西還是有必要的!
首先下載FreeCAD編譯好的庫:
https://www.freecadweb.org/wiki/Download#FreeCAD_LibPack
打開,並解壓,在bin中有相應的FreeCAD.exe工具,這里也有大量的python庫,Q庫等等;
lib文件夾里面也有大量的庫文件;
這里說一下模型操作相應的python腳本的使用:
首先我通過一個stp模型轉obj模型的例子來講解,通常給我們一個stl的模型,我放在E盤下(文件的取名不要在意,我之前做測試忘記改名了):
由於bin文件存在python的庫,我們可將該python.exe文件設置環境變量。或者可自己獨立安裝相應的庫。
創建一個.py的腳本(為了方便我直接在lib文件夾里寫了,這里沒有位置的限定):
step_stl.py:
#!/Applications/FreeCAD.app/Contents/MacOS/FreeCADCmd FREECADPATH = 'E:/FreeCAD/FreeCAD/lib/' # path to your FreeCAD.so or FreeCAD.dll file import sys sys.path.append(FREECADPATH) import math import FreeCAD import Part import Mesh import sys in_fn, out_fn = sys.argv[1], sys.argv[2] Type=sys.argv[3] Part.open(in_fn) strlist = in_fn.split('\\') stllist=strlist[len(strlist)-1].split('.') print(strlist[len(strlist)-1]) print(stllist[0]) print(len(FreeCAD.getDocument("Unnamed").Objects)) size=len(FreeCAD.getDocument("Unnamed").Objects) for a in range(len(FreeCAD.getDocument("Unnamed").Objects)): o = [ FreeCAD.getDocument("Unnamed").Objects[a] ] out_model=out_fn+'\\'+stllist[0]+'_part'+str(a)+Type Mesh.export(o, out_model) out_advance=str(round((float(a+1)/size),4)*100)+'%' print(out_advance)
需要注意的是需要使用的庫文件的導入,用到什么庫就導入什么(設置環境變量和在代碼設置路徑都是可行的)。我的庫目錄就是在代碼設置的(FreeCAD.pyd 在bin文件夾內,可復制過去)。
這個python腳本是個命令行程序:python.exe step_stl.py(.py文件的路徑) E:\1.stp(需要轉換文件的路徑) E:(保存文件的位置) .obj(保存文件的格式)
需要注意的是:這個程序是按文件的mesh進行輸出,假如需要轉換成單個模型,去官網或者博客查找相應的API.
我們都知道,這樣操作借助的庫多而且麻煩,所以打包成exe是必要的:
py2exe解決了這個問題:
這是py2exe下載鏈接(保證python版本一致):http://www.py2exe.org/
py2exe使用:http://www.cnblogs.com/jans2002/archive/2006/09/30/519393.html
import py2exe-----------------pyt2exe是一個文件夾,將它的上級設置成環境變量就好
后序編譯會遇到一些庫文件依賴沒找到的問題,"dll_excludes"是很好的處理手段(下面是我的.py文件):
FREECADPATH = 'E:/Python/Lib/site-packages' # path to your FreeCAD.so or FreeCAD.dll file import sys sys.path.append(FREECADPATH) from distutils.core import setup import py2exe setup(console=["E:\FreeCAD\FreeCAD\lib\step_stl.py"], options={ 'py2exe': { "dll_excludes": ["MSVCP90.dll","libzmq.pyd","geos_c.dll","api-ms-win-core-string-l1-1-0.dll","api-ms-win-core-rtlsupport-l1-2-0.dll","api-ms-win-core-registry-l1-1-0.dll",
"api-ms-win-core-errorhandling-l1-1-1.dll","api-ms-win-core-string-l2-1-0.dll","api-ms-win-core-profile-l1-1-0.dll","api-ms-win*.dll","api-ms-win-core-processthreads-l1-1-2.dll",
"api-ms-win-core-libraryloader-l1-2-1.dll","api-ms-win-core-file-l1-2-1.dll","api-ms-win-security-base-l1-2-0.dll","api-ms-win-eventing-provider-l1-1-0.dll","api-ms-win-core-heap-l2-1-0.dll",
"api-ms-win-core-libraryloader-l1-2-0.dll","api-ms-win-core-localization-l1-2-1.dll","api-ms-win-core-sysinfo-l1-2-1.dll","api-ms-win-core-synch-l1-2-0.dll","api-ms-win-core-heap-l1-2-0.dll",
"api-ms-win-core-handle-l1-1-0.dll","api-ms-win-core-io-l1-1-1.dll","api-ms-win-core-com-l1-1-1.dll","api-ms-win-core-memory-l1-1-2.dll","api-ms-win-core-version-l1-1-1.dll","api-ms-win-core-version-l1-1-0.dll"] } })
編譯那塊py2exe有很詳細的解釋;