首页 > 其他 > 详细

获取TopoDS_Face的网格数据

时间:2020-12-20 15:02:00      阅读:58      评论:0      收藏:0      [点我收藏+]

将线条包覆到模型(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的网格数据

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!