初探QT+OSG+OCC的CAD平台之GMSH划分后以按面获取相应的点与单元

之前集成gmsh的过程中,采用的方式是直接获取划分网格后的所有的点以及单元ID,然后根据这些点信息组装起来,这样处理没有也是正常的,但是没法找到面对应的点与单元,因此,我花了一个晚上的时间重新看了gmsh的文档,修改了原来获取总点数和总单元的方式,采用按面来获取,然后逐个面渲染处理,话不多说,直接介绍核心代码:

第一是获取所有的实体:

std::vector<std::pair<int, int> > entities;
 gmsh::model::getEntities(entities);

第二是遍历entities,得到它的点和单元信息“

int dim = entities[i].first, tag = entities[i].second;
 gmsh::model::mesh::getNodes(nodeTags, nodeCoords, nodeParams, dim, tag);gmsh::model::mesh::getElements(elemTypes, elemTags, elemNodeTags, dim, tag);

第三步就是渲染了,可以参考我之前的博客,写了具体代码,如此就能按面显示出来了,看下OSG中的显示效果吧(每个面着色处理用于区分):

先来看下原模型显示:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16 

 

 划分下效果如下(参数随意设置效果):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16 

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5r2H5rmY5pWj5a6i,size_20,color_FFFFFF,t_70,g_se,x_16 

 

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片