1 // Copyright (C) 2014-2015 EDF-R&D
2 // This library is free software; you can redistribute it and/or
3 // modify it under the terms of the GNU Lesser General Public
4 // License as published by the Free Software Foundation; either
5 // version 2.1 of the License, or (at your option) any later version.
7 // This library is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10 // Lesser General Public License for more details.
12 // You should have received a copy of the GNU Lesser General Public
13 // License along with this library; if not, write to the Free Software
14 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #include <test_HYDROData_LandCoverMap.h>
20 #include <HYDROData_Document.h>
21 #include <HYDROData_LandCoverMap.h>
22 #include <HYDROData_PolylineXY.h>
23 #include <HYDROData_Tool.h>
24 #include <TopoDS_Edge.hxx>
25 #include <TopoDS_Wire.hxx>
26 #include <TopoDS_Face.hxx>
27 #include <TColgp_HArray1OfPnt.hxx>
28 #include <GeomAPI_Interpolate.hxx>
29 #include <BRepBuilderAPI_MakeEdge.hxx>
30 #include <BRepBuilderAPI_MakeFace.hxx>
31 #include <BRepBuilderAPI_MakeWire.hxx>
32 #include <TestViewer.h>
33 #include <TopTools_ListOfShape.hxx>
34 #include <AIS_DisplayMode.hxx>
38 #include <BRepTools.hxx>
40 TopoDS_Edge Spline( const QList<double>& theXYList, bool isClosed = false )
42 int n = theXYList.size()/2;
43 Handle(TColgp_HArray1OfPnt) aPointsArray = new TColgp_HArray1OfPnt( 1, n );
44 for( int i=1; i<=n; i++ )
46 double x = theXYList[2*i-2];
47 double y = theXYList[2*i-1];
48 gp_Pnt aPnt( x, y, 0 );
49 aPointsArray->SetValue( i, aPnt );
51 GeomAPI_Interpolate anInterpolator( aPointsArray, isClosed, 1E-3 );
52 anInterpolator.Perform();
53 bool aResult = anInterpolator.IsDone() == Standard_True;
56 Handle( Geom_BSplineCurve ) aCurve = anInterpolator.Curve();
57 return BRepBuilderAPI_MakeEdge( aCurve ).Edge();
63 TopoDS_Face LandCover( const QList<double>& theXYList )
65 TopoDS_Edge anEdge = Spline( theXYList, true );
69 TopoDS_Wire aWire = BRepBuilderAPI_MakeWire( anEdge ).Wire();
70 TopoDS_Face aFace = BRepBuilderAPI_MakeFace( aWire, Standard_True ).Face();
74 void test_HYDROData_LandCoverMap::test_add_2_objects()
76 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
78 Handle(HYDROData_LandCoverMap) aMap =
79 Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
81 CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
83 TopoDS_Face aLC1 = LandCover( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
84 CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
86 TopoDS_Face aLC2 = LandCover( QList<double>() << 30 << 20 << 60 << 10 << 70 << 35 << 40 << 40 );
87 CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
89 TestViewer::show( aMap->GetShape(), AIS_Shaded, true );
90 TestViewer::AssertEqual( "LandCoverMap_Add_2_Objects" );
92 HYDROData_LandCoverMap::Iterator anIt( aMap );
93 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
94 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
96 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
97 CPPUNIT_ASSERT_EQUAL( QString( "test2" ), anIt.StricklerType() );
99 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
104 void test_HYDROData_LandCoverMap::test_split_by_polyline()
106 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
108 Handle(HYDROData_LandCoverMap) aMap =
109 Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
111 CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
113 TopoDS_Face aLC = LandCover( QList<double>() << 10 << 10 << 50 << 20 << 30 << 50 << 15 << 30 );
114 CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC, "test1" ) );
116 Handle(HYDROData_PolylineXY) aPolyline =
117 Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) );
118 TopoDS_Wire aWire = BRepBuilderAPI_MakeWire( Spline( QList<double>() << 10 << 40 << 30 << 10 << 40 << 10 << 60 << 10 ) ).Wire();
119 aPolyline->SetShape( aWire );
121 CPPUNIT_ASSERT_EQUAL( true, aMap->Split( aPolyline ) );
123 TestViewer::show( aMap->GetShape(), AIS_Shaded, true );
124 TestViewer::show( aWire, QColor(), 0 );
125 TestViewer::AssertEqual( "LandCoverMap_Split_1" );
127 HYDROData_LandCoverMap::Iterator anIt( aMap );
128 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
129 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
131 CPPUNIT_ASSERT_EQUAL( true, anIt.More() );
132 CPPUNIT_ASSERT_EQUAL( QString( "test1" ), anIt.StricklerType() );
134 CPPUNIT_ASSERT_EQUAL( false, anIt.More() );
139 void test_HYDROData_LandCoverMap::test_merge()
141 Handle(HYDROData_Document) aDoc = HYDROData_Document::Document(1);
143 Handle(HYDROData_LandCoverMap) aMap =
144 Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) );
146 CPPUNIT_ASSERT_EQUAL( KIND_LAND_COVER_MAP, aMap->GetKind() );
148 TopoDS_Face aLC1 = LandCover( QList<double>() << 12 << 19 << 82 << 9 << 126 << 53 << 107 << 80 << 29 << 75 );
150 CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC1, "test1" ) );
152 TopoDS_Face aLC2 = LandCover( QList<double>() << 21 << 34 << 24 << 25 << 37 << 37 << 40 << 61 <<
153 44 << 95 << 85 << 100 << 104 << 66 << 107 << 33 <<
154 128 << 18 << 140 << 50 << 131 << 89 << 104 << 111 <<
156 CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC2, "test2" ) );
158 TopoDS_Face aLC3 = LandCover( QList<double>() << 4 << 54 << 1 << 47 << 51 << 45 <<
159 127 << 42 << 145 << 43 << 148 << 60 << 90 << 65 );
160 CPPUNIT_ASSERT_EQUAL( true, aMap->LocalPartition( aLC3, "test3" ) );
162 //TestViewer::show( aMap->GetShape(), AIS_Shaded, true );
163 //TestViewer::AssertEqual( "LandCoverMap_Before_Merge" );
165 //BRepTools::Write( aMap->GetShape(), "c:\\map.brep" );
167 QString aType1, aType2;
168 gp_Pnt2d aPnt1( 25, 35 );
169 gp_Pnt2d aPnt2( 45, 55 );
170 TopTools_ListOfShape aList;
171 aList.Append( aMap->FindByPoint( aPnt1, aType1 ) );
172 aList.Append( aMap->FindByPoint( aPnt2, aType2 ) );
173 CPPUNIT_ASSERT_EQUAL( true, aMap->Merge( aList, "new" ) );
175 TestViewer::show( aMap->GetShape(), AIS_Shaded, true );
176 //TestViewer::show( BRepBuilderAPI_MakeEdge( aPnt1, aPnt2 ).Edge(), QColor( Qt::black ), AIS_Shaded );
177 TestViewer::AssertEqual( "LandCoverMap_Merge_1" );