X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Region.cxx;h=6e0a0f1dee206324c3076569d210535444abbc5c;hb=90314a195b4d4951ba61a7333cb0de16c253dea9;hp=2550de1fc64a201805403504060d4227c42ee2a2;hpb=b20ed0044cebfdd161511eae3dd31f3d0ccc8810;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Region.cxx b/src/HYDROData/HYDROData_Region.cxx index 2550de1f..6e0a0f1d 100644 --- a/src/HYDROData/HYDROData_Region.cxx +++ b/src/HYDROData/HYDROData_Region.cxx @@ -1,16 +1,20 @@ #include "HYDROData_Region.h" -#include +#include "HYDROData_Document.h" +#include "HYDROData_Iterator.h" +#include "HYDROData_Zone.h" -#define PYTHON_REGION_ID "KIND_REGION" +#include +#define PYTHON_REGION_ID "KIND_REGION" -IMPLEMENT_STANDARD_HANDLE(HYDROData_Region, HYDROData_Domain) -IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Region, HYDROData_Domain) +IMPLEMENT_STANDARD_HANDLE(HYDROData_Region, HYDROData_Entity) +IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Region, HYDROData_Entity) HYDROData_Region::HYDROData_Region() + : HYDROData_Entity() { } @@ -18,10 +22,103 @@ HYDROData_Region::~HYDROData_Region() { } -QString HYDROData_Region::getPythonKindId() const +QStringList HYDROData_Region::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const { - return QString( PYTHON_REGION_ID ); + QStringList aResList; + + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); + if ( aDocument.IsNull() ) + return aResList; + + QString aDocName = aDocument->GetDocPyName(); + QString aRegionName = GetName(); + + aResList << QString( "%1 = %2.CreateObject( %3 );" ) + .arg( aRegionName ).arg( aDocName ).arg( PYTHON_REGION_ID ); + aResList << QString( "%1.SetName( \"%2\" );" ) + .arg( aRegionName ).arg( aRegionName ); + aResList << QString( "" ); + + HYDROData_SequenceOfObjects aZones = GetZones(); + HYDROData_SequenceOfObjects::Iterator anIter( aZones ); + for ( ; anIter.More(); anIter.Next() ) + { + Handle(HYDROData_Zone) aRefZone = + Handle(HYDROData_Zone)::DownCast( anIter.Value() ); + if ( !aRefZone.IsNull() ) + setPythonReferenceObject( theTreatedObjects, aResList, aRefZone, "AddZone" ); + } + aResList << QString( "" ); + + return aResList; } +bool HYDROData_Region::AddZone( const Handle(HYDROData_Zone)& theZone ) +{ + if ( theZone.IsNull() ) + return false; + + if ( HasReference( theZone, DataTag_Zone ) ) + return false; // Object is already in reference list + // Move the zone from other region + Handle(HYDROData_Region) aFatherRegion = + Handle(HYDROData_Region)::DownCast( theZone->GetFatherObject() ); + if ( !aFatherRegion.IsNull() && aFatherRegion->Label() != myLab ) + { + Handle(HYDROData_Zone) aNewZone = addNewZone(); + theZone->CopyTo( aNewZone ); + + aFatherRegion->RemoveZone( theZone ); + + theZone->SetLabel( aNewZone->Label() ); + } + else + { + AddReferenceObject( theZone, DataTag_Zone ); + } + + return true; +} + +HYDROData_SequenceOfObjects HYDROData_Region::GetZones() const +{ + return GetReferenceObjects( DataTag_Zone ); +} + +void HYDROData_Region::RemoveZone( const Handle(HYDROData_Zone)& theZone ) +{ + if ( theZone.IsNull() ) + return; + + RemoveReferenceObject( theZone->Label(), DataTag_Zone ); + + // Remove zone from data model + Handle(HYDROData_Region) aFatherRegion = + Handle(HYDROData_Region)::DownCast( theZone->GetFatherObject() ); + if ( !aFatherRegion.IsNull() && aFatherRegion->Label() == myLab ) + theZone->Remove(); + + // If the last zone has been removed from region we remove this region + HYDROData_SequenceOfObjects aRefZones = GetZones(); + if ( aRefZones.IsEmpty() ) + Remove(); +} + +void HYDROData_Region::RemoveZones() +{ + ClearReferenceObjects( DataTag_Zone ); + myLab.FindChild( DataTag_ChildZone ).ForgetAllAttributes( true ); +} + +Handle(HYDROData_Zone) HYDROData_Region::addNewZone() +{ + TDF_Label aNewLab = myLab.FindChild( DataTag_ChildZone ).NewChild(); + + Handle(HYDROData_Zone) aNewZone = + Handle(HYDROData_Zone)::DownCast( HYDROData_Iterator::CreateObject( aNewLab, KIND_ZONE ) ); + AddZone( aNewZone ); + + return aNewZone; +}