很好用的FreeCAD
我是在做地下管道三維建模的時候發現FreeCAD這款軟件的。地下管道由于形狀基本固定,大多數橫截面都是圓形或者矩形,而且在原始數據采集的時候已經得到了管道中心線的三維位置和橫截面大小,所以采用人工建模的方式不可取,更多的選擇自動化三維建模。已經有不少自動化三維管道建模軟件,但是要開發類似軟件,很可能要求你對opengl等編程技術較為熟悉,開發的門檻相對較高。
我發現FreeCAD的二次開發非常的輕量化,API接口非常的簡單靈活,支持傳統的宏。FreeCAD本身是開源免費,全面支持python二次開發,而且宏這個經典技術支持你快速學習FreeCAD的每個功能和對應的接口。
舉個例子,證明FreeCAD是簡單好用有效的。
假如已經知道了一個長方體的8個頂點三維坐標,如何根據這些坐標生成一個長方體模型,并且導出為obj文件。
如果你對opengl之類的三維編程都很熟悉的話,這就是小菜一碟。
但是如果你沒有三維編程的經驗,那么使用FreeCAD就是一個很好的選擇。
在FreeCAD的Macro菜單打開一個代碼窗口,然后輸入下面的代碼:
import Part,PartGui #獲取當前打開的三維視圖窗口 doc=App.activeDocument() #定義8個頂點坐標 v1 = FreeCAD.Vector(16.618813566446693 , 125.22511113528816 , 0) v2 = FreeCAD.Vector(17.74618643355331 , 126.87708886471185 , 0) v3 = FreeCAD.Vector(17.74618643355331 , 126.87708886471185 , -1) v4 = FreeCAD.Vector(16.618813566446693 , 125.22511113528816 , -1) v5 = FreeCAD.Vector(17.847535837023013 , 124.38658400239477 , 0) v6 = FreeCAD.Vector(18.97490870412963 , 126.03856173181846 , 0) v7 = FreeCAD.Vector(18.97490870412963 , 126.03856173181846 , -1) v8 = FreeCAD.Vector(17.847535837023013 , 124.38658400239477 , -1) #創建長方體的第一個面 wire1=Part.makePolygon([v1,v2,v3,v4,v1]) face1 = Part.Face(wire1) wire2=Part.makePolygon([v1,v2,v6,v5,v1]) face2 = Part.Face(wire2) wire3=Part.makePolygon([v5,v6,v7,v8,v5]) face3 = Part.Face(wire3) wire4=Part.makePolygon([v2,v3,v7,v6,v2]) face4 = Part.Face(wire4) wire5=Part.makePolygon([v3,v4,v8,v7,v3]) face5 = Part.Face(wire5) #創建長方體的第六個面 wire6=Part.makePolygon([v1,v4,v8,v5,v1]) face6 = Part.Face(wire6) #六個面組成一個長方體 box=Part.makeShell([face1,face2,face3,face4,face5,face6]) solid=Part.makeSolid(box) box = doc.addObject("Part::Box","mybox") box.Shape=solid然后執行這段代碼,三維視圖窗口中就會生成對應的長方體。
FreeCAD的菜單【File】/【Export】支持導出多種格式,當然包括obj格式了。
當然,三維世界里面各種形狀的模型很多,長方體太簡單了。但是只要有“點構成線,線構成面,面構成體”的基本思路,任何形狀都不在話下;同時任何一個表面都可以看成是三角形的面組成的。所以,只要你能將模型分解成三角形的面,得到三角形的3個頂點,就是可以得到obj格式的三維模型的。
假如要創建一個三棱柱,已知6個頂點,可以使用下面的代碼:
import Part,PartGui #獲取當前打開的三維視圖窗口 doc=App.activeDocument() #三棱柱的6個頂點 v1 = FreeCAD.Vector(18.83345034945586 , 123.52035588232494 , -0) v2 = FreeCAD.Vector(20.650902699311487 , 124.35514145719087 , 0) v3 = FreeCAD.Vector(20.768361311317285 , 124.02643845431146 , 0) v4 = FreeCAD.Vector(18.83345034945586 , 123.52035588232494 , -0.173863699983499) v5 = FreeCAD.Vector(20.650902699311487 , 124.35514145719087 , -0.173863699983499) v6 = FreeCAD.Vector(20.768361311317285 , 124.02643845431146 , -0.173863699983499) #三棱柱一共有5個面 wire1=Part.makePolygon([v1,v2,v3,v1]) face1 = Part.Face(wire1) wire2=Part.makePolygon([v3,v1,v4,v6,v3]) face2 = Part.Face(wire2) wire3=Part.makePolygon([v6,v3,v2,v5,v6]) face3=Part.Face(wire3) wire4=Part.makePolygon([v5,v2,v1,v4,v5]) face4=Part.Face(wire4) wire5=Part.makePolygon([v4,v5,v6,v4]) face5=Part.Face(wire5) fan=Part.makeShell([face1,face2,face3,face4,face5]) solid=Part.makeSolid(fan) box = doc.addObject("Part::Box","myfan") box.Shape=solid然后執行這段代碼,三維視圖窗口中就會生成對應的三棱柱。
最后提供一個三維管道建模的思路。
假如有了包含管道三維坐標的shape文件,可以先寫程序生成一個記事本文件,文件內容包括每個頂點的三維坐標。這個程序可以使用任何你擅長的語言來實現。
然后在FreeCAD中寫python代碼讀取記事本,然后生成三維模型,最后導出obj。
總結
以上是生活随笔為你收集整理的很好用的FreeCAD的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: xshell只能显示一个窗口
- 下一篇: 游戏引擎开发涉及的知识和技术
