X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_Object.cxx;h=2ee9bd7ec4788fab611f7367eaebf3bf9173df72;hb=f108c7fd8c3b2dbb8c263b14456a31f8dd1d0921;hp=00158bbe4609228dca0620e4dd086df1d8ef3d08;hpb=061386caa71490489a0475540932d9f2e48d77dc;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_Object.cxx b/src/HYDROData/HYDROData_Object.cxx index 00158bbe..2ee9bd7e 100644 --- a/src/HYDROData/HYDROData_Object.cxx +++ b/src/HYDROData/HYDROData_Object.cxx @@ -1,4 +1,7 @@ -#include + +#include "HYDROData_Object.h" + +#include "HYDROData_Iterator.h" #include #include @@ -6,7 +9,15 @@ #include #include #include +#include + #include +#include + +#include +#include +#include +#include IMPLEMENT_STANDARD_HANDLE(HYDROData_Object,MMgt_TShared) IMPLEMENT_STANDARD_RTTIEXT(HYDROData_Object,MMgt_TShared) @@ -32,31 +43,19 @@ void HYDROData_Object::SetName(const QString& theName) TDataStd_Name::Set(myLab, TCollection_ExtendedString(theName.toLatin1().constData())); } -bool HYDROData_Object::IsVisible( const int theViewId ) const +QStringList HYDROData_Object::DumpToPython( MapOfTreatedObjects& theTreatedObjects ) const { - ViewId2VisualStateMap aMap; - GetViewId2VisualStateMap( aMap ); - if( aMap.find( theViewId ) != aMap.end() ) - { - const VisualState& aVisualState = aMap[ theViewId ]; - return aVisualState.Visibility; - } - return false; + QStringList anEmptyList; + return anEmptyList; } -void HYDROData_Object::SetVisible( const int theViewId, - const bool theVal ) +void HYDROData_Object::Update( const bool theIsForce ) { - if( theViewId == 0 ) - return; - - ViewId2VisualStateMap aMap; - GetViewId2VisualStateMap( aMap ); - - VisualState& aVisualState = aMap[ theViewId ]; - aVisualState.Visibility = theVal; +} - SetViewId2VisualStateMap( aMap ); +QVariant HYDROData_Object::GetDataVariant() +{ + return QVariant(); } bool HYDROData_Object::IsRemoved() const @@ -114,7 +113,7 @@ void HYDROData_Object::SaveByteArray(const int theTag, } } -const char* HYDROData_Object::ByteArray(const int theTag, int& theLen) +const char* HYDROData_Object::ByteArray(const int theTag, int& theLen) const { TDF_Label aLab = theTag == 0 ? myLab : myLab.FindChild(theTag); Handle(TDataStd_ByteArray) aData; @@ -126,72 +125,222 @@ const char* HYDROData_Object::ByteArray(const int theTag, int& theLen) return NULL; } -void HYDROData_Object::GetViewId2VisualStateMap( ViewId2VisualStateMap& theMap ) const +int HYDROData_Object::NbReferenceObjects( const int theTag ) const { - theMap.clear(); + Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, false ); + return aRefs.IsNull() ? 0 : aRefs->Extent(); +} - TDF_Label aViewIdLab = myLab.FindChild( DataTag_ViewId ); - TDF_Label aVisibilityLab = myLab.FindChild( DataTag_Visibility ); - TDF_Label aTransparencyLab = myLab.FindChild( DataTag_Transparency ); - TDF_Label aZValueLab = myLab.FindChild( DataTag_ZValue ); +void HYDROData_Object::AddReferenceObject( const Handle_HYDROData_Object& theObj, + const int theTag ) +{ + if ( theObj.IsNull() ) + return; - Handle(TDataStd_IntegerArray) aViewIdArray; - Handle(TDataStd_BooleanArray) aVisibilityArray; - Handle(TDataStd_RealArray) aTransparencyArray; - Handle(TDataStd_RealArray) aZValueArray; + Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, true ); + aRefs->Append( theObj->Label() ); +} - if( !aViewIdLab.FindAttribute( TDataStd_IntegerArray::GetID(), aViewIdArray ) || - !aVisibilityLab.FindAttribute( TDataStd_BooleanArray::GetID(), aVisibilityArray ) || - !aTransparencyLab.FindAttribute( TDataStd_RealArray::GetID(), aTransparencyArray ) || - !aZValueLab.FindAttribute( TDataStd_RealArray::GetID(), aZValueArray ) ) +void HYDROData_Object::SetReferenceObject( const Handle_HYDROData_Object& theObj, + const int theTag, + const int theIndex ) +{ + if ( theObj.IsNull() ) + { + RemoveReferenceObject( theTag, theIndex ); return; + } + + Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, true ); - int aSize = qMin( qMin( aViewIdArray->Length(), aVisibilityArray->Length() ), - qMin( aTransparencyArray->Length(), aZValueArray->Length() ) ); - for( int anIndex = 0; anIndex < aSize; anIndex++ ) + if ( theIndex >= aRefs->Extent() ) + { + aRefs->Append( theObj->Label() ); + } + else if ( theIndex < 0 ) + { + aRefs->Prepend( theObj->Label() ); + } + else { - int aViewId = aViewIdArray->Value( anIndex ); - VisualState aVisualState; - aVisualState.Visibility = aVisibilityArray->Value( anIndex ); - aVisualState.Transparency = aTransparencyArray->Value( anIndex ); - aVisualState.ZValue = aZValueArray->Value( anIndex ); - theMap[ aViewId ] = aVisualState; + RemoveReferenceObject( theTag, theIndex ); + + Handle(HYDROData_Object) aBeforeObj = GetReferenceObject( theTag, theIndex ); + + aRefs = getReferenceList( theTag, true ); // because reference list can be removed + if ( !aBeforeObj.IsNull() ) + aRefs->InsertBefore( theObj->Label(), aBeforeObj->Label() ); + else + aRefs->Append( theObj->Label() ); } } -void HYDROData_Object::SetViewId2VisualStateMap( const ViewId2VisualStateMap& theMap ) +void HYDROData_Object::SetReferenceObjects( const HYDROData_SequenceOfObjects& theObjects, + const int theTag ) +{ + ClearReferenceObjects( theTag ); + if ( theObjects.IsEmpty() ) + return; + + HYDROData_SequenceOfObjects::Iterator anIter( theObjects ); + for ( ; anIter.More(); anIter.Next() ) + AddReferenceObject( anIter.Value(), theTag ); +} + +Handle(HYDROData_Object) HYDROData_Object::GetReferenceObject( const int theTag, + const int theIndex ) const +{ + Handle(HYDROData_Object) aRes; + + Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, false ); + if ( aRefs.IsNull() || theIndex < 0 || theIndex >= aRefs->Extent() ) + return aRes; + + TDF_ListIteratorOfLabelList anIter( aRefs->List() ); + for ( int anIndex = 0; anIndex != theIndex && anIter.More(); anIter.Next(), ++anIndex ); + + const TDF_Label& aRefLabel = anIter.Value(); + aRes = HYDROData_Iterator::Object( aRefLabel ); + + return aRes; +} + +HYDROData_SequenceOfObjects HYDROData_Object::GetReferenceObjects( const int theTag ) const { - TDF_Label aViewIdLab = myLab.FindChild( DataTag_ViewId ); - TDF_Label aVisibilityLab = myLab.FindChild( DataTag_Visibility ); - TDF_Label aTransparencyLab = myLab.FindChild( DataTag_Transparency ); - TDF_Label aZValueLab = myLab.FindChild( DataTag_ZValue ); + HYDROData_SequenceOfObjects aRes; - aViewIdLab.ForgetAllAttributes(); - aVisibilityLab.ForgetAllAttributes(); - aTransparencyLab.ForgetAllAttributes(); - aZValueLab.ForgetAllAttributes(); + Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, false ); + if ( aRefs.IsNull() ) + return aRes; - int aSize = theMap.size(); + TDF_ListIteratorOfLabelList anIter( aRefs->List() ); + for ( ; anIter.More(); anIter.Next() ) + { + const TDF_Label& aRefLabel = anIter.Value(); - Handle(TDataStd_IntegerArray) aViewIdArray = - TDataStd_IntegerArray::Set( aViewIdLab, 0, aSize-1 ); - Handle(TDataStd_BooleanArray) aVisibilityArray = - TDataStd_BooleanArray::Set( aVisibilityLab, 0, aSize-1 ); - Handle(TDataStd_RealArray) aTransparencyArray = - TDataStd_RealArray::Set( aTransparencyLab, 0, aSize-1 ); - Handle(TDataStd_RealArray) aZValueArray = - TDataStd_RealArray::Set( aZValueLab, 0, aSize-1 ); + Handle(HYDROData_Object) aRefObject = HYDROData_Iterator::Object( aRefLabel ); + if ( aRefObject.IsNull() ) + continue; + + aRes.Append( aRefObject ); + } + + return aRes; +} + +void HYDROData_Object::RemoveReferenceObject( const int theTag, + const int theIndex ) +{ + Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, false ); + if ( aRefs.IsNull() ) + return; + + if ( aRefs->Extent() == 1 && theIndex == 0 ) + { + // remove all if only one + ClearReferenceObjects( theTag ); + return; + } int anIndex = 0; - ViewId2VisualStateMapIterator anIter( theMap ); - while( anIter.hasNext() ) + TDF_ListIteratorOfLabelList anIter( aRefs->List() ); + for ( ; anIndex != theIndex && anIter.More(); anIter.Next(), ++anIndex ); + + if ( anIndex != theIndex ) + return; + + const TDF_Label& aRefLabel = anIter.Value(); + aRefs->Remove( aRefLabel ); +} + +void HYDROData_Object::ClearReferenceObjects( const int theTag ) +{ + TDF_Label aSetLabel = theTag == 0 ? myLab : myLab.FindChild( theTag ); + aSetLabel.ForgetAttribute( TDataStd_ReferenceList::GetID() ); +} + +Handle(TDataStd_ReferenceList) HYDROData_Object::getReferenceList( const int theTag, + const bool theIsCreate ) const +{ + TDF_Label aLabel = theTag == 0 ? myLab : myLab.FindChild( theTag ); + + Handle(TDataStd_ReferenceList) aRefs; + if ( !aLabel.FindAttribute( TDataStd_ReferenceList::GetID(), aRefs ) && theIsCreate ) + aRefs = TDataStd_ReferenceList::Set( aLabel ); + + return aRefs; +} + +void HYDROData_Object::SetColor( const QColor& theColor, + const int theTag ) +{ + TDF_Label aLabel = theTag == 0 ? myLab : myLab.FindChild( theTag ); + + Handle(TDataStd_IntegerArray) aColorArray; + if ( !aLabel.FindAttribute( TDataStd_IntegerArray::GetID(), aColorArray ) ) + aColorArray = TDataStd_IntegerArray::Set( aLabel, 1, 4 ); + + aColorArray->SetValue( 1, theColor.red() ); + aColorArray->SetValue( 2, theColor.green() ); + aColorArray->SetValue( 3, theColor.blue() ); + aColorArray->SetValue( 4, theColor.alpha() ); +} + +QColor HYDROData_Object::GetColor( const QColor& theDefColor, + const int theTag ) const +{ + QColor aResColor = theDefColor; + + TDF_Label aLabel = theTag == 0 ? myLab : myLab.FindChild( theTag ); + + Handle(TDataStd_IntegerArray) aColorArray; + if ( aLabel.FindAttribute( TDataStd_IntegerArray::GetID(), aColorArray ) ) { - int aViewId = anIter.next().key(); - const VisualState& aVisualState = anIter.value(); - aViewIdArray->SetValue( anIndex, aViewId ); - aVisibilityArray->SetValue( anIndex, aVisualState.Visibility ); - aTransparencyArray->SetValue( anIndex, aVisualState.Transparency ); - aZValueArray->SetValue( anIndex, aVisualState.ZValue ); - anIndex++; + aResColor.setRed( aColorArray->Value( 1 ) ); + aResColor.setGreen( aColorArray->Value( 2 ) ); + aResColor.setBlue( aColorArray->Value( 3 ) ); + aResColor.setAlpha( aColorArray->Value( 4 ) ); } + + return aResColor; } + +void HYDROData_Object::setPythonReferenceObject( MapOfTreatedObjects& theTreatedObjects, + QStringList& theScript, + const Handle(HYDROData_Object)& theRefObject, + const QString& theMethod ) const +{ + if ( theRefObject.IsNull() ) + return; + + QString aRefObjName = theRefObject->GetName(); + if ( aRefObjName.isEmpty() ) + return; + + bool anIsToSetObject = true; + + // The definition of reference polyline must be dumped before this + if ( !theTreatedObjects.contains( aRefObjName ) ) + { + // Write definition of reference polyline + QStringList aRefObjDump = theRefObject->DumpToPython( theTreatedObjects ); + if ( ( anIsToSetObject = !aRefObjDump.isEmpty() ) ) + { + QStringList aTmpList = theScript; + theScript = aRefObjDump; + + theScript << QString( "" ); + theScript << aTmpList; + + theTreatedObjects.insert( aRefObjName, theRefObject ); + } + } + + if ( anIsToSetObject ) + { + theScript << QString( "%1.%2( %3 );" ) + .arg( GetName() ).arg( theMethod ).arg( aRefObjName ); + } +} + +