Salome HOME
another z layer for hilight presentation
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Curve.hxx
index 0f8e887ffc0948331a314e2786e92d8120e39f69..adcfc87a8f6f8e21448d463583bfbcb14ae5597a 100644 (file)
 #include "CurveCreator_Macro.hxx"
 #include "CurveCreator.hxx"
 #include "CurveCreator_Diff.hxx"
-#include "CurveCreator_AISCurve.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
  *  connected points; thus CurveCreator_Curve object can contain several
  *  not connected curves (polylines or b-splines), each such curve has two
- *  only ends � start and end points � in other words non-manifold curves
+ *  only ends "start and end points" in other words non-manifold curves
  *  are not supported.
  */
 class CURVECREATOR_EXPORT CurveCreator_Curve : public CurveCreator_ICurve
@@ -94,8 +91,6 @@ 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);
@@ -110,16 +105,11 @@ 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: // temporary
+public: // TODO: remove public
   void getCoordinates( int theISection, int theIPoint, double& theX, double& theY, double& theZ ) const;
-protected:  // temporary
+protected:  // TODO: remove public
   void redisplayCurve();
 
-  void convert( const SectionToPointList &thePoints,
-                std::map<int, std::list<int> > &theConvPoints );
-
 public:
   /************   Implementation of INTERFACE methods   ************/
 
@@ -150,11 +140,11 @@ public:
   virtual bool clear();
 
   //! For internal use only! Undo/Redo are not used here.
-  virtual bool joinInternal( const int theISectionTo = -1, 
-                             const int theISectionFrom = -1 );
-  //! Join range of sections to one section (join all sections if -1 is passed in one of arguments)
-  virtual bool join( const int theISectionTo = -1, 
-                     const int theISectionFrom = -1 );
+  virtual bool joinInternal( const std::list<int>& theSections );
+
+  //! Join list of sections to one section (join all if the list is empty)
+  // The first section in the list is a leader, another sections are joined to it
+  virtual bool join( const std::list<int>& theSections );
 
   //! Get number of sections
   virtual int getNbSections() const;
@@ -238,7 +228,8 @@ public:
                          const CurveCreator::Coordinates& theNewCoords );
 
   //! Set coordinates of specified points from different sections
-  virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords);
+  virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords,
+                                 const bool theIsToSaveDiff = true );
 
   //! For internal use only! Undo/Redo are not used here.
   virtual bool removePointsInternal( const SectionToPointList &thePoints );
@@ -264,16 +255,60 @@ public:
    */
   virtual int getNbPoints( const int theISection ) const;
 
+   /**
+   * Set skip sorting flag. If the flag is true - points sorting will be skipped.
+   */
+  virtual void setSkipSorting( const bool theIsToSkip );
+
+  /**
+   * Indicates whether the points can be sorted.
+   */
+  virtual bool canPointsBeSorted();
+
+  /**
+   * Saves points coordinates difference.
+   * \param theOldCoords the old points coordinates
+   */
+  virtual void saveCoordDiff( const SectionToPointCoordsList &theOldCoords );
 
   /***********************************************/
   /***       Presentation methods              ***/
   /***********************************************/
-  virtual ListAISObjects constructWire() const;
+  /**
+   *  Get the curve AIS object
+   */
+  virtual Handle_AIS_InteractiveObject getAISObject( const bool theNeedToBuild = false ) const;
+
+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 );
 
-  void getPoint( const int theSectionId, const int thePointId, gp_Pnt& thePoint ) const;
+protected:
+  virtual void constructAISObject();
+  /**
+   * Returns the section by the section index or NULL if the index is out of the section
+   * list range
+   * \param theSectionId the section index
+   */
+  CurveCreator_Section* getSection( const int theSectionId ) const;
+
+protected:
+  bool                            mySkipSorting;
 
 public:
-  Handle(CurveCreator_AISCurve)   myAISCurve;
   bool                            myIsLocked;
   CurveCreator::Sections          mySections;   //!< curve data
   CurveCreator::Dimension         myDimension;  //!< curve dimension
@@ -287,6 +322,7 @@ private:
   ListDiff                        myListDiffs;
   int                             myUndoDepth;
   int                             myOpLevel;
+  AIS_Shape*                      myAISShape;   //!< AIS shape
 };
 
 #endif