-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
-{
- HYDROData_SequenceOfObjects aRes;
-
- Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, false );
- if ( aRefs.IsNull() )
- return aRes;
-
- TDF_ListIteratorOfLabelList anIter( aRefs->List() );
- for ( ; anIter.More(); anIter.Next() )
- {
- const TDF_Label& aRefLabel = anIter.Value();
-
- 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;
- 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 ) )
- {
- aResColor.setRed( aColorArray->Value( 1 ) );
- aResColor.setGreen( aColorArray->Value( 2 ) );
- aResColor.setBlue( aColorArray->Value( 3 ) );
- aResColor.setAlpha( aColorArray->Value( 4 ) );
- }
-
- return aResColor;
-}
\ No newline at end of file