X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Zone.cxx;h=76e5dc8cf5f8a42274fcd5166eb4f8626d9c4d30;hb=6e326140008102ee0405228ef542b1e425513e16;hp=36b13d65629b20eb2edd5293622947deb8edf647;hpb=84f8b4a57d3cdad820bc1333a5066699cd1c8ae3;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Zone.cxx b/src/HYDROData/HYDROData_Zone.cxx index 36b13d65..76e5dc8c 100644 --- a/src/HYDROData/HYDROData_Zone.cxx +++ b/src/HYDROData/HYDROData_Zone.cxx @@ -1,8 +1,10 @@ #include "HYDROData_Zone.h" +#include "HYDROData_ArtificialObject.h" +#include "HYDROData_Bathymetry.h" #include "HYDROData_Document.h" -#include "HYDROData_Object.h" +#include "HYDROData_NaturalObject.h" #include #include @@ -11,6 +13,8 @@ #include +#include + #define PYTHON_ZONE_ID "KIND_ZONE" IMPLEMENT_STANDARD_HANDLE(HYDROData_Zone, HYDROData_Entity) @@ -30,7 +34,7 @@ QStringList HYDROData_Zone::DumpToPython( MapOfTreatedObjects& theTreatedObjects { QStringList aResList; - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( this ); + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); if ( aDocument.IsNull() ) return aResList; @@ -59,6 +63,26 @@ QStringList HYDROData_Zone::DumpToPython( MapOfTreatedObjects& theTreatedObjects return aResList; } +bool HYDROData_Zone::CanBeUpdated() const +{ + return false; +} + +bool HYDROData_Zone::CanRemove() +{ + return false; +} + +HYDROData_SequenceOfObjects HYDROData_Zone::GetAllReferenceObjects() const +{ + HYDROData_SequenceOfObjects aResSeq = HYDROData_Entity::GetAllReferenceObjects(); + + HYDROData_SequenceOfObjects aSeqOfGeomObjects = GetGeometryObjects(); + aResSeq.Append( aSeqOfGeomObjects ); + + return aResSeq; +} + void HYDROData_Zone::SetShape( const TopoDS_Shape& theShape ) { TNaming_Builder aBuilder( myLab.FindChild( DataTag_Shape ) ); @@ -73,31 +97,90 @@ TopoDS_Shape HYDROData_Zone::GetShape() const return TopoDS_Shape(); } -int HYDROData_Zone::NbGeometryObjects() const +bool HYDROData_Zone::IsMergingNeed() const +{ + Handle(HYDROData_Bathymetry) aRefBathymetry; + + HYDROData_SequenceOfObjects aGeomObjects = GetGeometryObjects(); + HYDROData_SequenceOfObjects::Iterator aGeomObjsIter( aGeomObjects ); + for ( ; aGeomObjsIter.More(); aGeomObjsIter.Next() ) + { + Handle(HYDROData_Object) aRefGeomObj = + Handle(HYDROData_Object)::DownCast( aGeomObjsIter.Value() ); + if ( aRefGeomObj.IsNull() ) + continue; + + Handle(HYDROData_Bathymetry) anObjBathymetry = aRefGeomObj->GetBathymetry(); + if ( anObjBathymetry.IsNull() ) + continue; + + if ( aRefBathymetry.IsNull() ) + { + aRefBathymetry = anObjBathymetry; + continue; + } + + if ( !IsEqual( aRefBathymetry, anObjBathymetry ) ) + return true; + } + + return false; +} + +void HYDROData_Zone::SetMergeType( const MergeBathymetriesType& theType ) +{ + Handle(TDataStd_Integer) anInt; + if ( myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) ) + { + anInt->Set( (int)theType ); + } + else + { + anInt = TDataStd_Integer::Set( myLab.FindChild( DataTag_MergeType ), (int)theType ); + } +} + +HYDROData_Zone::MergeBathymetriesType HYDROData_Zone::GetMergeType() const { - return NbReferenceObjects( DataTag_GeometryObject ); + MergeBathymetriesType aMergeType = Merge_UNKNOWN; + + Handle(TDataStd_Integer) anInt; + if ( myLab.FindChild( DataTag_MergeType ).FindAttribute( TDataStd_Integer::GetID(), anInt ) ) + aMergeType = (MergeBathymetriesType)anInt->Get(); + + return aMergeType; } -void HYDROData_Zone::AddGeometryObject( const Handle(HYDROData_Object)& theObject ) +void HYDROData_Zone::SetMergeBathymetry( const Handle(HYDROData_Bathymetry)& theBathymetry ) { - AddReferenceObject( theObject, DataTag_GeometryObject ); + SetReferenceObject( theBathymetry, DataTag_Bathymetry ); } -void HYDROData_Zone::SetGeometryObject( const int theIndex, - const Handle(HYDROData_Object)& theObject ) +Handle(HYDROData_Bathymetry) HYDROData_Zone::GetMergeBathymetry() const { - SetReferenceObject( theObject, DataTag_GeometryObject, theIndex ); + return Handle(HYDROData_Bathymetry)::DownCast( + GetReferenceObject( DataTag_Bathymetry ) ); } -void HYDROData_Zone::SetGeometryObjects( const HYDROData_SequenceOfObjects& theObjects ) +void HYDROData_Zone::RemoveMergeBathymetry() { - SetReferenceObjects( theObjects, DataTag_GeometryObject ); + ClearReferenceObjects( DataTag_Bathymetry ); } -Handle(HYDROData_Object) HYDROData_Zone::GetGeometryObject( const int theIndex ) const +bool HYDROData_Zone::AddGeometryObject( const Handle(HYDROData_Object)& theObject ) { - return Handle(HYDROData_Object)::DownCast( - GetReferenceObject( DataTag_GeometryObject, theIndex ) ); + if ( theObject.IsNull() ) + return false; + + if ( !theObject->IsKind( STANDARD_TYPE(HYDROData_ArtificialObject) ) && + !theObject->IsKind( STANDARD_TYPE(HYDROData_NaturalObject) ) ) + return false; // Wrong type of object + + if ( HasReference( theObject, DataTag_GeometryObject ) ) + return false; // Object is already in reference list + + AddReferenceObject( theObject, DataTag_GeometryObject ); + return true; } HYDROData_SequenceOfObjects HYDROData_Zone::GetGeometryObjects() const @@ -112,4 +195,3 @@ void HYDROData_Zone::RemoveGeometryObjects() -