Salome HOME
refs #1330: basic implementation of the not zoomable polyline arrows
[modules/hydro.git] / src / HYDRO_tests / test_HYDROData_PolylineXY.cxx
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.
6 //
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.
11 //
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
15 //
16 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
17 //
18
19 #include<test_HYDROData_PolylineXY.h>
20
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
32 #include <AIS_DisplayMode.hxx>
33 #include <AIS_PointCloud.hxx>
34 #include <Prs3d_LineAspect.hxx>
35 #include <Prs3d_PointAspect.hxx>
36 #include <TColgp_HArray1OfPnt.hxx>
37 #include <QColor>
38 #include <QList>
39 #include <QPointF>
40 #include <QTest>
41
42 #include <TestShape.h>
43 #include <TestViewer.h>
44 #include <TopoDS_Edge.hxx>
45 #include <TopoDS_Vertex.hxx>
46 #include <TopoDS_Wire.hxx>
47 #include <gp_XY.hxx>
48
49 void test_HYDROData_PolylineXY::test_polyline()
50 {
51   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
52
53   Handle(HYDROData_PolylineXY) aPolyline = 
54     Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
55
56   aPolyline->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
57   aPolyline->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_SPLINE, true );
58
59   int aNbSections = aPolyline->NbSections();
60   CPPUNIT_ASSERT( aNbSections == 2 );
61   
62   NCollection_Sequence<TCollection_AsciiString>           aSectNames;
63   NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
64   NCollection_Sequence<bool>                              aSectClosures;
65   aPolyline->GetSections( aSectNames, aSectTypes, aSectClosures );
66
67   CPPUNIT_ASSERT_EQUAL( 2, aSectNames.Size() );
68   CPPUNIT_ASSERT( aSectNames.Value( 1 ) == "Section_1" );
69   CPPUNIT_ASSERT( aSectTypes.Value( 1 ) == HYDROData_PolylineXY::SECTION_POLYLINE );
70   CPPUNIT_ASSERT( aSectClosures.Value( 1 ) == false );
71
72   CPPUNIT_ASSERT( aSectNames.Value( 2 ) == "Section_2" );
73   CPPUNIT_ASSERT( aSectTypes.Value( 2 ) == HYDROData_PolylineXY::SECTION_SPLINE );
74   CPPUNIT_ASSERT( aSectClosures.Value( 2 ) == true );
75
76   aDoc->Close();
77 }
78
79 void test_HYDROData_PolylineXY::test_copy()
80 {
81   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
82   Handle(HYDROData_PolylineXY) aPolyline1 = 
83     Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
84
85
86 //  aPolyline1->setPoints(aPoints);
87
88   Handle(HYDROData_PolylineXY) aPolyline2 = 
89     Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
90
91   aPolyline1->CopyTo(aPolyline2, true);
92
93
94   aDoc->Close();
95 }
96
97 void test_HYDROData_PolylineXY::test_split_refs_624()
98 {
99   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
100
101   Handle(HYDROData_PolylineXY) aPolyline = 
102     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
103   aPolyline->SetName( "test" );
104
105   QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
106   TopoDS_Wire aWire = Wire2d( aCoords, true );
107   aPolyline->SetShape( aWire );
108
109   gp_Pnt2d aPnt( 20, 20 );
110
111   TestViewer::show( aPolyline->GetShape(), 0, true, "LandCoverMap_Split_Polyline" );
112   //TestViewer::show( BRepBuilderAPI_MakeVertex( aPnt ).Vertex(), 1, true, Qt::green );
113   CPPUNIT_ASSERT_IMAGES
114
115   HYDROData_PolylineOperator anOp;
116   CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
117
118   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
119   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
120   CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt.Current()->GetName() );
121   anIt.Next();
122   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
123   CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt.Current()->GetName() );
124   anIt.Next();
125   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
126
127   aDoc->Close();
128 }
129
130 void test_HYDROData_PolylineXY::test_extraction_immersible_zone()
131 {
132   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
133
134   Handle(HYDROData_PolylineXY) aPolyline = 
135     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
136   aPolyline->SetName( "test" );
137
138   QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
139   TopoDS_Wire aWire = Wire2d( aCoords, true );
140   aPolyline->SetShape( aWire );
141
142   Handle(HYDROData_ImmersibleZone) aZone = 
143     Handle(HYDROData_ImmersibleZone)::DownCast( aDoc->CreateObject( KIND_IMMERSIBLE_ZONE ) );
144   aZone->SetName( "zone" );
145   aZone->SetPolyline( aPolyline );
146   aZone->Update();
147
148   CPPUNIT_ASSERT_EQUAL( false, (bool)aZone->GetTopShape().IsNull() );
149
150   HYDROData_PolylineOperator anOp;
151   CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aZone ) );
152
153   Handle(HYDROData_PolylineXY) anOuter = 
154     Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "zone_Outer_1", KIND_POLYLINEXY ) );
155   CPPUNIT_ASSERT_EQUAL( false, (bool)anOuter.IsNull() );
156
157   TestViewer::show( aZone->GetTopShape(), 1, true, "Extraction_ImmZone" );
158   TestViewer::show( anOuter->GetShape(), 0, true, Qt::red );
159   CPPUNIT_ASSERT_IMAGES
160
161   aDoc->Close();
162 }
163
164 void test_HYDROData_PolylineXY::test_extraction_channel_refs_611()
165 {
166   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
167
168   Handle(HYDROData_PolylineXY) aPolyline2d = 
169     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
170   aPolyline2d->SetName( "polyline2d_1" );
171   aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
172
173   Handle(HYDROData_Polyline3D) aPolyline3d = 
174     Handle(HYDROData_Polyline3D)::DownCast( aDoc->CreateObject( KIND_POLYLINE ) );
175   aPolyline3d->SetName( "polyline3d_1" );
176   aPolyline3d->SetPolylineXY( aPolyline2d );
177
178   QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
179   TopoDS_Wire aWire = Wire2d( aCoords, false );
180   aPolyline2d->SetShape( aWire );
181   aPolyline3d->SetTopShape( aWire );
182   aPolyline3d->SetShape3D( aWire );
183
184   Handle(HYDROData_Profile) aProfile = 
185     Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
186   aProfile->SetName( "profile_1" );
187
188   QList<double> aCoordsPr = QList<double>() << 0.0 << 0.1 << 0.0 << 0.0 << 1.0 << 0.0;
189   TopoDS_Wire aWirePr = Wire3d( aCoordsPr, false );
190   aProfile->SetTopShape( aWirePr );
191   aProfile->SetShape3D( aWirePr );
192
193
194   Handle(HYDROData_Channel) aChannel = 
195     Handle(HYDROData_Channel)::DownCast( aDoc->CreateObject( KIND_CHANNEL ) );
196   aChannel->SetName( "channel_1" );
197   
198   aChannel->SetGuideLine( aPolyline3d );
199   aChannel->SetProfile( aProfile );
200   aChannel->Update();
201   CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetTopShape().IsNull() );
202   CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetShape3D().IsNull() );
203
204   HYDROData_PolylineOperator anOp;
205   CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aChannel ) );
206
207   Handle(HYDROData_PolylineXY) aLeft = 
208     Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Left_Bank_1", KIND_POLYLINEXY ) );
209   Handle(HYDROData_PolylineXY) aRight = 
210     Handle(HYDROData_PolylineXY)::DownCast( aDoc->FindObjectByName( "channel_1_Right_Bank_1", KIND_POLYLINEXY ) );
211   CPPUNIT_ASSERT_EQUAL( false, (bool)aRight.IsNull() );
212
213   TestViewer::show( aChannel->GetTopShape(), 1, true, "Extraction_Channel" );
214   TestViewer::show( aLeft->GetShape(), 0, true, Qt::red );
215   TestViewer::show( aRight->GetShape(), 0, true, Qt::red );
216   CPPUNIT_ASSERT_IMAGES
217
218   aDoc->Close();
219 }
220
221 void test_HYDROData_PolylineXY::test_presentation()
222 {
223   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
224
225   Handle(HYDROData_PolylineXY) aPolyline2d = 
226     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
227   aPolyline2d->SetName( "polyline2d_1" );
228   aPolyline2d->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
229
230   QList<gp_XY> aPoints = QList<gp_XY>() << gp_XY(  0,  0 )
231                                         << gp_XY( 10, 10 )
232                                         << gp_XY( 20, 40 )
233                                         << gp_XY( 30, 10 )
234                                         << gp_XY( 40, 50 )
235                                         << gp_XY( 50, 60 )
236                                         << gp_XY( -10, 40 )
237                                         << gp_XY( -9, 39 )
238                                         << gp_XY( -8, 38 )
239                                         << gp_XY(  0, 20 );
240   Handle(TColgp_HArray1OfPnt) aPnts = new TColgp_HArray1OfPnt( 1, aPoints.size() );
241   int i = 1;
242   foreach( gp_XY aPoint, aPoints )
243   {
244     aPolyline2d->AddPoint( 0, aPoint );
245     aPnts->SetValue( i, gp_Pnt( aPoint.X(), aPoint.Y(), 0 ) );
246     i++;
247   }
248   aPolyline2d->Update();
249
250   CPPUNIT_ASSERT_EQUAL( false, (bool)aPolyline2d->GetShape().IsNull() );
251
252   Handle(AIS_PointCloud) aPointsPrs = new AIS_PointCloud();
253   aPointsPrs->SetPoints( aPnts );
254   aPointsPrs->SetColor( Quantity_NOC_BLUE1 );
255   aPointsPrs->Attributes()->PointAspect()->SetTypeOfMarker( Aspect_TOM_O );
256
257   aPolyline2d->SetWireColor( Qt::darkGreen );
258   HYDROGUI_Shape* aNewPolylinePrs = new HYDROGUI_Shape( TestViewer::context(), aPolyline2d );
259   aNewPolylinePrs->update( true, true );
260
261   TestViewer::show( aPointsPrs, AIS_PointCloud::DM_Points, 0, true, "Polyline_Presentation" );
262   TestViewer::show( aPolyline2d->GetShape(), 0, true, Qt::red );
263   //TestViewer::show( aNewPolylinePrs, AIS_PointCloud::DM_Points, 0, true, "" );
264   aNewPolylinePrs->display();
265   TestViewer::fitAll();
266   CPPUNIT_ASSERT_IMAGES
267
268   aDoc->Close();
269   //QTest::qWait( 50000 );
270 }
271
272 void test_HYDROData_PolylineXY::test_split_refs_627()
273 {
274   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
275
276   Handle(HYDROData_PolylineXY) aPolyline = 
277     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
278   aPolyline->SetName( "test" );
279
280   QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
281   TopoDS_Wire aWire = Wire2d( aCoords, false );
282   aPolyline->SetShape( aWire );
283   aPolyline->SetWireColor( Qt::red );
284
285   gp_Pnt2d aPnt( 20, 20 );
286   
287   HYDROData_PolylineOperator anOp;
288   CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
289
290   TestViewer::show( TopoDS_Shape(), 0, true, "Split_Polylines_Colors" );
291   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
292   for( ; anIt.More(); anIt.Next() )
293   {
294     Handle(HYDROData_PolylineXY) anObj = Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
295     if( aPolyline->Label() != anObj->Label() )
296       TestViewer::show( anObj->GetShape(), 0, true, anObj->GetWireColor() );
297   }
298   CPPUNIT_ASSERT_IMAGES
299     
300   HYDROData_Iterator anIt2( aDoc, KIND_POLYLINEXY );
301   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
302   CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt2.Current()->GetName() );
303   CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ),
304     Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
305   anIt2.Next();
306   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
307   CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt2.Current()->GetName() );
308   CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), 
309     Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
310   anIt2.Next();
311   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
312   CPPUNIT_ASSERT_EQUAL( QString( "test_2" ), anIt2.Current()->GetName() );
313   CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), 
314     Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetWireColor() );
315   anIt2.Next();
316   CPPUNIT_ASSERT_EQUAL( false, anIt2.More() );
317   anIt2.Next();
318
319   aDoc->Close();
320 }
321
322 void test_HYDROData_PolylineXY::test_custom_polylines()
323 {
324   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
325
326   Handle(HYDROData_PolylineXY) aPolyline1 = 
327     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
328   Handle(HYDROData_PolylineXY) aPolyline2 = 
329     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
330   Handle(HYDROData_PolylineXY) aPolyline3 = 
331     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
332
333   aPolyline1->SetName( "test1" );
334   aPolyline2->SetName( "test2" );
335   aPolyline3->SetName( "test3" );
336
337   CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
338   aPolyline1->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
339   aPolyline1->Update();
340   CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
341   aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
342   aPolyline1->Update();
343   CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
344
345   CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
346   aPolyline2->SetShape( Wire2d( QList<double>() << 0 << 0 << 10 << 10 << 20 << 0 ) );
347   CPPUNIT_ASSERT_EQUAL( true, aPolyline2->IsCustom() );
348   HYDROData_PolylineXY::PointsList aPointsList = aPolyline2->GetPoints( 0 );
349
350   CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
351   CPPUNIT_ASSERT_EQUAL( 5, aPointsList.Size() );
352   CPPUNIT_ASSERT_EQUAL( gp_XY( 0, 0 ), aPointsList.Value( 1 ) );
353   CPPUNIT_ASSERT_EQUAL( gp_XY( 5, 7.5 ), aPointsList.Value( 2 ) );
354   CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 10 ), aPointsList.Value( 3 ) );
355   CPPUNIT_ASSERT_EQUAL( gp_XY( 15, 7.5 ), aPointsList.Value( 4 ) );
356   CPPUNIT_ASSERT_EQUAL( gp_XY( 20, 0 ), aPointsList.Value( 5 ) );
357
358
359   CPPUNIT_ASSERT_EQUAL( false, aPolyline3->IsCustom() );
360   aPolyline3->SetShape( WireCirc( gp_Pnt(), 10.0 ) );
361   CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsCustom() );
362   aPointsList = aPolyline3->GetPoints( 0 );
363
364   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_SPLINE, aPolyline3->GetSectionType( 0 ) );
365   CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsClosedSection( 0 ) );
366   CPPUNIT_ASSERT_EQUAL( 7, aPointsList.Size() );
367   CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 0 ), aPointsList.Value( 1 ) );
368   CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, 7.81831 ), aPointsList.Value( 2 ) );
369   CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, 9.749 ), aPointsList.Value( 3 ) );
370   CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, 4.339 ), aPointsList.Value( 4 ) );
371   CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, -4.339 ), aPointsList.Value( 5 ) );
372   CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, -9.749 ), aPointsList.Value( 6 ) );
373   CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, -7.81831 ), aPointsList.Value( 7 ) );
374
375   aDoc->Close();
376 }
377
378 void test_HYDROData_PolylineXY::test_merge_refs_630()
379 {
380   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
381
382   Handle(HYDROData_PolylineXY) aPolyline1 = 
383     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
384   Handle(HYDROData_PolylineXY) aPolyline2 = 
385     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
386
387   aPolyline1->SetName( "test1" );
388   aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
389   aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
390   aPolyline1->AddPoint( 0, gp_XY( 10, 0 ) );
391   aPolyline1->AddPoint( 0, gp_XY( 10, 10 ) );
392   aPolyline1->Update();
393
394   aPolyline2->SetName( "test2" );
395   aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
396   aPolyline2->AddPoint( 0, gp_XY( 20, 20 ) );
397   aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
398   aPolyline2->AddPoint( 0, gp_XY( 30, 0 ) );
399   aPolyline2->Update();
400
401   HYDROData_PolylineOperator anOp;
402   HYDROData_SequenceOfObjects aPolylines;
403   aPolylines.Append( aPolyline1 );
404   aPolylines.Append( aPolyline2 );
405   CPPUNIT_ASSERT_EQUAL( true, anOp.Merge( aDoc, "", aPolylines, true, 1E-3 ) );
406   //TODO: check false in merge
407
408   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
409   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
410   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
411   anIt.Next();
412   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
413   CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
414   anIt.Next();
415   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
416   CPPUNIT_ASSERT_EQUAL( QString( "merged_1" ), anIt.Current()->GetName() );
417   Handle(HYDROData_PolylineXY) aMerged = 
418     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
419   anIt.Next();
420   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
421
422   TestViewer::show( aMerged->GetShape(), 0, true, "Merge_Polylines" );
423   CPPUNIT_ASSERT_IMAGES
424
425   aDoc->Close();
426 }
427
428 void test_HYDROData_PolylineXY::test_split_straight_refs_634()
429 {
430   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
431
432   Handle(HYDROData_PolylineXY) aPolyline1 = 
433     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
434   Handle(HYDROData_PolylineXY) aPolyline2 = 
435     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
436
437   aPolyline1->SetName( "test1" );
438   aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
439   aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
440   aPolyline1->AddPoint( 0, gp_XY( 10, 20 ) );
441   aPolyline1->AddPoint( 0, gp_XY( 30, 10 ) );
442   aPolyline1->Update();
443
444   aPolyline2->SetName( "test2" );
445   aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
446   aPolyline2->AddPoint( 0, gp_XY( 0, 30 ) );
447   aPolyline2->AddPoint( 0, gp_XY( 10, 10 ) );
448   aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
449   aPolyline2->Update();
450
451   HYDROData_PolylineOperator anOp;
452   HYDROData_SequenceOfObjects aPolylines;
453   aPolylines.Append( aPolyline1 );
454   aPolylines.Append( aPolyline2 );
455   bool isIntersected;
456   CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline1, aPolyline2, 1E-3, isIntersected ) );
457   CPPUNIT_ASSERT_EQUAL( true, isIntersected );
458
459   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
460   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
461   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
462   anIt.Next();
463   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
464   CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
465   anIt.Next();
466
467   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
468   CPPUNIT_ASSERT_EQUAL( QString( "test1_1" ), anIt.Current()->GetName() );
469   Handle(HYDROData_PolylineXY) aPart1 = 
470     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
471   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart1->GetSectionType( 0 ) );
472   anIt.Next();
473
474   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
475   CPPUNIT_ASSERT_EQUAL( QString( "test1_2" ), anIt.Current()->GetName() );
476   Handle(HYDROData_PolylineXY) aPart2 = 
477     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
478   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart2->GetSectionType( 0 ) );
479   anIt.Next();
480
481   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
482   CPPUNIT_ASSERT_EQUAL( QString( "test1_3" ), anIt.Current()->GetName() );
483   Handle(HYDROData_PolylineXY) aPart3 = 
484     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
485   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart3->GetSectionType( 0 ) );
486   anIt.Next();
487
488   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
489
490   TestViewer::show( aPart1->GetShape(), 0, true, "Split_Straight" );
491   TestViewer::show( aPart2->GetShape(), 0, true, Qt::red );
492   TestViewer::show( aPart3->GetShape(), 0, true, Qt::green );
493   TestViewer::show( aPolyline2->GetShape(), 0, true, Qt::darkGreen );
494   CPPUNIT_ASSERT_IMAGES
495
496   aDoc->Close();
497 }