Salome HOME
Merge branch 'BR_LAND_COVER_MAP' of ssh://git.salome-platform.org/modules/hydro into...
[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_Document.h>
21 #include <HYDROData_LandCoverMap.h>
22 #include <HYDROData_ImmersibleZone.h>
23 #include <HYDROData_PolylineXY.h>
24 #include <HYDROData_StricklerTable.h>
25 #include <HYDROData_Tool.h>
26 #include <HYDROGUI_LandCoverMapPrs.h>
27 #include <TopoDS_Edge.hxx>
28 #include <TopoDS_Wire.hxx>
29 #include <TopoDS_Face.hxx>
30 #include <TestViewer.h>
31 #include <TestShape.h>
32 #include <TopTools_ListOfShape.hxx>
33 #include <AIS_DisplayMode.hxx>
34 #include <Aspect_ColorScale.hxx>
35 #include <QString>
36 #include <QColor>
37 #include <QMap>
38 #include <QDir>
39 #include <BRepTools.hxx>
40 #include <BRep_Builder.hxx>
41
42 const QString REF_DATA_PATH = qgetenv( "HYDRO_REFERENCE_DATA" );
43 const QString DEF_STR_PATH = qgetenv( "HYDRO_SRC_DIR" ) + "/src/HYDROGUI/resources/def_strickler_table.txt";
44
45 void test_HYDROData_LandCoverMap::test_add_2_objects()
46 {
47   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
48
49   Handle(HYDROData_LandCoverMap) aMap =
50     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
51
52   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
53
54   TopoDS_Face aLC1 = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
55   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
56
57   TopoDS_Face aLC2 = Face( QList<double>() << 30 << 20 << 60 << 10 << 70 << 35 << 40 << 40 );
58   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
59
60   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Add_2_Objects" );
61   CPPUNIT_ASSERT_IMAGES
62
63   HYDROData_LandCoverMap::Iterator anIt( aMap );
64   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
65   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
66   anIt.Next();
67   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
68   CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.StricklerType() );
69   anIt.Next();
70   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
71
72   aDoc->Close();
73 }
74
75 void test_HYDROData_LandCoverMap::test_split()
76 {
77   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
78
79   Handle(HYDROData_LandCoverMap) aMap =
80     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
81
82   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
83
84   TopoDS_Face aLC = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
85   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC, "test1" ) );
86
87   Handle(HYDROData_PolylineXY) aPolyline =
88     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
89   TopoDS_Wire aWire = Wire( QList<double>() << 10 << 40 << 30 << 10 << 40 << 10 << 60 << 10, false );
90   aPolyline->SetShape( aWire );
91
92   CPPUNIT_ASSERT_EQUAL( true, aMap->Split( aPolyline ) );
93
94   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Split_1" );
95   TestViewer::show( aWire, 0, true, Qt::blue );
96   CPPUNIT_ASSERT_IMAGES
97
98   HYDROData_LandCoverMap::Iterator anIt( aMap );
99   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
100   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
101   anIt.Next();
102   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
103   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
104   anIt.Next();
105   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
106
107   aDoc->Close();
108 }
109
110 void test_HYDROData_LandCoverMap::test_incomplete_split()
111 {
112   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
113
114   Handle(HYDROData_LandCoverMap) aMap =
115     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
116
117   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
118
119   TopoDS_Face aLC = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
120   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC, "test1" ) );
121
122   Handle(HYDROData_PolylineXY) aPolyline =
123     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
124   TopoDS_Wire aWire = Wire( QList<double>() << 10 << 40 << 30 << 10 << 40 << 10, false );
125   aPolyline->SetShape( aWire );
126
127   CPPUNIT_ASSERT_EQUAL( true, aMap->Split( aPolyline ) );
128
129   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Split_2" );
130   TestViewer::show( aWire, 0, true, Qt::green );
131   CPPUNIT_ASSERT_IMAGES
132
133   HYDROData_LandCoverMap::Iterator anIt( aMap );
134   CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
135   CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
136   anIt.Next();
137   CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
138
139   aDoc->Close();
140 }
141
142 void test_HYDROData_LandCoverMap::test_merge()
143 {
144   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
145
146   Handle(HYDROData_LandCoverMap) aMap =
147     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
148
149   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
150
151   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
152
153   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
154
155   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
156                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
157                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
158                                               31 << 114 );
159   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
160
161   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
162                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
163   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "test3" ) );
164
165   //TestViewer::show( aMap->GetShape(), AIS_Shaded, true );
166   //TestViewer::AssertEqual( "LandCoverMap_Before_Merge" );
167
168   //BRepTools::Write( aMap->GetShape(), "c:\\map.brep" );
169
170   QString aType1, aType2;
171   gp_Pnt2d aPnt1( 25, 35 );
172   gp_Pnt2d aPnt2( 45, 55 );
173   //gp_Pnt2d aPnt3( 45, 10 );
174   //gp_Pnt2d aPnt4( 45, 80 );
175   TopTools_ListOfShape aList;
176   aList.Append( aMap->FindByPoint( aPnt1, aType1 ) );
177   aList.Append( aMap->FindByPoint( aPnt2, aType2 ) );
178   CPPUNIT_ASSERT_EQUAL( true, aMap->Merge( aList, "new" ) );
179
180   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Merge_1" );
181   //TestViewer::show( BRepBuilderAPI_MakeEdge( gp_Pnt(aPnt1.X(), aPnt1.Y(), 0), gp_Pnt(aPnt2.X(), aPnt2.Y(), 0) ).Edge(), QColor( Qt::blue ), AIS_Shaded );
182   CPPUNIT_ASSERT_IMAGES
183
184   aDoc->Close();
185 }
186
187 void test_HYDROData_LandCoverMap::test_remove()
188 {
189   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
190
191   Handle(HYDROData_LandCoverMap) aMap =
192     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
193
194   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
195
196   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
197
198   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
199
200   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
201                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
202                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
203                                               31 << 114 );
204   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
205
206   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
207                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
208   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "test3" ) );
209
210   QString aType1, aType2;
211   gp_Pnt2d aPnt1( 25, 35 );
212   gp_Pnt2d aPnt2( 45, 55 );
213   TopTools_ListOfShape aList;
214   aList.Append( aMap->FindByPoint( aPnt1, aType1 ) );
215   aList.Append( aMap->FindByPoint( aPnt2, aType2 ) );
216   CPPUNIT_ASSERT_EQUAL( true, aMap->Remove( aList ) );
217
218   TestViewer::show( aMap->GetShape(), AIS_Shaded, true, "LandCoverMap_Remove_1" );
219   CPPUNIT_ASSERT_IMAGES
220
221   aDoc->Close();
222 }
223
224 void test_HYDROData_LandCoverMap::test_merge_faces_boxes()
225 {
226   TopoDS_Shape pp1, pp2, pp3, pp4;
227   BRep_Builder BB;
228   BRepTools::Read(pp1, (REF_DATA_PATH + "/pp1.brep").toStdString().c_str(), BB);
229   BRepTools::Read(pp2, (REF_DATA_PATH + "/pp2.brep").toStdString().c_str(), BB);
230   BRepTools::Read(pp3, (REF_DATA_PATH + "/pp3.brep").toStdString().c_str(), BB);
231   BRepTools::Read(pp4, (REF_DATA_PATH + "/pp4.brep").toStdString().c_str(), BB);
232
233   CPPUNIT_ASSERT(!pp1.IsNull());
234   CPPUNIT_ASSERT(!pp2.IsNull());
235   CPPUNIT_ASSERT(!pp3.IsNull());
236   CPPUNIT_ASSERT(!pp4.IsNull());
237
238   //Test mergeFaces() func // boxes // USD == true
239   {
240     TopTools_ListOfShape Faces;
241     Faces.Append(pp1);
242     Faces.Append(pp2);
243     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
244     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_11" );
245     CPPUNIT_ASSERT_IMAGES
246     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_FACE);
247   }
248   {
249     TopTools_ListOfShape Faces;
250     Faces.Append(pp1);
251     Faces.Append(pp3);
252     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
253     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_12" );
254     CPPUNIT_ASSERT_IMAGES
255     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
256   }
257   {
258     TopTools_ListOfShape Faces;
259     Faces.Append(pp1);
260     Faces.Append(pp2);
261     Faces.Append(pp4);
262     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
263     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_13" );
264     CPPUNIT_ASSERT_IMAGES
265     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
266   }
267   {
268     TopTools_ListOfShape Faces;
269     Faces.Append(pp1);
270     Faces.Append(pp3);
271     Faces.Append(pp4);
272     Faces.Append(pp2);
273     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
274     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_14" );
275     CPPUNIT_ASSERT_IMAGES
276     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_FACE);
277   }
278   //
279
280   //Test mergeFaces() func // boxes // USD == false
281   {
282     TopTools_ListOfShape Faces;
283     Faces.Append(pp1);
284     Faces.Append(pp2);
285     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
286     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_21" );
287     CPPUNIT_ASSERT_IMAGES
288     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
289   }
290   {
291     TopTools_ListOfShape Faces;
292     Faces.Append(pp1);
293     Faces.Append(pp3);
294     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
295     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_22" );
296     CPPUNIT_ASSERT_IMAGES
297     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
298   }
299   {
300     TopTools_ListOfShape Faces;
301     Faces.Append(pp1);
302     Faces.Append(pp2);
303     Faces.Append(pp4);
304     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
305     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_23" );
306     CPPUNIT_ASSERT_IMAGES
307     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
308   }
309   {
310     TopTools_ListOfShape Faces;
311     Faces.Append(pp1);
312     Faces.Append(pp3);
313     Faces.Append(pp4);
314     Faces.Append(pp2);
315     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
316     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_boxes_24" );
317     CPPUNIT_ASSERT_IMAGES
318     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
319   }
320 }
321
322
323 void test_HYDROData_LandCoverMap::test_merge_faces_circles()
324 {
325   TopoDS_Shape ff1, ff2, ff3;
326   BRep_Builder BB;
327   BRepTools::Read(ff1, (REF_DATA_PATH + "/ff1.brep").toStdString().c_str(), BB);
328   BRepTools::Read(ff2, (REF_DATA_PATH + "/ff2.brep").toStdString().c_str(), BB);
329   BRepTools::Read(ff3, (REF_DATA_PATH + "/ff3.brep").toStdString().c_str(), BB);
330
331   CPPUNIT_ASSERT(!ff1.IsNull());
332   CPPUNIT_ASSERT(!ff2.IsNull());
333   CPPUNIT_ASSERT(!ff3.IsNull());
334
335   //Test mergeFaces() func // circles // USD == true
336   { 
337     TopTools_ListOfShape Faces;
338     Faces.Append(ff1);
339     Faces.Append(ff2);
340     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
341     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_11" );
342     CPPUNIT_ASSERT_IMAGES
343     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_FACE);
344   }
345   {
346     TopTools_ListOfShape Faces;
347     Faces.Append(ff1);
348     Faces.Append(ff3);
349     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
350     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_12" );
351     CPPUNIT_ASSERT_IMAGES
352     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
353   }
354   {
355     TopTools_ListOfShape Faces;
356     Faces.Append(ff1);
357     Faces.Append(ff2);
358     Faces.Append(ff3);
359     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
360     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_13" );
361     CPPUNIT_ASSERT_IMAGES
362     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
363   }
364   {
365     TopTools_ListOfShape Faces;
366     Faces.Append(ff1);
367     Faces.Append(ff3);
368     Faces.Append(ff2);
369     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, true );
370     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_14" );
371     CPPUNIT_ASSERT_IMAGES
372     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
373   }
374   //
375
376   //Test mergeFaces() func // circles // USD == false
377   {
378     TopTools_ListOfShape Faces;
379     Faces.Append(ff1);
380     Faces.Append(ff2);
381     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
382     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_21" );
383     CPPUNIT_ASSERT_IMAGES
384     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
385   }
386   {
387     TopTools_ListOfShape Faces;
388     Faces.Append(ff1);
389     Faces.Append(ff3);
390     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
391     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_22" );
392     CPPUNIT_ASSERT_IMAGES
393     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
394   }
395   {
396     TopTools_ListOfShape Faces;
397     Faces.Append(ff1);
398     Faces.Append(ff2);
399     Faces.Append(ff3);
400     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
401     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_23" );
402     CPPUNIT_ASSERT_IMAGES
403     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
404   }
405   {
406     TopTools_ListOfShape Faces;
407     Faces.Append(ff1);
408     Faces.Append(ff3);
409     Faces.Append(ff2);
410     TopoDS_Shape aMergedFace = HYDROData_LandCoverMap::MergeFaces( Faces, false );
411     TestViewer::show( aMergedFace, AIS_Shaded, true, "merge_faces_circles_24" );
412     CPPUNIT_ASSERT_IMAGES
413     CPPUNIT_ASSERT(aMergedFace.ShapeType() == TopAbs_SHELL);
414   }
415
416 }
417
418 void test_HYDROData_LandCoverMap::test_import_dbf()
419 {
420   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
421
422   Handle(HYDROData_LandCoverMap) aMap =
423     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
424
425   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
426   QString aFileName = REF_DATA_PATH + "/t1.dbf";
427   QStringList aDBFV;
428   QStringList aST;
429   aDBFV.append("100");
430   aDBFV.append("200");
431   aDBFV.append("300");
432   aST.append("water");
433   aST.append("forest");
434   aST.append("road");
435   // aST.size() == aDBFV.size()!!
436   Handle(HYDROData_PolylineXY) aPolyline =
437     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
438   TopoDS_Wire aWire = Wire( QList<double>() << 10 << 40 << 30 << 10 << 40 << 10 << 60 << 10 );
439   aPolyline->SetShape( aWire );
440   for (int i = 0; i < 3; i++)
441     aMap->Add(aPolyline, "");
442   TopoDS_Face aLC1 = Face( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
443   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
444   
445   CPPUNIT_ASSERT_EQUAL( true, aMap->Split( aPolyline ) );
446   QList<int> Inds = QList<int>() << 1 << 2 << 3;
447   aMap->ImportDBF(aFileName, "TESTFIELD1", aDBFV, aST, Inds);
448   HYDROData_LandCoverMap::Iterator anIt( aMap );
449  
450   CPPUNIT_ASSERT_EQUAL( QString( "forest" ), anIt.StricklerType() );
451   anIt.Next();
452   CPPUNIT_ASSERT_EQUAL( QString( "road" ), anIt.StricklerType() );
453 }
454
455 void test_HYDROData_LandCoverMap::test_land_cover_prs_by_types()
456 {
457   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
458
459   Handle(HYDROData_StricklerTable) aTable =
460     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
461   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
462
463   Handle(HYDROData_LandCoverMap) aMap =
464     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
465
466   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
467   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "Zones de champs cultivé à végétation basse" ) );
468
469   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
470                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
471                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
472                                               31 << 114 );
473   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "Zones de champs cultivé à végétation haute" ) );
474
475   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
476                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
477   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "Zones de champs, prairies, sans cultures" ) );
478
479   // build presentation object 
480   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
481   aPrs->SetTable( aTable );
482   // show presentation in viewer
483   TestViewer::show( aPrs, AIS_Shaded, 4, true, "LandCoverMap_PrsByTypes" );
484   // select one of faces (first)
485   TestViewer::select( 200, 300 );
486   CPPUNIT_ASSERT_IMAGES
487
488   aDoc->Close();
489 }
490
491 void test_HYDROData_LandCoverMap::test_land_cover_prs_by_coeff()
492 {
493   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
494
495   Handle(HYDROData_StricklerTable) aTable =
496     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
497   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
498
499   Handle(HYDROData_LandCoverMap) aMap =
500     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
501
502   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
503   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "Zones de champs cultivé à végétation basse" ) );
504
505   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
506                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
507                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
508                                               31 << 114 );
509   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "Zones de champs cultivé à végétation haute" ) );
510
511   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
512                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
513   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "Zones de champs, prairies, sans cultures" ) );
514
515   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
516   aPrs->SetTable( aTable );
517   aPrs->SetColorScale( TestViewer::showColorScale( true ) );
518   TestViewer::show( aPrs, AIS_Shaded, 4, true, "LandCoverMap_PrsByCoeff" );
519   CPPUNIT_ASSERT_IMAGES
520
521   TestViewer::showColorScale( false );
522   aDoc->Close();
523 }
524
525 void test_HYDROData_LandCoverMap::test_dump_python()
526 {
527   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
528
529   Handle(HYDROData_LandCoverMap) aMap =
530     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
531   aMap->SetName( "test_LCM" );
532
533   CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
534
535   TopoDS_Face aLC1 = Face( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
536
537   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
538
539   TopoDS_Face aLC2 = Face( QList<double>() << 21 << 34 << 24 << 25 << 37   << 37 << 40  << 61 <<
540                                               44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
541                                              128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
542                                               31 << 114 );
543   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
544
545   TopoDS_Face aLC3 = Face( QList<double>() << 4 << 54 << 1   << 47 << 51  << 45 <<
546                                             127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
547   CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "test3" ) );
548
549   QString aTmpPath = QDir::tempPath() + "/lc_dump.py";
550   CPPUNIT_ASSERT_EQUAL( true, aDoc->DumpToPython( aTmpPath, false ) );
551
552   //TODO: compare files
553 }
554
555 void test_HYDROData_LandCoverMap::test_transparent_prs()
556 {
557   Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
558
559   Handle(HYDROData_StricklerTable) aTable =
560     Handle(HYDROData_StricklerTable)::DownCast( aDoc->CreateObject( KIND_STRICKLER_TABLE ) );
561   CPPUNIT_ASSERT_EQUAL( true, aTable->Import( DEF_STR_PATH ) );
562
563   Handle(HYDROData_PolylineXY) aPoly =
564     Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
565   aPoly->AddSection( "", HYDROData_PolylineXY::SECTION_SPLINE, true );
566   aPoly->AddPoint( 0, gp_XY( 0, 0 ) );
567   aPoly->AddPoint( 0, gp_XY( 20, 0 ) );
568   aPoly->AddPoint( 0, gp_XY( 10, 10 ) );
569   aPoly->Update();
570
571   Handle(HYDROData_ImmersibleZone) aZone =
572     Handle(HYDROData_ImmersibleZone)::DownCast( aDoc->CreateObject( KIND_IMMERSIBLE_ZONE ) );
573   aZone->SetPolyline( aPoly );
574   aZone->Update();
575
576   Handle(HYDROData_LandCoverMap) aMap =
577     Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
578   aMap->LocalPartition( Face( QList<double>() << 1 << 1 << 10 << 10 << 10 << 20 ), "Zones de champs cultivé à végétation haute" );
579   aMap->LocalPartition( Face( QList<double>() << 5 << 5 << 10 << 5 << 10 << 8 << 5 << 12 << 5 << 8 ), "Zones de champs cultivé à végétation haute" );
580   aMap->SetName( "test_LCM" );
581
582   TestViewer::show( aZone->GetTopShape(), AIS_Shaded, true, "LandCoverMap_TransparentPrs" );
583
584   Handle(HYDROGUI_LandCoverMapPrs) aPrs = new HYDROGUI_LandCoverMapPrs( aMap );
585   aPrs->SetTable( aTable );
586   aPrs->SetTransparency( 0.5 );
587   TestViewer::show( aPrs, AIS_Shaded, 0, true, "" );
588
589   CPPUNIT_ASSERT_IMAGES
590 }