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>
32 #include <HYDROData_SinusX.h>
33 #include <BRep_Builder.hxx>
35 #include <AIS_DisplayMode.hxx>
36 #include <AIS_PointCloud.hxx>
37 #include <Prs3d_LineAspect.hxx>
38 #include <Prs3d_PointAspect.hxx>
39 #include <TColgp_HArray1OfPnt.hxx>
45 #include <TestShape.h>
46 #include <TestViewer.h>
47 #include <TopoDS_Edge.hxx>
48 #include <TopoDS_Vertex.hxx>
49 #include <TopoDS_Wire.hxx>
51 #include <HYDROData_Tool.h>
53 extern QString REF_DATA_PATH;
55 void test_HYDROData_PolylineXY::test_polyline()
57 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
59 Handle(HYDROData_PolylineXY) aPolyline =
60 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
62 aPolyline->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
63 aPolyline->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_SPLINE, true );
65 int aNbSections = aPolyline->NbSections();
66 CPPUNIT_ASSERT( aNbSections == 2 );
68 NCollection_Sequence<TCollection_AsciiString> aSectNames;
69 NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
70 NCollection_Sequence<bool> aSectClosures;
71 aPolyline->GetSections( aSectNames, aSectTypes, aSectClosures );
73 CPPUNIT_ASSERT_EQUAL( 2, aSectNames.Size() );
74 CPPUNIT_ASSERT( aSectNames.Value( 1 ) == "Section_1" );
75 CPPUNIT_ASSERT( aSectTypes.Value( 1 ) == HYDROData_PolylineXY::SECTION_POLYLINE );
76 CPPUNIT_ASSERT( aSectClosures.Value( 1 ) == false );
78 CPPUNIT_ASSERT( aSectNames.Value( 2 ) == "Section_2" );
79 CPPUNIT_ASSERT( aSectTypes.Value( 2 ) == HYDROData_PolylineXY::SECTION_SPLINE );
80 CPPUNIT_ASSERT( aSectClosures.Value( 2 ) == true );
85 void test_HYDROData_PolylineXY::test_copy()
87 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
88 Handle(HYDROData_PolylineXY) aPolyline1 =
89 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
92 // aPolyline1->setPoints(aPoints);
94 Handle(HYDROData_PolylineXY) aPolyline2 =
95 Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
97 aPolyline1->CopyTo(aPolyline2, true);
103 void test_HYDROData_PolylineXY::test_split_refs_624()
105 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
107 Handle(HYDROData_PolylineXY) aPolyline =
108 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
109 aPolyline->SetName( "test" );
111 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
112 TopoDS_Wire aWire = Wire2d( aCoords, true );
113 aPolyline->SetShape( aWire );
115 gp_Pnt2d aPnt( 20, 20 );
117 TestViewer::show( aPolyline->GetShape(), 0, true, "LandCoverMap_Split_Polyline" );
118 //TestViewer::show( BRepBuilderAPI_MakeVertex( aPnt ).Vertex(), 1, true, Qt::green );
119 CPPUNIT_ASSERT_IMAGES
121 HYDROData_PolylineOperator anOp;
122 CPPUNIT_ASSERT_EQUAL( true, anOp.SplitPoint( aDoc, aPolyline, aPnt, 1E-3 ) );
124 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
125 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
126 CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt.Current()->GetName() );
128 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
129 CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt.Current()->GetName() );
131 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
136 void test_HYDROData_PolylineXY::test_extraction_immersible_zone()
138 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
140 Handle(HYDROData_PolylineXY) aPolyline =
141 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
142 aPolyline->SetName( "test" );
144 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
145 TopoDS_Wire aWire = Wire2d( aCoords, true );
146 aPolyline->SetShape( aWire );
148 Handle(HYDROData_ImmersibleZone) aZone =
149 Handle(HYDROData_ImmersibleZone)::DownCast( aDoc->CreateObject( KIND_IMMERSIBLE_ZONE ) );
150 aZone->SetName( "zone" );
151 aZone->SetPolyline( aPolyline );
154 CPPUNIT_ASSERT_EQUAL( false, (bool)aZone->GetTopShape().IsNull() );
156 HYDROData_PolylineOperator anOp;
157 CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aZone ) );
159 Handle(HYDROData_PolylineXY) anOuter =
160 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "zone_Outer_1", KIND_POLYLINEXY ) );
161 CPPUNIT_ASSERT_EQUAL( false, (bool)anOuter.IsNull() );
163 TestViewer::show( aZone->GetTopShape(), 1, true, "Extraction_ImmZone" );
164 TestViewer::show( anOuter->GetShape(), 0, true, Qt::red );
165 CPPUNIT_ASSERT_IMAGES
170 void test_HYDROData_PolylineXY::test_extraction_channel_refs_611()
172 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
174 Handle(HYDROData_PolylineXY) aPolyline2d =
175 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
176 aPolyline2d->SetName( "polyline2d_1" );
177 aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
179 Handle(HYDROData_Polyline3D) aPolyline3d =
180 Handle(HYDROData_Polyline3D)::DownCast( aDoc->CreateObject( KIND_POLYLINE ) );
181 aPolyline3d->SetName( "polyline3d_1" );
182 aPolyline3d->SetPolylineXY( aPolyline2d );
184 QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
185 TopoDS_Wire aWire = Wire2d( aCoords, false );
186 aPolyline2d->SetShape( aWire );
187 aPolyline3d->SetTopShape( aWire );
188 aPolyline3d->SetShape3D( aWire );
190 Handle(HYDROData_Profile) aProfile =
191 Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
192 aProfile->SetName( "profile_1" );
194 QList<double> aCoordsPr = QList<double>() << 0.0 << 0.1 << 0.0 << 0.0 << 1.0 << 0.0;
195 TopoDS_Wire aWirePr = Wire3d( aCoordsPr, false );
196 aProfile->SetTopShape( aWirePr );
197 aProfile->SetShape3D( aWirePr );
200 Handle(HYDROData_Channel) aChannel =
201 Handle(HYDROData_Channel)::DownCast( aDoc->CreateObject( KIND_CHANNEL ) );
202 aChannel->SetName( "channel_1" );
204 aChannel->SetGuideLine( aPolyline3d );
205 aChannel->SetProfile( aProfile );
207 CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetTopShape().IsNull() );
208 CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetShape3D().IsNull() );
210 HYDROData_PolylineOperator anOp;
211 CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aChannel ) );
213 Handle(HYDROData_PolylineXY) aLeft =
214 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Left_Bank_1", KIND_POLYLINEXY ) );
215 Handle(HYDROData_PolylineXY) aRight =
216 Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Right_Bank_1", KIND_POLYLINEXY ) );
217 CPPUNIT_ASSERT_EQUAL( false, (bool)aRight.IsNull() );
219 TestViewer::show( aChannel->GetTopShape(), 1, true, "Extraction_Channel" );
220 TestViewer::show( aLeft->GetShape(), 0, true, Qt::red );
221 TestViewer::show( aRight->GetShape(), 0, true, Qt::red );
222 CPPUNIT_ASSERT_IMAGES
227 void test_HYDROData_PolylineXY::test_presentation()
229 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
231 Handle(HYDROData_PolylineXY) aPolyline2d =
232 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
233 aPolyline2d->SetName( "polyline2d_1" );
234 aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
236 QList<gp_XY> aPoints = QList<gp_XY>() << gp_XY( 0, 0 )
246 Handle(TColgp_HArray1OfPnt) aPnts = new TColgp_HArray1OfPnt( 1, aPoints.size() );
248 foreach( gp_XY aPoint, aPoints )
250 aPolyline2d->AddPoint( 0, aPoint );
251 aPnts->SetValue( i, gp_Pnt( aPoint.X(), aPoint.Y(), 0 ) );
254 aPolyline2d->Update();
256 CPPUNIT_ASSERT_EQUAL( false, (bool)aPolyline2d->GetShape().IsNull() );
258 Handle(AIS_PointCloud) aPointsPrs = new AIS_PointCloud();
259 aPointsPrs->SetPoints( aPnts );
260 aPointsPrs->SetColor( Quantity_NOC_BLUE1 );
261 aPointsPrs->Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_O );
263 aPolyline2d->SetWireColor( Qt::darkGreen );
264 HYDROGUI_Shape* aNewPolylinePrs = new HYDROGUI_Shape( TestViewer::context(), aPolyline2d );
265 aNewPolylinePrs->update( true, true );
268 // Check default type
269 Handle(HYDROGUI_Arrow) arr = Handle(HYDROGUI_Arrow)::DownCast( aNewPolylinePrs->getAISObjects()[1] );
270 CPPUNIT_ASSERT_EQUAL( HYDROGUI_Arrow::Cone, arr->GetType() );
271 CPPUNIT_ASSERT_EQUAL( 35, arr->GetSize() );
274 // Check polyline presentation with default (cone) arrow
275 TestViewer::eraseAll(true);
276 TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation" );
277 TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
278 //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
279 aNewPolylinePrs->setBorderColor( Qt::blue );
280 aNewPolylinePrs->display();
281 TestViewer::fitAll();
282 CPPUNIT_ASSERT_IMAGES
285 // Check polyline presentation with triangle arrow
286 arr->SetType( HYDROGUI_Arrow::Triangle );
287 TestViewer::eraseAll(true);
288 TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation_triangle" );
289 TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
290 //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
291 TestViewer::context()->RecomputePrsOnly( arr, true );
292 aNewPolylinePrs->display();
293 TestViewer::fitAll();
294 CPPUNIT_ASSERT_IMAGES
296 //QTest::qWait( 50000 );
300 void test_HYDROData_PolylineXY::test_split_refs_627()
302 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
304 Handle(HYDROData_PolylineXY) aPolyline =
305 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
306 aPolyline->SetName( "test" );
309 //QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
310 aPolyline->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
311 aPolyline->AddPoint( 0, gp_XY( 10, 10 ) );
312 aPolyline->AddPoint( 0, gp_XY( 20, 10 ) );
313 aPolyline->AddPoint( 0, gp_XY( 20, 20 ) );
314 aPolyline->AddPoint( 0, gp_XY( 10, 20 ) );
318 //TopoDS_Wire aWire = Wire2d( aCoords, false );
319 //aPolyline->SetShape( aWire );
320 TopoDS_Shape aW = aPolyline->GetShape();
321 CPPUNIT_ASSERT (aW.ShapeType() == TopAbs_WIRE);
323 aPolyline->SetWireColor( Qt::red );
325 gp_Pnt2d aPnt( 20, 20 );
327 HYDROData_PolylineOperator anOp;
328 CPPUNIT_ASSERT_EQUAL( true, anOp.SplitPoint( aDoc, aPolyline, aPnt, 1E-3 ) );
330 TestViewer::show( TopoDS_Shape(), 0, true, "Split_Polylines_Colors" );
331 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
332 for( ; anIt.More(); anIt.Next() )
334 Handle(HYDROData_PolylineXY) anObj = Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
335 if( aPolyline->Label() != anObj->Label() )
338 anObj->GetSectionColor(0, color);
339 TestViewer::show( anObj->GetShape(), 0, true, color );
342 CPPUNIT_ASSERT_IMAGES
344 HYDROData_Iterator anIt2( aDoc, KIND_POLYLINEXY );
345 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
346 CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt2.Current()->GetName() );
348 QColor color1, color2, color3;
349 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color1);
351 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color1);
353 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
354 CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt2.Current()->GetName() );
356 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color2);
357 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color2 );
360 CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
361 CPPUNIT_ASSERT_EQUAL( QString( "test_2" ), anIt2.Current()->GetName() );
362 Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color3);
363 CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color3 );
365 CPPUNIT_ASSERT_EQUAL( false, anIt2.More() );
371 void test_HYDROData_PolylineXY::test_custom_polylines()
373 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
375 Handle(HYDROData_PolylineXY) aPolyline1 =
376 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
377 Handle(HYDROData_PolylineXY) aPolyline2 =
378 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
379 Handle(HYDROData_PolylineXY) aPolyline3 =
380 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
382 aPolyline1->SetName( "test1" );
383 aPolyline2->SetName( "test2" );
384 aPolyline3->SetName( "test3" );
386 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
387 aPolyline1->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
388 aPolyline1->Update();
389 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
390 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
391 aPolyline1->Update();
392 CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
394 CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
395 aPolyline2->SetShape( Wire2d( QList<double>() << 0 << 0 << 10 << 10 << 20 << 0 ) );
396 CPPUNIT_ASSERT_EQUAL( true, aPolyline2->IsCustom() );
397 HYDROData_PolylineXY::PointsList aPointsList = aPolyline2->GetPoints( 0 );
399 CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
400 CPPUNIT_ASSERT_EQUAL( 5, aPointsList.Size() );
401 CPPUNIT_ASSERT_EQUAL( gp_XY( 0, 0 ), aPointsList.Value( 1 ) );
402 CPPUNIT_ASSERT_EQUAL( gp_XY( 5, 7.5 ), aPointsList.Value( 2 ) );
403 CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 10 ), aPointsList.Value( 3 ) );
404 CPPUNIT_ASSERT_EQUAL( gp_XY( 15, 7.5 ), aPointsList.Value( 4 ) );
405 CPPUNIT_ASSERT_EQUAL( gp_XY( 20, 0 ), aPointsList.Value( 5 ) );
408 CPPUNIT_ASSERT_EQUAL( false, aPolyline3->IsCustom() );
409 aPolyline3->SetShape( WireCirc( gp_Pnt(), 10.0 ) );
410 CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsCustom() );
411 aPointsList = aPolyline3->GetPoints( 0 );
413 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_SPLINE, aPolyline3->GetSectionType( 0 ) );
414 CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsClosedSection( 0 ) );
415 CPPUNIT_ASSERT_EQUAL( 7, aPointsList.Size() );
416 CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 0 ), aPointsList.Value( 1 ) );
417 CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, 7.81831 ), aPointsList.Value( 2 ) );
418 CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, 9.749 ), aPointsList.Value( 3 ) );
419 CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, 4.339 ), aPointsList.Value( 4 ) );
420 CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, -4.339 ), aPointsList.Value( 5 ) );
421 CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, -9.749 ), aPointsList.Value( 6 ) );
422 CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, -7.81831 ), aPointsList.Value( 7 ) );
427 void test_HYDROData_PolylineXY::test_merge_refs_630()
429 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
431 Handle(HYDROData_PolylineXY) aPolyline1 =
432 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
433 Handle(HYDROData_PolylineXY) aPolyline2 =
434 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
436 aPolyline1->SetName( "test1" );
437 aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
438 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
439 aPolyline1->AddPoint( 0, gp_XY( 10, 0 ) );
440 aPolyline1->AddPoint( 0, gp_XY( 10, 10 ) );
441 aPolyline1->Update();
443 aPolyline2->SetName( "test2" );
444 aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
445 aPolyline2->AddPoint( 0, gp_XY( 20, 20 ) );
446 aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
447 aPolyline2->AddPoint( 0, gp_XY( 30, 0 ) );
448 aPolyline2->Update();
450 HYDROData_PolylineOperator anOp;
451 HYDROData_SequenceOfObjects aPolylines;
452 aPolylines.Append( aPolyline1 );
453 aPolylines.Append( aPolyline2 );
454 CPPUNIT_ASSERT_EQUAL( true, anOp.Merge( aDoc, "", aPolylines, true, 1E-3 ) );
455 //TODO: check false in merge
457 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
458 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
459 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
461 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
462 CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
464 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
465 CPPUNIT_ASSERT_EQUAL( QString( "merged_1" ), anIt.Current()->GetName() );
466 Handle(HYDROData_PolylineXY) aMerged =
467 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
469 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
471 TestViewer::show( aMerged->GetShape(), 0, true, "Merge_Polylines" );
472 CPPUNIT_ASSERT_IMAGES
477 void test_HYDROData_PolylineXY::test_split_straight_refs_634()
479 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
481 Handle(HYDROData_PolylineXY) aPolyline1 =
482 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
483 Handle(HYDROData_PolylineXY) aPolyline2 =
484 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
486 aPolyline1->SetName( "test1" );
487 aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
488 aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
489 aPolyline1->AddPoint( 0, gp_XY( 10, 20 ) );
490 aPolyline1->AddPoint( 0, gp_XY( 30, 10 ) );
491 aPolyline1->Update();
493 aPolyline2->SetName( "test2" );
494 aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
495 aPolyline2->AddPoint( 0, gp_XY( 0, 30 ) );
496 aPolyline2->AddPoint( 0, gp_XY( 10, 10 ) );
497 aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
498 aPolyline2->Update();
500 HYDROData_PolylineOperator anOp;
501 HYDROData_SequenceOfObjects aPolylines;
502 aPolylines.Append( aPolyline1 );
503 aPolylines.Append( aPolyline2 );
505 CPPUNIT_ASSERT_EQUAL( true, anOp.SplitTool( aDoc, aPolyline1, aPolyline2, 1E-3, isIntersected ) );
506 CPPUNIT_ASSERT_EQUAL( true, isIntersected );
508 HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
509 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
510 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
512 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
513 CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
516 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
517 CPPUNIT_ASSERT_EQUAL( QString( "test1_1" ), anIt.Current()->GetName() );
518 Handle(HYDROData_PolylineXY) aPart1 =
519 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
520 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart1->GetSectionType( 0 ) );
523 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
524 CPPUNIT_ASSERT_EQUAL( QString( "test1_2" ), anIt.Current()->GetName() );
525 Handle(HYDROData_PolylineXY) aPart2 =
526 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
527 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart2->GetSectionType( 0 ) );
530 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
531 CPPUNIT_ASSERT_EQUAL( QString( "test1_3" ), anIt.Current()->GetName() );
532 Handle(HYDROData_PolylineXY) aPart3 =
533 Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
534 CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart3->GetSectionType( 0 ) );
537 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
539 TestViewer::show( aPart1->GetShape(), 0, true, "Split_Straight" );
540 TestViewer::show( aPart2->GetShape(), 0, true, Qt::red );
541 TestViewer::show( aPart3->GetShape(), 0, true, Qt::green );
542 TestViewer::show( aPolyline2->GetShape(), 0, true, Qt::darkGreen );
543 CPPUNIT_ASSERT_IMAGES
548 void test_HYDROData_PolylineXY::test_import_from_xyz()
550 NCollection_Sequence<Handle(HYDROData_Entity)> ents;
551 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
552 TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
553 fname += "/profiles1.xyz";
555 NCollection_Sequence<Handle(HYDROData_Entity)> importedEntities;
556 bool stat = HYDROData_Tool::importPolylineFromXYZ(QString(fname.ToCString()), aDoc, true, importedEntities);
557 CPPUNIT_ASSERT (stat);
558 Handle(HYDROData_PolylineXY) aPolyXY = Handle(HYDROData_PolylineXY)::DownCast(importedEntities.First());
559 CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 1);
560 CPPUNIT_ASSERT (!aPolyXY.IsNull());
561 TestViewer::show( aPolyXY->GetShape(), 0, true, "Polyline_import_XY" );
562 CPPUNIT_ASSERT_IMAGES
563 importedEntities.Clear();
565 stat = HYDROData_Tool::importPolylineFromXYZ(QString(fname.ToCString()), aDoc, false, importedEntities);
566 CPPUNIT_ASSERT (stat);
567 CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 2);
568 Handle(HYDROData_Polyline3D) aPoly3D;
569 aPolyXY = Handle(HYDROData_PolylineXY)::DownCast(importedEntities.First());
570 aPoly3D = Handle(HYDROData_Polyline3D)::DownCast(importedEntities.Last());
571 CPPUNIT_ASSERT (!aPolyXY.IsNull());
572 CPPUNIT_ASSERT (!aPoly3D.IsNull());
573 TestViewer::show( aPolyXY->GetShape(), 0, false, "Polyline_import_XYZ" );
574 TestViewer::show( aPoly3D->GetShape3D(), 0, false, "Polyline_import_XYZ_3D" );
575 CPPUNIT_ASSERT_IMAGES
579 void test_HYDROData_PolylineXY::test_import_from_sx()
581 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
582 TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
583 fname += "/polylines_sx.sx";
585 HYDROData_SinusX aSinusXImporter;
586 NCollection_Sequence<Handle(HYDROData_Entity)> importedEntities;
587 //bool stat = aSinusXImporter.Import(QString(fname.ToCString()), aDoc, importedEntities);
588 bool ParseStat = aSinusXImporter.OpenAndParse(QString(fname.ToCString()));
589 CPPUNIT_ASSERT (ParseStat);
590 aSinusXImporter.Import(aDoc, importedEntities, NULL);
591 CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 9);
593 Handle(HYDROData_PolylineXY) aPolyXY1 = Handle(HYDROData_PolylineXY)::DownCast(importedEntities(1));
594 Handle(HYDROData_PolylineXY) aPolyXY2 = Handle(HYDROData_PolylineXY)::DownCast(importedEntities(4));
595 Handle(HYDROData_PolylineXY) aPolyXY3 = Handle(HYDROData_PolylineXY)::DownCast(importedEntities(7));
597 CPPUNIT_ASSERT (!aPolyXY1.IsNull());
598 CPPUNIT_ASSERT (!aPolyXY2.IsNull());
599 CPPUNIT_ASSERT (!aPolyXY3.IsNull());
605 CPPUNIT_ASSERT_EQUAL (aPolyXY1->GetName(), QString("AXIS"));
606 CPPUNIT_ASSERT_EQUAL (aPolyXY2->GetName(), QString("LB"));
607 CPPUNIT_ASSERT_EQUAL (aPolyXY3->GetName(), QString("RB"));
609 TopoDS_Shape sh1 = aPolyXY1->GetShape();
610 TopoDS_Shape sh2 = aPolyXY2->GetShape();
611 TopoDS_Shape sh3 = aPolyXY3->GetShape();
612 CPPUNIT_ASSERT (!sh1.IsNull());
613 CPPUNIT_ASSERT (!sh2.IsNull());
614 CPPUNIT_ASSERT (!sh3.IsNull());
618 BB.MakeCompound(cmp);
623 TestViewer::show( cmp, 0, true, "Polylines_import_SX" );
624 CPPUNIT_ASSERT_IMAGES
627 void test_HYDROData_PolylineXY::test_import_from_sx_options()
629 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
630 TCollection_AsciiString fname = REF_DATA_PATH.toLatin1().data();
631 fname += "/trait_cote_lambert1N.sx";
633 HYDROData_SinusX aSinusXImporter;
634 NCollection_Sequence<Handle(HYDROData_Entity)> importedEntities;
635 //bool stat = aSinusXImporter.Import(QString(fname.ToCString()), aDoc, importedEntities);
636 bool ParseStat = aSinusXImporter.OpenAndParse(QString(fname.ToCString()));
637 CPPUNIT_ASSERT (ParseStat);
639 std::vector<HYDROData_SinusX::ImportOptions> options;
640 int size = aSinusXImporter.GetCurveBlocks().size();
641 CPPUNIT_ASSERT_EQUAL(33, size);
642 for (int i = 0; i < 33; i++)
644 HYDROData_SinusX::ImportOptions option;
645 option.ImportAsBathy = false;
648 option.ImportAsPolyXY = true;
649 option.ImportAsProfile = true;
653 option.ImportAsPolyXY = false;
654 option.ImportAsProfile = false;
656 options.push_back(option);
659 aSinusXImporter.Import(aDoc, importedEntities, &options);
660 CPPUNIT_ASSERT_EQUAL (importedEntities.Size(), 60);
663 void test_HYDROData_PolylineXY::test_polyline_dbf_info_simple()
665 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document();
666 Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
667 QStringList dbf_dummy, dbf_out;
668 dbf_dummy << "n1" << "n2" << "n3" << "n4";
669 aPolyline->SetDBFInfo(dbf_dummy);
670 CPPUNIT_ASSERT (aPolyline->GetDBFInfo(dbf_out));
671 CPPUNIT_ASSERT_EQUAL (dbf_out.size(), 4);
672 CPPUNIT_ASSERT ("n1" == dbf_out[0]);
673 CPPUNIT_ASSERT ("n2" == dbf_out[1]);
674 CPPUNIT_ASSERT ("n3" == dbf_out[2]);
675 CPPUNIT_ASSERT ("n4" == dbf_out[3]);