Salome HOME
Drawing of zones in OCC view improved.
[modules/hydro.git] / src / HYDROData / HYDROData_Object.cxx
index 1be3985a854702b26b2b9339a9e2dead81fe6972..062be0df68c1cdad67fe579dd4bd62ec48ac13a7 100644 (file)
@@ -14,6 +14,7 @@
 #include <TDF_CopyLabel.hxx>
 #include <TDF_ListIteratorOfLabelList.hxx>
 
+#include <QColor>
 #include <QString>
 #include <QStringList>
 #include <QVariant>
@@ -145,7 +146,10 @@ void HYDROData_Object::SetReferenceObject( const Handle_HYDROData_Object& theObj
                                            const int                      theIndex )
 {
   if ( theObj.IsNull() )
+  {
+    RemoveReferenceObject( theTag, theIndex );
     return;
+  }
 
   Handle(TDataStd_ReferenceList) aRefs = getReferenceList( theTag, true );
 
@@ -226,11 +230,15 @@ void HYDROData_Object::RemoveReferenceObject( const int theTag,
     return;
   }
 
-  Handle(HYDROData_Object) aRemovedObj = GetReferenceObject( theTag, theIndex );
-  if ( aRemovedObj.IsNull() )
+  int anIndex = 0;
+  TDF_ListIteratorOfLabelList anIter( aRefs->List() );
+  for ( ; anIndex != theIndex && anIter.More(); anIter.Next(), ++anIndex );
+
+  if ( anIndex != theIndex )
     return;
 
-  aRefs->Remove( aRemovedObj->Label() );
+  const TDF_Label& aRefLabel = anIter.Value();
+  aRefs->Remove( aRefLabel );
 }
 
 void HYDROData_Object::ClearReferenceObjects( const int theTag )
@@ -250,3 +258,37 @@ Handle(TDataStd_ReferenceList) HYDROData_Object::getReferenceList( const int the
 
   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