From: asl Date: Tue, 10 Nov 2015 09:28:25 +0000 (+0300) Subject: debug of the land cover maps X-Git-Tag: v1.5~56^2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=015435649c14e69a097ddf92048b07d55b2eeda7;p=modules%2Fhydro.git debug of the land cover maps --- diff --git a/src/HYDROData/HYDROData_LandCoverMap.cxx b/src/HYDROData/HYDROData_LandCoverMap.cxx index 5487b6ad..d56db3d2 100644 --- a/src/HYDROData/HYDROData_LandCoverMap.cxx +++ b/src/HYDROData/HYDROData_LandCoverMap.cxx @@ -437,6 +437,15 @@ bool HYDROData_LandCoverMap::Add( const Handle( HYDROData_Object )& theObject, c return LocalPartition( aFace, theType ); } +bool HYDROData_LandCoverMap::Add( const TopoDS_Wire& theWire, const QString& theType ) +{ + if( !theWire.Closed() ) + return false; + + TopoDS_Face aFace = BRepBuilderAPI_MakeFace( theWire, Standard_True ).Face(); + return LocalPartition( aFace, theType ); +} + /** Add a new polyline as land cover @param thePolyline the polyline to add as land cover @@ -449,15 +458,22 @@ bool HYDROData_LandCoverMap::Add( const Handle( HYDROData_PolylineXY )& thePolyl return false; TopoDS_Shape aShape = thePolyline->GetShape(); - if( aShape.ShapeType()!=TopAbs_WIRE ) - return false; + if( aShape.ShapeType()==TopAbs_WIRE ) + return Add( TopoDS::Wire( aShape ), theType ); - TopoDS_Wire aWire = TopoDS::Wire( aShape ); - if( !aWire.Closed() ) - return false; + if( aShape.ShapeType()==TopAbs_COMPOUND ) + { + TopExp_Explorer anExp( aShape, TopAbs_WIRE ); + for( ; anExp.More(); anExp.Next() ) + { + TopoDS_Wire aPart = TopoDS::Wire( anExp.Current() ); + if( !Add( aPart, theType ) ) + return false; + } + return true; + } - TopoDS_Face aFace = BRepBuilderAPI_MakeFace( aWire, Standard_True ).Face(); - return LocalPartition( aFace, theType ); + return false; } /** diff --git a/src/HYDROData/HYDROData_LandCoverMap.h b/src/HYDROData/HYDROData_LandCoverMap.h index f3492f17..96acd1fc 100644 --- a/src/HYDROData/HYDROData_LandCoverMap.h +++ b/src/HYDROData/HYDROData_LandCoverMap.h @@ -30,6 +30,7 @@ typedef NCollection_IndexedDataMap HYDROData_MapOfFaceToSt DEFINE_STANDARD_HANDLE( HYDROData_LandCoverMap, HYDROData_Entity ) class TopoDS_Shape; +class TopoDS_Wire; class TopoDS_Iterator; class TopTools_ListOfShape; class Handle( HYDROData_PolylineXY ); @@ -121,6 +122,7 @@ public: protected: void SetShape( const TopoDS_Shape& ); + bool Add( const TopoDS_Wire&, const QString& ); bool LocalPartition( const TopoDS_Shape&, const QString& theNewType ); static TopoDS_Shape MergeFaces(const TopTools_ListOfShape& theFaces, bool IsToUnify, double theTolerance = 1E-5 ); diff --git a/src/HYDRO_tests/reference_data/LCM_split_2a.png b/src/HYDRO_tests/reference_data/LCM_split_2a.png new file mode 100644 index 00000000..51cf6e0e Binary files /dev/null and b/src/HYDRO_tests/reference_data/LCM_split_2a.png differ diff --git a/src/HYDRO_tests/reference_data/LCM_split_2b.png b/src/HYDRO_tests/reference_data/LCM_split_2b.png new file mode 100644 index 00000000..2f054f89 Binary files /dev/null and b/src/HYDRO_tests/reference_data/LCM_split_2b.png differ diff --git a/src/HYDRO_tests/reference_data/lcm_poly_2_sections.png b/src/HYDRO_tests/reference_data/lcm_poly_2_sections.png new file mode 100644 index 00000000..7b7d7fcb Binary files /dev/null and b/src/HYDRO_tests/reference_data/lcm_poly_2_sections.png differ diff --git a/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx b/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx index a64ed480..7e47eaf4 100644 --- a/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx +++ b/src/HYDRO_tests/test_HYDROData_LandCoverMap.cxx @@ -841,3 +841,98 @@ void test_HYDROData_LandCoverMap::test_shp_loop_back() CPPUNIT_ASSERT_EQUAL(0, remove(aSFileName.toStdString().c_str())); } +void test_HYDROData_LandCoverMap::test_add_2_section_poly() +{ + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 ); + + Handle(HYDROData_PolylineXY) Polyline_12 = + Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) ); + Polyline_12->SetName( "Polyline_12" ); + + Polyline_12->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true ); + Polyline_12->AddPoint( 0, gp_XY( -148.70, 145.68 ) ); + Polyline_12->AddPoint( 0, gp_XY( -81.71, 210.97 ) ); + Polyline_12->AddPoint( 0, gp_XY( -21.09, 122.79 ) ); + Polyline_12->AddPoint( 0, gp_XY( -106.30, 102.44 ) ); + Polyline_12->AddSection( "Section_2", HYDROData_PolylineXY::SECTION_POLYLINE, true ); + Polyline_12->AddPoint( 1, gp_XY( -7.09, 227.08 ) ); + Polyline_12->AddPoint( 1, gp_XY( 46.32, 228.78 ) ); + Polyline_12->AddPoint( 1, gp_XY( 69.64, 165.61 ) ); + Polyline_12->AddPoint( 1, gp_XY( 13.68, 156.28 ) ); + + Polyline_12->Update(); + + Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) ); + CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_12, "" ) ); + + TestViewer::show( LCM->GetShape(), AIS_Shaded, true, "lcm_poly_2_sections" ); + CPPUNIT_ASSERT_IMAGES + + aDoc->Close(); +} + +void test_HYDROData_LandCoverMap::test_split_2() +{ + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( 1 ); + + Handle(HYDROData_PolylineXY) Polyline_1 = + Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) ); + Polyline_1->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true ); + Polyline_1->AddPoint( 0, gp_XY( -264.84, 323.44 ) ); + Polyline_1->AddPoint( 0, gp_XY( 254.45, 301.19 ) ); + Polyline_1->AddPoint( 0, gp_XY( -291.54, -47.48 ) ); + Polyline_1->Update(); + + Handle(HYDROData_PolylineXY) Polyline_6 = + Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) ); + Polyline_6->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true ); + Polyline_6->AddPoint( 0, gp_XY( -155.15, 199.47 ) ); + Polyline_6->AddPoint( 0, gp_XY( -71.19, 289.12 ) ); + Polyline_6->AddPoint( 0, gp_XY( 22.01, 211.57 ) ); + Polyline_6->AddPoint( 0, gp_XY( -84.00, 134.73 ) ); + Polyline_6->Update(); + + Handle(HYDROData_PolylineXY) Polyline_7 = + Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) ); + Polyline_7->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true ); + Polyline_7->AddPoint( 0, gp_XY( -50.56, 232.20 ) ); + Polyline_7->AddPoint( 0, gp_XY( 40.51, 286.98 ) ); + Polyline_7->AddPoint( 0, gp_XY( 118.77, 256.39 ) ); + Polyline_7->AddPoint( 0, gp_XY( 72.52, 114.10 ) ); + Polyline_7->Update(); + + Handle(HYDROData_PolylineXY) Polyline_8 = + Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) ); + Polyline_8->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, true ); + Polyline_8->AddPoint( 0, gp_XY( -44.16, 190.93 ) ); + Polyline_8->AddPoint( 0, gp_XY( 9.91, 226.51 ) ); + Polyline_8->AddPoint( 0, gp_XY( 35.53, 175.99 ) ); + Polyline_8->AddPoint( 0, gp_XY( -9.30, 157.50 ) ); + Polyline_8->Update(); + + Handle(HYDROData_PolylineXY) Polyline_9 = + Handle(HYDROData_PolylineXY)::DownCast( aDoc->CreateObject( KIND_POLYLINEXY ) ); + Polyline_9->AddSection( "Section_1", HYDROData_PolylineXY::SECTION_POLYLINE, false ); + Polyline_9->AddPoint( 0, gp_XY( -103.92, 288.40 ) ); + Polyline_9->AddPoint( 0, gp_XY( -53.41, 246.43 ) ); + Polyline_9->AddPoint( 0, gp_XY( 10.62, 245.01 ) ); + Polyline_9->Update(); + + + Handle(HYDROData_LandCoverMap) LCM = Handle(HYDROData_LandCoverMap)::DownCast( aDoc->CreateObject( KIND_LAND_COVER_MAP ) ); + CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_1, "" ) ); + CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_6, "" ) ); + CPPUNIT_ASSERT_EQUAL( true, LCM->Add( Polyline_7, "" ) ); + + CPPUNIT_ASSERT_EQUAL( true, LCM->Split( Polyline_9 ) ); + + TestViewer::show( LCM->GetShape(), AIS_Shaded, true, "LCM_split_2a" ); + CPPUNIT_ASSERT_IMAGES + + CPPUNIT_ASSERT_EQUAL( true, LCM->Split( Polyline_8 ) ); + + TestViewer::show( LCM->GetShape(), AIS_Shaded, true, "LCM_split_2b" ); + CPPUNIT_ASSERT_IMAGES + + aDoc->Close(); +} diff --git a/src/HYDRO_tests/test_HYDROData_LandCoverMap.h b/src/HYDRO_tests/test_HYDROData_LandCoverMap.h index f8f2a40a..8772f9db 100644 --- a/src/HYDRO_tests/test_HYDROData_LandCoverMap.h +++ b/src/HYDRO_tests/test_HYDROData_LandCoverMap.h @@ -27,8 +27,10 @@ class test_HYDROData_LandCoverMap : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( test_HYDROData_LandCoverMap ); CPPUNIT_TEST( test_add_2_objects ); + CPPUNIT_TEST( test_add_2_section_poly ); CPPUNIT_TEST( test_add_triangles ); CPPUNIT_TEST( test_split ); + CPPUNIT_TEST( test_split_2 ); CPPUNIT_TEST( test_incomplete_split ); CPPUNIT_TEST( test_merge ); CPPUNIT_TEST( test_remove ); @@ -50,8 +52,10 @@ class test_HYDROData_LandCoverMap : public CppUnit::TestFixture public: void test_add_2_objects(); + void test_add_2_section_poly(); void test_add_triangles(); void test_split(); + void test_split_2(); void test_incomplete_split(); void test_merge(); void test_remove();