- QAD_Study* myStudy = QAD_Application::getDesktop()->getActiveStudy();
- QColor c = QColor (red, green, blue);
- Handle(SALOME_InteractiveObject) IO =
- myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->FindIObject( Entry );
-
- if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) { // VTK
- VTKViewer_RenderWindowInteractor* myRenderInter =
- ((VTKViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRWInteractor();
- myRenderInter->SetColor(IO,c);
- myRenderInter->Update();
- }
- else if ( myStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC ) // OCC
- {
- OCCViewer_Viewer3d* v3d = ((OCCViewer_ViewFrame*)myStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
- v3d->SetColor(IO,c);
+ QAD_Study* aStudy = QAD_Application::getDesktop()->getActiveStudy();
+ Handle(SALOME_InteractiveObject) anIO = SALOME::FindIObject(aStudy,theEntry);
+ QColor aColor(red,green,blue);
+
+ class TEvent: public SALOME_Event{
+ QAD_Study* myStudy;
+ Handle(SALOME_InteractiveObject) myIO;
+ QColor myParam;
+ public:
+ TEvent(QAD_Study* theStudy, const Handle(SALOME_InteractiveObject)& theIO, const QColor& theParam):
+ myStudy(theStudy), myIO(theIO), myParam(theParam)
+ {}
+ virtual void Execute(){
+ if(VTKViewer_ViewFrame* aViewFrame = GetFrame<VTKViewer_ViewFrame>(myStudy)){
+ VTKViewer_RenderWindowInteractor* myRenderInter= aViewFrame->getRWInteractor();
+ myRenderInter->SetColor(myIO,myParam);
+ myRenderInter->Update();
+ }else if(OCCViewer_ViewFrame* aViewFrame = GetFrame<OCCViewer_ViewFrame>(myStudy)){
+ OCCViewer_Viewer3d* v3d = aViewFrame->getViewer();
+ 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;
+ }
+ }
+ }