Salome HOME
Minor changes.
[modules/hydro.git] / src / HYDROData / HYDROData_Channel.cxx
1
2 #include "HYDROData_Channel.h"
3
4 #include "HYDROData_Document.h"
5 #include "HYDROData_Polyline3D.h"
6 #include "HYDROData_Profile.h"
7
8 #include <TopoDS.hxx>
9 #include <TopoDS_Wire.hxx>
10
11 #include <QStringList>
12
13 #define PYTHON_CHANNEL_ID "KIND_CHANNEL"
14
15 IMPLEMENT_STANDARD_HANDLE(HYDROData_Channel,HYDROData_ArtificialObject)
16 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Channel,HYDROData_ArtificialObject)
17
18
19 HYDROData_Channel::HYDROData_Channel()
20 : HYDROData_ArtificialObject()
21 {
22 }
23
24 HYDROData_Channel::~HYDROData_Channel()
25 {
26 }
27
28 QStringList HYDROData_Channel::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
29 {
30   QStringList aResList;
31
32   Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
33   if ( aDocument.IsNull() )
34     return aResList;
35
36   QString aDocName = aDocument->GetDocPyName();
37   QString aChannelName = GetName();
38
39   aResList << QString( "%1 = %2.CreateObject( %3 );" )
40               .arg( aChannelName ).arg( aDocName ).arg( PYTHON_CHANNEL_ID );
41   aResList << QString( "%1.SetName( \"%2\" );" )
42               .arg( aChannelName ).arg( aChannelName );
43   aResList << QString( "" );
44
45   // TODO
46
47   return aResList;
48 }
49
50 TopoDS_Shape HYDROData_Channel::GetTopShape() const
51 {
52   return getTopShape();
53 }
54
55 TopoDS_Shape HYDROData_Channel::GetShape3D() const
56 {
57   return getShape3D();
58 }
59
60 void HYDROData_Channel::Update()
61 {
62   HYDROData_ArtificialObject::Update();
63
64   Handle(HYDROData_Polyline3D) aGuideLine = GetGuideLine();
65   Handle(HYDROData_Profile) aProfile = GetProfile();
66   if ( aGuideLine.IsNull() || aProfile.IsNull() )
67     return;
68
69   // TODO
70 }
71
72 bool HYDROData_Channel::SetGuideLine( const Handle(HYDROData_Polyline3D)& theGuideLine )
73 {
74   Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine();
75
76   if ( theGuideLine.IsNull() )
77   {
78     RemoveGuideLine();
79     return !aPrevGuideLine.IsNull();
80   }
81
82   if ( IsEqual( aPrevGuideLine, theGuideLine ) )
83     return false;
84
85   TopoDS_Wire aHydraulicWire = TopoDS::Wire( theGuideLine->GetTopShape() );
86   if ( aHydraulicWire.IsNull() )
87     return false; // The polyline must be a single wire
88
89   SetReferenceObject( theGuideLine, DataTag_GuideLine );
90
91   // Indicate model of the need to update the chanel presentation
92   SetToUpdate( true );
93
94   return true;
95 }
96
97 Handle(HYDROData_Polyline3D) HYDROData_Channel::GetGuideLine() const
98 {
99   return Handle(HYDROData_Polyline3D)::DownCast( 
100            GetReferenceObject( DataTag_GuideLine ) );
101 }
102
103 void HYDROData_Channel::RemoveGuideLine()
104 {
105   Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine();
106   if ( aPrevGuideLine.IsNull() )
107     return;
108
109   ClearReferenceObjects( DataTag_GuideLine );
110
111   // Indicate model of the need to update the chanel presentation
112   SetToUpdate( true );
113 }
114
115 bool HYDROData_Channel::SetProfile( const Handle(HYDROData_Profile)& theProfile )
116 {
117   Handle(HYDROData_Profile) aPrevProfile = GetProfile();
118
119   if ( theProfile.IsNull() )
120   {
121     RemoveProfile();
122     return !aPrevProfile.IsNull();
123   }
124
125   if ( IsEqual( aPrevProfile, theProfile ) )
126     return false;
127
128   SetReferenceObject( theProfile, DataTag_Profile );
129
130   // Indicate model of the need to update the chanel presentation
131   SetToUpdate( true );
132
133   return true;
134 }
135
136 Handle(HYDROData_Profile) HYDROData_Channel::GetProfile() const
137 {
138   return Handle(HYDROData_Profile)::DownCast( 
139            GetReferenceObject( DataTag_Profile ) );
140 }
141
142 void HYDROData_Channel::RemoveProfile()
143 {
144   Handle(HYDROData_Profile) aPrevProfile = GetProfile();
145   if ( aPrevProfile.IsNull() )
146     return;
147
148   ClearReferenceObjects( DataTag_Profile );
149
150   // Indicate model of the need to update the chanel presentation
151   SetToUpdate( true );
152 }