X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_ImmersibleZone.cxx;h=f3f8e386c1411421f6187d30494f19c1b5539e94;hb=31500f5502df7fc9d0f6e47d58412967b252454c;hp=b6a469548e6613f4d819af159487ff9e0c64aee3;hpb=6125fb8b6cbed45b172a104b5ae3c0b3cd909e5c;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_ImmersibleZone.cxx b/src/HYDROData/HYDROData_ImmersibleZone.cxx index b6a46954..f3f8e386 100644 --- a/src/HYDROData/HYDROData_ImmersibleZone.cxx +++ b/src/HYDROData/HYDROData_ImmersibleZone.cxx @@ -24,7 +24,7 @@ #include "HYDROData_PolylineXY.h" #include "HYDROData_ShapesTool.h" -#include +#include #include #include @@ -34,24 +34,21 @@ #include #include -#include -#include -#include #include #include + #include #include #define DEB_IMZ #include -#define _DEVDEBUG_ +//#define _DEVDEBUG_ #include "HYDRO_trace.hxx" //#define HYDRODATA_IMZONE_DEB 1 -IMPLEMENT_STANDARD_HANDLE(HYDROData_ImmersibleZone,HYDROData_NaturalObject) IMPLEMENT_STANDARD_RTTIEXT(HYDROData_ImmersibleZone,HYDROData_NaturalObject) @@ -77,6 +74,11 @@ QStringList HYDROData_ImmersibleZone::DumpToPython( const QString& thePyScriptPa Handle(HYDROData_PolylineXY) aRefPolyline = GetPolyline(); setPythonReferenceObject( thePyScriptPath, theTreatedObjects, aResList, aRefPolyline, "SetPolyline" ); + if (!this->IsSubmersible()) + { + aResList << QString( "%1.SetIsSubmersible(False)" ).arg( aZoneName ); + } + aResList << QString( "" ); aResList << QString( "%1.Update()" ).arg( aZoneName ); @@ -100,6 +102,7 @@ void HYDROData_ImmersibleZone::Update() { HYDROData_NaturalObject::Update(); + RemoveGroupObjects(); TopoDS_Shape aResShape = generateTopShape(); SetTopShape( aResShape ); @@ -118,132 +121,7 @@ TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape() const TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape( const Handle(HYDROData_PolylineXY)& aPolyline ) { - DEBTRACE("generateTopShape"); - TopoDS_Face aResultFace = TopoDS_Face(); // --- result: default = null face - - if (!aPolyline.IsNull()) - { - TopoDS_Shape aPolylineShape = aPolyline->GetShape(); -#ifdef DEB_IMZ - std::string brepName = "imz.brep"; - BRepTools::Write(aPolylineShape, brepName.c_str()); -#endif - TopTools_ListOfShape aWiresList; - - if (!aPolylineShape.IsNull() && aPolylineShape.ShapeType() == TopAbs_WIRE) - { - // --- only one wire: try to make a face - DEBTRACE("one wire: try to build a face"); - const TopoDS_Wire& aPolylineWire = TopoDS::Wire(aPolylineShape); - if (!aPolylineWire.IsNull()) - { - BRepBuilderAPI_MakeFace aMakeFace(aPolylineWire, Standard_True); - aMakeFace.Build(); - if (aMakeFace.IsDone()) - { - DEBTRACE(" a face with the only wire given"); - aResultFace = aMakeFace.Face(); - } - } - } - else - { - // --- a list of wires ? inventory of wires and edges - Handle(TopTools_HSequenceOfShape) aSeqWires = new TopTools_HSequenceOfShape; - Handle(TopTools_HSequenceOfShape) aSeqEdges = new TopTools_HSequenceOfShape; - TopExp_Explorer anExp(aPolylineShape, TopAbs_WIRE); - DEBTRACE("list of wires ?"); - for (; anExp.More(); anExp.Next()) - { - if (!anExp.Current().IsNull()) - { - const TopoDS_Wire& aWire = TopoDS::Wire(anExp.Current()); - aWiresList.Append(aWire); - DEBTRACE(" append wire"); - TopExp_Explorer it2(aWire, TopAbs_EDGE); - for (; it2.More(); it2.Next()) - aSeqEdges->Append(it2.Current()); - } - } - if (aWiresList.IsEmpty()) - return aResultFace; // --- no wires: null result - - if (aSeqEdges->Length() > 1) - { - DEBTRACE("try to connect all the edges together, build a unique wire and a face"); - // --- try to create one wire by connecting edges with a distance tolerance (no necessity of sharing points) - ShapeAnalysis_FreeBounds::ConnectEdgesToWires(aSeqEdges, 1E-5, Standard_False, aSeqWires); - - if (aSeqWires->Length() == 1) - { - // --- one wire: try to make a face - const TopoDS_Wire& aPolylineWire = TopoDS::Wire(aSeqWires->Value(1)); - if (!aPolylineWire.IsNull()) - { - BRepBuilderAPI_MakeFace aMakeFace(aPolylineWire, Standard_True); - aMakeFace.Build(); - if (aMakeFace.IsDone()) - { - DEBTRACE(" a face from all the wires connected"); - aResultFace = aMakeFace.Face(); - } - } - } - } - - if (aResultFace.IsNull()) - { - DEBTRACE("try to make a face with the first wire of the list and other wires as restrictions"); - // --- try to make a face with the first wire of the list and other wires as restrictions - 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()) - { - DEBTRACE(" a face with first wire"); - aRefFace = aMakeFace.Face(); - } - if (!aRefFace.IsNull()) - { - 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()) - { - for (; aFR.More(); aFR.Next()) - { - DEBTRACE(" a restricted face"); - aResultFace = aFR.Current(); - break; - } - } - } - } - } - } - - if (aResultFace.IsNull()) - return aResultFace; - - DEBTRACE("check the face"); - BRepCheck_Analyzer anAnalyzer(aResultFace); - if (anAnalyzer.IsValid() && aResultFace.ShapeType() == TopAbs_FACE) - { - DEBTRACE("face OK"); - return aResultFace; - } - else - DEBTRACE("bad face"); - return TopoDS_Face(); + return HYDROData_Tool::PolyXY2Face(aPolyline); } void HYDROData_ImmersibleZone::createGroupObjects()