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

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

第一是获取所有的实体:

std::vector > 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中的显示效果吧(每个面着色处理用于区分):

先来看下原模型显示:

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

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

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

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

 

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

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

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

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

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

 

 

 

你可能感兴趣的:(OpenCascade,negtgen,gmesh,OSG,qt,开发语言,c++)