Salome HOME
Sorting alphabetically.
[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 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_Wire
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    * Dump object to Python script representation.
64    */
65   HYDRODATA_EXPORT virtual QStringList DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const;
66
67   /**
68    * Returns data of object wrapped to QVariant.
69    * Reimplemented to wrap and return saved path.
70    */
71   HYDRODATA_EXPORT virtual QVariant GetDataVariant();
72
73   /**
74    * Replace current polyline data by new sections list
75    * \param theSections the sections list
76    */
77   HYDRODATA_EXPORT void setPolylineData( const PolylineData& theSections );
78
79   /**
80    * Return polyline data
81    * \return polyline section list
82    */
83   HYDRODATA_EXPORT PolylineData getPolylineData() const;
84    
85   /**
86    * Returns true if polyline is closed
87    */
88   HYDRODATA_EXPORT bool isClosed() const;
89
90   /**
91    * Return polyline dimension
92    * \return polyline dimension (2 or 3)
93    */
94   HYDRODATA_EXPORT int getDimension() const;
95
96   /**
97    * Set polyline dimension (2 or 3)
98    * \param theDimension the polyline dimension
99    */
100   HYDRODATA_EXPORT void setDimension( int theDimension );
101
102   /**
103    * Remove all sections from polyline
104    */
105   HYDRODATA_EXPORT void removeAll();
106
107   /**
108    * Returns the painter path.
109    * Note: currently only the first section of the polyline data is taken into account.
110    */
111   HYDRODATA_EXPORT QPainterPath painterPath() const;
112
113   /**
114    * Sets the wire contour of the object.
115    */
116   HYDRODATA_EXPORT void SetWire( const TopoDS_Wire& theWire );
117
118   /**
119    * Returns the wire contour of the object.
120    */
121   HYDRODATA_EXPORT TopoDS_Wire Wire() const;
122
123 protected:
124   /**
125    * Update the wire contour on the basis of the polyline data.
126    */
127   void UpdateWire( const PolylineData& theSections );
128
129 protected:
130
131   friend class HYDROData_Iterator;
132
133   /**
134    * Creates new object in the internal data structure. Use higher level objects 
135    * to create objects with real content.
136    */
137   HYDROData_Polyline();
138
139   /**
140    * Destructs properties of the object and object itself, removes it from the document.
141    */
142   ~HYDROData_Polyline();
143 };
144
145 #endif