]> SALOME platform Git repositories - modules/hydro.git/blob - src/HYDRO_tests/test_HYDROData_PolylineXY.cxx
Salome HOME
lot 3 - coloring of section in OCC view see also refs #1838
[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 #include <HYDROGUI_Polyline.h>
32
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>
38 #include <QColor>
39 #include <QList>
40 #include <QPointF>
41 #include <QTest>
42
43 #include <TestShape.h>
44 #include <TestViewer.h>
45 #include <TopoDS_Edge.hxx>
46 #include <TopoDS_Vertex.hxx>
47 #include <TopoDS_Wire.hxx>
48 #include <gp_XY.hxx>
49
50 void test_HYDROData_PolylineXY::test_polyline()
51 {
52   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
53
54   Handle(HYDROData_PolylineXY) aPolyline = 
55     Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
56
57   aPolyline->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
58   aPolyline->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_SPLINE, true );
59
60   int aNbSections = aPolyline->NbSections();
61   CPPUNIT_ASSERT( aNbSections == 2 );
62   
63   NCollection_Sequence<TCollection_AsciiString>           aSectNames;
64   NCollection_Sequence<HYDROData_PolylineXY::SectionType> aSectTypes;
65   NCollection_Sequence<bool>                              aSectClosures;
66   aPolyline->GetSections( aSectNames, aSectTypes, aSectClosures );
67
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 );
72
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 );
76
77   aDoc->Close();
78 }
79
80 void test_HYDROData_PolylineXY::test_copy()
81 {
82   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
83   Handle(HYDROData_PolylineXY) aPolyline1 = 
84     Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
85
86
87 //  aPolyline1->setPoints(aPoints);
88
89   Handle(HYDROData_PolylineXY) aPolyline2 = 
90     Handle(HYDROData_PolylineXY)::DownCast(aDoc->CreateObject(KIND_POLYLINEXY));
91
92   aPolyline1->CopyTo(aPolyline2, true);
93
94
95   aDoc->Close();
96 }
97
98 void test_HYDROData_PolylineXY::test_split_refs_624()
99 {
100   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
101
102   Handle(HYDROData_PolylineXY) aPolyline = 
103     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
104   aPolyline->SetName( "test" );
105
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 );
109
110   gp_Pnt2d aPnt( 20, 20 );
111
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
115
116   HYDROData_PolylineOperator anOp;
117   CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
118
119   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
120   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
121   CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt.Current()->GetName() );
122   anIt.Next();
123   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
124   CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt.Current()->GetName() );
125   anIt.Next();
126   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
127
128   aDoc->Close();
129 }
130
131 void test_HYDROData_PolylineXY::test_extraction_immersible_zone()
132 {
133   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
134
135   Handle(HYDROData_PolylineXY) aPolyline = 
136     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
137   aPolyline->SetName( "test" );
138
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 );
142
143   Handle(HYDROData_ImmersibleZone) aZone = 
144     Handle(HYDROData_ImmersibleZone)::DownCast( aDoc->CreateObject( KIND_IMMERSIBLE_ZONE ) );
145   aZone->SetName( "zone" );
146   aZone->SetPolyline( aPolyline );
147   aZone->Update();
148
149   CPPUNIT_ASSERT_EQUAL( false, (bool)aZone->GetTopShape().IsNull() );
150
151   HYDROData_PolylineOperator anOp;
152   CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aZone ) );
153
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() );
157
158   TestViewer::show( aZone->GetTopShape(), 1, true, "Extraction_ImmZone" );
159   TestViewer::show( anOuter->GetShape(), 0, true, Qt::red );
160   CPPUNIT_ASSERT_IMAGES
161
162   aDoc->Close();
163 }
164
165 void test_HYDROData_PolylineXY::test_extraction_channel_refs_611()
166 {
167   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
168
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 );
173
174   Handle(HYDROData_Polyline3D) aPolyline3d = 
175     Handle(HYDROData_Polyline3D)::DownCast( aDoc->CreateObject( KIND_POLYLINE ) );
176   aPolyline3d->SetName( "polyline3d_1" );
177   aPolyline3d->SetPolylineXY( aPolyline2d );
178
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 );
184
185   Handle(HYDROData_Profile) aProfile = 
186     Handle(HYDROData_Profile)::DownCast( aDoc->CreateObject( KIND_PROFILE ) );
187   aProfile->SetName( "profile_1" );
188
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 );
193
194
195   Handle(HYDROData_Channel) aChannel = 
196     Handle(HYDROData_Channel)::DownCast( aDoc->CreateObject( KIND_CHANNEL ) );
197   aChannel->SetName( "channel_1" );
198   
199   aChannel->SetGuideLine( aPolyline3d );
200   aChannel->SetProfile( aProfile );
201   aChannel->Update();
202   CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetTopShape().IsNull() );
203   CPPUNIT_ASSERT_EQUAL( false, (bool)aChannel->GetShape3D().IsNull() );
204
205   HYDROData_PolylineOperator anOp;
206   CPPUNIT_ASSERT_EQUAL( true, anOp.Extract( aDoc, aChannel ) );
207
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() );
213
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
218
219   aDoc->Close();
220 }
221
222 void test_HYDROData_PolylineXY::test_presentation()
223 {
224   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
225
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 );
230
231   QList<gp_XY> aPoints = QList<gp_XY>() << gp_XY(  0,  0 )
232                                         << gp_XY( 10, 10 )
233                                         << gp_XY( 20, 40 )
234                                         << gp_XY( 30, 10 )
235                                         << gp_XY( 40, 50 )
236                                         << gp_XY( 50, 60 )
237                                         << gp_XY( -10, 40 )
238                                         << gp_XY( -9, 39 )
239                                         << gp_XY( -8, 38 )
240                                         << gp_XY(  0, 20 );
241   Handle(TColgp_HArray1OfPnt) aPnts = new TColgp_HArray1OfPnt( 1, aPoints.size() );
242   int i = 1;
243   foreach( gp_XY aPoint, aPoints )
244   {
245     aPolyline2d->AddPoint( 0, aPoint );
246     aPnts->SetValue( i, gp_Pnt( aPoint.X(), aPoint.Y(), 0 ) );
247     i++;
248   }
249   aPolyline2d->Update();
250
251   CPPUNIT_ASSERT_EQUAL( false, (bool)aPolyline2d->GetShape().IsNull() );
252
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 );
257
258   aPolyline2d->SetWireColor( Qt::darkGreen );
259   HYDROGUI_Shape* aNewPolylinePrs = new HYDROGUI_Shape( TestViewer::context(), aPolyline2d );
260   aNewPolylinePrs->update( true, true );
261
262
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() );
267
268   
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
278
279
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, true );
287   aNewPolylinePrs->display();
288   TestViewer::fitAll();
289   CPPUNIT_ASSERT_IMAGES
290
291   //QTest::qWait( 50000 );  
292   aDoc->Close();
293 }
294
295 void test_HYDROData_PolylineXY::test_split_refs_627()
296 {
297   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
298
299   Handle(HYDROData_PolylineXY) aPolyline = 
300     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
301   aPolyline->SetName( "test" );
302
303
304   //QList<double> aCoords = QList<double>() << 10 << 10 << 20 << 10 << 20 << 20 << 10 << 20;
305   aPolyline->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
306   aPolyline->AddPoint( 0, gp_XY( 10, 10  ) );
307   aPolyline->AddPoint( 0, gp_XY( 20, 10 ) );
308   aPolyline->AddPoint( 0, gp_XY( 20, 20 ) );
309   aPolyline->AddPoint( 0, gp_XY( 10, 20 ) );
310   aPolyline->Update();
311
312
313   //TopoDS_Wire aWire = Wire2d( aCoords, false );
314   //aPolyline->SetShape( aWire );
315   TopoDS_Shape aW = aPolyline->GetShape();
316   CPPUNIT_ASSERT (aW.ShapeType() == TopAbs_WIRE);
317
318   aPolyline->SetWireColor( Qt::red );
319
320   gp_Pnt2d aPnt( 20, 20 );
321   
322   HYDROData_PolylineOperator anOp;
323   CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline, aPnt, 1E-3 ) );
324
325   TestViewer::show( TopoDS_Shape(), 0, true, "Split_Polylines_Colors" );
326   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
327   for( ; anIt.More(); anIt.Next() )
328   {
329     Handle(HYDROData_PolylineXY) anObj = Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
330     if( aPolyline->Label() != anObj->Label() )
331     {
332       QColor color;
333       anObj->GetSectionColor(0, color);
334       TestViewer::show( anObj->GetShape(), 0, true, color );
335     }
336   }
337   CPPUNIT_ASSERT_IMAGES
338     
339   HYDROData_Iterator anIt2( aDoc, KIND_POLYLINEXY );
340   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
341   CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt2.Current()->GetName() );
342
343   QColor color1, color2, color3;
344   Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color1);
345
346   CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color1);
347   anIt2.Next();
348   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
349   CPPUNIT_ASSERT_EQUAL( QString( "test_1" ), anIt2.Current()->GetName() );
350
351   Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color2);
352   CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color2 );
353
354   anIt2.Next();
355   CPPUNIT_ASSERT_EQUAL( true, anIt2.More() );
356   CPPUNIT_ASSERT_EQUAL( QString( "test_2" ), anIt2.Current()->GetName() );
357   Handle(HYDROData_PolylineXY)::DownCast( anIt2.Current() )->GetSectionColor(0, color3);
358   CPPUNIT_ASSERT_EQUAL( QColor( Qt::red ), color3 );
359   anIt2.Next();
360   CPPUNIT_ASSERT_EQUAL( false, anIt2.More() );
361   anIt2.Next();
362
363   aDoc->Close();
364 }
365
366 void test_HYDROData_PolylineXY::test_custom_polylines()
367 {
368   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
369
370   Handle(HYDROData_PolylineXY) aPolyline1 = 
371     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
372   Handle(HYDROData_PolylineXY) aPolyline2 = 
373     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
374   Handle(HYDROData_PolylineXY) aPolyline3 = 
375     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
376
377   aPolyline1->SetName( "test1" );
378   aPolyline2->SetName( "test2" );
379   aPolyline3->SetName( "test3" );
380
381   CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
382   aPolyline1->AddSection( "", HYDROData_IPolyline::SECTION_SPLINE, false );
383   aPolyline1->Update();
384   CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
385   aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
386   aPolyline1->Update();
387   CPPUNIT_ASSERT_EQUAL( false, aPolyline1->IsCustom() );
388
389   CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
390   aPolyline2->SetShape( Wire2d( QList<double>() << 0 << 0 << 10 << 10 << 20 << 0 ) );
391   CPPUNIT_ASSERT_EQUAL( true, aPolyline2->IsCustom() );
392   HYDROData_PolylineXY::PointsList aPointsList = aPolyline2->GetPoints( 0 );
393
394   CPPUNIT_ASSERT_EQUAL( false, aPolyline2->IsCustom() );
395   CPPUNIT_ASSERT_EQUAL( 5, aPointsList.Size() );
396   CPPUNIT_ASSERT_EQUAL( gp_XY( 0, 0 ), aPointsList.Value( 1 ) );
397   CPPUNIT_ASSERT_EQUAL( gp_XY( 5, 7.5 ), aPointsList.Value( 2 ) );
398   CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 10 ), aPointsList.Value( 3 ) );
399   CPPUNIT_ASSERT_EQUAL( gp_XY( 15, 7.5 ), aPointsList.Value( 4 ) );
400   CPPUNIT_ASSERT_EQUAL( gp_XY( 20, 0 ), aPointsList.Value( 5 ) );
401
402
403   CPPUNIT_ASSERT_EQUAL( false, aPolyline3->IsCustom() );
404   aPolyline3->SetShape( WireCirc( gp_Pnt(), 10.0 ) );
405   CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsCustom() );
406   aPointsList = aPolyline3->GetPoints( 0 );
407
408   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_SPLINE, aPolyline3->GetSectionType( 0 ) );
409   CPPUNIT_ASSERT_EQUAL( true, aPolyline3->IsClosedSection( 0 ) );
410   CPPUNIT_ASSERT_EQUAL( 7, aPointsList.Size() );
411   CPPUNIT_ASSERT_EQUAL( gp_XY( 10, 0 ), aPointsList.Value( 1 ) );
412   CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, 7.81831 ), aPointsList.Value( 2 ) );
413   CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, 9.749 ), aPointsList.Value( 3 ) );
414   CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, 4.339 ), aPointsList.Value( 4 ) );
415   CPPUNIT_ASSERT_EQUAL( gp_XY( -9.01, -4.339 ), aPointsList.Value( 5 ) );
416   CPPUNIT_ASSERT_EQUAL( gp_XY( -2.225, -9.749 ), aPointsList.Value( 6 ) );
417   CPPUNIT_ASSERT_EQUAL( gp_XY( 6.2349, -7.81831 ), aPointsList.Value( 7 ) );
418
419   aDoc->Close();
420 }
421
422 void test_HYDROData_PolylineXY::test_merge_refs_630()
423 {
424   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
425
426   Handle(HYDROData_PolylineXY) aPolyline1 = 
427     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
428   Handle(HYDROData_PolylineXY) aPolyline2 = 
429     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
430
431   aPolyline1->SetName( "test1" );
432   aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
433   aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
434   aPolyline1->AddPoint( 0, gp_XY( 10, 0 ) );
435   aPolyline1->AddPoint( 0, gp_XY( 10, 10 ) );
436   aPolyline1->Update();
437
438   aPolyline2->SetName( "test2" );
439   aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
440   aPolyline2->AddPoint( 0, gp_XY( 20, 20 ) );
441   aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
442   aPolyline2->AddPoint( 0, gp_XY( 30, 0 ) );
443   aPolyline2->Update();
444
445   HYDROData_PolylineOperator anOp;
446   HYDROData_SequenceOfObjects aPolylines;
447   aPolylines.Append( aPolyline1 );
448   aPolylines.Append( aPolyline2 );
449   CPPUNIT_ASSERT_EQUAL( true, anOp.Merge( aDoc, "", aPolylines, true, 1E-3 ) );
450   //TODO: check false in merge
451
452   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
453   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
454   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
455   anIt.Next();
456   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
457   CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
458   anIt.Next();
459   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
460   CPPUNIT_ASSERT_EQUAL( QString( "merged_1" ), anIt.Current()->GetName() );
461   Handle(HYDROData_PolylineXY) aMerged = 
462     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
463   anIt.Next();
464   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
465
466   TestViewer::show( aMerged->GetShape(), 0, true, "Merge_Polylines" );
467   CPPUNIT_ASSERT_IMAGES
468
469   aDoc->Close();
470 }
471
472 void test_HYDROData_PolylineXY::test_split_straight_refs_634()
473 {
474   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
475
476   Handle(HYDROData_PolylineXY) aPolyline1 = 
477     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
478   Handle(HYDROData_PolylineXY) aPolyline2 = 
479     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
480
481   aPolyline1->SetName( "test1" );
482   aPolyline1->AddSection( "", HYDROData_PolylineXY::SECTION_POLYLINE, false );
483   aPolyline1->AddPoint( 0, gp_XY( 0, 0 ) );
484   aPolyline1->AddPoint( 0, gp_XY( 10, 20 ) );
485   aPolyline1->AddPoint( 0, gp_XY( 30, 10 ) );
486   aPolyline1->Update();
487
488   aPolyline2->SetName( "test2" );
489   aPolyline2->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, false );
490   aPolyline2->AddPoint( 0, gp_XY( 0, 30 ) );
491   aPolyline2->AddPoint( 0, gp_XY( 10, 10 ) );
492   aPolyline2->AddPoint( 0, gp_XY( 30, 20 ) );
493   aPolyline2->Update();
494
495   HYDROData_PolylineOperator anOp;
496   HYDROData_SequenceOfObjects aPolylines;
497   aPolylines.Append( aPolyline1 );
498   aPolylines.Append( aPolyline2 );
499   bool isIntersected;
500   CPPUNIT_ASSERT_EQUAL( true, anOp.Split( aDoc, aPolyline1, aPolyline2, 1E-3, isIntersected ) );
501   CPPUNIT_ASSERT_EQUAL( true, isIntersected );
502
503   HYDROData_Iterator anIt( aDoc, KIND_POLYLINEXY );
504   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
505   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.Current()->GetName() );
506   anIt.Next();
507   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
508   CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.Current()->GetName() );
509   anIt.Next();
510
511   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
512   CPPUNIT_ASSERT_EQUAL( QString( "test1_1" ), anIt.Current()->GetName() );
513   Handle(HYDROData_PolylineXY) aPart1 = 
514     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
515   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart1->GetSectionType( 0 ) );
516   anIt.Next();
517
518   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
519   CPPUNIT_ASSERT_EQUAL( QString( "test1_2" ), anIt.Current()->GetName() );
520   Handle(HYDROData_PolylineXY) aPart2 = 
521     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
522   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart2->GetSectionType( 0 ) );
523   anIt.Next();
524
525   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
526   CPPUNIT_ASSERT_EQUAL( QString( "test1_3" ), anIt.Current()->GetName() );
527   Handle(HYDROData_PolylineXY) aPart3 = 
528     Handle(HYDROData_PolylineXY)::DownCast( anIt.Current() );
529   CPPUNIT_ASSERT_EQUAL( HYDROData_PolylineXY::SECTION_POLYLINE, aPart3->GetSectionType( 0 ) );
530   anIt.Next();
531
532   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
533
534   TestViewer::show( aPart1->GetShape(), 0, true, "Split_Straight" );
535   TestViewer::show( aPart2->GetShape(), 0, true, Qt::red );
536   TestViewer::show( aPart3->GetShape(), 0, true, Qt::green );
537   TestViewer::show( aPolyline2->GetShape(), 0, true, Qt::darkGreen );
538   CPPUNIT_ASSERT_IMAGES
539
540   aDoc->Close();
541 }