X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Region.cxx;h=6e0a0f1dee206324c3076569d210535444abbc5c;hb=90314a195b4d4951ba61a7333cb0de16c253dea9;hp=7f4fae7a41224cdc8258ca42ce07eb77c5c95faf;hpb=b2793422d30042c499edd45b1a13e1b38f9189dd;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Region.cxx b/src/HYDROData/HYDROData_Region.cxx index 7f4fae7a..6e0a0f1d 100644 --- a/src/HYDROData/HYDROData_Region.cxx +++ b/src/HYDROData/HYDROData_Region.cxx @@ -7,8 +7,6 @@ #include -#include - #define PYTHON_REGION_ID "KIND_REGION" IMPLEMENT_STANDARD_HANDLE(HYDROData_Region, HYDROData_Entity) @@ -18,7 +16,6 @@ IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Region, HYDROData_Entity) HYDROData_Region::HYDROData_Region() : HYDROData_Entity() { - SetMergeType( Merge_ZMIN ); } HYDROData_Region::~HYDROData_Region() @@ -29,7 +26,7 @@ QStringList HYDROData_Region::DumpToPython( MapOfTreatedObjects& theTreatedObjec { QStringList aResList; - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this ); + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); if ( aDocument.IsNull() ) return aResList; @@ -56,69 +53,32 @@ QStringList HYDROData_Region::DumpToPython( MapOfTreatedObjects& theTreatedObjec return aResList; } -Handle(HYDROData_Zone) HYDROData_Region::AddNewZone() -{ - TDF_Label aNewLab = myLab.FindChild( ChildTag_Zone ).NewChild(); - - return Handle(HYDROData_Zone)::DownCast( - HYDROData_Iterator::CreateObject( aNewLab, KIND_ZONE ) ); -} - -void HYDROData_Region::RemoveChildZones() +bool HYDROData_Region::AddZone( const Handle(HYDROData_Zone)& theZone ) { - myLab.FindChild( ChildTag_Zone ).ForgetAllAttributes( true ); -} - -void HYDROData_Region::SetMergeType( const MergeBathymetriesType& theType ) -{ - Handle(TDataStd_Integer) anInt; - if ( !myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) ) - anInt = TDataStd_Integer::Set( myLab, 0 ); - anInt->Set( (int)theType ); -} - -HYDROData_Region::MergeBathymetriesType HYDROData_Region::GetMergeType() const -{ - MergeBathymetriesType aMergeType = Merge_ZMIN; + if ( theZone.IsNull() ) + return false; - Handle(TDataStd_Integer) anInt; - if ( myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) ) - aMergeType = (MergeBathymetriesType)anInt->Get(); - - return aMergeType; -} - -int HYDROData_Region::NbZones() const -{ - return NbReferenceObjects( DataTag_Zone ); -} - -void HYDROData_Region::AddZone( const Handle(HYDROData_Zone)& theZone ) -{ - AddReferenceObject( theZone, DataTag_Zone ); -} + if ( HasReference( theZone, DataTag_Zone ) ) + return false; // Object is already in reference list -void HYDROData_Region::SetZone( const int theIndex, - const Handle(HYDROData_Zone)& theZone ) -{ - SetReferenceObject( theZone, DataTag_Zone, theIndex ); -} + // 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 ); -void HYDROData_Region::InsertZone( const int theBeforeIndex, - const Handle(HYDROData_Zone)& theZone ) -{ - InsertReferenceObject( theZone, DataTag_Zone, theBeforeIndex ); -} + aFatherRegion->RemoveZone( theZone ); -void HYDROData_Region::SetZones( const HYDROData_SequenceOfObjects& theZones ) -{ - SetReferenceObjects( theZones, DataTag_Zone ); -} + theZone->SetLabel( aNewZone->Label() ); + } + else + { + AddReferenceObject( theZone, DataTag_Zone ); + } -Handle(HYDROData_Zone) HYDROData_Region::GetZone( const int theIndex ) const -{ - return Handle(HYDROData_Zone)::DownCast( - GetReferenceObject( DataTag_Zone, theIndex ) ); + return true; } HYDROData_SequenceOfObjects HYDROData_Region::GetZones() const @@ -132,16 +92,33 @@ void HYDROData_Region::RemoveZone( const Handle(HYDROData_Zone)& theZone ) return; RemoveReferenceObject( theZone->Label(), DataTag_Zone ); -} -void HYDROData_Region::RemoveZone( const int theIndex ) -{ - RemoveReferenceObject( DataTag_Zone, theIndex ); + // 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; +}