2 #include "HYDROData_Channel.h"
4 #include "HYDROData_Document.h"
5 #include "HYDROData_Polyline3D.h"
6 #include "HYDROData_Profile.h"
9 #include <TopoDS_Wire.hxx>
11 #include <QStringList>
13 #define PYTHON_CHANNEL_ID "KIND_CHANNEL"
15 IMPLEMENT_STANDARD_HANDLE(HYDROData_Channel,HYDROData_ArtificialObject)
16 IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Channel,HYDROData_ArtificialObject)
19 HYDROData_Channel::HYDROData_Channel()
20 : HYDROData_ArtificialObject()
24 HYDROData_Channel::~HYDROData_Channel()
28 QStringList HYDROData_Channel::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const
32 Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab );
33 if ( aDocument.IsNull() )
36 QString aDocName = aDocument->GetDocPyName();
37 QString aChannelName = GetName();
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( "" );
50 HYDROData_SequenceOfObjects HYDROData_Channel::GetAllReferenceObjects() const
52 HYDROData_SequenceOfObjects aResSeq = HYDROData_ArtificialObject::GetAllReferenceObjects();
54 Handle(HYDROData_Polyline3D) aGuideLine = GetGuideLine();
55 if ( !aGuideLine.IsNull() )
56 aResSeq.Append( aGuideLine );
58 Handle(HYDROData_Profile) aProfile = GetProfile();
59 if ( !aProfile.IsNull() )
60 aResSeq.Append( aProfile );
65 TopoDS_Shape HYDROData_Channel::GetTopShape() const
70 TopoDS_Shape HYDROData_Channel::GetShape3D() const
75 void HYDROData_Channel::Update()
77 HYDROData_ArtificialObject::Update();
79 Handle(HYDROData_Polyline3D) aGuideLine = GetGuideLine();
80 Handle(HYDROData_Profile) aProfile = GetProfile();
81 if ( aGuideLine.IsNull() || aProfile.IsNull() )
87 bool HYDROData_Channel::SetGuideLine( const Handle(HYDROData_Polyline3D)& theGuideLine )
89 Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine();
91 if ( theGuideLine.IsNull() )
94 return !aPrevGuideLine.IsNull();
97 if ( IsEqual( aPrevGuideLine, theGuideLine ) )
100 TopoDS_Wire aHydraulicWire = TopoDS::Wire( theGuideLine->GetTopShape() );
101 if ( aHydraulicWire.IsNull() )
102 return false; // The polyline must be a single wire
104 SetReferenceObject( theGuideLine, DataTag_GuideLine );
106 // Indicate model of the need to update the chanel presentation
112 Handle(HYDROData_Polyline3D) HYDROData_Channel::GetGuideLine() const
114 return Handle(HYDROData_Polyline3D)::DownCast(
115 GetReferenceObject( DataTag_GuideLine ) );
118 void HYDROData_Channel::RemoveGuideLine()
120 Handle(HYDROData_Polyline3D) aPrevGuideLine = GetGuideLine();
121 if ( aPrevGuideLine.IsNull() )
124 ClearReferenceObjects( DataTag_GuideLine );
126 // Indicate model of the need to update the chanel presentation
130 bool HYDROData_Channel::SetProfile( const Handle(HYDROData_Profile)& theProfile )
132 Handle(HYDROData_Profile) aPrevProfile = GetProfile();
134 if ( theProfile.IsNull() )
137 return !aPrevProfile.IsNull();
140 if ( IsEqual( aPrevProfile, theProfile ) )
143 SetReferenceObject( theProfile, DataTag_Profile );
145 // Indicate model of the need to update the chanel presentation
151 Handle(HYDROData_Profile) HYDROData_Channel::GetProfile() const
153 return Handle(HYDROData_Profile)::DownCast(
154 GetReferenceObject( DataTag_Profile ) );
157 void HYDROData_Channel::RemoveProfile()
159 Handle(HYDROData_Profile) aPrevProfile = GetProfile();
160 if ( aPrevProfile.IsNull() )
163 ClearReferenceObjects( DataTag_Profile );
165 // Indicate model of the need to update the chanel presentation