+ class TEvent: public SALOME_Event {
+ std::string myEntry;
+ bool myOn;
+ bool myUpdateViewer;
+ public:
+ TEvent(const char* theEntryArg, bool theOn, bool theUpdated):
+ myEntry(theEntryArg), myOn(theOn), myUpdateViewer(theUpdated)
+ {}
+ virtual void Execute() {
+ SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
+ if (!anApp) return;
+
+ Handle(SALOME_InteractiveObject) anIO =
+ new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
+
+ if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) {
+ SVTK_View* aView = aViewWindow->getView();
+ SVTK_Viewer* stvkViewer = dynamic_cast<SVTK_Viewer*>(aViewWindow->getViewManager()->getViewModel());
+ SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( stvkViewer->CreatePrs( myEntry.c_str() ) );
+ vtkActorCollection* anActors = vtkPrs->GetObjects();
+ anActors->InitTraversal();
+ while (vtkActor* anAct = anActors->GetNextActor()) {
+ GEOM_Actor* aGeomActor = GEOM_Actor::SafeDownCast(anAct);
+ aGeomActor->SetVectorMode(!aGeomActor->GetVectorMode());
+ }
+ if (myUpdateViewer)
+ aView->Repaint();
+ }
+ else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
+ Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
+ SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
+ if (soccViewer) {
+ SOCC_Prs* occPrs = dynamic_cast<SOCC_Prs*>( soccViewer->CreatePrs( myEntry.c_str() ) );
+ if ( occPrs && !occPrs->IsNull() ) {
+ AIS_ListOfInteractive shapes; occPrs->GetObjects( shapes );
+ AIS_ListIteratorOfListOfInteractive interIter( shapes );
+ for ( ; interIter.More(); interIter.Next() ) {
+ Handle(GEOM_AISShape) aSh = Handle(GEOM_AISShape)::DownCast( interIter.Value() );
+ aSh->SetDisplayVectors(myOn);
+ ic->RecomputePrsOnly(interIter.Value());
+ }
+ }
+ }
+ }
+ }
+ };
+
+ ProcessVoidEvent(new TEvent (theEntry, isOn, isUpdated));
+}
+
+void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, bool isUpdated)
+{
+ class TEvent: public SALOME_Event {
+ std::string myEntry;
+ int myRed;
+ int myGreen;
+ int myBlue;
+ bool myUpdateViewer;
+ public:
+ TEvent(const char* theEntryArg, int theR, int theG, int theB, bool theUpdated):
+ myEntry(theEntryArg), myRed(theR), myGreen(theG), myBlue(theB), myUpdateViewer(theUpdated)
+ {}
+ virtual void Execute() {
+ SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
+ if (!anApp) return;
+
+ Handle(SALOME_InteractiveObject) anIO =
+ new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
+
+ if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)){
+ SVTK_View* aView = aViewWindow->getView();
+ QColor aColor (myRed, myGreen, myBlue);
+ aView->SetColor(anIO, aColor);
+ if (myUpdateViewer)
+ aView->Repaint();
+ } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
+ Handle(AIS_InteractiveContext) ic = occViewer->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(anIO)) {
+ Quantity_Color CSFColor =
+ Quantity_Color(myRed/255., myGreen/255., myBlue/255., Quantity_TOC_RGB);
+ ite.Value()->SetColor(CSFColor);
+ if (ite.Value()->IsKind(STANDARD_TYPE(GEOM_AISShape)))
+ Handle(GEOM_AISShape)::DownCast(ite.Value())->SetShadingColor(CSFColor);
+ ic->Redisplay(ite.Value(), true, true);
+ if (myUpdateViewer)
+ occViewer->update();
+ break;
+ }
+ }
+ }
+ }
+ };
+ ProcessVoidEvent(new TEvent(theEntry, red, green, blue, isUpdated));
+}
+
+void GEOM_Swig::setTransparency(const char* theEntry, float transp, bool isUpdated)
+{
+ class TEvent: public SALOME_Event {
+ std::string myEntry;
+ float myParam;
+ bool myUpdateViewer;
+ public:
+ TEvent(const char* theEntryArg, float theParam, bool theUpdated):
+ myEntry(theEntryArg), myParam(theParam), myUpdateViewer(theUpdated)
+ {}
+ virtual void Execute() {
+ SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
+ if (!anApp) return;
+
+ Handle(SALOME_InteractiveObject) anIO =
+ new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
+
+ if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) {
+ SVTK_View* aView = aViewWindow->getView();
+ aView->SetTransparency(anIO, myParam);
+ if (myUpdateViewer)
+ aView->Repaint();
+ } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
+ SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
+ if (soccViewer)
+ soccViewer->setTransparency(anIO, myParam, myUpdateViewer);
+ }