From 86272e149f05d7e91ed5ae050274e1edf0eacb6f Mon Sep 17 00:00:00 2001 From: szy Date: Fri, 29 Nov 2013 14:41:23 +0000 Subject: [PATCH] 29.11.2013: Modified HYDROData_ImmersibleZone::GetTopShape() method. --- src/HYDROData/CMakeLists.txt | 2 +- src/HYDROData/HYDROData_ImmersibleZone.cxx | 79 ++++++++++++++-------- 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/src/HYDROData/CMakeLists.txt b/src/HYDROData/CMakeLists.txt index 3a838760..ad5063cd 100644 --- a/src/HYDROData/CMakeLists.txt +++ b/src/HYDROData/CMakeLists.txt @@ -90,7 +90,7 @@ include_directories( ) add_library(HYDROData SHARED ${PROJECT_SOURCES} ${PROJECT_HEADERS}) -target_link_libraries(HYDROData ${GEOM_GEOMUtils} ${CAS_OCAF} ${CAS_OCAFVIS} ${CAS_TKG3d} ${CAS_TKGeomBase} ${CAS_TKGeomAlgo} ${CAS_TKBrep} ${CAS_TKIGES} ${CAS_TKSTEP} ${CAS_TKTopAlgo} ${CAS_TKBO} ${QT_LIBRARIES} ${GUI_ImageComposer}) +target_link_libraries(HYDROData ${GEOM_GEOMUtils} ${CAS_OCAF} ${CAS_OCAFVIS} ${CAS_TKG3d} ${CAS_TKGeomBase} ${CAS_TKGeomAlgo} ${CAS_TKBrep} ${CAS_TKIGES} ${CAS_TKSTEP} ${CAS_TKTopAlgo} ${CAS_TKBO} ${CAS_TKBool} ${QT_LIBRARIES} ${GUI_ImageComposer}) INSTALL(TARGETS HYDROData EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS}) set(PROJECT_LIBRARIES HYDROData) diff --git a/src/HYDROData/HYDROData_ImmersibleZone.cxx b/src/HYDROData/HYDROData_ImmersibleZone.cxx index e35a1f17..4ebe9772 100644 --- a/src/HYDROData/HYDROData_ImmersibleZone.cxx +++ b/src/HYDROData/HYDROData_ImmersibleZone.cxx @@ -14,11 +14,13 @@ #include #include #include - +#include +#include #include #include #define PYTHON_IMMERSIBLE_ZONE_ID "KIND_IMMERSIBLE_ZONE" +//#define HYDRODATA_IMZONE_DEB 1 IMPLEMENT_STANDARD_HANDLE(HYDROData_ImmersibleZone,HYDROData_NaturalObject) IMPLEMENT_STANDARD_RTTIEXT(HYDROData_ImmersibleZone,HYDROData_NaturalObject) @@ -85,7 +87,7 @@ TopoDS_Shape HYDROData_ImmersibleZone::GetTopShape() const if ( !aPolylineShape.IsNull() && aPolylineShape.ShapeType() == TopAbs_WIRE ) { - TopoDS_Wire aPolylineWire = TopoDS::Wire( aPolylineShape ); + const TopoDS_Wire& aPolylineWire = TopoDS::Wire( aPolylineShape ); if ( !aPolylineWire.IsNull() ) { BRepBuilderAPI_MakeFace aMakeFace( aPolylineWire, Standard_True ); aMakeFace.Build(); @@ -94,34 +96,53 @@ TopoDS_Shape HYDROData_ImmersibleZone::GetTopShape() const } } } else { - TopExp_Explorer anExp( aPolylineShape, TopAbs_WIRE ); - for ( ; anExp.More(); anExp.Next() ) { - TopoDS_Wire aWire = TopoDS::Wire( anExp.Current() ); - aWiresList.Append( aWire ); - } - } - - TopoDS_Compound aCompound; - BRep_Builder aBuilder; - aBuilder.MakeCompound( aCompound ); - - TopTools_ListIteratorOfListOfShape anIter( aWiresList ); - for ( ; anIter.More(); anIter.Next() ) { - TopoDS_Wire aWire = TopoDS::Wire( anIter.Value() ); - if ( aWire.IsNull() ) { - continue; - } - - BRepBuilderAPI_MakeFace aMakeFace( aWire, Standard_True ); - aMakeFace.Build(); - if( aMakeFace.IsDone() ) { - aBuilder.Add( aCompound, aMakeFace.Face() ); - } - } - - aResShape = aCompound; + TopExp_Explorer anExp( aPolylineShape, TopAbs_WIRE ); + for ( ; anExp.More(); anExp.Next() ) { + if(!anExp.Current().IsNull()) { + const TopoDS_Wire& aWire = TopoDS::Wire( anExp.Current() ); + aWiresList.Append( aWire ); + } + } + if(aWiresList.IsEmpty()) + return aResShape; + BRepAlgo_FaceRestrictor aFR; + TopoDS_Face aRefFace; + TopoDS_Shape aS = aWiresList.First(); + BRepBuilderAPI_MakeFace aMakeFace( TopoDS::Wire(aWiresList.First()), Standard_True ); + aMakeFace.Build(); + if( aMakeFace.IsDone() ) { + aRefFace = aMakeFace.Face(); + } + if(aRefFace.IsNull()) + return aResShape; + aFR.Init(aRefFace,Standard_False, Standard_True); + TopTools_ListIteratorOfListOfShape anIt( aWiresList ); + for ( ; anIt.More(); anIt.Next() ) { + TopoDS_Wire& aWire = TopoDS::Wire( anIt.Value() ); + if ( aWire.IsNull() ) + continue; + aFR.Add(aWire); + } + aFR.Perform(); + if (aFR.IsDone()) { + TopoDS_Compound aResult; + BRep_Builder aBB; + aBB.MakeCompound(aResult); + for (; aFR.More(); aFR.Next()) { + const TopoDS_Face& aFF = aFR.Current(); + aBB.Add(aResult,aFF); + } + BRepCheck_Analyzer aChecker(aResult); + if(aChecker.IsValid()) + aResShape = aResult; +#ifdef HYDRODATA_IMZONE_DEB + else { + aResShape = aResult; + } +#endif + } + } } - return aResShape; } -- 2.39.2