其他分享
首页 > 其他分享> > 获取TopoDS_Face的网格数据

获取TopoDS_Face的网格数据

作者:互联网

将线条包覆到模型(wrap curve to shape,可阅读我写的高级算法模型包覆算法)或计算铣削等路径时,一般会先获取模型的网格数据,而网格精度和质量会影响计算结果。

不管是opengl、OpenCASCADE,还是vtk等等,显示原理都是将原始曲面离散成很多的三角面进行显示,三角网格越密越顺滑显示越逼真,但也对电脑硬件有更高的要求。

OpenCASCADE在对TopoDS_Shape显示时,就是先对其进行了离散,离散数据会保存在模型中,因此可以直接读取。代码如下。

 

for (TopExp_Explorer ex(shape, TopAbs_FACE); ex.More(); ex.Next()) {
                const TopoDS_Face& F = TopoDS::Face(ex.Current());
                TopLoc_Location L;
                Handle(Poly_Triangulation) facing = BRep_Tool::Triangulation(F, L);
                if (!facing.IsNull())
                {
                    //顶点
                gp_Trsf aTrsf = L.Transformation();
                for (Standard_Integer i = 1; i <= (facing->NbNodes()); i++) {
                    gp_Pnt pnt = facing->Nodes().Value(i).Transformed(aTrsf);//获取顶点坐标
}
//三角
                for (Standard_Integer i = 1; i <= (facing->NbTriangles()); i++) {
                    const Poly_Triangle& trian = facing->Triangles().Value(i);
                    Standard_Integer index1, index2, index3;
                    trian.Get(index1, index2, index3);//获取三角顶点索引
                }
            }
}

 

默认情况下,为了显示效率,网格划分精度会比较低,如果想获取较高的精度,可以调用OpenCASCADE的网格划分函数。如下:

 

TopoDS_Shape shape=...;//模型
Double deflection = ...;//网格精度
BRepMesh_IncrementalMesh(shape, deflection);

 

更多精彩请关注公众号

 

标签:网格,Face,facing,shape,ex,Standard,TopoDS
来源: https://www.cnblogs.com/occi/p/14163370.html