#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Iterator.hxx>
+#include <AIS_ListOfInteractive.hxx>
+#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <V3d_Viewer.hxx>
#include "SALOME_Event.hxx"
Handle(GEOM_AISShape) aSh = new GEOM_AISShape(myShape,const_cast<char*>(myName));
aSh->setName(const_cast<char*>(myName));
aSh->setIO(myIO);
-
ic->Display(aSh);
ic->AddOrRemoveCurrentObject(aSh,true);
}
myRenderInter->Update();
}else if(OCCViewer_ViewFrame* aViewFrame = GetFrame<OCCViewer_ViewFrame>(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;
+ }
+ }
}
}
};
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);
}
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)
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(){