上次编译了下gmsh的VS2015 X64版本库,并进行了简单的测试,初步划分结果还是可以的。于是想利用gmesh的库集成到自己的日常程序中,关于gmsh网格参数的设置,极力推荐gmsh的PDF文件,解释非常明白,当然也可以查看源码中的commandline.cpp文件,PDF的部分截图说明如下:
关于简单实用gmesh进行网格划分,上篇博客已经写了,我们只要设置一些参数选项,然后把参数传过去即可。这里,我做了简单测试,挑选了部分设置参数并集成到我的程序中,参数大致如下(并不完整):
假设网格已经划分完成,我们只需要把网格显示出来就行了,基本的思路就是获取网格单元,获取单元的坐标,最后组装下就成了。
**获取网格的所有坐标点数据:gmsh::model::mesh::getNodes(nodeTags, coord, parametricCoord, dim, tag, includeBoundary, true);
**获取网格是所有单元:gmsh::model::mesh::getElements(elementTypes, elementTags, nodeTagss, dim, tag);
部分代码参考如下:
//Gmsh网格划分,获取部分属性
//1.先获取坐标数据
int dim = -1;
int tag = -1;
bool includeBoundary = false;
vector<double> coord, parametricCoord;//coord是坐标
vector<size_t> nodeTags;//顶点数目
gmsh::model::mesh::getNodes(nodeTags, coord, parametricCoord, dim, tag, includeBoundary, true);
//2.单元数据
vector<int> elementTypes;
vector<vector<size_t> > elementTags, nodeTagss;//nodetagss是单元ID
gmsh::model::mesh::getElements(elementTypes, elementTags, nodeTagss, dim, tag);
//
gmsh::finalize();
//
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
osg::ref_ptr<osg::Geode> linegeode = new osg::Geode();
//
for (int i = 0; i < nodeTagss[1].size(); i += 3)
{
…………………………………………
//三角形的三个点
int id1 = nodeTagss[1][i];
int id2 = nodeTagss[1][i + 1];
int id3 = nodeTagss[1][i + 2];
…………………………………………………….
}
使用OSG做了简单的显示,测试如下:
1.首先是step模型,显示如下:
2.简单划分下效果:
3.修改参数进行划分
总结:使用gmsh的lib库调用,能够得到划分的网格,在OSG中显示效果较好,下一步是继续理解gmesh网格参数设置的功能,进一步完善。博文如有任何问题,请您加我QQ:1623451686。恳请指正和交流。
暂无评论内容