本文是对前几次的博客的一个扩展,本文的重点在于对于多个子实体(有接触性的)划分网格时,经常出现网格在子实体边界不连贯的问题,考虑到之前本人仅仅对这些子实体简单的进行了组装(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体网格连贯性效果
后记:从面网格来看,连贯性是正常的,体网格由于太密集目前不少很好的观看效果,需要进一步替换方法测试。总体来说,多个有接触的实体同时划分网格处理上有了一定的积累,后期将进一步探索。
暂无评论内容