python OCC獲取模型三角剖分的座標點

通過獲取三角剖分的座標點可以大概提取三維模型分佈範圍,通過瀏覽OCC C++的API網站,可以查找和閱讀三角剖分的相關API。

OCC C++ API
我們可以在BRep_Tool這個包裏可以找到有關三角座標點的函數Triangulation,他的第一個參數是拓撲形狀中的面類型,我們可以通過拓撲形狀探索類TopologyExplorer來遍歷一個shape的所有面。然後他的第二個參數是location位置類,並且沒有被const,且被&修飾,說明是傳進一個會被修改的參數。因爲我沒有用到,猜測是會返回面或者三角座標某個點。

在這裏插入圖片描述

t = TopologyExplorer(shp)
for f in t.faces():
	pass;

主要關注的是返回的類型Poly_Triangulation,裏面有很多關於三角座標節點的函數,我們可以鎖定他的一個函數Triangles,他會返回一個三角座標的迭代器,包含所有在這個面上的三角座標
在這裏插入圖片描述
通過遍歷這個迭代器,並且通過類方法Value分別傳參1,2,3就可以獲取三個頂點的座標點了。(注意!如果不先顯示模型將會返回None)

        top = TopLoc_Location();
        trian = BRep_Tool.Triangulation(a_face,top);
        #要顯示模型纔有
        for n in trian.Triangles():
            pnt1 = trian.Node(n.Value(1));
            pnt2 = trian.Node(n.Value(2));
            pnt3 = trian.Node(n.Value(3));

然後我們通過display.DisplayShape將做些座標點打印出來就可以對照了,黃色的十字就是座標點,完全正確。
在這裏插入圖片描述
根據需求,我們也可以改變模型的線性偏差和角度偏差來適當改變三角剖分點的密度,關於怎麼改就需要了解三維圖形的有關知識了,下面是修改代碼。linearity是線性偏差,angular是角度偏差,其他參數可以查看下網站api瞭解

#改變線性偏差和角度偏差,影響三角網格的分佈
BRepMesh_IncrementalMesh(shp,linearity,False,angular);

還要提的一點是,對於比較規則的曲面和平面模型,三角剖分點會明顯少很多,比如正方體可能一共只有10幾個點,曲面越多、越複雜的模型點就會越多。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章