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_PolylineXY.h>
21 #include <HYDROData_Channel.h>
22 #include <HYDROData_Document.h>
23 #include <HYDROData_PolylineXY.h>
24 #include <HYDROData_Polyline3D.h>
25 #include <HYDROData_PolylineOperator.h>
26 #include <HYDROData_Profile.h>
27 #include <HYDROData_Iterator.h>
28 #include <HYDROData_ImmersibleZone.h>
29 #include <HYDROData_Tool.h>
30 #include <HYDROGUI_Shape.h>
31 #include <HYDROGUI_Polyline.h>
33 #include <AIS_DisplayMode.hxx>
34 #include <AIS_PointCloud.hxx>
35 #include <Prs3d_LineAspect.hxx>
36 #include <Prs3d_PointAspect.hxx>
37 #include <TColgp_HArray1OfPnt.hxx>
43 #include <TestShape.h>
44 #include <TestViewer.h>
45 #include <TopoDS_Edge.hxx>
46 #include <TopoDS_Vertex.hxx>
47 #include <TopoDS_Wire.hxx>
49 #include <HYDROData_Tool.h>
51 extern QString REF_DATA_PATH;
53 void test_HYDROData_PolylineXY::test_polyline()
55 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
57 Handle(HYDROData_PolylineXY) aPolyline =
58 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
60 aPolyline->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
61 aPolyline->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_SPLINE, true );
63 int aNbSections = aPolyline->NbSections();
64 CPPUNIT_ASSERT( aNbSections == 2 );
66 NCollection_Sequence<TCollection_AsciiString> aSectNames;
67 NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
68 NCollection_Sequence<bool> aSectClosures;
69 aPolyline->GetSections( aSectNames, aSectTypes, aSectClosures );
71 CPPUNIT_ASSERT_EQUAL( 2, aSectNames.Size() );
72 CPPUNIT_ASSERT( aSectNames.Value( 1 ) == "Section_1" );
73 CPPUNIT_ASSERT( aSectTypes.Value( 1 ) == HYDROData_PolylineXY::SECTION_POLYLINE );
74 CPPUNIT_ASSERT( aSectClosures.Value( 1 ) == false );
76 CPPUNIT_ASSERT( aSectNames.Value( 2 ) == "Section_2" );
77 CPPUNIT_ASSERT( aSectTypes.Value( 2 ) == HYDROData_PolylineXY::SECTION_SPLINE );
78 CPPUNIT_ASSERT( aSectClosures.Value( 2 ) == true );
83 void test_HYDROData_PolylineXY::test_copy()
85 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
86 Handle(HYDROData_PolylineXY) aPolyline1 =
87 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
90 // aPolyline1->setPoints(aPoints);
92 Handle(HYDROData_PolylineXY) aPolyline2 =
93 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
95 aPolyline1->CopyTo(aPolyline2, true);
101 void test_HYDROData_PolylineXY::test_split_refs_624()
103 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
105 Handle(HYDROData_PolylineXY) aPolyline =
106 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
107 aPolyline->SetName( "test" );
109 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
110 TopoDS_Wire aWire = Wire2d( aCoords, true );
111 aPolyline->SetShape( aWire );
113 gp_Pnt2d aPnt( 20, 20 );
115 TestViewer::show( aPolyline->GetShape(), 0, true, "LandCoverMap_Split_Polyline" );
116 //TestViewer::show( BRepBuilderAPI_MakeVertex( aPnt ).Vertex(), 1, true, Qt::green );
117 CPPUNIT_ASSERT_IMAGES
119 HYDROData_PolylineOperator anOp;
120 CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
122 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
123 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
124 CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt.Current()->GetName() );
126 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
127 CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt.Current()->GetName() );
129 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
134 void test_HYDROData_PolylineXY::test_extraction_immersible_zone()
136 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
138 Handle(HYDROData_PolylineXY) aPolyline =
139 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
140 aPolyline->SetName( "test" );
142 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
143 TopoDS_Wire aWire = Wire2d( aCoords, true );
144 aPolyline->SetShape( aWire );
146 Handle(HYDROData_ImmersibleZone) aZone =
147 Handle(HYDROData_ImmersibleZone)::DownCast( aDoc->CreateObject( KIND_IMMERSIBLE_ZONE ) );
148 aZone->SetName( "zone" );
149 aZone->SetPolyline( aPolyline );
152 CPPUNIT_ASSERT_EQUAL( false, (bool)aZone->GetTopShape().IsNull() );
154 HYDROData_PolylineOperator anOp;
155 CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aZone ) );
157 Handle(HYDROData_PolylineXY) anOuter =
158 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "zone_Outer_1", KIND_POLYLINEXY ) );
159 CPPUNIT_ASSERT_EQUAL( false, (bool)anOuter.IsNull() );
161 TestViewer::show( aZone->GetTopShape(), 1, true, "Extraction_ImmZone" );
162 TestViewer::show( anOuter->GetShape(), 0, true, Qt::red );
163 CPPUNIT_ASSERT_IMAGES
168 void test_HYDROData_PolylineXY::test_extraction_channel_refs_611()
170 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
172 Handle(HYDROData_PolylineXY) aPolyline2d =
173 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
174 aPolyline2d->SetName( "polyline2d_1" );
175 aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
177 Handle(HYDROData_Polyline3D) aPolyline3d =
178 Handle(HYDROData_Polyline3D)::DownCast( aDoc->CreateObject( KIND_POLYLINE ) );
179 aPolyline3d->SetName( "polyline3d_1" );
180 aPolyline3d->SetPolylineXY( aPolyline2d );
182 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
183 TopoDS_Wire aWire = Wire2d( aCoords, false );
184 aPolyline2d->SetShape( aWire );
185 aPolyline3d->SetTopShape( aWire );
186 aPolyline3d->SetShape3D( aWire );
188 Handle(HYDROData_Profile) aProfile =
189 Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
190 aProfile->SetName( "profile_1" );
192 QList<double> aCoordsPr = QList<double>() << 0.0 << 0.1 << 0.0 << 0.0 << 1.0 << 0.0;
193 TopoDS_Wire aWirePr = Wire3d( aCoordsPr, false );
194 aProfile->SetTopShape( aWirePr );
195 aProfile->SetShape3D( aWirePr );
198 Handle(HYDROData_Channel) aChannel =
199 Handle(HYDROData_Channel)::DownCast( aDoc->CreateObject( KIND_CHANNEL ) );
200 aChannel->SetName( "channel_1" );
202 aChannel->SetGuideLine( aPolyline3d );
203 aChannel->SetProfile( aProfile );
205 CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetTopShape().IsNull() );
206 CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetShape3D().IsNull() );
208 HYDROData_PolylineOperator anOp;
209 CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aChannel ) );
211 Handle(HYDROData_PolylineXY) aLeft =
212 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Left_Bank_1", KIND_POLYLINEXY ) );
213 Handle(HYDROData_PolylineXY) aRight =
214 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Right_Bank_1", KIND_POLYLINEXY ) );
215 CPPUNIT_ASSERT_EQUAL( false, (bool)aRight.IsNull() );
217 TestViewer::show( aChannel->GetTopShape(), 1, true, "Extraction_Channel" );
218 TestViewer::show( aLeft->GetShape(), 0, true, Qt::red );
219 TestViewer::show( aRight->GetShape(), 0, true, Qt::red );
220 CPPUNIT_ASSERT_IMAGES
225 void test_HYDROData_PolylineXY::test_presentation()
227 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
229 Handle(HYDROData_PolylineXY) aPolyline2d =
230 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
231 aPolyline2d->SetName( "polyline2d_1" );
232 aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
234 QList<gp_XY> aPoints = QList<gp_XY>() << gp_XY( 0, 0 )
244 Handle(TColgp_HArray1OfPnt) aPnts = new TColgp_HArray1OfPnt( 1, aPoints.size() );
246 foreach( gp_XY aPoint, aPoints )
248 aPolyline2d->AddPoint( 0, aPoint );
249 aPnts->SetValue( i, gp_Pnt( aPoint.X(), aPoint.Y(), 0 ) );
252 aPolyline2d->Update();
254 CPPUNIT_ASSERT_EQUAL( false, (bool)aPolyline2d->GetShape().IsNull() );
256 Handle(AIS_PointCloud) aPointsPrs = new AIS_PointCloud();
257 aPointsPrs->SetPoints( aPnts );
258 aPointsPrs->SetColor( Quantity_NOC_BLUE1 );
259 aPointsPrs->Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_O );
261 aPolyline2d->SetWireColor( Qt::darkGreen );
262 HYDROGUI_Shape* aNewPolylinePrs = new HYDROGUI_Shape( TestViewer::context(), aPolyline2d );
263 aNewPolylinePrs->update( true, true );
266 // Check default type
267 Handle(HYDROGUI_Arrow) arr = Handle(HYDROGUI_Arrow)::DownCast( aNewPolylinePrs->getAISObjects()[1] );
268 CPPUNIT_ASSERT_EQUAL( HYDROGUI_Arrow::Cone, arr->GetType() );
269 CPPUNIT_ASSERT_EQUAL( 35, arr->GetSize() );
272 // Check polyline presentation with default (cone) arrow
273 TestViewer::eraseAll(true);
274 TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation" );
275 TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
276 //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
277 aNewPolylinePrs->setBorderColor( Qt::blue );
278 aNewPolylinePrs->display();
279 TestViewer::fitAll();
280 CPPUNIT_ASSERT_IMAGES
283 // Check polyline presentation with triangle arrow
284 arr->SetType( HYDROGUI_Arrow::Triangle );
285 TestViewer::eraseAll(true);
286 TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation_triangle" );
287 TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
288 //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
289 TestViewer::context()->RecomputePrsOnly( arr, true );
290 aNewPolylinePrs->display();
291 TestViewer::fitAll();
292 CPPUNIT_ASSERT_IMAGES
294 //QTest::qWait( 50000 );
298 void test_HYDROData_PolylineXY::test_split_refs_627()
300 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
302 Handle(HYDROData_PolylineXY) aPolyline =
303 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
304 aPolyline->SetName( "test" );
307 //QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
308 aPolyline->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
309 aPolyline->AddPoint( 0, gp_XY( 10, 10 ) );
310 aPolyline->AddPoint( 0, gp_XY( 20, 10 ) );
311 aPolyline->AddPoint( 0, gp_XY( 20, 20 ) );
312 aPolyline->AddPoint( 0, gp_XY( 10, 20 ) );
316 //TopoDS_Wire aWire = Wire2d( aCoords, false );
317 //aPolyline->SetShape( aWire );
318 TopoDS_Shape aW = aPolyline->GetShape();
319 CPPUNIT_ASSERT (aW.ShapeType() == TopAbs_WIRE);
321 aPolyline->SetWireColor( Qt::red );
323 gp_Pnt2d aPnt( 20, 20 );
325 HYDROData_PolylineOperator anOp;
326 CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
328 TestViewer::show( TopoDS_Shape(), 0, true, "Split_Polylines_Colors" );
329 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
330 for( ; anIt.More(); anIt.Next() )
332 Handle(HYDROData_PolylineXY) anObj = Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
333 if( aPolyline->Label() != anObj->Label() )
336 anObj->GetSectionColor(0, color);
337 TestViewer::show( anObj->GetShape(), 0, true, color );
340 CPPUNIT_ASSERT_IMAGES
342 HYDROData_Iterator anIt2( aDoc, KIND_POLYLINEXY );
343 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
344 CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt2.Current()->GetName() );
346 QColor color1, color2, color3;
347 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color1);
349 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color1);
351 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
352 CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt2.Current()->GetName() );
354 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color2);
355 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color2 );
358 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
359 CPPUNIT_ASSERT_EQUAL( QString( "test_2" ), anIt2.Current()->GetName() );
360 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color3);
361 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color3 );
363 CPPUNIT_ASSERT_EQUAL( false, anIt2.More() );
369 void test_HYDROData_PolylineXY::test_custom_polylines()
371 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
373 Handle(HYDROData_PolylineXY) aPolyline1 =
374 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
375 Handle(HYDROData_PolylineXY) aPolyline2 =
376 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
377 Handle(HYDROData_PolylineXY) aPolyline3 =
378 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
380 aPolyline1->SetName( "test1" );
381 aPolyline2->SetName( "test2" );
382 aPolyline3->SetName( "test3" );
384 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
385 aPolyline1->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
386 aPolyline1->Update();
387 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
388 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
389 aPolyline1->Update();
390 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
392 CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
393 aPolyline2->SetShape( Wire2d( QList<double>() << 0 << 0 << 10 << 10 << 20 << 0 ) );
394 CPPUNIT_ASSERT_EQUAL( true, aPolyline2->IsCustom() );
395 HYDROData_PolylineXY::PointsList aPointsList = aPolyline2->GetPoints( 0 );
397 CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
398 CPPUNIT_ASSERT_EQUAL( 5, aPointsList.Size() );
399 CPPUNIT_ASSERT_EQUAL( gp_XY( 0, 0 ), aPointsList.Value( 1 ) );
400 CPPUNIT_ASSERT_EQUAL( gp_XY( 5, 7.5 ), aPointsList.Value( 2 ) );
401 CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 10 ), aPointsList.Value( 3 ) );
402 CPPUNIT_ASSERT_EQUAL( gp_XY( 15, 7.5 ), aPointsList.Value( 4 ) );
403 CPPUNIT_ASSERT_EQUAL( gp_XY( 20, 0 ), aPointsList.Value( 5 ) );
406 CPPUNIT_ASSERT_EQUAL( false, aPolyline3->IsCustom() );
407 aPolyline3->SetShape( WireCirc( gp_Pnt(), 10.0 ) );
408 CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsCustom() );
409 aPointsList = aPolyline3->GetPoints( 0 );
411 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_SPLINE, aPolyline3->GetSectionType( 0 ) );
412 CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsClosedSection( 0 ) );
413 CPPUNIT_ASSERT_EQUAL( 7, aPointsList.Size() );
414 CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 0 ), aPointsList.Value( 1 ) );
415 CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, 7.81831 ), aPointsList.Value( 2 ) );
416 CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, 9.749 ), aPointsList.Value( 3 ) );
417 CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, 4.339 ), aPointsList.Value( 4 ) );
418 CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, -4.339 ), aPointsList.Value( 5 ) );
419 CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, -9.749 ), aPointsList.Value( 6 ) );
420 CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, -7.81831 ), aPointsList.Value( 7 ) );
425 void test_HYDROData_PolylineXY::test_merge_refs_630()
427 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
429 Handle(HYDROData_PolylineXY) aPolyline1 =
430 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
431 Handle(HYDROData_PolylineXY) aPolyline2 =
432 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
434 aPolyline1->SetName( "test1" );
435 aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
436 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
437 aPolyline1->AddPoint( 0, gp_XY( 10, 0 ) );
438 aPolyline1->AddPoint( 0, gp_XY( 10, 10 ) );
439 aPolyline1->Update();
441 aPolyline2->SetName( "test2" );
442 aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
443 aPolyline2->AddPoint( 0, gp_XY( 20, 20 ) );
444 aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
445 aPolyline2->AddPoint( 0, gp_XY( 30, 0 ) );
446 aPolyline2->Update();
448 HYDROData_PolylineOperator anOp;
449 HYDROData_SequenceOfObjects aPolylines;
450 aPolylines.Append( aPolyline1 );
451 aPolylines.Append( aPolyline2 );
452 CPPUNIT_ASSERT_EQUAL( true, anOp.Merge( aDoc, "", aPolylines, true, 1E-3 ) );
453 //TODO: check false in merge
455 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
456 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
457 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
459 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
460 CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
462 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
463 CPPUNIT_ASSERT_EQUAL( QString( "merged_1" ), anIt.Current()->GetName() );
464 Handle(HYDROData_PolylineXY) aMerged =
465 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
467 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
469 TestViewer::show( aMerged->GetShape(), 0, true, "Merge_Polylines" );
470 CPPUNIT_ASSERT_IMAGES
475 void test_HYDROData_PolylineXY::test_split_straight_refs_634()
477 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
479 Handle(HYDROData_PolylineXY) aPolyline1 =
480 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
481 Handle(HYDROData_PolylineXY) aPolyline2 =
482 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
484 aPolyline1->SetName( "test1" );
485 aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
486 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
487 aPolyline1->AddPoint( 0, gp_XY( 10, 20 ) );
488 aPolyline1->AddPoint( 0, gp_XY( 30, 10 ) );
489 aPolyline1->Update();
491 aPolyline2->SetName( "test2" );
492 aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
493 aPolyline2->AddPoint( 0, gp_XY( 0, 30 ) );
494 aPolyline2->AddPoint( 0, gp_XY( 10, 10 ) );
495 aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
496 aPolyline2->Update();
498 HYDROData_PolylineOperator anOp;
499 HYDROData_SequenceOfObjects aPolylines;
500 aPolylines.Append( aPolyline1 );
501 aPolylines.Append( aPolyline2 );
503 CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline1, aPolyline2, 1E-3, isIntersected ) );
504 CPPUNIT_ASSERT_EQUAL( true, isIntersected );
506 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
507 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
508 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
510 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
511 CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
514 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
515 CPPUNIT_ASSERT_EQUAL( QString( "test1_1" ), anIt.Current()->GetName() );
516 Handle(HYDROData_PolylineXY) aPart1 =
517 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
518 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart1->GetSectionType( 0 ) );
521 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
522 CPPUNIT_ASSERT_EQUAL( QString( "test1_2" ), anIt.Current()->GetName() );
523 Handle(HYDROData_PolylineXY) aPart2 =
524 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
525 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart2->GetSectionType( 0 ) );
528 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
529 CPPUNIT_ASSERT_EQUAL( QString( "test1_3" ), anIt.Current()->GetName() );
530 Handle(HYDROData_PolylineXY) aPart3 =
531 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
532 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart3->GetSectionType( 0 ) );
535 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
537 TestViewer::show( aPart1->GetShape(), 0, true, "Split_Straight" );
538 TestViewer::show( aPart2->GetShape(), 0, true, Qt::red );
539 TestViewer::show( aPart3->GetShape(), 0, true, Qt::green );
540 TestViewer::show( aPolyline2->GetShape(), 0, true, Qt::darkGreen );
541 CPPUNIT_ASSERT_IMAGES
546 void test_HYDROData_PolylineXY::test_import_from_xyz()
548 NCollection_Sequence<Handle(HYDROData_Entity)> ents;
549 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
550 TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
551 fname += "/profiles1.xyz";
553 NCollection_Sequence<Handle(HYDROData_Entity)> importedEntities;
554 bool stat = HYDROData_Tool::importPolylineFromXYZ(QString(fname.ToCString()), aDoc, true, importedEntities);
555 CPPUNIT_ASSERT (stat);
556 Handle(HYDROData_PolylineXY) aPolyXY = Handle(HYDROData_PolylineXY)::DownCast(importedEntities.First());
557 CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 1);
558 CPPUNIT_ASSERT (!aPolyXY.IsNull());
559 TestViewer::show( aPolyXY->GetShape(), 0, true, "Polyline_import_XY" );
560 CPPUNIT_ASSERT_IMAGES
561 importedEntities.Clear();
563 stat = HYDROData_Tool::importPolylineFromXYZ(QString(fname.ToCString()), aDoc, false, importedEntities);
564 CPPUNIT_ASSERT (stat);
565 CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 2);
566 Handle(HYDROData_Polyline3D) aPoly3D;
567 aPolyXY = Handle(HYDROData_PolylineXY)::DownCast(importedEntities.First());
568 aPoly3D = Handle(HYDROData_Polyline3D)::DownCast(importedEntities.Last());
569 CPPUNIT_ASSERT (!aPolyXY.IsNull());
570 CPPUNIT_ASSERT (!aPoly3D.IsNull());
571 TestViewer::show( aPolyXY->GetShape(), 0, false, "Polyline_import_XYZ" );
572 TestViewer::show( aPoly3D->GetShape3D(), 0, false, "Polyline_import_XYZ_3D" );
573 CPPUNIT_ASSERT_IMAGES