X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Entity.cxx;h=f0b9e5fb034a06e9b26123375f8f69eab2fe0fc2;hb=9c947f35615e69e9e54a8c4b074dd1f2be13689c;hp=fe5be13a4d3088d33280f2cae71fbe9c12e696ea;hpb=439579ec24edd8b147cab07f688d446d59029a1e;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Entity.cxx b/src/HYDROData/HYDROData_Entity.cxx index fe5be13a..f0b9e5fb 100644 --- a/src/HYDROData/HYDROData_Entity.cxx +++ b/src/HYDROData/HYDROData_Entity.cxx @@ -16,29 +16,42 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include "HYDROData_Entity.h" - -#include "HYDROData_Iterator.h" -#include "HYDROData_Tool.h" - +#include +#include +#include +#include +#include #include #include #include -#include -#include #include -#include +#include #include - #include #include - +#include +#include +#include #include -#include +#include #include #include -static const Standard_GUID GUID_MUST_BE_UPDATED("80f2bb81-3873-4631-8ddd-940d2119f000"); +HYDROData_SequenceOfObjects::HYDROData_SequenceOfObjects() + : NCollection_Sequence() +{ +} + +HYDROData_SequenceOfObjects::HYDROData_SequenceOfObjects( const HYDROData_SequenceOfObjects& theSequence ) + : NCollection_Sequence( theSequence ) +{ +} + +HYDROData_SequenceOfObjects::HYDROData_SequenceOfObjects( const NCollection_Sequence& theSequence ) + : NCollection_Sequence( theSequence ) +{ +} + IMPLEMENT_STANDARD_HANDLE(HYDROData_Entity,MMgt_TShared) IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Entity,MMgt_TShared) @@ -82,7 +95,7 @@ QStringList HYDROData_Entity::DumpToPython( MapOfTreatedObjects& theTreatedObjec void HYDROData_Entity::Update() { - SetToUpdate( false ); + ClearChanged(); } void HYDROData_Entity::UpdateLocalCS( double theDx, double theDy ) @@ -112,31 +125,61 @@ QVariant HYDROData_Entity::GetDataVariant() return QVariant(); } -void HYDROData_Entity::SetToUpdate( bool theFlag ) +void HYDROData_Entity::ClearChanged() { - if ( IsMustBeUpdated() == theFlag ) + TDataStd_Integer::Set( myLab.FindChild( DataTag_GeomChange ), 0 ); +} + +int HYDROData_Entity::GetGeomChangeFlag() const +{ + int aGeomChangeFlag = 0; + Handle(TDataStd_Integer) aGeomChangeAttr; + TDF_Label aGeomChangeLab = myLab.FindChild( DataTag_GeomChange ); + aGeomChangeLab.FindAttribute( TDataStd_Integer::GetID(), aGeomChangeAttr ); + if ( !aGeomChangeAttr.IsNull() ) + aGeomChangeFlag = aGeomChangeAttr->Get(); + return aGeomChangeFlag; +} + +void HYDROData_Entity::Changed( Geometry theChangedGeometry ) +{ + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); + if( aDocument.IsNull() ) return; - if ( theFlag ) - { - TDataStd_UAttribute::Set( myLab, GUID_MUST_BE_UPDATED ); + int aGeomChangeFlag = 0; + Handle(TDataStd_Integer) aGeomChangeAttr; + TDF_Label aGeomChangeLab = myLab.FindChild( DataTag_GeomChange ); + aGeomChangeLab.FindAttribute( TDataStd_Integer::GetID(), aGeomChangeAttr ); + if ( !aGeomChangeAttr.IsNull() ) + aGeomChangeFlag = aGeomChangeAttr->Get(); + + int aBitsToChange = ( myGeom & theChangedGeometry ); + if( aBitsToChange == 0 ) + return; - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); - if ( !aDocument.IsNull() ) + aGeomChangeFlag = ( aGeomChangeFlag | aBitsToChange ); + TDataStd_Integer::Set( aGeomChangeLab, aGeomChangeFlag ); + + HYDROData_Iterator anIter( aDocument ); + for ( ; anIter.More(); anIter.Next() ) + { + Handle(HYDROData_Entity) anObject = anIter.Current(); + if( anObject.IsNull() ) + continue; + HYDROData_SequenceOfObjects aRefSeq = anObject->GetAllReferenceObjects(); + for ( int i = 1, n = aRefSeq.Length(); i <= n; ++i ) { - // Change the states of this and all depended objects - HYDROData_Tool::SetMustBeUpdatedObjects( aDocument ); + Handle(HYDROData_Entity) aRefObject = aRefSeq.Value( i ); + if( aRefObject->Label()==myLab ) + anObject->Changed( theChangedGeometry ); } } - else - { - myLab.ForgetAttribute( GUID_MUST_BE_UPDATED ); - } } -bool HYDROData_Entity::IsMustBeUpdated() const +bool HYDROData_Entity::IsMustBeUpdated( Geometry theGeom ) const { - return myLab.IsAttribute( GUID_MUST_BE_UPDATED ); + return ( ( GetGeomChangeFlag() & theGeom ) != 0 ); } bool HYDROData_Entity::CanBeUpdated() const @@ -159,7 +202,8 @@ bool HYDROData_Entity::CanRemove() return true; } -HYDROData_Entity::HYDROData_Entity() +HYDROData_Entity::HYDROData_Entity( Geometry theGeom ) + : myGeom( theGeom ) { } @@ -167,7 +211,8 @@ HYDROData_Entity::~HYDROData_Entity() { } -void HYDROData_Entity::CopyTo( const Handle(HYDROData_Entity)& theDestination ) const +void HYDROData_Entity::CopyTo( const Handle(HYDROData_Entity)& theDestination, + bool isGenerateNewName ) const { Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( myLab ); if ( aDocument.IsNull() ) { @@ -177,23 +222,26 @@ void HYDROData_Entity::CopyTo( const Handle(HYDROData_Entity)& theDestination ) TDF_CopyLabel aCopy(myLab, theDestination->Label()); aCopy.Perform(); - // generate a new unique name for the clone object: - // case 1: Image_1 -> Image_2 - // case 2: ImageObj -> ImageObj_1 - QString aName = theDestination->GetName(); - QString aPrefix = aName; - if( aName.contains( '_' ) ) { // case 1 - QString aSuffix = aName.section( '_', -1 ); - bool anIsInteger = false; - aSuffix.toInt( &anIsInteger ); - if( anIsInteger ) - aPrefix = aName.section( '_', 0, -2 ); - } else { // case 2 - aPrefix = aName; - } + if( isGenerateNewName ) + { + // generate a new unique name for the clone object: + // case 1: Image_1 -> Image_2 + // case 2: ImageObj -> ImageObj_1 + QString aName = theDestination->GetName(); + QString aPrefix = aName; + if( aName.contains( '_' ) ) { // case 1 + QString aSuffix = aName.section( '_', -1 ); + bool anIsInteger = false; + aSuffix.toInt( &anIsInteger ); + if( anIsInteger ) + aPrefix = aName.section( '_', 0, -2 ); + } else { // case 2 + aPrefix = aName; + } - aName = HYDROData_Tool::GenerateObjectName( aDocument, aPrefix ); - theDestination->SetName( aName ); + aName = HYDROData_Tool::GenerateObjectName( aDocument, aPrefix ); + theDestination->SetName( aName ); + } } Handle(HYDROData_Entity) HYDROData_Entity::GetFatherObject() const @@ -599,6 +647,9 @@ QString HYDROData_Entity::getPyTypeID() const case KIND_SPLITTED_GROUP: return "KIND_SPLITTED_GROUP"; case KIND_STREAM_ALTITUDE: return "KIND_STREAM_ALTITUDE"; case KIND_OBSTACLE_ALTITUDE: return "KIND_OBSTACLE_ALTITUDE"; + case KIND_STRICKLER_TABLE: return "KIND_STRICKLER_TABLE"; + case KIND_LAND_COVER_OBSOLETE: return ""; + case KIND_LAND_COVER_MAP: return "KIND_LAND_COVER_MAP"; default: return "KIND_UNKNOWN"; ///! Unrecognized object } } @@ -674,3 +725,21 @@ void HYDROData_Entity::findPythonReferenceObject( MapOfTreatedObjects& theTreate .arg( aDocument->GetDocPyName() ) .arg( GetName() ); } + +void HYDROData_Entity::SetShape( int theTag, const TopoDS_Shape& theShape ) +{ + TNaming_Builder aBuilder( myLab.FindChild( theTag ) ); + aBuilder.Generated( theShape ); +} + +TopoDS_Shape HYDROData_Entity::GetShape( int theTag ) const +{ + TDF_Label aShapeLabel = myLab.FindChild( theTag, false ); + if ( !aShapeLabel.IsNull() ) + { + Handle(TNaming_NamedShape) aNamedShape; + if ( aShapeLabel.FindAttribute( TNaming_NamedShape::GetID(), aNamedShape ) ) + return aNamedShape->Get(); + } + return TopoDS_Shape(); +}