初探OSG+OpenCascade(简称:OCC)在QT上的实践之尝试集成Gmsh4.8网格划分程序

上次编译了下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。恳请指正和交流。

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

昵称

取消
昵称表情代码图片