Salome HOME
Import profiles protection (Bug #203).
[modules/hydro.git] / src / HYDROData / HYDROData_ShapesTool.cxx
index 283d64c0c891095364fc927d8daefd66f067ff28..9bf73f269873be3ba5947a497cfdacd4db6bf135 100644 (file)
@@ -9,8 +9,11 @@
 
 #include <TopExp.hxx>
 
+#include <TopoDS.hxx>
+#include <TopoDS_Edge.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Vertex.hxx>
+#include <TopoDS_Wire.hxx>
 
 #include <TopTools_SequenceOfShape.hxx>
 
@@ -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 );
 }