]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
[bos #43299][FORUM] geom.GetColor() does not give the good result. Fixed set color... kleontev/43299_geom_GetColor_wrong_result 29/head
authorKonstantin Leontev <Konstantin.LEONTEV@opencascade.com>
Wed, 30 Oct 2024 11:30:31 +0000 (11:30 +0000)
committerKonstantin Leontev <Konstantin.LEONTEV@opencascade.com>
Wed, 30 Oct 2024 15:58:58 +0000 (15:58 +0000)
src/GEOMBase/GEOMBase.cxx
src/GEOMBase/GEOMBase.h
src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx

index 7ab1fa15263328c61026fd9020bfd205c2e33959..d3371cf1f75104fcea90867deef448ef569f6ba2 100644 (file)
@@ -488,6 +488,32 @@ void GEOMBase::ConvertListOfIOInListOfGO( const SALOME_ListIO& IObjects,
   }
 }
 
+//=======================================================================
+// function : GetObjectFromEntry()
+// purpose  : Get the GEOM_Object from the study entry.
+//=======================================================================
+GEOM::GEOM_Object_ptr GEOMBase::GetObjectFromEntry(const char* entry)
+{
+  GEOM::GEOM_Object_var object;
+
+  if (entry)
+  {
+    SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(SUIT_Session::session()->activeApplication()->activeStudy());
+    if (study)
+    {
+      _PTR(Study) studyDS = study->studyDS();
+      _PTR(SObject) obj = studyDS->FindObjectID(entry);
+      if (GeometryGUI::IsInGeomComponent(obj))
+      {
+        CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject(obj);
+        object = GEOM::GEOM_Object::_narrow(corbaObj);
+      }
+    }
+  }
+
+  return object._retn();
+}
+
 //=================================================================================
 // function : CreateArrowForLinearEdge()
 // purpose  : Create a cone topology to be used to display an arrow in the middle
index 8d35354dfdab4baab8f30491cf574d351ebf405c..c23fe71b2a33f7947de5dc3e7305245e361c13e0 100644 (file)
@@ -95,6 +95,8 @@ public :
 
   static QString      GetIORFromObject( GEOM::GEOM_Object_ptr object );
 
+  static GEOM::GEOM_Object_ptr GetObjectFromEntry(const char* entry);
+
   /* Geometry */
   static bool         VertexToPoint( const TopoDS_Shape& shape, gp_Pnt& point );
 
index 65571632c7b7885fd53ba9f4c7a36910fa4c5299..099c641b2aefafef8ac26a0354c7b89d098c03c8 100644 (file)
@@ -31,6 +31,7 @@
 #include "GEOM_Swig_LocalSelector.h"
 #include "GEOMGUI_OCCSelector.h"
 #include "OCCViewer_ViewManager.h"
+#include "GEOMBase.h"
 
 #include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
@@ -430,6 +431,19 @@ void GEOM_Swig::setNameMode( const char* theEntry, bool theOn, bool theUpdateVie
 */
 void GEOM_Swig::setColor( const char* theEntry, int theRed, int theGreen, int theBlue, bool theUpdateViewer )
 {
+  // Update geom object color
+  GEOM::GEOM_Object_var GeomObject = GEOMBase::GetObjectFromEntry(theEntry);
+  if (!CORBA::is_nil(GeomObject))
+  {
+    SALOMEDS::Color aSColor;
+    aSColor.R = theRed / 255.0;
+    aSColor.G = theGreen / 255.0;
+    aSColor.B = theBlue / 255.0;
+
+    GeomObject->SetColor(aSColor);
+  }
+
+  // Update a color property stored in LightApp_Study view manager map
   ProcessVoidEvent( new TSetPropertyEvent( theEntry, GEOM::propertyName( GEOM::Color ), 
                                            QColor( theRed, theGreen, theBlue ), theUpdateViewer ) );
 }