X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_ShapesTool.cxx;h=9bf73f269873be3ba5947a497cfdacd4db6bf135;hb=5617222a44e709aa05f81f868300462d8a6b30b2;hp=283d64c0c891095364fc927d8daefd66f067ff28;hpb=9b2bfc45ba9bf3430d7fb6ed9bfe8352a91885a3;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_ShapesTool.cxx b/src/HYDROData/HYDROData_ShapesTool.cxx index 283d64c0..9bf73f26 100644 --- a/src/HYDROData/HYDROData_ShapesTool.cxx +++ b/src/HYDROData/HYDROData_ShapesTool.cxx @@ -9,8 +9,11 @@ #include +#include +#include #include #include +#include #include @@ -33,22 +36,58 @@ void HYDROData_ShapesTool::ExploreShapeToShapes( const TopoDS_Shape& theIn } } +bool HYDROData_ShapesTool::Vertices( const TopoDS_Shape& theInShape, + TopoDS_Vertex& theFirstVertex, + TopoDS_Vertex& theLastVertex, + const bool theIsCumOri ) +{ + if ( theInShape.IsNull() ) + return false; + + if ( theInShape.ShapeType() == TopAbs_EDGE ) + { + TopoDS_Edge anEdge = TopoDS::Edge( theInShape ); + TopExp::Vertices( anEdge, theFirstVertex, theLastVertex, theIsCumOri ); + } + else if ( theInShape.ShapeType() == TopAbs_WIRE ) + { + TopoDS_Wire aWire = TopoDS::Wire( theInShape ); + TopExp::Vertices( aWire, theFirstVertex, theLastVertex ); + } + else + { + return false; + } + + return true; +} + bool HYDROData_ShapesTool::IsVerticesEquals( const TopoDS_Vertex& theFirstVert, - const TopoDS_Vertex& theSecondVert ) + const TopoDS_Vertex& theSecondVert, + const bool theIs2D ) { gp_Pnt aFirstPoint = BRep_Tool::Pnt( theFirstVert ); gp_Pnt aSecondPoint = BRep_Tool::Pnt( theSecondVert ); + + // Set the Z coord to zero for 2D equations + if ( theIs2D ) + { + aFirstPoint.SetZ( 0.0 ); + aSecondPoint.SetZ( 0.0 ); + } + return aFirstPoint.IsEqual( aSecondPoint, Precision::Confusion() ); } bool HYDROData_ShapesTool::IsEdgesEquals( const TopoDS_Edge& theFirstEdge, - const TopoDS_Edge& theSecondEdge ) + const TopoDS_Edge& theSecondEdge, + const bool theIs2D ) { TopoDS_Vertex aFFirstVert, aFLastVert, aSFirstVert, aSLastVert; TopExp::Vertices( theFirstEdge, aFFirstVert, aFLastVert ); TopExp::Vertices( theSecondEdge, aSFirstVert, aSLastVert ); - return IsVerticesEquals( aFFirstVert, aSFirstVert ) && - IsVerticesEquals( aFLastVert, aSLastVert ); + return IsVerticesEquals( aFFirstVert, aSFirstVert, theIs2D ) && + IsVerticesEquals( aFLastVert, aSLastVert, theIs2D ); }