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>
50 void test_HYDROData_PolylineXY::test_polyline()
52 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
54 Handle(HYDROData_PolylineXY) aPolyline =
55 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
57 aPolyline->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
58 aPolyline->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_SPLINE, true );
60 int aNbSections = aPolyline->NbSections();
61 CPPUNIT_ASSERT( aNbSections == 2 );
63 NCollection_Sequence<TCollection_AsciiString> aSectNames;
64 NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
65 NCollection_Sequence<bool> aSectClosures;
66 aPolyline->GetSections( aSectNames, aSectTypes, aSectClosures );
68 CPPUNIT_ASSERT_EQUAL( 2, aSectNames.Size() );
69 CPPUNIT_ASSERT( aSectNames.Value( 1 ) == "Section_1" );
70 CPPUNIT_ASSERT( aSectTypes.Value( 1 ) == HYDROData_PolylineXY::SECTION_POLYLINE );
71 CPPUNIT_ASSERT( aSectClosures.Value( 1 ) == false );
73 CPPUNIT_ASSERT( aSectNames.Value( 2 ) == "Section_2" );
74 CPPUNIT_ASSERT( aSectTypes.Value( 2 ) == HYDROData_PolylineXY::SECTION_SPLINE );
75 CPPUNIT_ASSERT( aSectClosures.Value( 2 ) == true );
80 void test_HYDROData_PolylineXY::test_copy()
82 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
83 Handle(HYDROData_PolylineXY) aPolyline1 =
84 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
87 // aPolyline1->setPoints(aPoints);
89 Handle(HYDROData_PolylineXY) aPolyline2 =
90 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
92 aPolyline1->CopyTo(aPolyline2, true);
98 void test_HYDROData_PolylineXY::test_split_refs_624()
100 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
102 Handle(HYDROData_PolylineXY) aPolyline =
103 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
104 aPolyline->SetName( "test" );
106 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
107 TopoDS_Wire aWire = Wire2d( aCoords, true );
108 aPolyline->SetShape( aWire );
110 gp_Pnt2d aPnt( 20, 20 );
112 TestViewer::show( aPolyline->GetShape(), 0, true, "LandCoverMap_Split_Polyline" );
113 //TestViewer::show( BRepBuilderAPI_MakeVertex( aPnt ).Vertex(), 1, true, Qt::green );
114 CPPUNIT_ASSERT_IMAGES
116 HYDROData_PolylineOperator anOp;
117 CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
119 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
120 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
121 CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt.Current()->GetName() );
123 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
124 CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt.Current()->GetName() );
126 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
131 void test_HYDROData_PolylineXY::test_extraction_immersible_zone()
133 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
135 Handle(HYDROData_PolylineXY) aPolyline =
136 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
137 aPolyline->SetName( "test" );
139 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
140 TopoDS_Wire aWire = Wire2d( aCoords, true );
141 aPolyline->SetShape( aWire );
143 Handle(HYDROData_ImmersibleZone) aZone =
144 Handle(HYDROData_ImmersibleZone)::DownCast( aDoc->CreateObject( KIND_IMMERSIBLE_ZONE ) );
145 aZone->SetName( "zone" );
146 aZone->SetPolyline( aPolyline );
149 CPPUNIT_ASSERT_EQUAL( false, (bool)aZone->GetTopShape().IsNull() );
151 HYDROData_PolylineOperator anOp;
152 CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aZone ) );
154 Handle(HYDROData_PolylineXY) anOuter =
155 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "zone_Outer_1", KIND_POLYLINEXY ) );
156 CPPUNIT_ASSERT_EQUAL( false, (bool)anOuter.IsNull() );
158 TestViewer::show( aZone->GetTopShape(), 1, true, "Extraction_ImmZone" );
159 TestViewer::show( anOuter->GetShape(), 0, true, Qt::red );
160 CPPUNIT_ASSERT_IMAGES
165 void test_HYDROData_PolylineXY::test_extraction_channel_refs_611()
167 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
169 Handle(HYDROData_PolylineXY) aPolyline2d =
170 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
171 aPolyline2d->SetName( "polyline2d_1" );
172 aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
174 Handle(HYDROData_Polyline3D) aPolyline3d =
175 Handle(HYDROData_Polyline3D)::DownCast( aDoc->CreateObject( KIND_POLYLINE ) );
176 aPolyline3d->SetName( "polyline3d_1" );
177 aPolyline3d->SetPolylineXY( aPolyline2d );
179 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
180 TopoDS_Wire aWire = Wire2d( aCoords, false );
181 aPolyline2d->SetShape( aWire );
182 aPolyline3d->SetTopShape( aWire );
183 aPolyline3d->SetShape3D( aWire );
185 Handle(HYDROData_Profile) aProfile =
186 Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
187 aProfile->SetName( "profile_1" );
189 QList<double> aCoordsPr = QList<double>() << 0.0 << 0.1 << 0.0 << 0.0 << 1.0 << 0.0;
190 TopoDS_Wire aWirePr = Wire3d( aCoordsPr, false );
191 aProfile->SetTopShape( aWirePr );
192 aProfile->SetShape3D( aWirePr );
195 Handle(HYDROData_Channel) aChannel =
196 Handle(HYDROData_Channel)::DownCast( aDoc->CreateObject( KIND_CHANNEL ) );
197 aChannel->SetName( "channel_1" );
199 aChannel->SetGuideLine( aPolyline3d );
200 aChannel->SetProfile( aProfile );
202 CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetTopShape().IsNull() );
203 CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetShape3D().IsNull() );
205 HYDROData_PolylineOperator anOp;
206 CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aChannel ) );
208 Handle(HYDROData_PolylineXY) aLeft =
209 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Left_Bank_1", KIND_POLYLINEXY ) );
210 Handle(HYDROData_PolylineXY) aRight =
211 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Right_Bank_1", KIND_POLYLINEXY ) );
212 CPPUNIT_ASSERT_EQUAL( false, (bool)aRight.IsNull() );
214 TestViewer::show( aChannel->GetTopShape(), 1, true, "Extraction_Channel" );
215 TestViewer::show( aLeft->GetShape(), 0, true, Qt::red );
216 TestViewer::show( aRight->GetShape(), 0, true, Qt::red );
217 CPPUNIT_ASSERT_IMAGES
222 void test_HYDROData_PolylineXY::test_presentation()
224 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
226 Handle(HYDROData_PolylineXY) aPolyline2d =
227 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
228 aPolyline2d->SetName( "polyline2d_1" );
229 aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
231 QList<gp_XY> aPoints = QList<gp_XY>() << gp_XY( 0, 0 )
241 Handle(TColgp_HArray1OfPnt) aPnts = new TColgp_HArray1OfPnt( 1, aPoints.size() );
243 foreach( gp_XY aPoint, aPoints )
245 aPolyline2d->AddPoint( 0, aPoint );
246 aPnts->SetValue( i, gp_Pnt( aPoint.X(), aPoint.Y(), 0 ) );
249 aPolyline2d->Update();
251 CPPUNIT_ASSERT_EQUAL( false, (bool)aPolyline2d->GetShape().IsNull() );
253 Handle(AIS_PointCloud) aPointsPrs = new AIS_PointCloud();
254 aPointsPrs->SetPoints( aPnts );
255 aPointsPrs->SetColor( Quantity_NOC_BLUE1 );
256 aPointsPrs->Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_O );
258 aPolyline2d->SetWireColor( Qt::darkGreen );
259 HYDROGUI_Shape* aNewPolylinePrs = new HYDROGUI_Shape( TestViewer::context(), aPolyline2d );
260 aNewPolylinePrs->update( true, true );
263 // Check default type
264 Handle(HYDROGUI_Arrow) arr = Handle(HYDROGUI_Arrow)::DownCast( aNewPolylinePrs->getAISObjects()[1] );
265 CPPUNIT_ASSERT_EQUAL( HYDROGUI_Arrow::Cone, arr->GetType() );
266 CPPUNIT_ASSERT_EQUAL( 35, arr->GetSize() );
269 // Check polyline presentation with default (cone) arrow
270 TestViewer::eraseAll(true);
271 TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation" );
272 TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
273 //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
274 aNewPolylinePrs->setBorderColor( Qt::blue );
275 aNewPolylinePrs->display();
276 TestViewer::fitAll();
277 CPPUNIT_ASSERT_IMAGES
280 // Check polyline presentation with triangle arrow
281 arr->SetType( HYDROGUI_Arrow::Triangle );
282 TestViewer::eraseAll(true);
283 TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation_triangle" );
284 TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
285 //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
286 TestViewer::context()->RecomputePrsOnly( arr );
287 aNewPolylinePrs->display();
288 TestViewer::fitAll();
289 CPPUNIT_ASSERT_IMAGES
291 //QTest::qWait( 50000 );
295 void test_HYDROData_PolylineXY::test_split_refs_627()
297 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
299 Handle(HYDROData_PolylineXY) aPolyline =
300 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
301 aPolyline->SetName( "test" );
303 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
304 TopoDS_Wire aWire = Wire2d( aCoords, false );
305 aPolyline->SetShape( aWire );
306 aPolyline->SetWireColor( Qt::red );
308 gp_Pnt2d aPnt( 20, 20 );
310 HYDROData_PolylineOperator anOp;
311 CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
313 TestViewer::show( TopoDS_Shape(), 0, true, "Split_Polylines_Colors" );
314 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
315 for( ; anIt.More(); anIt.Next() )
317 Handle(HYDROData_PolylineXY) anObj = Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
318 if( aPolyline->Label() != anObj->Label() )
319 TestViewer::show( anObj->GetShape(), 0, true, anObj->GetWireColor() );
321 CPPUNIT_ASSERT_IMAGES
323 HYDROData_Iterator anIt2( aDoc, KIND_POLYLINEXY );
324 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
325 CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt2.Current()->GetName() );
326 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ),
327 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
329 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
330 CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt2.Current()->GetName() );
331 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ),
332 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
334 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
335 CPPUNIT_ASSERT_EQUAL( QString( "test_2" ), anIt2.Current()->GetName() );
336 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ),
337 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
339 CPPUNIT_ASSERT_EQUAL( false, anIt2.More() );
345 void test_HYDROData_PolylineXY::test_custom_polylines()
347 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
349 Handle(HYDROData_PolylineXY) aPolyline1 =
350 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
351 Handle(HYDROData_PolylineXY) aPolyline2 =
352 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
353 Handle(HYDROData_PolylineXY) aPolyline3 =
354 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
356 aPolyline1->SetName( "test1" );
357 aPolyline2->SetName( "test2" );
358 aPolyline3->SetName( "test3" );
360 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
361 aPolyline1->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
362 aPolyline1->Update();
363 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
364 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
365 aPolyline1->Update();
366 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
368 CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
369 aPolyline2->SetShape( Wire2d( QList<double>() << 0 << 0 << 10 << 10 << 20 << 0 ) );
370 CPPUNIT_ASSERT_EQUAL( true, aPolyline2->IsCustom() );
371 HYDROData_PolylineXY::PointsList aPointsList = aPolyline2->GetPoints( 0 );
373 CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
374 CPPUNIT_ASSERT_EQUAL( 5, aPointsList.Size() );
375 CPPUNIT_ASSERT_EQUAL( gp_XY( 0, 0 ), aPointsList.Value( 1 ) );
376 CPPUNIT_ASSERT_EQUAL( gp_XY( 5, 7.5 ), aPointsList.Value( 2 ) );
377 CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 10 ), aPointsList.Value( 3 ) );
378 CPPUNIT_ASSERT_EQUAL( gp_XY( 15, 7.5 ), aPointsList.Value( 4 ) );
379 CPPUNIT_ASSERT_EQUAL( gp_XY( 20, 0 ), aPointsList.Value( 5 ) );
382 CPPUNIT_ASSERT_EQUAL( false, aPolyline3->IsCustom() );
383 aPolyline3->SetShape( WireCirc( gp_Pnt(), 10.0 ) );
384 CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsCustom() );
385 aPointsList = aPolyline3->GetPoints( 0 );
387 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_SPLINE, aPolyline3->GetSectionType( 0 ) );
388 CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsClosedSection( 0 ) );
389 CPPUNIT_ASSERT_EQUAL( 7, aPointsList.Size() );
390 CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 0 ), aPointsList.Value( 1 ) );
391 CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, 7.81831 ), aPointsList.Value( 2 ) );
392 CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, 9.749 ), aPointsList.Value( 3 ) );
393 CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, 4.339 ), aPointsList.Value( 4 ) );
394 CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, -4.339 ), aPointsList.Value( 5 ) );
395 CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, -9.749 ), aPointsList.Value( 6 ) );
396 CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, -7.81831 ), aPointsList.Value( 7 ) );
401 void test_HYDROData_PolylineXY::test_merge_refs_630()
403 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
405 Handle(HYDROData_PolylineXY) aPolyline1 =
406 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
407 Handle(HYDROData_PolylineXY) aPolyline2 =
408 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
410 aPolyline1->SetName( "test1" );
411 aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
412 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
413 aPolyline1->AddPoint( 0, gp_XY( 10, 0 ) );
414 aPolyline1->AddPoint( 0, gp_XY( 10, 10 ) );
415 aPolyline1->Update();
417 aPolyline2->SetName( "test2" );
418 aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
419 aPolyline2->AddPoint( 0, gp_XY( 20, 20 ) );
420 aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
421 aPolyline2->AddPoint( 0, gp_XY( 30, 0 ) );
422 aPolyline2->Update();
424 HYDROData_PolylineOperator anOp;
425 HYDROData_SequenceOfObjects aPolylines;
426 aPolylines.Append( aPolyline1 );
427 aPolylines.Append( aPolyline2 );
428 CPPUNIT_ASSERT_EQUAL( true, anOp.Merge( aDoc, "", aPolylines, true, 1E-3 ) );
429 //TODO: check false in merge
431 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
432 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
433 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
435 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
436 CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
438 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
439 CPPUNIT_ASSERT_EQUAL( QString( "merged_1" ), anIt.Current()->GetName() );
440 Handle(HYDROData_PolylineXY) aMerged =
441 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
443 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
445 TestViewer::show( aMerged->GetShape(), 0, true, "Merge_Polylines" );
446 CPPUNIT_ASSERT_IMAGES
451 void test_HYDROData_PolylineXY::test_split_straight_refs_634()
453 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
455 Handle(HYDROData_PolylineXY) aPolyline1 =
456 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
457 Handle(HYDROData_PolylineXY) aPolyline2 =
458 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
460 aPolyline1->SetName( "test1" );
461 aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
462 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
463 aPolyline1->AddPoint( 0, gp_XY( 10, 20 ) );
464 aPolyline1->AddPoint( 0, gp_XY( 30, 10 ) );
465 aPolyline1->Update();
467 aPolyline2->SetName( "test2" );
468 aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
469 aPolyline2->AddPoint( 0, gp_XY( 0, 30 ) );
470 aPolyline2->AddPoint( 0, gp_XY( 10, 10 ) );
471 aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
472 aPolyline2->Update();
474 HYDROData_PolylineOperator anOp;
475 HYDROData_SequenceOfObjects aPolylines;
476 aPolylines.Append( aPolyline1 );
477 aPolylines.Append( aPolyline2 );
479 CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline1, aPolyline2, 1E-3, isIntersected ) );
480 CPPUNIT_ASSERT_EQUAL( true, isIntersected );
482 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
483 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
484 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
486 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
487 CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
490 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
491 CPPUNIT_ASSERT_EQUAL( QString( "test1_1" ), anIt.Current()->GetName() );
492 Handle(HYDROData_PolylineXY) aPart1 =
493 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
494 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart1->GetSectionType( 0 ) );
497 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
498 CPPUNIT_ASSERT_EQUAL( QString( "test1_2" ), anIt.Current()->GetName() );
499 Handle(HYDROData_PolylineXY) aPart2 =
500 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
501 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart2->GetSectionType( 0 ) );
504 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
505 CPPUNIT_ASSERT_EQUAL( QString( "test1_3" ), anIt.Current()->GetName() );
506 Handle(HYDROData_PolylineXY) aPart3 =
507 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
508 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart3->GetSectionType( 0 ) );
511 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
513 TestViewer::show( aPart1->GetShape(), 0, true, "Split_Straight" );
514 TestViewer::show( aPart2->GetShape(), 0, true, Qt::red );
515 TestViewer::show( aPart3->GetShape(), 0, true, Qt::green );
516 TestViewer::show( aPolyline2->GetShape(), 0, true, Qt::darkGreen );
517 CPPUNIT_ASSERT_IMAGES