Salome HOME
refs #453: scalar bar is invisible
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_CurveCreatorProfile.h
1 // Copyright (C) 2013  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #ifndef HYDROGUI_CurveCreator_Profile_HeaderFile
21 #define HYDROGUI_CurveCreator_Profile_HeaderFile
22
23 #include "CurveCreator_Curve.hxx"
24
25 /**
26  *  The CurveCreator_Curve object is represented as one or more sets of
27  *  connected points; thus CurveCreator_Curve object can contain several
28  *  not connected curves (polylines or b-splines), each such curve has two
29  *  only ends start and end points in other words non-manifold curves
30  *  are not supported.
31  */
32 class HYDROGUI_CurveCreatorProfile : public CurveCreator_Curve
33 {
34
35 public:
36
37   //! Constructor of the curve.
38   HYDROGUI_CurveCreatorProfile();
39
40   //! Destructor.
41   virtual ~HYDROGUI_CurveCreatorProfile();
42
43 public:
44
45   /***********************************************/
46   /***           Section methods               ***/
47   /***********************************************/
48
49   //! For internal use only! Undo/Redo are not used here.
50   virtual bool clearInternal();
51
52   //! For internal use only! Undo/Redo are not used here.
53   virtual bool joinInternal( const std::list<int>& theSections );
54
55   //! For internal use only! Undo/Redo are not used here.
56   virtual bool moveSectionInternal( const int theISection,
57                                     const int theNewIndex);
58   //! Move section to new position in list
59   virtual bool moveSection( const int theISection,
60                             const int theNewIndex );
61   //! Join list of sections to one section (join all if the list is empty)
62   // The first section in the list is a leader, another sections are joined to it
63   virtual bool join( const std::list<int>& theSections );
64
65   //! For internal use only! Undo/Redo are not used here.
66   virtual int addSectionInternal( const std::string &theName, 
67                                   const CurveCreator::SectionType theType,
68                                   const bool theIsClosed,
69                                   const CurveCreator::Coordinates &thePoints);
70   //! Add a new section.
71   virtual int addSection( const std::string &theName, 
72                            const CurveCreator::SectionType theType,
73                            const bool theIsClosed );
74   //! Add a new section.
75   virtual int addSection( const std::string &theName, 
76                            const CurveCreator::SectionType theType,
77                            const bool theIsClosed,
78                            const CurveCreator::Coordinates &thePoints);
79   
80   
81   //! For internal use only! Undo/Redo are not used here.
82   virtual bool removeSectionInternal( const int theISection );
83
84   //! Removes the given sections.
85   virtual bool removeSection( const int theISection );
86
87   
88   //! For internal use only! Undo/Redo are not used here.
89   virtual bool setClosedInternal( const int theISection, 
90                                   const bool theIsClosed );
91   /**
92    *  Set "closed" flag of the specified section (all sections if
93    *  \a theISection is -1).
94    */
95   virtual bool setClosed( const int theISection, 
96                           const bool theIsClosed );
97
98   /***********************************************/
99   /***           Point methods                 ***/
100   /***********************************************/
101
102   //! For internal use only! Undo/Redo are not used here.
103   virtual bool addPointsInternal( const CurveCreator::SectionsMap &theSectionsMap );
104   /**
105    *  Add one point to the specified section starting from the given theIPnt index
106    *  (or at the end of points if \a theIPnt is -1).
107    */
108   //! For internal use only! Undo/Redo are not used here.
109   virtual bool setPointInternal( const CurveCreator::SectionsMap &theSectionsMap );
110
111   /**
112    *  Add one point to the specified section starting from the given theIPnt index.
113    *  Contrary to CurveCreator_Curve::addPoints(...) if \a theIPnt is -1 the right index
114    *  will be calculated automatically in accordance with X coordinate value of the point.
115    */
116   virtual bool addPoints( const CurveCreator::Coordinates &theCoords,
117                           const int theISection,
118                           const int theIPnt = -1 );
119
120   /**
121    * Indicates whether the points can be sorted.
122    */
123   virtual bool canPointsBeSorted();
124
125 protected:
126   /**
127    * Converts the list of custom point position objects into a list of point indices
128    * \param thePoints an source list
129    * \param theConvPoints a converted list
130    */
131   void convert( const CurveCreator::PosPointsList& thePoints,
132                 std::list<int>& theConvPoints );
133
134 };
135
136 #endif