Salome HOME
quick optimization patch (bytearray for images)
[modules/hydro.git] / src / HYDROData / HYDROData_TopoCurve.h
index abafe899c66d5ae0a2b91a4f5de3d4394d30c5fa..5bba3b28faa2ecee23acdb9e8920ee7dbddb3953 100644 (file)
@@ -1,8 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
+// Copyright (C) 2014-2015  EDF-R&D
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 // License as published by the Free Software Foundation; either
 #define HYDRODATA_TOPOCURVE_H
 
 #include <deque>
-#include <Handle_Geom_BSplineCurve.hxx>
+#include <Geom_BSplineCurve.hxx>
 #include <HYDROData.h>
 #include <list>
 #include <TopExp.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopoDS_Vertex.hxx>
+#include <gp_XYZ.hxx>
+#include <Adaptor3d_Curve.hxx>
 
 class TopoDS_Wire;
 
-//! The type represents a 1 monifold connected topo curve
+//! Get the parameter of the projected point on the curve, and return the distance of the original point
+double ProjectPointToCurve(const gp_XYZ& thePoint,
+                           const Adaptor3d_Curve& theCurve,
+                           double& theParameter);
+
+//! The type represents a 1 manifold connected topo curve
 //! with forward orientation.
 class HYDROData_TopoCurve
 {
@@ -45,7 +48,7 @@ public:
   HYDROData_TopoCurve(const TopoDS_Edge& theEdge) {myEdges.push_back(theEdge);}
 
   //! Initializes the curve by the wire.
-  //! Returns 'false' if the wire is not 1 monifold or
+  //! Returns 'false' if the wire is not 1 manifold or
   //! is disconnected or is empty.
   HYDRODATA_EXPORT bool Initialize(const TopoDS_Wire& theWire);
 
@@ -66,9 +69,15 @@ public:
   //! Returns the curve edges.
   const std::list<TopoDS_Edge>& Edges() const {return myEdges;}
 
+  //! Returns the curve edges.
+  std::list<TopoDS_Edge>& Edges() {return myEdges;}
+
   //! Cuts the curve in the given parameter of the given edge and
   //! fills the cut part.
-  HYDRODATA_EXPORT void Cut(
+  //! Returns 'true' if:
+  //! -  the curve is open and was split into two parts or
+  //! -  the curve is closed and was cut into an open curve.
+  HYDRODATA_EXPORT bool Cut(
     const std::list<TopoDS_Edge>::iterator& theEdgePosition,
     const double theParameter,
     HYDROData_TopoCurve& theCurve);
@@ -84,7 +93,7 @@ public:
   //! Cuts the curve at the parameters.
   //! Each parameter vector list corresponds to the curve edge and
   //! is ordered in the ascending order.
-  HYDRODATA_EXPORT void Cut(
+  HYDRODATA_EXPORT bool Cut(
     const std::deque<std::list<double> >& theParameters,
     std::deque<HYDROData_TopoCurve>& theCurves) const;
 
@@ -146,7 +155,7 @@ public:
     std::deque<HYDROData_TopoCurve>& theCurves)
   {
     HYDROData_TopoCurve aCurve;
-    if (!aCurve.Initialize(theWire))
+    if (aCurve.Initialize(theWire))
     {
       return aCurve.Connect(theTolerance, theCurves);
     }
@@ -156,13 +165,15 @@ public:
 
   //! Creates a B-spline piecewise curve corresponding to the curve
   //! and using the deflection.
-  HYDRODATA_EXPORT bool BSplinePiecewiseCurve(
+  //! Returns the piece count.
+  //! Returns 0 in the case of any error.
+  HYDRODATA_EXPORT int BSplinePiecewiseCurve(
     const double theDeflection, HYDROData_TopoCurve& theCurve) const;
 
   //! Calculates the values of the curve in its knots.
-  //! Returns 'false' if a curve edge has a nonidentity location or a nonforward
+  //! Returns 'false' if a curve edge has a non-identity location or a non-forward
   //! orientation or has no a B-spline representation.
-  HYDRODATA_EXPORT bool ValuesInKnots(std::deque<gp_XYZ>& theValues) const;
+  HYDRODATA_EXPORT bool ValuesInKnots(std::list<gp_XYZ>& theValues) const;
 
 private:
   //! Transfers the edges of the parameter to this curve end.