From 27e469cd20f7d5a8aecdef3ad04e9621947a4069 Mon Sep 17 00:00:00 2001 From: vsr Date: Thu, 17 Mar 2005 14:02:35 +0000 Subject: [PATCH] PAL8376 --- src/GEOMGUI/GeometryGUI_Swig.cxx | 25 +++++++++++++++++++++++-- src/OBJECT/GEOM_AISShape.cxx | 15 +++++++++------ src/OBJECT/GEOM_AISShape.hxx | 1 - 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/GEOMGUI/GeometryGUI_Swig.cxx b/src/GEOMGUI/GeometryGUI_Swig.cxx index ead4659da..662231158 100644 --- a/src/GEOMGUI/GeometryGUI_Swig.cxx +++ b/src/GEOMGUI/GeometryGUI_Swig.cxx @@ -50,6 +50,9 @@ #include #include #include +#include +#include +#include #include "SALOME_Event.hxx" @@ -162,7 +165,6 @@ void GEOM_Swig::createAndDisplayGO(const char* Entry) Handle(GEOM_AISShape) aSh = new GEOM_AISShape(myShape,const_cast(myName)); aSh->setName(const_cast(myName)); aSh->setIO(myIO); - ic->Display(aSh); ic->AddOrRemoveCurrentObject(aSh,true); } @@ -370,7 +372,26 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue) myRenderInter->Update(); }else if(OCCViewer_ViewFrame* aViewFrame = GetFrame(myStudy)){ OCCViewer_Viewer3d* v3d = aViewFrame->getViewer(); - v3d->SetColor(myIO,myParam); + Handle(AIS_InteractiveContext) ic = aViewFrame->getViewer()->getAISContext(); + AIS_ListOfInteractive List; + ic->DisplayedObjects(List); + AIS_ListIteratorOfListOfInteractive ite(List); + for ( ; ite.More(); ite.Next() ) { + Handle(SALOME_InteractiveObject) anObj = + Handle(SALOME_InteractiveObject)::DownCast( ite.Value()->GetOwner() ); + if ( !anObj.IsNull() && anObj->hasEntry() && anObj->isSame( myIO ) ) { + Quantity_Color CSFColor = Quantity_Color ( myParam.red() / 255., + myParam.green() / 255., + myParam.blue() / 255., + Quantity_TOC_RGB ); + ite.Value()->SetColor( CSFColor ); + if ( ite.Value()->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) + Handle(GEOM_AISShape)::DownCast( ite.Value() )->SetShadingColor( CSFColor ); + ite.Value()->Redisplay( Standard_True ); + v3d->getViewer3d()->Update(); + break; + } + } } } }; diff --git a/src/OBJECT/GEOM_AISShape.cxx b/src/OBJECT/GEOM_AISShape.cxx index e847b2175..c442b4c6c 100644 --- a/src/OBJECT/GEOM_AISShape.cxx +++ b/src/OBJECT/GEOM_AISShape.cxx @@ -116,7 +116,6 @@ static void indicesToOwners( const TColStd_IndexedMapOfInteger& aIndexMap, GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, const Standard_CString aName): SALOME_AISShape(shape) { - myIO = NULL; myName = new char [strlen(aName)+1]; strcpy( myName, aName); @@ -124,15 +123,18 @@ GEOM_AISShape::GEOM_AISShape(const TopoDS_Shape& shape, } void GEOM_AISShape::setIO(const Handle(SALOME_InteractiveObject)& io){ - myIO = io; + SetOwner( io ); } Handle(SALOME_InteractiveObject) GEOM_AISShape::getIO(){ - return myIO; + Handle(SALOME_InteractiveObject) IO; + if ( !GetOwner().IsNull() ) + IO = Handle(SALOME_InteractiveObject)::DownCast( GetOwner() ); + return IO; } Standard_Boolean GEOM_AISShape::hasIO(){ - return !myIO.IsNull(); + return !getIO().IsNull(); } void GEOM_AISShape::setName(const Standard_CString aName) @@ -140,8 +142,9 @@ void GEOM_AISShape::setName(const Standard_CString aName) myName = new char [strlen(aName)+1]; strcpy( myName, aName); - if ( hasIO() ) - myIO->setName(aName); + Handle(SALOME_InteractiveObject) IO = getIO(); + if ( !IO.IsNull() ) + IO->setName(aName); } Standard_CString GEOM_AISShape::getName(){ diff --git a/src/OBJECT/GEOM_AISShape.hxx b/src/OBJECT/GEOM_AISShape.hxx index 617c6f9be..8db765048 100644 --- a/src/OBJECT/GEOM_AISShape.hxx +++ b/src/OBJECT/GEOM_AISShape.hxx @@ -121,7 +121,6 @@ private: // Fields PRIVATE // - Handle_SALOME_InteractiveObject myIO; Standard_CString myName; Quantity_Color myShadingColor; }; -- 2.39.2