1 // Copyright (C) 2014-2015 EDF-R&D
2 // This library is free software; you can redistribute it and/or
3 // modify it under the terms of the GNU Lesser General Public
4 // License as published by the Free Software Foundation; either
5 // version 2.1 of the License, or (at your option) any later version.
7 // This library is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 // Lesser General Public License for more details.
12 // You should have received a copy of the GNU Lesser General Public
13 // License along with this library; if not, write to the Free Software
14 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #include <test_HYDROData_Stream.h>
20 #include <HYDROGUI_StreamDlg.h>
21 #include <HYDROData_Document.h>
22 #include <HYDROData_DTM.h>
23 #include <HYDROData_Stream.h>
24 #include <HYDROData_IPolyline.h>
25 #include <HYDROData_Profile.h>
26 #include <HYDROData_PolylineXY.h>
27 #include <HYDROData_Iterator.h>
28 #include <AIS_InteractiveContext.hxx>
29 #include <TestViewer.h>
30 #include <QApplication>
33 extern QString REF_DATA_PATH;
34 NCollection_Sequence<HYDROData_IPolyline::Point> points2;
35 const double EPS = 1E-3;
37 void test_HYDROData_Stream::setUp()
40 points2.Append( gp_XY( 0.0, 5.0 ) );
41 points2.Append( gp_XY( 1.0, 1.0 ) );
42 points2.Append( gp_XY( 1.5, 0.0 ) );
43 points2.Append( gp_XY( 4.0, 4.0 ) );
46 void test_HYDROData_Stream::tearDown()
50 void test_HYDROData_Stream::test_dialog()
52 HYDROGUI_StreamDlg* aDlg = new HYDROGUI_StreamDlg( 0, "stream" );
54 qApp->processEvents();
56 QImage aStreamDlgImage = QPixmap::grabWidget( aDlg ).toImage();
57 CPPUNIT_ASSERT_IMAGES2( &aStreamDlgImage, "StreamDlg" );
59 aDlg->setDDZ( 12.34 );
60 CPPUNIT_ASSERT_DOUBLES_EQUAL( 12.34, aDlg->getDDZ(), EPS );
62 aDlg->setSpatialStep( 56.78 );
63 CPPUNIT_ASSERT_DOUBLES_EQUAL( 56.78, aDlg->getSpatialStep(), EPS );
68 void test_HYDROData_Stream::test_alt_object()
70 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
72 Handle(HYDROData_Stream) aStream =
73 Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
75 CPPUNIT_ASSERT_EQUAL( false, (bool)aStream.IsNull() );
76 CPPUNIT_ASSERT_EQUAL( true, (bool)aStream->GetAltitudeObject().IsNull() );
77 CPPUNIT_ASSERT_EQUAL( false, (bool)aStream->DTM().IsNull() );
78 CPPUNIT_ASSERT_EQUAL( false, (bool)aStream->GetAltitudeObject().IsNull() );
79 CPPUNIT_ASSERT_EQUAL( KIND_DTM, aStream->getAltitudeObjectType() );
81 Handle(HYDROData_DTM) aDTM =
82 Handle(HYDROData_DTM)::DownCast( aStream->GetAltitudeObject() );
83 CPPUNIT_ASSERT_EQUAL( false, (bool)aDTM.IsNull() );
88 void test_HYDROData_Stream::test_params_sync()
90 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
92 Handle(HYDROData_Stream) aStream =
93 Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
94 Handle(HYDROData_DTM) aDTM =
95 Handle(HYDROData_DTM)::DownCast( aStream->DTM() );
96 CPPUNIT_ASSERT_EQUAL( false, (bool)aDTM.IsNull() );
98 Handle(HYDROData_Profile) aProfile1 =
99 Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
101 Handle(HYDROData_Profile) aProfile2 =
102 Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
104 aProfile1->SetParametricPoints( points2 );
105 aProfile1->GetProfileUZ()->SetSectionType( 0, HYDROData_IPolyline::SECTION_POLYLINE );
106 aProfile1->SetLeftPoint( gp_XY( 10, 10 ) );
107 aProfile1->SetRightPoint( gp_XY( 20, 0 ) );
109 aProfile2->SetParametricPoints( points2 );
110 aProfile2->GetProfileUZ()->SetSectionType( 0, HYDROData_IPolyline::SECTION_POLYLINE );
111 aProfile2->SetLeftPoint( gp_XY( 50, 0 ) );
112 aProfile2->SetRightPoint( gp_XY( 60, 10 ) );
114 HYDROData_SequenceOfObjects profiles;
115 profiles.Append( aProfile1 );
116 profiles.Append( aProfile2 );
118 aStream->SetProfiles( profiles, false );
119 aStream->SetDDZ( 3.14 );
120 aStream->SetSpatialStep( 4.14 );
122 CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.14, aStream->GetDDZ(), EPS );
123 CPPUNIT_ASSERT_DOUBLES_EQUAL( 3.14, aDTM->GetDDZ(), EPS );
124 CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.14, aStream->GetSpatialStep(), EPS );
125 CPPUNIT_ASSERT_DOUBLES_EQUAL( 4.14, aDTM->GetSpatialStep(), EPS );
127 HYDROData_SequenceOfObjects profiles1 = aStream->GetProfiles();
128 CPPUNIT_ASSERT_EQUAL( 2, profiles1.Size() );
129 CPPUNIT_ASSERT( profiles.Value(1)->Label() == profiles1.Value(1)->Label() );
130 CPPUNIT_ASSERT( profiles.Value(2)->Label() == profiles1.Value(2)->Label() );
132 HYDROData_SequenceOfObjects profiles2 = aDTM->GetProfiles();
133 CPPUNIT_ASSERT_EQUAL( 2, profiles2.Size() );
134 CPPUNIT_ASSERT( profiles.Value(1)->Label() == profiles2.Value(1)->Label() );
135 CPPUNIT_ASSERT( profiles.Value(2)->Label() == profiles2.Value(2)->Label() );
140 void test_HYDROData_Stream::test_dump()
142 // Case 1. Without hydraulic axis
143 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
145 Handle(HYDROData_Stream) aStream1 =
146 Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
147 aStream1->SetName( "stream_1" );
149 Handle(HYDROData_Profile) aProfile1 =
150 Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
151 aProfile1->SetName( "p1" );
153 Handle(HYDROData_Profile) aProfile2 =
154 Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
155 aProfile2->SetName( "p2" );
157 aProfile1->SetParametricPoints( points2 );
158 aProfile1->GetProfileUZ()->SetSectionType( 0, HYDROData_IPolyline::SECTION_POLYLINE );
159 aProfile1->SetLeftPoint( gp_XY( 10, 10 ) );
160 aProfile1->SetRightPoint( gp_XY( 20, 0 ) );
162 aProfile2->SetParametricPoints( points2 );
163 aProfile2->GetProfileUZ()->SetSectionType( 0, HYDROData_IPolyline::SECTION_POLYLINE );
164 aProfile2->SetLeftPoint( gp_XY( 50, 0 ) );
165 aProfile2->SetRightPoint( gp_XY( 60, 10 ) );
167 HYDROData_SequenceOfObjects profiles;
168 profiles.Append( aProfile1 );
169 profiles.Append( aProfile2 );
171 aStream1->SetProfiles( profiles, false );
172 aStream1->SetDDZ( 0.2 );
173 aStream1->SetSpatialStep( 3.0 );
175 MapOfTreatedObjects objs;
176 objs["p1"] = aProfile1;
177 objs["p2"] = aProfile2;
179 QStringList aScript1 = aStream1->DumpToPython( "", objs );
180 CPPUNIT_ASSERT_EQUAL( 10, aScript1.size() );
181 CPPUNIT_ASSERT_EQUAL( std::string( "stream_1 = hydro_doc.CreateObject( KIND_STREAM )" ), aScript1[0].toStdString() );
182 CPPUNIT_ASSERT_EQUAL( std::string( "stream_1.SetName( \"stream_1\" )" ), aScript1[1].toStdString() );
183 CPPUNIT_ASSERT_EQUAL( std::string( "" ), aScript1[2].toStdString() );
184 CPPUNIT_ASSERT_EQUAL( std::string( "stream_1.AddProfile( p1 )" ), aScript1[3].toStdString() );
185 CPPUNIT_ASSERT_EQUAL( std::string( "stream_1.AddProfile( p2 )" ), aScript1[4].toStdString() );
186 CPPUNIT_ASSERT_EQUAL( std::string( "stream_1.SetDDZ( 0.200 )" ), aScript1[5].toStdString() );
187 CPPUNIT_ASSERT_EQUAL( std::string( "stream_1.SetSpatialStep( 3.000 )" ), aScript1[6].toStdString() );
188 CPPUNIT_ASSERT_EQUAL( std::string( "" ), aScript1[7].toStdString() );
189 CPPUNIT_ASSERT_EQUAL( std::string( "stream_1.Update()" ), aScript1[8].toStdString() );
190 CPPUNIT_ASSERT_EQUAL( std::string( "" ), aScript1[9].toStdString() );
192 // Case 2. With hydraulic axis
194 Handle(HYDROData_Stream) aStream2 =
195 Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
196 aStream2->SetName( "stream_2" );
198 Handle(HYDROData_PolylineXY) anHAxis =
199 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
200 anHAxis->SetName( "axis" );
202 aStream2->SetProfiles( profiles, false );
203 aStream2->SetDDZ( 0.2 );
204 aStream2->SetSpatialStep( 3.0 );
205 aStream2->SetReferenceObject( anHAxis, HYDROData_Stream::DataTag_HydraulicAxis );
208 objs["p1"] = aProfile1;
209 objs["p2"] = aProfile2;
210 objs["axis"] = anHAxis;
212 QStringList aScript2 = aStream2->DumpToPython( "", objs );
213 CPPUNIT_ASSERT_EQUAL( 11, aScript2.size() );
214 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2 = hydro_doc.CreateObject( KIND_STREAM )" ), aScript2[0].toStdString() );
215 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetName( \"stream_2\" )" ), aScript2[1].toStdString() );
216 CPPUNIT_ASSERT_EQUAL( std::string( "" ), aScript2[2].toStdString() );
217 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetHydraulicAxis( axis )" ), aScript2[3].toStdString() );
218 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.AddProfile( p1 )" ), aScript2[4].toStdString() );
219 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.AddProfile( p2 )" ), aScript2[5].toStdString() );
220 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetDDZ( 0.200 )" ), aScript2[6].toStdString() );
221 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.SetSpatialStep( 3.000 )" ), aScript2[7].toStdString() );
222 CPPUNIT_ASSERT_EQUAL( std::string( "" ), aScript2[8].toStdString() );
223 CPPUNIT_ASSERT_EQUAL( std::string( "stream_2.Update()" ), aScript2[9].toStdString() );
224 CPPUNIT_ASSERT_EQUAL( std::string( "" ), aScript2[10].toStdString() );
229 void test_HYDROData_Stream::test_presentation()
231 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
233 TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
234 fname += "/Profiles.xyz";
235 NCollection_Sequence<int> bad_ids;
237 int aSize = HYDROData_Profile::ImportFromFile( aDoc, fname, bad_ids, true );
239 CPPUNIT_ASSERT_EQUAL( 0, bad_ids.Size() );
240 CPPUNIT_ASSERT_EQUAL( 46, aSize );
242 HYDROData_SequenceOfObjects profiles;
243 HYDROData_Iterator it( aDoc, KIND_PROFILE );
244 for( int i=0; it.More(); it.Next(), i++ )
248 it.Current()->Update();
249 profiles.Append( Handle(HYDROData_Profile)::DownCast( it.Current() ) );
253 Handle(HYDROData_Stream) aStream =
254 Handle(HYDROData_Stream)::DownCast( aDoc->CreateObject( KIND_STREAM ) );
256 aStream->SetProfiles( profiles, false );
257 aStream->SetDDZ( 0.2 );
258 aStream->SetSpatialStep( 10 );
261 TopoDS_Shape aPrs3d = aStream->GetShape3D();
262 TopoDS_Shape aPrs2d = aStream->GetTopShape();
264 TestViewer::show( aPrs2d, 0, true, "stream_dtm_2d" );
265 CPPUNIT_ASSERT_IMAGES;
267 TestViewer::eraseAll( true );
268 TestViewer::show( aPrs3d, 0, true, "stream_dtm_3d" );
269 CPPUNIT_ASSERT_IMAGES