Salome HOME
Merge branch 'BR_MULTI_BATHS' into HEAD
[modules/hydro.git] / src / HYDROData / HYDROData_PolylineOperator.h
index d3e49e3526e0a1d4e7d7bcb5c94ce79ac844e90a..a4c280b8c12eb0fd72911af03536b883581879af 100644 (file)
 #include <gp_Pnt2d.hxx>
 #include <vector>
 
-class HYDROData_PolylineOperator
+class Handle( HYDROData_Document );
+class HYDROData_TopoCurve;
+class Handle(HYDROData_Object);
+
+class HYDRODATA_EXPORT HYDROData_PolylineOperator
 {
 public:
-  HYDRODATA_EXPORT bool Split( const Handle( HYDROData_PolylineXY )& thePolyline,
-                               const gp_Pnt2d& thePoint ) const;
-  HYDRODATA_EXPORT bool Split( const Handle( HYDROData_PolylineXY )& thePolyline,
-                               const Handle( HYDROData_PolylineXY )& theTool ) const;
-  HYDRODATA_EXPORT bool Split( const HYDROData_SequenceOfObjects& thePolylines );
-  HYDRODATA_EXPORT bool Merge( const HYDROData_SequenceOfObjects& thePolylines );
+  bool Split( const Handle( HYDROData_Document )& theDoc,
+              const Handle( HYDROData_PolylineXY )& thePolyline,
+              const gp_Pnt2d& thePoint,
+              double theTolerance ) const;
+  bool Split( const Handle( HYDROData_Document )& theDoc,
+              const Handle( HYDROData_PolylineXY )& thePolyline,
+              const Handle( HYDROData_PolylineXY )& theTool,
+              double theTolerance,
+              bool& theIsIntersected) const;
+  bool Split( const Handle( HYDROData_Document )& theDoc,
+              const HYDROData_SequenceOfObjects& thePolylines,
+              double theTolerance );
+  bool Merge( const Handle( HYDROData_Document )& theDoc,
+              const QString& theName,
+              const HYDROData_SequenceOfObjects& thePolylines,
+              bool isConnectByNewSegment,
+              double theTolerance );
+
+  static void GetWires(
+    const Handle( HYDROData_PolylineXY )& thePolyline,
+    std::vector<TopoDS_Wire>& theWires);
+
+  //! The method is intended to approximate the B-spline edge curve
+  //! by a 'Hydro' spline section.
+  //! Inserts the knot in the middle of each such B-spline piece that
+  //! the middle deflection is more than the required deflection and
+  //! more than the half of the maximal middle deflection.
+  //! Returns the initial maximal middle deflection.
+  //! Returns a negative value in the case of any error.
+  static double ReduceDeflection(
+    const double theDeflection,
+    HYDROData_TopoCurve& theCurve,
+    int& thePieceCount);
 
-  static HYDRODATA_EXPORT std::vector<Handle( Geom2d_Curve )> GetCurves( const Handle( HYDROData_PolylineXY )& thePolyline );
+  bool Extract( const Handle(HYDROData_Document)& theDocument,
+                const Handle(HYDROData_Object)& theObject );
 
-  static HYDRODATA_EXPORT std::vector<gp_Pnt2d> Intersection( const Handle( Geom2d_Curve )& theCurve,
-                                                              const Handle( Geom2d_Curve )& theTool );
+protected:
+  bool split( const Handle( HYDROData_Document )& theDoc,
+              const Handle( HYDROData_PolylineXY )& thePolyline,
+              const HYDROData_SequenceOfObjects& theTools,
+              double theTolerance,
+              int theIgnoreIndex,
+              bool& theIsIntersected) const;
 
-  static HYDRODATA_EXPORT std::vector<Handle( Geom2d_Curve )> Split( const Handle( Geom2d_Curve )& theCurve,
-                                                                     const std::vector<gp_Pnt2d>& thePoints );
+  static void Split(
+    const TopoDS_Wire& theWire,
+    const gp_Pnt2d& thePoint,
+    double theTolerance,
+    std::vector<TopoDS_Shape>& theWires);
 
-  static HYDRODATA_EXPORT bool CreatePolylines( const std::vector<Handle( Geom2d_Curve )>& theCurves );
+  static bool CreatePolylines( const Handle( HYDROData_Document )& theDoc,
+                               const Handle( HYDROData_PolylineXY )& theOldPolyline,
+                               const std::vector<TopoDS_Shape>& theShape,
+                               bool isUseIndices );
 };
 
 #endif