Salome HOME
Update mechanism is corrected (Bug #182).
[modules/hydro.git] / src / HYDROData / HYDROData_Polyline.h
1 #ifndef HYDROData_Polyline_HeaderFile
2 #define HYDROData_Polyline_HeaderFile
3
4 #include <HYDROData_Object.h>
5
6 #include <TCollection_ExtendedString.hxx>
7
8 #include <QPointF>
9 #include <QPainterPath>
10 #include <QList>
11
12 class TopoDS_Wire;
13
14 DEFINE_STANDARD_HANDLE(HYDROData_Polyline, HYDROData_Object)
15
16 struct HYDRODATA_EXPORT PolylineSection
17 {
18 public:
19   enum SectionType{ SECTION_POLYLINE=0, SECTION_SPLINE=1 };
20
21   PolylineSection(){ myIsClosed=true; myType=SECTION_POLYLINE; mySectionName="Section";}
22   TCollection_ExtendedString  mySectionName;
23   SectionType                 myType;
24   bool                        myIsClosed;
25   QList<double>               myCoords;
26 };
27
28 /**\class HYDROData_Polyline
29  * \brief Class that stores/retreives information about the painter path.
30  *
31  * Keeps path as binary array of element type and coordinates
32  * of image with correspondent API for forkind wit hthese properties.
33  */
34 class HYDROData_Polyline : public HYDROData_Object
35 {
36 public:
37
38   typedef QList<PolylineSection> PolylineData;
39
40 protected:
41   /**
42    * Enumeration of tags corresponding to the persistent object parameters.
43    */
44   enum DataTag
45   {
46     DataTag_First = HYDROData_Object::DataTag_First + 100, ///< first tag, to reserve
47     DataTag_SectionsName,
48     DataTag_SectionsClosed,
49     DataTag_SectionsSize,
50     DataTag_SectionsType,
51     DataTag_ZValue
52   };
53
54 public:
55   DEFINE_STANDARD_RTTI(HYDROData_Polyline);
56
57   /**
58    * Returns the kind of this object. Must be redefined in all objects of known type.
59    */
60   HYDRODATA_EXPORT virtual const ObjectKind GetKind() const {return KIND_POLYLINE;}
61
62   /**
63    * Returns the top shape of the object.
64    */
65   HYDRODATA_EXPORT virtual TopoDS_Shape GetTopShape() const;
66
67   /**
68    * Returns the 3d shape of the object.
69    */
70   HYDRODATA_EXPORT virtual TopoDS_Shape GetShape3D() const;
71
72   /**
73    * Dump object to Python script representation.
74    */
75   HYDRODATA_EXPORT virtual QStringList DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const;
76
77   /**
78    * Returns data of object wrapped to QVariant.
79    * Reimplemented to wrap and return saved path.
80    */
81   HYDRODATA_EXPORT virtual QVariant GetDataVariant();
82
83   /**
84    * Replace current polyline data by new sections list
85    * \param theSections the sections list
86    */
87   HYDRODATA_EXPORT void SetPolylineData( const PolylineData& theSections );
88
89   /**
90    * Return polyline data
91    * \return polyline section list
92    */
93   HYDRODATA_EXPORT PolylineData GetPolylineData() const;
94    
95   /**
96    * Returns true if polyline is closed
97    */
98   HYDRODATA_EXPORT bool IsClosed() const;
99
100   /**
101    * Return polyline dimension
102    * \return polyline dimension (2 or 3)
103    */
104   HYDRODATA_EXPORT int GetDimension() const;
105
106   /**
107    * Set polyline dimension (2 or 3)
108    * \param theDimension the polyline dimension
109    */
110   HYDRODATA_EXPORT void SetDimension( int theDimension );
111
112   /**
113    * Remove all sections from polyline
114    */
115   HYDRODATA_EXPORT void RemoveAll();
116
117   /**
118    * Returns the painter path.
119    * Note: currently only the first section of the polyline data is taken into account.
120    */
121   HYDRODATA_EXPORT QPainterPath GetPainterPath() const;
122
123   HYDRODATA_EXPORT void   SetZValue( const double theZValue );
124   HYDRODATA_EXPORT double ZValue() const;
125
126 protected:
127
128   /**
129    * Update the wire contour on the basis of the polyline data.
130    */
131   void UpdateWire( const PolylineData& theSections );
132
133 protected:
134
135   friend class HYDROData_Iterator;
136
137   /**
138    * Creates new object in the internal data structure. Use higher level objects 
139    * to create objects with real content.
140    */
141   HYDRODATA_EXPORT HYDROData_Polyline();
142
143   /**
144    * Destructs properties of the object and object itself, removes it from the document.
145    */
146   HYDRODATA_EXPORT ~HYDROData_Polyline();
147 };
148
149 #endif