Salome HOME
5adf002a7c73ed8bee3a81546c7a684d4e1a33fa
[modules/hydro.git] / src / HYDRO_tests / test_HYDROData_LandCoverMap.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_LandCoverMap.h>
20 #include <HYDROData_CalculationCase.h>
21 #include <HYDROData_Document.h>
22 #include <HYDROData_LandCoverMap.h>
23 #include <HYDROData_ImmersibleZone.h>
24 #include <HYDROData_PolylineXY.h>
25 #include <HYDROData_StricklerTable.h>
26 #include <HYDROData_Tool.h>
27 #include <HYDROData_ShapeFile.h>
28 #include <HYDROGUI_LandCoverMapPrs.h>
29 #include <TopoDS_Edge.hxx>
30 #include <TopoDS_Wire.hxx>
31 #include <TopoDS_Face.hxx>
32 #include <TopoDS.hxx>
33 #include <TestViewer.h>
34 #include <TestShape.h>
35 #include <TopTools_ListOfShape.hxx>
36 #include <AIS_DisplayMode.hxx>
37 #include <Aspect_ColorScale.hxx>
38 #include <BRepMesh_IncrementalMesh.hxx>
39 #include <QString>
40 #include <QColor>
41 #include <QMap>
42 #include <QDir>
43 #include <BRepTools.hxx>
44 #include <BRep_Builder.hxx>
45 #include <BRepCheck_Analyzer.hxx>
46
47 #define _DEVDEBUG_
48 #include "HYDRO_trace.hxx"
49
50 //const QString REF_DATA_PATH = qgetenv( "HYDRO_REFERENCE_DATA" );
51 const QString REF_DATA_PATH = qgetenv( "HYDRO_DIR" ) + "/../../src/HYDRO/src/HYDRO_tests/reference_data";
52 const QString DEF_STR_PATH = qgetenv( "HYDRO_DIR" ) + "/../../src/HYDRO/src/HYDROGUI/resources/def_strickler_table.txt";
53
54 void test_HYDROData_LandCoverMap::test_add_2_objects()
55 {
56   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
57
58   Handle(HYDROData_LandCoverMap) aMap =
59     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
60
61   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
62
63   TopoDS_Face aLC1 = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
64   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
65
66   TopoDS_Face aLC2 = Face( QList<double>() << 30 << 20 << 60 << 10 << 70 << 35 << 40 << 40 );
67   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
68
69   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Add_2_Objects" );
70   CPPUNIT_ASSERT_IMAGES
71
72   HYDROData_LandCoverMap::Explorer anIt( aMap );
73   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
74   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
75   anIt.Next();
76   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
77   CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.StricklerType() );
78   anIt.Next();
79   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
80
81   aDoc->Close();
82 }
83
84 void test_HYDROData_LandCoverMap::test_split()
85 {
86   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
87
88   Handle(HYDROData_LandCoverMap) aMap =
89     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
90
91   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
92
93   TopoDS_Face aLC = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
94   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC, "test1" ) );
95
96   Handle(HYDROData_PolylineXY) aPolyline =
97     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
98   TopoDS_Wire aWire = Wire( QList<double>() << 10 << 40 << 30 << 10 << 40 << 10 << 60 << 10, false );
99   aPolyline->SetShape( aWire );
100
101   CPPUNIT_ASSERT_EQUAL( true, aMap->Split( aPolyline ) );
102
103   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Split_1" );
104   TestViewer::show( aWire, 0, true, Qt::blue );
105   CPPUNIT_ASSERT_IMAGES
106
107   HYDROData_LandCoverMap::Explorer anIt( aMap );
108   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
109   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
110   anIt.Next();
111   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
112   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
113   anIt.Next();
114   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
115
116   aDoc->Close();
117 }
118
119 void test_HYDROData_LandCoverMap::test_incomplete_split()
120 {
121   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
122
123   Handle(HYDROData_LandCoverMap) aMap =
124     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
125
126   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
127
128   TopoDS_Face aLC = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
129   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC, "test1" ) );
130
131   Handle(HYDROData_PolylineXY) aPolyline =
132     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
133   TopoDS_Wire aWire = Wire( QList<double>() << 10 << 40 << 30 << 10 << 40 << 10, false );
134   aPolyline->SetShape( aWire );
135
136   CPPUNIT_ASSERT_EQUAL( true, aMap->Split( aPolyline ) );
137
138   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Split_2" );
139   TestViewer::show( aWire, 0, true, Qt::green );
140   CPPUNIT_ASSERT_IMAGES
141
142   HYDROData_LandCoverMap::Explorer anIt( aMap );
143   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
144   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
145   anIt.Next();
146   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
147
148   aDoc->Close();
149 }
150
151 void test_HYDROData_LandCoverMap::test_merge()
152 {
153   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
154
155   Handle(HYDROData_LandCoverMap) aMap =
156     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
157
158   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
159
160   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
161
162   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
163
164   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
165                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
166                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
167                                               31 << 114 );
168   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
169
170   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
171                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
172   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "test3" ) );
173
174   //TestViewer::show( aMap->GetShape(), AIS_Shaded, true );
175   //TestViewer::AssertEqual( "LandCoverMap_Before_Merge" );
176
177   //BRepTools::Write( aMap->GetShape(), "c:\\map.brep" );
178
179   QString aType1, aType2;
180   gp_Pnt2d aPnt1( 25, 35 );
181   gp_Pnt2d aPnt2( 45, 55 );
182   //gp_Pnt2d aPnt3( 45, 10 );
183   //gp_Pnt2d aPnt4( 45, 80 );
184   TopTools_ListOfShape aList;
185   aList.Append( aMap->FindByPoint( aPnt1, aType1 ) );
186   aList.Append( aMap->FindByPoint( aPnt2, aType2 ) );
187   CPPUNIT_ASSERT_EQUAL( true, aMap->Merge( aList, "new" ) );
188
189   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Merge_1" );
190   //TestViewer::show( BRepBuilderAPI_MakeEdge( gp_Pnt(aPnt1.X(), aPnt1.Y(), 0), gp_Pnt(aPnt2.X(), aPnt2.Y(), 0) ).Edge(), QColor( Qt::blue ), AIS_Shaded );
191   CPPUNIT_ASSERT_IMAGES
192
193   aDoc->Close();
194 }
195
196 void test_HYDROData_LandCoverMap::test_merge_refs_691()
197 {
198   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
199
200   Handle(HYDROData_PolylineXY) Polyline_4 =
201     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
202   Polyline_4->SetName( "test_Polyline_4" );
203   Polyline_4->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
204   Polyline_4->AddPoint( 0, gp_XY( -242.741935, -16.129032 ) );
205   Polyline_4->AddPoint( 0, gp_XY( -339.516129, -95.161290 ) );
206   Polyline_4->AddPoint( 0, gp_XY( -204.032258, -167.740000 ) );
207   Polyline_4->AddPoint( 0, gp_XY( -86.290000, -158.060000 ) );
208   Polyline_4->AddPoint( 0, gp_XY( -83.064516, -37.096774 ) );
209   Polyline_4->AddPoint( 0, gp_XY( -116.935484, 17.741935 ) );
210   Polyline_4->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_POLYLINE, true );
211   Polyline_4->AddPoint( 1, gp_XY( -239.516129, -295.161290 ) );
212   Polyline_4->AddPoint( 1, gp_XY( -204.030000, -167.740000 ) );
213   Polyline_4->AddPoint( 1, gp_XY( -86.290000, -158.060000 ) );
214   Polyline_4->AddPoint( 1, gp_XY( -2.419355, -288.709677 ) );
215   Polyline_4->AddPoint( 1, gp_XY( -165.322581, -351.612903 ) );
216   Polyline_4->Update();
217
218   Handle(HYDROData_LandCoverMap) aMap =
219     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
220
221   CPPUNIT_ASSERT_EQUAL( true, aMap->Add( Polyline_4, "test" ) );
222
223   TopTools_ListOfShape aList;
224   HYDROData_LandCoverMap::Explorer anIt( aMap );
225   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
226   CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt.StricklerType() );
227   aList.Append( anIt.Face() );
228   anIt.Next();
229   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
230   CPPUNIT_ASSERT_EQUAL( QString( "test" ), anIt.StricklerType() );
231   aList.Append( anIt.Face() );
232   anIt.Next();
233   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
234
235   BRepCheck_Analyzer aCheck1( aMap->GetShape() );
236   CPPUNIT_ASSERT_EQUAL( true, (bool)aCheck1.IsValid() );
237   
238   CPPUNIT_ASSERT_EQUAL( true, aMap->Merge( aList, "test" ) );
239
240   BRepCheck_Analyzer aCheck2( aMap->GetShape() );
241   CPPUNIT_ASSERT_EQUAL( true, (bool)aCheck2.IsValid() );
242
243   // we try construct the triangulation to check that it is correct
244   BRepMesh_IncrementalMesh anIncMesh( aMap->GetShape(), 0.01 );
245   CPPUNIT_ASSERT_EQUAL( true, (bool)anIncMesh.IsDone() );
246   BRepCheck_Analyzer aCheck3( aMap->GetShape() );
247   CPPUNIT_ASSERT_EQUAL( true, (bool)aCheck3.IsValid() );
248
249   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
250   TestViewer::show( aPrs, AIS_Shaded, 0, true, "LandCoverMap_Merge_2" );
251   CPPUNIT_ASSERT_IMAGES
252
253   aDoc->Close();
254 }
255
256 void test_HYDROData_LandCoverMap::test_remove()
257 {
258   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
259
260   Handle(HYDROData_LandCoverMap) aMap =
261     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
262
263   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
264
265   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
266
267   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
268
269   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
270                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
271                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
272                                               31 << 114 );
273   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
274
275   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
276                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
277   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "test3" ) );
278
279   QString aType1, aType2;
280   gp_Pnt2d aPnt1( 25, 35 );
281   gp_Pnt2d aPnt2( 45, 55 );
282   TopTools_ListOfShape aList;
283   aList.Append( aMap->FindByPoint( aPnt1, aType1 ) );
284   aList.Append( aMap->FindByPoint( aPnt2, aType2 ) );
285   CPPUNIT_ASSERT_EQUAL( true, aMap->Remove( aList ) );
286
287   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Remove_1" );
288   CPPUNIT_ASSERT_IMAGES
289
290   aDoc->Close();
291 }
292
293 void test_HYDROData_LandCoverMap::test_merge_faces_boxes()
294 {
295   TopoDS_Shape pp1, pp2, pp3, pp4;
296   BRep_Builder BB;
297   BRepTools::Read(pp1, (REF_DATA_PATH + "/pp1.brep").toStdString().c_str(), BB);
298   BRepTools::Read(pp2, (REF_DATA_PATH + "/pp2.brep").toStdString().c_str(), BB);
299   BRepTools::Read(pp3, (REF_DATA_PATH + "/pp3.brep").toStdString().c_str(), BB);
300   BRepTools::Read(pp4, (REF_DATA_PATH + "/pp4.brep").toStdString().c_str(), BB);
301
302   CPPUNIT_ASSERT(!pp1.IsNull());
303   CPPUNIT_ASSERT(!pp2.IsNull());
304   CPPUNIT_ASSERT(!pp3.IsNull());
305   CPPUNIT_ASSERT(!pp4.IsNull());
306
307   //Test mergeFaces() func // boxes // USD == true
308   {
309     TopTools_ListOfShape Faces;
310     Faces.Append(pp1);
311     Faces.Append(pp2);
312     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
313     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_11" );
314     CPPUNIT_ASSERT_IMAGES
315     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_FACE);
316     BRepCheck_Analyzer aBCA(aMergedFace);
317     CPPUNIT_ASSERT(aBCA.IsValid());
318   }
319   {
320     TopTools_ListOfShape Faces;
321     Faces.Append(pp1);
322     Faces.Append(pp3);
323     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
324     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_12" );
325     CPPUNIT_ASSERT_IMAGES
326     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
327     BRepCheck_Analyzer aBCA(aMergedFace);
328     CPPUNIT_ASSERT(aBCA.IsValid());
329   }
330   {
331     TopTools_ListOfShape Faces;
332     Faces.Append(pp1);
333     Faces.Append(pp2);
334     Faces.Append(pp4);
335     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
336     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_13" );
337     CPPUNIT_ASSERT_IMAGES
338     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
339     BRepCheck_Analyzer aBCA(aMergedFace);
340     CPPUNIT_ASSERT(aBCA.IsValid());
341   }
342   {
343     TopTools_ListOfShape Faces;
344     Faces.Append(pp1);
345     Faces.Append(pp3);
346     Faces.Append(pp4);
347     Faces.Append(pp2);
348     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
349     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_14" );
350     CPPUNIT_ASSERT_IMAGES
351     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_FACE);
352     BRepCheck_Analyzer aBCA(aMergedFace);
353     CPPUNIT_ASSERT(aBCA.IsValid());
354   }
355   //
356
357   //Test mergeFaces() func // boxes // USD == false
358   {
359     TopTools_ListOfShape Faces;
360     Faces.Append(pp1);
361     Faces.Append(pp2);
362     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
363     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_21" );
364     CPPUNIT_ASSERT_IMAGES
365     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
366     BRepCheck_Analyzer aBCA(aMergedFace);
367     CPPUNIT_ASSERT(aBCA.IsValid());
368   }
369   {
370     TopTools_ListOfShape Faces;
371     Faces.Append(pp1);
372     Faces.Append(pp3);
373     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
374     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_22" );
375     CPPUNIT_ASSERT_IMAGES
376     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
377     BRepCheck_Analyzer aBCA(aMergedFace);
378     CPPUNIT_ASSERT(aBCA.IsValid());
379   }
380   {
381     TopTools_ListOfShape Faces;
382     Faces.Append(pp1);
383     Faces.Append(pp2);
384     Faces.Append(pp4);
385     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
386     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_23" );
387     CPPUNIT_ASSERT_IMAGES
388     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
389     BRepCheck_Analyzer aBCA(aMergedFace);
390     CPPUNIT_ASSERT(aBCA.IsValid());
391   }
392   {
393     TopTools_ListOfShape Faces;
394     Faces.Append(pp1);
395     Faces.Append(pp3);
396     Faces.Append(pp4);
397     Faces.Append(pp2);
398     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
399     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_24" );
400     CPPUNIT_ASSERT_IMAGES
401     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
402     BRepCheck_Analyzer aBCA(aMergedFace);
403     CPPUNIT_ASSERT(aBCA.IsValid());
404   }
405 }
406
407
408 void test_HYDROData_LandCoverMap::test_merge_faces_circles()
409 {
410   TopoDS_Shape ff1, ff2, ff3;
411   BRep_Builder BB;
412   BRepTools::Read(ff1, (REF_DATA_PATH + "/ff1.brep").toStdString().c_str(), BB);
413   BRepTools::Read(ff2, (REF_DATA_PATH + "/ff2.brep").toStdString().c_str(), BB);
414   BRepTools::Read(ff3, (REF_DATA_PATH + "/ff3.brep").toStdString().c_str(), BB);
415
416   CPPUNIT_ASSERT(!ff1.IsNull());
417   CPPUNIT_ASSERT(!ff2.IsNull());
418   CPPUNIT_ASSERT(!ff3.IsNull());
419
420   //Test mergeFaces() func // circles // USD == true
421   { 
422     TopTools_ListOfShape Faces;
423     Faces.Append(ff1);
424     Faces.Append(ff2);
425     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
426     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_11" );
427     CPPUNIT_ASSERT_IMAGES
428     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_FACE);
429     BRepCheck_Analyzer aBCA(aMergedFace);
430     CPPUNIT_ASSERT(aBCA.IsValid());
431   }
432   {
433     TopTools_ListOfShape Faces;
434     Faces.Append(ff1);
435     Faces.Append(ff3);
436     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
437     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_12" );
438     CPPUNIT_ASSERT_IMAGES
439     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
440     BRepCheck_Analyzer aBCA(aMergedFace);
441     CPPUNIT_ASSERT(aBCA.IsValid());
442   }
443   {
444     TopTools_ListOfShape Faces;
445     Faces.Append(ff1);
446     Faces.Append(ff2);
447     Faces.Append(ff3);
448     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
449     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_13" );
450     CPPUNIT_ASSERT_IMAGES
451     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
452     BRepCheck_Analyzer aBCA(aMergedFace);
453     CPPUNIT_ASSERT(aBCA.IsValid());
454   }
455   {
456     TopTools_ListOfShape Faces;
457     Faces.Append(ff1);
458     Faces.Append(ff3);
459     Faces.Append(ff2);
460     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
461     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_14" );
462     CPPUNIT_ASSERT_IMAGES
463     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
464     BRepCheck_Analyzer aBCA(aMergedFace);
465     CPPUNIT_ASSERT(aBCA.IsValid());
466   }
467   //
468
469   //Test mergeFaces() func // circles // USD == false
470   {
471     TopTools_ListOfShape Faces;
472     Faces.Append(ff1);
473     Faces.Append(ff2);
474     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
475     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_21" );
476     CPPUNIT_ASSERT_IMAGES
477     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
478     BRepCheck_Analyzer aBCA(aMergedFace);
479     CPPUNIT_ASSERT(aBCA.IsValid());
480   }
481   {
482     TopTools_ListOfShape Faces;
483     Faces.Append(ff1);
484     Faces.Append(ff3);
485     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
486     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_22" );
487     CPPUNIT_ASSERT_IMAGES
488     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
489     BRepCheck_Analyzer aBCA(aMergedFace);
490     CPPUNIT_ASSERT(aBCA.IsValid());
491   }
492   {
493     TopTools_ListOfShape Faces;
494     Faces.Append(ff1);
495     Faces.Append(ff2);
496     Faces.Append(ff3);
497     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
498     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_23" );
499     CPPUNIT_ASSERT_IMAGES
500     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
501     BRepCheck_Analyzer aBCA(aMergedFace);
502     CPPUNIT_ASSERT(aBCA.IsValid());
503   }
504   {
505     TopTools_ListOfShape Faces;
506     Faces.Append(ff1);
507     Faces.Append(ff3);
508     Faces.Append(ff2);
509     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
510     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_24" );
511     CPPUNIT_ASSERT_IMAGES
512     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_COMPOUND);
513     BRepCheck_Analyzer aBCA(aMergedFace);
514     CPPUNIT_ASSERT(aBCA.IsValid());
515   }
516 }
517
518 void test_HYDROData_LandCoverMap::test_import_dbf()
519 {
520   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
521
522   Handle(HYDROData_LandCoverMap) aMap =
523     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
524
525   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
526   QString aFileName = REF_DATA_PATH + "/t1.dbf";
527   QStringList aDBFV;
528   QStringList aST;
529   aDBFV.append("100");
530   aDBFV.append("200");
531   aDBFV.append("300");
532   aST.append("water");
533   aST.append("forest");
534   aST.append("road");
535   // aST.size() == aDBFV.size()!!
536   Handle(HYDROData_PolylineXY) aPolyline =
537     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
538   TopoDS_Wire aWire = Wire( QList<double>() << 10 << 40 << 30 << 10 << 40 << 10 << 60 << 10 );
539   aPolyline->SetShape( aWire );
540   for (int i = 0; i < 3; i++)
541     aMap->Add(aPolyline, "");
542   TopoDS_Face aLC1 = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
543   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
544   
545   CPPUNIT_ASSERT_EQUAL( true, aMap->Split( aPolyline ) );
546   QList<int> Inds = QList<int>() << 1 << 2 << 3;
547   aMap->ImportDBF(aFileName, "TESTFIELD1", aDBFV, aST, Inds);
548   HYDROData_LandCoverMap::Explorer anIt( aMap );
549   CPPUNIT_ASSERT_EQUAL( QString( "forest" ), anIt.StricklerType() );
550   anIt.Next();
551   CPPUNIT_ASSERT_EQUAL( QString( "road" ), anIt.StricklerType() );
552
553   aDoc->Close();
554 }
555
556 void test_HYDROData_LandCoverMap::test_land_cover_prs_by_types()
557 {
558   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
559
560   Handle(HYDROData_StricklerTable) aTable =
561     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
562   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
563
564   Handle(HYDROData_LandCoverMap) aMap =
565     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
566
567   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
568   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "Zones de champs cultivé à végétation basse" ) );
569
570   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
571                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
572                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
573                                               31 << 114 );
574   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "Zones de champs cultivé à végétation haute" ) );
575
576   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
577                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
578   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "Zones de champs, prairies, sans cultures" ) );
579
580   // build presentation object 
581   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
582   aPrs->SetTable( aTable );
583   // show presentation in viewer
584   TestViewer::show( aPrs, AIS_Shaded, 4, true, "LandCoverMap_PrsByTypes" );
585   // select one of faces (first)
586   TestViewer::select( 200, 300 );
587   CPPUNIT_ASSERT_IMAGES
588
589   aDoc->Close();
590 }
591
592 void test_HYDROData_LandCoverMap::test_land_cover_prs_by_coeff()
593 {
594   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
595
596   Handle(HYDROData_StricklerTable) aTable =
597     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
598   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
599
600   Handle(HYDROData_LandCoverMap) aMap =
601     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
602
603   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
604   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "Zones de champs cultivé à végétation basse" ) );
605
606   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
607                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
608                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
609                                               31 << 114 );
610   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "Zones de champs cultivé à végétation haute" ) );
611
612   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
613                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
614   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "Zones de champs, prairies, sans cultures" ) );
615
616   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
617   aPrs->SetTable( aTable );
618   TestViewer::showColorScale( true );
619   aPrs->SetColorScale( TestViewer::colorScale() );
620   TestViewer::show( aPrs, AIS_Shaded, 4, true, "LandCoverMap_PrsByCoeff" );
621   CPPUNIT_ASSERT_IMAGES
622
623   TestViewer::showColorScale( false );
624   aDoc->Close();
625 }
626
627 void test_HYDROData_LandCoverMap::test_dump_python()
628 {
629   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
630
631   Handle(HYDROData_StricklerTable) aTable =
632     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
633   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
634   aTable->SetName( "DefStr" );
635
636   Handle(HYDROData_LandCoverMap) aMap =
637     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
638   aMap->SetName( "test_LCM" );
639
640   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
641
642   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
643
644   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
645
646   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
647                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
648                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
649                                               31 << 114 );
650   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
651
652   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
653                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
654   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "test3" ) );
655
656   QString aBaseName = "lc_dump.py";
657   QString aBaseShp = "lc_dump.shp";
658   QString aBaseDbf = "lc_dump.dbf";
659   QString aTmpPath = QDir::tempPath() + "/" + aBaseName;
660   CPPUNIT_ASSERT_EQUAL( true, aDoc->DumpToPython( aTmpPath, false ) );
661
662   //TODO: CPPUNIT_ASSERT_SCRIPTS_EQUAL( aBaseName, true, false, 20 );
663   //TODO: CPPUNIT_ASSERT_FILES_EQUAL( aBaseShp );
664   //TODO: CPPUNIT_ASSERT_FILES_EQUAL( aBaseDbf );
665
666   aDoc->Close();
667 }
668
669 void test_HYDROData_LandCoverMap::test_transparent_prs()
670 {
671   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
672
673   Handle(HYDROData_StricklerTable) aTable =
674     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
675   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
676
677   Handle(HYDROData_PolylineXY) aPoly =
678     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
679   aPoly->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, true );
680   aPoly->AddPoint( 0, gp_XY( 0, 0 ) );
681   aPoly->AddPoint( 0, gp_XY( 20, 0 ) );
682   aPoly->AddPoint( 0, gp_XY( 10, 10 ) );
683   aPoly->Update();
684
685   Handle(HYDROData_ImmersibleZone) aZone =
686     Handle(HYDROData_ImmersibleZone)::DownCast( aDoc->CreateObject( KIND_IMMERSIBLE_ZONE ) );
687   aZone->SetPolyline( aPoly );
688   aZone->Update();
689
690   Handle(HYDROData_LandCoverMap) aMap =
691     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
692   aMap->LocalPartition( Face( QList<double>() << 1 << 1 << 10 << 10 << 10 << 20 ), "Zones de champs cultivé à végétation haute" );
693   aMap->LocalPartition( Face( QList<double>() << 5 << 5 << 10 << 5 << 10 << 8 << 5 << 12 << 5 << 8 ), "Zones de champs cultivé à végétation haute" );
694   aMap->SetName( "test_LCM" );
695
696   TestViewer::show( aZone->GetTopShape(), AIS_Shaded, true, "LandCoverMap_TransparentPrs" );
697
698   aMap->SetTransparency( 0.5 );
699   CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, aMap->GetTransparency(), 1E-6 );
700
701   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
702   aPrs->SetTable( aTable );
703   TestViewer::show( aPrs, AIS_Shaded, 0, true, "" );
704
705   CPPUNIT_ASSERT_IMAGES
706   aDoc->Close();
707 }
708
709 void test_HYDROData_LandCoverMap::test_add_triangles()
710 {
711   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
712
713   Handle(HYDROData_PolylineXY) Polyline_1 =
714     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
715
716   Polyline_1->SetName( "Polyline_1" );
717   Polyline_1->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
718   Polyline_1->AddPoint( 0, gp_XY( -264.84, 323.44 ) );
719   Polyline_1->AddPoint( 0, gp_XY( 254.45, 301.19 ) );
720   Polyline_1->AddPoint( 0, gp_XY( -291.54, -47.48 ) );
721   Polyline_1->Update();
722
723   Handle(HYDROData_PolylineXY) Polyline_2 =
724     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
725   Polyline_2->SetName( "Polyline_2" );
726   Polyline_2->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
727   Polyline_2->AddPoint( 0, gp_XY( -42.28, -351.63 ) );
728   Polyline_2->AddPoint( 0, gp_XY( 218.84, -146.88 ) );
729   Polyline_2->AddPoint( 0, gp_XY( 413.20, -235.91 ) );
730   Polyline_2->AddPoint( 0, gp_XY( 466.62, -388.72 ) );
731   Polyline_2->Update();
732
733   Handle(HYDROData_PolylineXY) Polyline_3 =
734     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
735   Polyline_3->SetName( "Polyline_3" );
736   Polyline_3->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
737   Polyline_3->AddPoint( 0, gp_XY( -108.31, 213.65 ) );
738   Polyline_3->AddPoint( 0, gp_XY( 127.60, 382.79 ) );
739   Polyline_3->AddPoint( 0, gp_XY( 192.88, -91.99 ) );
740   Polyline_3->Update();
741
742   Handle(HYDROData_PolylineXY) Polyline_4 =
743     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
744   Polyline_4->SetName( "Polyline_4" );
745   Polyline_4->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
746   Polyline_4->AddPoint( 0, gp_XY( 215.52, 344.61 ) );
747   Polyline_4->AddPoint( 0, gp_XY( 68.25, 258.52 ) );
748   Polyline_4->AddPoint( 0, gp_XY( 200.58, 154.65 ) );
749   Polyline_4->Update();
750
751   Handle(HYDROData_PolylineXY) Polyline_5 =
752     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
753   Polyline_5->SetName( "Polyline_5" );
754   Polyline_5->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
755   Polyline_5->AddPoint( 0, gp_XY( 16.15, -58.08 ) );
756   Polyline_5->AddPoint( 0, gp_XY( 116.47, 84.21 ) );
757   Polyline_5->AddPoint( 0, gp_XY( 266.59, 29.43 ) );
758   Polyline_5->Update();
759
760   Handle(HYDROData_LandCoverMap) aMap =
761     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
762
763   CPPUNIT_ASSERT_EQUAL( true, aMap->Add( Polyline_1, "" ) );
764   CPPUNIT_ASSERT_EQUAL( true, aMap->Add( Polyline_3, "" ) );
765   CPPUNIT_ASSERT_EQUAL( true, aMap->Add( Polyline_4, "" ) );
766
767   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
768   TopoDS_Shape aSh = aMap->GetShape();
769   TestViewer::show( aPrs, AIS_Shaded, 0, true, "LandCover_Triangles" );
770   CPPUNIT_ASSERT_IMAGES
771
772   CPPUNIT_ASSERT_EQUAL( true, aMap->Split( Polyline_5 ) );
773   Handle(HYDROGUI_LandCoverMapPrs) aPrs2 = new HYDROGUI_LandCoverMapPrs( aMap );
774   TestViewer::show( aPrs2, AIS_Shaded, 0, true, "LandCover_Triangles_Split" );
775   CPPUNIT_ASSERT_IMAGES
776
777   aDoc->Close();
778 }
779
780 void test_HYDROData_LandCoverMap::test_assign_to_calc_case()
781 {
782   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
783
784   Handle(HYDROData_LandCoverMap) aMap =
785     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
786   Handle(HYDROData_CalculationCase) aCalcCase =
787     Handle(HYDROData_CalculationCase)::DownCast( aDoc->CreateObject( KIND_CALCULATION ) );
788
789   aCalcCase->SetLandCoverMap( aMap );
790   CPPUNIT_ASSERT_EQUAL( aMap->myLab, aCalcCase->GetLandCoverMap()->myLab );
791
792   aDoc->Close();
793 }
794
795 void test_HYDROData_LandCoverMap::test_shp_import_cyp()
796 {
797   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
798   QString aFileName = REF_DATA_PATH + "/cyprus_natural.shp";
799   HYDROData_ShapeFile anImporter;
800   QStringList PolygonList;
801   TopTools_SequenceOfShape PolygonFaces;
802   int Type = -1;
803   int aStat = anImporter.ImportPolygons(aDoc, aFileName, PolygonList, PolygonFaces, Type);
804   CPPUNIT_ASSERT(aStat == 1);
805   CPPUNIT_ASSERT_EQUAL(5, Type);
806   CPPUNIT_ASSERT_EQUAL(268, PolygonFaces.Length());
807   
808   Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
809   HYDROData_MapOfFaceToStricklerType aMapFace2ST;
810
811   for ( int i = 1; i <= PolygonFaces.Length(); i++ )
812   {
813     TopoDS_Shape aShape = PolygonFaces(i);
814     if ( aShape.IsNull() ) 
815       continue;
816     aMapFace2ST.Add( TopoDS::Face( aShape ), "" );
817   }
818
819   LCM->StoreLandCovers(aMapFace2ST);
820   TestViewer::show( LCM->GetShape(), AIS_Shaded, true, "cyprus_natural_all" );
821   CPPUNIT_ASSERT_IMAGES
822   aDoc->Close();
823 }
824
825 void test_HYDROData_LandCoverMap::test_shp_import_clc_dec()
826 {
827   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
828   QString aFileName = REF_DATA_PATH + "/CLC_decoupe.shp";
829   HYDROData_ShapeFile anImporter;
830   QStringList PolygonList;
831   TopTools_SequenceOfShape PolygonFaces;
832   int Type = -1;
833   int aStat = anImporter.ImportPolygons(aDoc, aFileName, PolygonList, PolygonFaces, Type);
834   CPPUNIT_ASSERT(aStat == 1);
835   CPPUNIT_ASSERT_EQUAL(5, Type);
836   CPPUNIT_ASSERT_EQUAL(625, PolygonFaces.Length());
837   
838   Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
839   HYDROData_MapOfFaceToStricklerType aMapFace2ST;
840
841   for ( int i = 150; i <= 350; i++ )
842   {
843     TopoDS_Shape aShape = PolygonFaces(i);
844     if ( aShape.IsNull() ) 
845       continue;
846     aMapFace2ST.Add( TopoDS::Face( aShape ), "" );
847   }
848
849   LCM->StoreLandCovers(aMapFace2ST);
850   TestViewer::show( LCM->GetShape(), AIS_Shaded, true, "clc_dec_150_350" );
851   CPPUNIT_ASSERT_IMAGES
852   aDoc->Close();
853 }
854
855 void test_HYDROData_LandCoverMap::test_shp_import_nld_areas()
856 {
857   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
858   QString aFileName = REF_DATA_PATH + "/NLD_water_areas_dcw.shp";
859   HYDROData_ShapeFile anImporter;
860   QStringList PolygonList;
861   TopTools_SequenceOfShape PolygonFaces;
862   int Type = -1;
863   int aStat = anImporter.ImportPolygons(aDoc, aFileName, PolygonList, PolygonFaces, Type);
864   CPPUNIT_ASSERT(aStat == 1);
865   CPPUNIT_ASSERT_EQUAL(5, Type);
866   CPPUNIT_ASSERT_EQUAL(127, PolygonFaces.Length());
867   
868   Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
869   HYDROData_MapOfFaceToStricklerType aMapFace2ST;
870
871   for ( int i = 1; i <= PolygonFaces.Length(); i++ )
872   {
873     TopoDS_Shape aShape = PolygonFaces(i);
874     if ( aShape.IsNull() ) 
875       continue;
876     aMapFace2ST.Add( TopoDS::Face( aShape ), "" );
877   }
878
879   LCM->StoreLandCovers(aMapFace2ST);
880   TestViewer::show( LCM->GetShape(), AIS_Shaded, true, "NLD_water_areas_dcw" );
881   CPPUNIT_ASSERT_IMAGES
882   aDoc->Close();
883 }
884
885 void test_HYDROData_LandCoverMap::test_shp_loop_back()
886 {
887   QString aFFileName = REF_DATA_PATH + "/CLC06-cut_1.shp";
888   QString aSFileName = REF_DATA_PATH + "/CLC06-cut_1_res.shp";
889
890   //This test verify only some geom data (shp+shx) without any dbf reading/writing 
891   {
892     DEBTRACE("aFFileName: " << aFFileName.toStdString());
893     DEBTRACE("aSFileName: " << aSFileName.toStdString());
894     Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
895     HYDROData_ShapeFile anImporter;
896     QStringList PolygonList;
897     TopTools_SequenceOfShape PolygonFaces;
898     int Type = -1;
899     DEBTRACE("---");
900
901     //import LCM from file (#2-4; #12-14 polygons)
902     CPPUNIT_ASSERT( anImporter.ImportPolygons(aDoc, aFFileName, PolygonList, PolygonFaces, Type));
903     Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
904     HYDROData_MapOfFaceToStricklerType aMapFace2ST;
905
906     aMapFace2ST.Add( TopoDS::Face( PolygonFaces(2) ), "" );
907     aMapFace2ST.Add( TopoDS::Face( PolygonFaces(3) ), "" );
908     aMapFace2ST.Add( TopoDS::Face( PolygonFaces(4) ), "" );
909     aMapFace2ST.Add( TopoDS::Face( PolygonFaces(12) ), "" );
910     aMapFace2ST.Add( TopoDS::Face( PolygonFaces(13) ), "" );
911     aMapFace2ST.Add( TopoDS::Face( PolygonFaces(14) ), "" );
912     DEBTRACE("---");
913
914     LCM->StoreLandCovers(aMapFace2ST);
915     LCM->SetName("lcm_1");
916
917     TopoDS_Shape aSh = LCM->GetShape();
918     BRepCheck_Analyzer aBCA(aSh);
919     CPPUNIT_ASSERT(aBCA.IsValid());
920
921     //export lcm
922     HYDROData_ShapeFile anExporter;
923     QStringList aNonExpList;
924     anExporter.Export(aSFileName, LCM, aNonExpList);
925     CPPUNIT_ASSERT (aNonExpList.empty());
926     DEBTRACE("---");
927
928     aDoc->Close();
929   }
930   {
931     Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
932     HYDROData_ShapeFile anImporter;
933     QStringList PolygonList;
934     TopTools_SequenceOfShape PolygonFaces;
935     int Type = -1;
936
937     //import all
938     CPPUNIT_ASSERT( anImporter.ImportPolygons(aDoc, aSFileName, PolygonList, PolygonFaces, Type));
939     Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
940     HYDROData_MapOfFaceToStricklerType aMapFace2ST;
941     CPPUNIT_ASSERT_EQUAL(PolygonFaces.Length(), 6);
942     for ( int i = 1; i <= PolygonFaces.Length(); i++ )
943       aMapFace2ST.Add( TopoDS::Face( PolygonFaces(i) ), "" );
944
945     LCM->StoreLandCovers(aMapFace2ST);
946     LCM->SetName("lcm_2");
947
948     TopoDS_Shape OutSh = LCM->GetShape();
949     BRepCheck_Analyzer aBCA(OutSh);
950     CPPUNIT_ASSERT(aBCA.IsValid());
951
952     TestViewer::show( OutSh, AIS_Shaded, true, "CLC06-cut_1_res" );
953     CPPUNIT_ASSERT_IMAGES
954
955     aDoc->Close();
956   }
957   CPPUNIT_ASSERT_EQUAL(0, remove(aSFileName.toStdString().c_str()));
958 }
959
960 void test_HYDROData_LandCoverMap::test_add_2_section_poly()
961 {
962   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
963
964   Handle(HYDROData_PolylineXY) Polyline_12 =
965     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
966   Polyline_12->SetName( "Polyline_12" );
967
968   Polyline_12->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
969   Polyline_12->AddPoint( 0, gp_XY( -148.70, 145.68 ) );
970   Polyline_12->AddPoint( 0, gp_XY( -81.71, 210.97 ) );
971   Polyline_12->AddPoint( 0, gp_XY( -21.09, 122.79 ) );
972   Polyline_12->AddPoint( 0, gp_XY( -106.30, 102.44 ) );
973   Polyline_12->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_POLYLINE, true );
974   Polyline_12->AddPoint( 1, gp_XY( -7.09, 227.08 ) );
975   Polyline_12->AddPoint( 1, gp_XY( 46.32, 228.78 ) );
976   Polyline_12->AddPoint( 1, gp_XY( 69.64, 165.61 ) );
977   Polyline_12->AddPoint( 1, gp_XY( 13.68, 156.28 ) );
978
979   Polyline_12->Update();
980
981   Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
982   CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_12, "" ) );
983
984   TestViewer::show( LCM->GetShape(), AIS_Shaded, true, "lcm_poly_2_sections" );
985   CPPUNIT_ASSERT_IMAGES
986
987   aDoc->Close();
988 }
989
990 void test_HYDROData_LandCoverMap::test_split_2()
991 {
992   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 );
993
994   Handle(HYDROData_PolylineXY) Polyline_1 =
995     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
996   Polyline_1->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
997   Polyline_1->AddPoint( 0, gp_XY( -264.84, 323.44 ) );
998   Polyline_1->AddPoint( 0, gp_XY( 254.45, 301.19 ) );
999   Polyline_1->AddPoint( 0, gp_XY( -291.54, -47.48 ) );
1000   Polyline_1->Update();
1001
1002   Handle(HYDROData_PolylineXY) Polyline_6 =
1003     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
1004   Polyline_6->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
1005   Polyline_6->AddPoint( 0, gp_XY( -155.15, 199.47 ) );
1006   Polyline_6->AddPoint( 0, gp_XY( -71.19, 289.12 ) );
1007   Polyline_6->AddPoint( 0, gp_XY( 22.01, 211.57 ) );
1008   Polyline_6->AddPoint( 0, gp_XY( -84.00, 134.73 ) );
1009   Polyline_6->Update();
1010
1011   Handle(HYDROData_PolylineXY) Polyline_7 =
1012     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
1013   Polyline_7->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
1014   Polyline_7->AddPoint( 0, gp_XY( -50.56, 232.20 ) );
1015   Polyline_7->AddPoint( 0, gp_XY( 40.51, 286.98 ) );
1016   Polyline_7->AddPoint( 0, gp_XY( 118.77, 256.39 ) );
1017   Polyline_7->AddPoint( 0, gp_XY( 72.52, 114.10 ) );
1018   Polyline_7->Update();
1019
1020   Handle(HYDROData_PolylineXY) Polyline_8 =
1021     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
1022   Polyline_8->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true );
1023   Polyline_8->AddPoint( 0, gp_XY( -44.16, 190.93 ) );
1024   Polyline_8->AddPoint( 0, gp_XY( 9.91, 226.51 ) );
1025   Polyline_8->AddPoint( 0, gp_XY( 35.53, 175.99 ) );
1026   Polyline_8->AddPoint( 0, gp_XY( -9.30, 157.50 ) );
1027   Polyline_8->Update();
1028
1029   Handle(HYDROData_PolylineXY) Polyline_9 =
1030     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
1031   Polyline_9->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false );
1032   Polyline_9->AddPoint( 0, gp_XY( -103.92, 288.40 ) );
1033   Polyline_9->AddPoint( 0, gp_XY( -100.09, 285.22 ) );
1034   Polyline_9->AddPoint( 0, gp_XY( -96.10, 281.90 ) );
1035   Polyline_9->AddPoint( 0, gp_XY( -90.43, 277.19 ) );
1036   Polyline_9->AddPoint( 0, gp_XY( -53.41, 246.43 ) );
1037   Polyline_9->AddPoint( 0, gp_XY( 10.62, 245.01 ) );
1038
1039
1040   Polyline_9->Update();
1041
1042
1043   Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
1044   CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_1, "" ) );
1045   CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_6, "" ) );
1046   CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_7, "" ) );
1047
1048   CPPUNIT_ASSERT_EQUAL( true, LCM->Split( Polyline_9 ) );
1049
1050   //Handle(HYDROGUI_LandCoverMapPrs) aPrs1 = new HYDROGUI_LandCoverMapPrs( LCM );
1051   TestViewer::show( LCM->GetShape(), AIS_Shaded, /*0,*/ true, "LCM_split_2a" );
1052   CPPUNIT_ASSERT_IMAGES
1053
1054   CPPUNIT_ASSERT_EQUAL( true, LCM->Split( Polyline_8 ) );
1055
1056   // Handle(HYDROGUI_LandCoverMapPrs) aPrs2 = new HYDROGUI_LandCoverMapPrs( LCM );
1057   TestViewer::show( LCM->GetShape(), AIS_Shaded, /*0,*/ true, "LCM_split_2b" );
1058   CPPUNIT_ASSERT_IMAGES
1059
1060   aDoc->Close();
1061 }
1062
1063 void test_HYDROData_LandCoverMap::test_export_telemac()
1064 {
1065   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
1066
1067   Handle(HYDROData_StricklerTable) aTable =
1068     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
1069   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
1070
1071   Handle(HYDROData_LandCoverMap) aMap =
1072     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
1073
1074   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
1075   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "Zones de champs cultivé à végétation basse" ) );
1076
1077   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
1078                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
1079                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
1080                                               31 << 114 );
1081   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "Zones de champs cultivé à végétation haute" ) );
1082
1083   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
1084                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
1085   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "Zones de champs, prairies, sans cultures" ) );
1086
1087   QString aTmpFileName = "test.telemac";
1088   QString aTmpPath = QDir::tempPath() + "/" + aTmpFileName;
1089   CPPUNIT_ASSERT_EQUAL( true, aMap->ExportTelemac( aTmpPath, 1E-4, aTable ) );
1090   CPPUNIT_ASSERT_SCRIPTS_EQUAL( aTmpFileName, true, true, 0 );
1091
1092   aDoc->Close();
1093 }
1094
1095 void test_HYDROData_LandCoverMap::test_copy()
1096 {
1097   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
1098
1099   Handle(HYDROData_LandCoverMap) aMap =
1100     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
1101   aMap->SetName( "map_1" );
1102
1103   TopoDS_Face aLC1 = Face( QList<double>() << 10 << 10 << 30 << 10 << 20 << 20 );
1104   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "Zones de champs cultivé à végétation basse" ) );
1105
1106   TopoDS_Face aLC2 = Face( QList<double>() << 110 << 10 << 130 << 10 << 120 << 20 );
1107   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "Zones de champs cultivé à végétation haute" ) );
1108
1109   Handle(HYDROData_LandCoverMap) aMap2 =
1110     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
1111   aMap->CopyTo( aMap2, true );
1112
1113   CPPUNIT_ASSERT_EQUAL( QString( "map_2" ), aMap2->GetName() );
1114   HYDROData_LandCoverMap::Explorer anIt( aMap2 );
1115   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
1116   CPPUNIT_ASSERT_EQUAL( QString( "Zones de champs cultivé à végétation basse" ), anIt.StricklerType() );
1117   CPPUNIT_ASSERT( anIt.Face().TShape()!=aLC1.TShape() );
1118   anIt.Next();
1119   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
1120   CPPUNIT_ASSERT_EQUAL( QString( "Zones de champs cultivé à végétation haute" ), anIt.StricklerType() );
1121   CPPUNIT_ASSERT( anIt.Face().TShape()!=aLC2.TShape() );
1122   anIt.Next();
1123   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
1124
1125   TopoDS_Shape aShape1 = aMap->GetShape();
1126   TopoDS_Shape aShape2 = aMap2->GetShape();
1127   gp_Trsf aTr;
1128   aTr.SetTranslation( gp_Vec( 0, 50, 0 ) );
1129   aShape2.Move( TopLoc_Location( aTr ) );
1130   TestViewer::show( aShape1, AIS_Shaded, /*0,*/ true, "LCM_copied" );
1131   TestViewer::show( aShape2, AIS_Shaded, /*0,*/ true, "" );
1132   CPPUNIT_ASSERT_IMAGES
1133
1134   aDoc->Close();
1135 }