]> SALOME platform Git repositories - modules/hydro.git/blob - src/HYDROData/HYDROData_LISM.cxx
Salome HOME
lot 11 (linear interpolation of stream) untested
[modules/hydro.git] / src / HYDROData / HYDROData_LISM.cxx
1
2 #include <HYDROData_LISM.h>
3 #include <HYDROData_Profile.h>
4 #include <HYDROData_StreamLinearInterpolation.h>
5 #include <TopoDS_Face.hxx>
6
7 #include <QSet>
8 #include <QString>
9
10 IMPLEMENT_STANDARD_RTTIEXT( HYDROData_LISM, HYDROData_Bathymetry )
11
12 HYDROData_LISM::HYDROData_LISM()
13 {
14 }
15
16 HYDROData_LISM::~HYDROData_LISM()
17 {
18 }
19
20 //
21 HYDROData_SequenceOfObjects HYDROData_LISM::GetProfiles() const
22 {
23   return GetReferenceObjects( DataTag_Profiles );
24 }
25
26 void HYDROData_LISM::SetProfiles( const HYDROData_SequenceOfObjects& theProfiles )
27 {
28   SetReferenceObjects( theProfiles, DataTag_Profiles );
29   Changed( Geom_3d );
30 }
31
32 //
33 bool HYDROData_LISM::SetLeftBank( const Handle(HYDROData_PolylineXY)& theBank )
34 {
35   if (theBank.IsNull())
36     return false;
37
38   if ( !HYDROData_Stream::IsValidAsAxis( theBank ) )
39     return false;
40
41   Handle(HYDROData_PolylineXY) aPrevBank = GetLeftBank();
42   if ( IsEqual( aPrevBank, theBank ) )
43     return true;
44
45   SetReferenceObject( theBank, DataTag_LeftBank );
46   Changed( Geom_3d );
47   return true;
48 }
49
50 Handle(HYDROData_PolylineXY) HYDROData_LISM::GetLeftBank() const
51 {
52   return Handle(HYDROData_PolylineXY)::DownCast(GetReferenceObject( DataTag_LeftBank ) );
53 }
54
55 bool HYDROData_LISM::SetRightBank( const Handle(HYDROData_PolylineXY)& theBank )
56 {
57   if (theBank.IsNull())
58     return false;
59
60   if ( !HYDROData_Stream::IsValidAsAxis( theBank ) )
61     return false;
62
63   Handle(HYDROData_PolylineXY) aPrevBank = GetRightBank();
64   if ( IsEqual( aPrevBank, theBank ) )
65     return true;
66
67   SetReferenceObject( theBank, DataTag_RightBank );
68   Changed( Geom_3d );
69   return true;
70 }
71
72 bool HYDROData_LISM::SetHydraulicAxis( const Handle(HYDROData_PolylineXY)& theAxis )
73 {
74   if ( !HYDROData_Stream::IsValidAsAxis( theAxis ) )
75     return false;
76
77   Handle(HYDROData_PolylineXY) aPrevAxis = GetHydraulicAxis();
78   if ( IsEqual( aPrevAxis, theAxis ) )
79     return true;
80
81   SetReferenceObject( theAxis, DataTag_HydraulicAxis );
82
83   Changed( Geom_3d );
84   return true;
85 }
86
87 Handle(HYDROData_PolylineXY) HYDROData_LISM::GetHydraulicAxis() const
88 {
89   return Handle(HYDROData_PolylineXY)::DownCast( GetReferenceObject( DataTag_HydraulicAxis ) );
90 }
91
92
93 Handle(HYDROData_PolylineXY) HYDROData_LISM::GetRightBank() const
94 {
95   return Handle(HYDROData_PolylineXY)::DownCast(GetReferenceObject( DataTag_RightBank ) );
96 }
97
98 int HYDROData_LISM::GetNbProfilePoints() const
99 {
100   return GetInteger( DataTag_NbProfilePoints );
101 }
102
103 void HYDROData_LISM::SetNbProfilePoints( int theNbProints )
104 {
105   SetInteger( DataTag_NbProfilePoints, theNbProints );
106   Changed( Geom_3d );
107 }
108
109 double HYDROData_LISM::GetHaxStep() const
110 {
111   return GetDouble( DataTag_HaxStep );
112 }
113
114 void HYDROData_LISM::SetHaxStep( double theHaxStep )
115 {
116   SetDouble( DataTag_HaxStep, theHaxStep );
117   Changed( Geom_3d );
118 }
119
120 void HYDROData_LISM::Update()
121 {
122   AltitudePoints anOutPoints;
123   HYDROData_SequenceOfObjects aRefProfiles = GetProfiles();  
124   int nbprofilepoints = GetNbProfilePoints();
125   double step = GetHaxStep();
126   Handle(HYDROData_PolylineXY) aHAX = GetHydraulicAxis();
127   Handle(HYDROData_PolylineXY) aLB = GetLeftBank();
128   Handle(HYDROData_PolylineXY) aRB = GetRightBank();
129
130   std::vector<std::string> warnings;
131   HYDROData_Stream::PrsDefinition prsDef;
132   HYDROData_StreamLinearInterpolation::Perform(aRefProfiles, nbprofilepoints, step, aHAX, aLB, aRB, anOutPoints, true, false, prsDef, &warnings);
133
134   SetAltitudePoints( anOutPoints );  
135  
136   SetShape( DataTag_LeftBankShape, prsDef.myLeftBank);
137   SetShape( DataTag_RightBankShape, prsDef.myRightBank);
138   SetShape( DataTag_InletShape, prsDef.myInlet);
139   SetShape( DataTag_OutletShape, prsDef.myOutlet );
140   SetShape( DataTag_3DShape, prsDef.myPrs3D );
141   SetShape( DataTag_2DShape, prsDef.myPrs2D );
142
143   HYDROData_Bathymetry::Update();
144 }
145
146
147 void HYDROData_LISM::GetShapePresentations( HYDROData_Stream::PrsDefinition& prsDef)
148 {
149   prsDef.myLeftBank = GetShape( DataTag_LeftBankShape);
150   prsDef.myRightBank = GetShape( DataTag_RightBankShape);
151   prsDef.myInlet = GetShape( DataTag_InletShape);
152   prsDef.myOutlet = GetShape( DataTag_OutletShape );
153   prsDef.myPrs3D = GetShape( DataTag_3DShape );
154   prsDef.myPrs2D  = GetShape( DataTag_2DShape );
155 }
156
157
158 /*void HYDROData_LISM::GetWarnings(NCollection_DataMap<Handle(HYDROData_Profile), QSet<QString>>& warnings)
159 {
160   warnings = myWarnings;
161 }
162    */