基于OCC+OSG的CAD之GMSH与Netgen网格连贯性测试

     本文是对前几次的博客的一个扩展,本文的重点在于对于多个子实体(有接触性的)划分网格时,经常出现网格在子实体边界不连贯的问题,考虑到之前本人仅仅对这些子实体简单的进行了组装(OCC接口是MakeCompound),好处是相比于BRepAlgoAPI_Fuse速度要快很多,当然,这肯定带来了网格的不连贯问题,于是,本人目前没有想到更好的方式下,仅仅利用BRepAlgoAPI_Fuse对子实体求并集,然后再传给netgen或者gmsh。

具体接口为:

TopoDS_Shape  QFormDoc::makeOneShape(Handle(TopTools_HSequenceOfShape) theShapes)
{
    TopoDS_Shape res;
    Standard_Integer nb = theShapes->Length();
    if (nb == 0)
        return res;
    else if (nb == 1) 
        return theShapes->Value(1);
    else 
    {
        res = theShapes->Value(1);
        for (Standard_Integer i = 2; i <= nb; i++)
        {
            res = BRepAlgoAPI_Fuse(res, theShapes->Value(i));
        }
        ShapeUpgrade_UnifySameDomain unif(res, false, true, false);
        unif.Build();
        return  unif.Shape();
    }
}

将得到的shape直接传给gmsh 或者 netgen即可。效果如下:

图1.stp模型加载

                                                 图2.选中非叶节点(测试组合效果)

                                                         图3.面网格连贯性效果

@ 潇湘散客

                                                             图4.体网格连贯性效果 

潇湘散客

                                                     图5.netgen面网格连贯性效果

                                                         图 6.netgen体网格连贯性效果

 后记:从面网格来看,连贯性是正常的,体网格由于太密集目前不少很好的观看效果,需要进一步替换方法测试。总体来说,多个有接触的实体同时划分网格处理上有了一定的积累,后期将进一步探索。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...