X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_ImmersibleZone.cxx;h=ae2b7ddd0493a391f831bbfdf64f75f8c9159170;hb=27b1abdc88719c5bce7a8d2f49612cd155e80d21;hp=ad7a42c37332be19cd99f66555ae18b88f4b4a19;hpb=9b2bfc45ba9bf3430d7fb6ed9bfe8352a91885a3;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_ImmersibleZone.cxx b/src/HYDROData/HYDROData_ImmersibleZone.cxx index ad7a42c3..ae2b7ddd 100644 --- a/src/HYDROData/HYDROData_ImmersibleZone.cxx +++ b/src/HYDROData/HYDROData_ImmersibleZone.cxx @@ -1,7 +1,24 @@ +// Copyright (C) 2014-2015 EDF-R&D +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include "HYDROData_ImmersibleZone.h" -#include "HYDROData_Bathymetry.h" +#include "HYDROData_IAltitudeObject.h" #include "HYDROData_Document.h" #include "HYDROData_ShapesGroup.h" #include "HYDROData_PolylineXY.h" @@ -25,7 +42,6 @@ #include #include -#define PYTHON_IMMERSIBLE_ZONE_ID "KIND_IMMERSIBLE_ZONE" //#define HYDRODATA_IMZONE_DEB 1 IMPLEMENT_STANDARD_HANDLE(HYDROData_ImmersibleZone,HYDROData_NaturalObject) @@ -43,41 +59,21 @@ HYDROData_ImmersibleZone::~HYDROData_ImmersibleZone() QStringList HYDROData_ImmersibleZone::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const { - QStringList aResList; - - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); - if ( aDocument.IsNull() ) - return aResList; + QStringList aResList = dumpObjectCreation( theTreatedObjects ); + + QString aZoneName = GetObjPyName(); - QString aDocName = aDocument->GetDocPyName(); - QString aZoneName = GetName(); + Handle(HYDROData_IAltitudeObject) aRefAltitude = GetAltitudeObject(); + setPythonReferenceObject( theTreatedObjects, aResList, aRefAltitude, "SetAltitudeObject" ); - aResList << QString( "%1 = %2.CreateObject( %3 );" ) - .arg( aZoneName ).arg( aDocName ).arg( PYTHON_IMMERSIBLE_ZONE_ID ); - aResList << QString( "%1.SetName( \"%2\" );" ) - .arg( aZoneName ).arg( aZoneName ); - aResList << QString( "" ); + Handle(HYDROData_PolylineXY) aRefPolyline = GetPolyline(); + setPythonReferenceObject( theTreatedObjects, aResList, aRefPolyline, "SetPolyline" ); - QColor aFillingColor = GetFillingColor(); - aResList << QString( "filling_color = QColor( %1, %2, %3, %4 );" ) - .arg( aFillingColor.red() ).arg( aFillingColor.green() ) - .arg( aFillingColor.blue() ).arg( aFillingColor.alpha() ); - aResList << QString( "%1.SetFillingColor( filling_color );" ).arg( aZoneName ); aResList << QString( "" ); - QColor aBorderColor = GetBorderColor(); - aResList << QString( "border_color = QColor( %1, %2, %3, %4 );" ) - .arg( aBorderColor.red() ).arg( aBorderColor.green() ) - .arg( aBorderColor.blue() ).arg( aBorderColor.alpha() ); - aResList << QString( "%1.SetBorderColor( border_color );" ).arg( aZoneName ); + aResList << QString( "%1.Update();" ).arg( aZoneName ); aResList << QString( "" ); - Handle(HYDROData_Bathymetry) aRefBathymetry = GetBathymetry(); - setPythonReferenceObject( theTreatedObjects, aResList, aRefBathymetry, "SetBathymetry" ); - - Handle(HYDROData_PolylineXY) aRefPolyline = GetPolyline(); - setPythonReferenceObject( theTreatedObjects, aResList, aRefPolyline, "SetPolyline" ); - return aResList; } @@ -107,6 +103,11 @@ void HYDROData_ImmersibleZone::Update() createGroupObjects(); } +bool HYDROData_ImmersibleZone::IsHas2dPrs() const +{ + return true; +} + TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape() const { return generateTopShape( GetPolyline() ); @@ -128,7 +129,7 @@ TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape( const Handle(HYDROData_ BRepBuilderAPI_MakeFace aMakeFace( aPolylineWire, Standard_True ); aMakeFace.Build(); if( aMakeFace.IsDone() ) { - return aMakeFace.Face(); + aResultFace = aMakeFace.Face(); } } } else { @@ -170,6 +171,10 @@ TopoDS_Shape HYDROData_ImmersibleZone::generateTopShape( const Handle(HYDROData_ } } } + + if( aResultFace.IsNull() ) + return aResultFace; + BRepCheck_Analyzer anAnalyzer( aResultFace ); if( anAnalyzer.IsValid() && aResultFace.ShapeType()==TopAbs_FACE ) return aResultFace; @@ -197,8 +202,17 @@ void HYDROData_ImmersibleZone::createGroupObjects() TopoDS_Wire aZoneOuterWire = ShapeAnalysis::OuterWire( aZoneFace ); - TopTools_SequenceOfShape anInnerEdges; + // Create outer edges group + QString anOutWiresGroupName = GetName() + "_Outer"; + + Handle(HYDROData_ShapesGroup) anOutWiresGroup = createGroupObject(); + anOutWiresGroup->SetName( anOutWiresGroupName ); + + TopTools_SequenceOfShape anOuterEdges; + HYDROData_ShapesTool::ExploreShapeToShapes( aZoneOuterWire, TopAbs_EDGE, anOuterEdges ); + anOutWiresGroup->SetShapes( anOuterEdges ); + int anInnerCounter = 1; TopExp_Explorer aZoneFaceExp( aZoneFace, TopAbs_WIRE ); for ( ; aZoneFaceExp.More(); aZoneFaceExp.Next() ) { @@ -206,25 +220,12 @@ void HYDROData_ImmersibleZone::createGroupObjects() if ( aZoneWire.IsEqual( aZoneOuterWire ) ) continue; // Skip the outer wire - TopTools_SequenceOfShape anEdges; - HYDROData_ShapesTool::ExploreShapeToShapes( aZoneWire, TopAbs_EDGE, anEdges ); - anInnerEdges.Append( anEdges ); - } - - // Create outer edges group - QString anOutWiresGroupName = GetName() + "_Outer"; + TopTools_SequenceOfShape anInnerEdges; + HYDROData_ShapesTool::ExploreShapeToShapes( aZoneWire, TopAbs_EDGE, anInnerEdges ); + if ( anInnerEdges.IsEmpty() ) + continue; - Handle(HYDROData_ShapesGroup) anOutWiresGroup = createGroupObject(); - anOutWiresGroup->SetName( anOutWiresGroupName ); - - TopTools_SequenceOfShape anEdges; - HYDROData_ShapesTool::ExploreShapeToShapes( aZoneOuterWire, TopAbs_EDGE, anEdges ); - anOutWiresGroup->SetShapes( anEdges ); - - // Create group for inner edges only if edges is not empty - if ( !anInnerEdges.IsEmpty() ) - { - QString anInWiresGroupName = GetName() + "_Inner"; + QString anInWiresGroupName = GetName() + "_Inner_" + QString::number( anInnerCounter++ ); Handle(HYDROData_ShapesGroup) anInWiresGroup = createGroupObject(); anInWiresGroup->SetName( anInWiresGroupName );