Salome HOME
Bug 158: Crash in profile edition
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Curve.hxx
index 551fc9734c1977394b2651621d48824fe36e75e6..3c41e711c760d2e8428d70f54395ba9bf45b69e0 100644 (file)
 #include "CurveCreator.hxx"
 #include "CurveCreator_Diff.hxx"
 
-#include <AIS_Point.hxx>
-#include <AIS_Line.hxx>
-#include <AIS_InteractiveObject.hxx>
-
 #include <list>
+#include <map>
 
 struct CurveCreator_Section;
 class CurveCreator_Displayer;
+class AIS_Shape;
+class Handle_AIS_InteractiveObject;
 
 /**
  *  The CurveCreator_Curve object is represented as one or more sets of
@@ -69,6 +68,9 @@ public:
   //! Set curve creator Displayer object
   virtual void setDisplayer( CurveCreator_Displayer* theDisplayer );
 
+  //! Return curve creator Displayer object
+  CurveCreator_Displayer* getDisplayer();
+
   //! Remove curve creator Displayer object
   virtual void removeDisplayer();
 
@@ -89,7 +91,12 @@ public:
    */
   virtual int toICoord(const int theIPnt) const;
 
-  ListAISObjects constructSection( int theISection ) const;
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool moveSectionInternal(const int theISection,
+                           const int theNewIndex);
+  //! Move section to new position in list
+  virtual bool moveSection(const int theISection,
+                   const int theNewIndex);
 
 protected:
   /** This method updates all undo/redo information required to be updated
@@ -98,10 +105,9 @@ protected:
    */
   virtual bool addEmptyDiff();
 
-  Handle_AIS_Point getAISPoint( int theISection, int theIPoint ) const;
-  Handle_AIS_Line  getAISLine( int theISection, int theIPoint1, int theIPoint2 ) const;
+public: // TODO: remove public
   void getCoordinates( int theISection, int theIPoint, double& theX, double& theY, double& theZ ) const;
-
+protected:  // TODO: remove public
   void redisplayCurve();
 
 public:
@@ -205,9 +211,7 @@ public:
   /***********************************************/
 
   //! For internal use only! Undo/Redo are not used here.
-  virtual bool addPointsInternal( const CurveCreator::Coordinates &theCoords,
-                                  const std::vector<int> &theISections,
-                                  const std::vector<int> &theIPnts );
+  virtual bool addPointsInternal( const CurveCreator::SectionsMap &theSectionsMap );
   /**
    *  Add one point to the specified section starting from the given theIPnt index
    *  (or at the end of points if \a theIPnt is -1).
@@ -217,20 +221,23 @@ public:
                           const int theIPnt = -1 );
 
   //! For internal use only! Undo/Redo are not used here.
-  virtual bool setPointInternal( const int theISection,
-                                 const int theIPnt,
-                                 const CurveCreator::Coordinates& theNewCoords );
+  virtual bool setPointInternal( const CurveCreator::SectionsMap &theSectionsMap );
    //! Set coordinates of specified point
   virtual bool setPoint( const int theISection,
                          const int theIPnt,
                          const CurveCreator::Coordinates& theNewCoords );
 
+  //! Set coordinates of specified points from different sections
+  virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords);
+
   //! For internal use only! Undo/Redo are not used here.
-  virtual bool removePointsInternal( const std::vector<int> &theISections, 
-                                     const std::vector<int> &theIPnts );
+  virtual bool removePointsInternal( const SectionToPointList &thePoints );
   /** Remove point with given id */
   virtual bool removePoint( const int theISection, const int theIPnt = -1 );
 
+  //! Remove several points from different sections with given ids
+  virtual bool removeSeveralPoints( const SectionToPointList &theSectionToPntIDs);
+
   //! Get coordinates of specified point
   virtual CurveCreator::Coordinates getPoint( const int theISection, 
                                               const int theIPnt ) const;
@@ -251,10 +258,32 @@ public:
   /***********************************************/
   /***       Presentation methods              ***/
   /***********************************************/
-  virtual ListAISObjects constructWire() const;
+  /**
+   *  Get the curve AIS object
+   */
+  virtual Handle_AIS_InteractiveObject getAISObject( const bool theNeedToBuild = false ) const;
 
-public:
+protected:
+  /**
+   *  Removes the points from the section. It sortes the points and remove them
+   * in the decreasing order
+   * \param theSectionId a section index
+   * \param thePointIds a list of section points
+   */
+  bool removeSectionPoints( const int theSectionId,
+                            const std::list<int>& thePointIds );
+  /**
+   * Converts the list of pairs of section to point into map of a section to list of points
+   * \param thePoints an source list
+   * \param theConvPoints a converted map
+   */
+  void convert( const SectionToPointList &thePoints,
+                std::map<int, std::list<int> > &theConvPoints );
+
+protected:
+  virtual void constructAISObject();
 
+public:
   bool                            myIsLocked;
   CurveCreator::Sections          mySections;   //!< curve data
   CurveCreator::Dimension         myDimension;  //!< curve dimension
@@ -268,6 +297,7 @@ private:
   ListDiff                        myListDiffs;
   int                             myUndoDepth;
   int                             myOpLevel;
+  AIS_Shape*                      myAISShape;   //!< AIS shape
 };
 
 #endif