Salome HOME
8b01e076bfbf845e6e903b2d33879876e017ef06
[modules/hydro.git] / src / HYDROData / HYDROData_Polyline.cxx
1 #include <HYDROData_Polyline.h>
2 #include <HYDROData_Iterator.h>
3
4 #include <TDataStd_RealArray.hxx>
5 #include <TDataStd_Name.hxx>
6 #include <TDataStd_UAttribute.hxx>
7 #include <TDF_ListIteratorOfLabelList.hxx>
8
9 // tage of the child of my label that contains information about the operator
10 static const Standard_GUID GUID_MUST_BE_UPDATED("80f2bb81-3873-4631-8ddd-940d2119f000");
11
12 IMPLEMENT_STANDARD_HANDLE(HYDROData_Polyline, HYDROData_Object)
13 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Polyline, HYDROData_Object)
14
15 HYDROData_Polyline::HYDROData_Polyline()
16 {
17 }
18
19 HYDROData_Polyline::~HYDROData_Polyline()
20 {
21 }
22
23 void HYDROData_Polyline::setPoints( QList<QPointF> thePointsList )
24 {
25   removeAllPoints();
26   if( thePointsList.isEmpty() )
27     return;
28   Handle(TDataStd_RealArray) anArray;
29   anArray = TDataStd_RealArray::Set( myLab, 0, thePointsList.size()*2-1 );
30   for( int i = 0 ; i < thePointsList.size() ; i++ ){
31     anArray->SetValue(i*2, thePointsList[i].x() );
32     anArray->SetValue(i*2+1, thePointsList[i].y() );
33   }
34 }
35
36 void HYDROData_Polyline::addPoint( const QPointF& thePoint )
37 {
38   QList<QPointF> aPointsArray = points();
39   aPointsArray.append( thePoint );
40   setPoints( aPointsArray );
41 }
42    
43 void HYDROData_Polyline::insertPoint( int theIndex, const QPointF& thePoint)
44 {
45   QList<QPointF> aPointsArray = points();
46   aPointsArray.insert( theIndex, thePoint );
47   setPoints( aPointsArray );
48 }
49
50 void HYDROData_Polyline::removePoint( int theIndex )
51 {
52   QList<QPointF> aPointsArray = points();
53   aPointsArray.removeAt( theIndex );
54   setPoints( aPointsArray );
55 }
56
57 void HYDROData_Polyline::removeAllPoints()
58 {
59   myLab.ForgetAttribute(TDataStd_RealArray::GetID());
60   return;
61 }
62
63 int HYDROData_Polyline::pointsCount()
64 {
65   Handle(TDataStd_RealArray) anArray;
66   if(!myLab.FindAttribute(TDataStd_RealArray::GetID(), anArray))
67     return 0;
68   return anArray->Length()/2;
69 }
70
71 QList<QPointF> HYDROData_Polyline::points()
72 {
73   QList<QPointF> aRes;
74   Handle(TDataStd_RealArray) anArray;
75   if(!myLab.FindAttribute(TDataStd_RealArray::GetID(), anArray))
76     return aRes;
77   int anArraySize = anArray->Length();
78   for( int i = 0 ; i < anArraySize/2 ; i++ ){
79     qreal anX = anArray->Value( i*2 );
80     qreal anY = anArray->Value( i*2 + 1 );
81     QPointF aPoint( anX, anY );
82     aRes.append( aPoint );
83   }
84   return aRes;
85 }
86
87 QPainterPath HYDROData_Polyline::painterPathLinear()
88 {
89   QPainterPath aPath;
90   QList<QPointF> aPointsArray = points();
91   if( aPointsArray.size() == 0 )
92     return aPath;
93   aPath.moveTo( aPointsArray[0] );
94   for( int i = 0 ; i < aPointsArray.size() ; i++ ){
95     aPath.lineTo( aPointsArray[i] );
96   }
97   aPath.lineTo( aPointsArray[0] );
98 //I dont know is it need or not ???
99   aPath.closeSubpath();
100   return aPath;
101 }