if ( bndShapes.back().ShapeType() != TopAbs_EDGE )
{
// find geom edge by two vertices
- TopoDS_Shape geomEdge;
- PShapeIteratorPtr edgeIt = helper.GetAncestors( bndShapes.back(), theMesh, TopAbs_EDGE );
- while ( edgeIt->more() )
- {
- geomEdge = *(edgeIt->next());
- if ( !helper.IsSubShape( bndShapes.front(), geomEdge ))
- geomEdge.Nullify();
- }
+ TopoDS_Shape geomEdge = helper.GetCommonAncestor( bndShapes.back(),
+ bndShapes.front(),
+ theMesh, TopAbs_EDGE );
if ( geomEdge.IsNull() )
break; // vertices belong to different edges -> error: free internal link
bndShapes.push_back( geomEdge );
TopoDS_Shape V2 = myHelper->GetSubShapeByNode( node, meshDS );
if ( V2.ShapeType() == TopAbs_VERTEX && !V2.IsSame( V1 ))
{
- TopTools_ListIteratorOfListOfShape ancestIt =
- myHelper->GetMesh()->GetAncestors( V1 );
- for ( ; ancestIt.More(); ancestIt.Next() )
- {
- const TopoDS_Shape & ancestor = ancestIt.Value();
- if ( ancestor.ShapeType() == TopAbs_EDGE )
- for ( TopExp_Explorer e( ancestor, TopAbs_VERTEX ); e.More(); e.Next() )
- if ( V2.IsSame( e.Current() ))
- return TopoDS::Edge( ancestor );
- }
+ TopoDS_Shape ancestor = myHelper->GetCommonAncestor( V1, V2, *myHelper->GetMesh(), TopAbs_EDGE);
+ if ( !ancestor.IsNull() )
+ return TopoDS::Edge( ancestor );
}
return TopoDS_Edge();
}