码迷,mamicode.com
首页 > 其他好文 > 详细

获取TopoDS_Face的网格数据

时间:2020-12-25 11:52:07      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:next   stand   情况   current   explore   ble   form   ali   more   

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

不管是openglOpenCASCADE,还是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);

 

更多精彩请关注公众号

技术图片

 

获取TopoDS_Face的网格数据

标签:next   stand   情况   current   explore   ble   form   ali   more   

原文地址:https://www.cnblogs.com/occi/p/14163370.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!