X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGeometryGUI_Swig.cxx;h=e2f15aa45e97b44065c8aa4a1fded5a809770fce;hb=8f2d0b5697219b8b53289bd9c25a60ddc354ab53;hp=0e75e9aeca11d825fc9fb7a9967ac1f29ee362d3;hpb=9499b99fe2dcb53e1ea364f97986f8f432b04600;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GeometryGUI_Swig.cxx b/src/GEOMGUI/GeometryGUI_Swig.cxx index 0e75e9aec..e2f15aa45 100644 --- a/src/GEOMGUI/GeometryGUI_Swig.cxx +++ b/src/GEOMGUI/GeometryGUI_Swig.cxx @@ -1,6 +1,6 @@ -// GEOM GEOMGUI : GUI for Geometry component +// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // This library is free software; you can redistribute it and/or @@ -17,48 +17,42 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -// -// -// File : GeometryGUI_Swig.cxx -// Author : Nicolas REJNERI, Paul RASCLE -// Module : GEOM -// $Header$ +// GEOM GEOMGUI : GUI for Geometry component +// File : GeometryGUI_Swig.cxx +// Author : Nicolas REJNERI, Paul RASCLE +// #include "GeometryGUI_Swig.hxx" -#include "SALOMEGUI_Swig.hxx" #include "GeometryGUI.h" +#include "SUIT_Desktop.h" #include "SUIT_Session.h" #include "SalomeApp_Application.h" #include "SalomeApp_Study.h" -#include "SalomeApp_ImportOperation.h" #include "OB_Browser.h" #include "OCCViewer_ViewWindow.h" #include "OCCViewer_ViewManager.h" #include "SOCC_ViewModel.h" +#include #include "SVTK_ViewModel.h" #include "SVTK_ViewWindow.h" #include "SVTK_View.h" #include "SVTK_Renderer.h" +#include #include "GEOM_Actor.h" #include "GEOM_Client.hxx" #include "GEOM_AISShape.hxx" -#include "GEOM_AssemblyBuilder.h" #include "GEOM_InteractiveObject.hxx" #include "GEOM_Displayer.h" -#include "SALOME_Event.hxx" - -#include "utilities.h" - -#include "SALOMEDSClient.hxx" +#include "SALOME_Event.h" // OCCT Includes #include @@ -66,6 +60,7 @@ #include #include #include +#include // IDL Headers #include @@ -73,10 +68,7 @@ #include -using namespace std; - - -static GEOM_Client ShapeReader; +static SHAPE_READER(ShapeReader); inline OCCViewer_Viewer* GetOCCViewer(SUIT_Application* theApp){ SUIT_ViewWindow* window = theApp->desktop()->activeWindow(); @@ -85,7 +77,7 @@ inline OCCViewer_Viewer* GetOCCViewer(SUIT_Application* theApp){ if ( vw ) { OCCViewer_ViewManager* vm = dynamic_cast( vw->getViewManager() ); if ( vm ) - return vm->getOCCViewer(); + return vm->getOCCViewer(); } } @@ -110,14 +102,16 @@ GEOM_Swig::~GEOM_Swig() // MESSAGE("Destructeur"); } -void GEOM_Swig::createAndDisplayGO (const char* Entry) +void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated) { class TEvent: public SALOME_Event { std::string myEntry; + bool myUpdateViewer; public: - TEvent(const char* theEntry): - myEntry(theEntry) + TEvent(const char* theEntry, bool toUpdateViewer): + myEntry(theEntry), + myUpdateViewer(toUpdateViewer) {} virtual void Execute() { @@ -138,12 +132,13 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry) if (CORBA::is_nil(Geom)) return; - string aFatherIOR; + std::string aFatherIOR; _PTR(SComponent) father = aStudy->FindComponent("GEOM"); if (!father) return; if (!father->ComponentIOR(aFatherIOR)) { - aStudyBuilder->LoadWith(father, SalomeApp_Application::orb()->object_to_string(Geom)); + CORBA::String_var objStr = SalomeApp_Application::orb()->object_to_string(Geom); + aStudyBuilder->LoadWith(father, objStr.in()); father->ComponentIOR(aFatherIOR); } @@ -156,14 +151,14 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry) if (!obj->FindAttribute(anAttr, "AttributeIOR")) return; _PTR(AttributeIOR) anIOR(anAttr); - string anIORValue = anIOR->Value(); + std::string anIORValue = anIOR->Value(); GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(anIORValue.c_str()); TopoDS_Shape Shape = ShapeReader.GetShape(Geom,aShape); if (!Shape.IsNull()) { if (obj->FindAttribute(anAttr, "AttributeName")) { _PTR(AttributeName) aName (anAttr); - string aNameValue = aName->Value(); + std::string aNameValue = aName->Value(); // open transaction /*SUIT_Operation* op = new SalomeApp_ImportOperation (app); op->start(); @@ -178,62 +173,63 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry) "GEOM", const_cast( obj->GetID().c_str())); - GEOM_Displayer(ActiveStudy).Display(anIO, true); - /*if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) { - SVTK_View* aView = aViewWindow->getView(); - int aMode = aView->GetDisplayMode(); + GEOM_Displayer(ActiveStudy).Display(anIO, myUpdateViewer); + /*if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) { + SVTK_View* aView = aViewWindow->getView(); + int aMode = aView->GetDisplayMode(); - vtkActorCollection* theActors = + vtkActorCollection* theActors = GEOM_AssemblyBuilder::BuildActors(Shape,0,aMode,true); - theActors->InitTraversal(); - while (vtkActor* anActor = theActors->GetNextActor()) { - GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor); - GActor->setName(const_cast(aNameValue.c_str())); - GActor->setIO(anIO); - aView->Display(GActor); - } - aView->Repaint(); - } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) { - Handle(AIS_InteractiveContext) ic = occViewer->getAISContext(); - Handle(GEOM_AISShape) aSh = + theActors->InitTraversal(); + while (vtkActor* anActor = theActors->GetNextActor()) { + GEOM_Actor* GActor = GEOM_Actor::SafeDownCast(anActor); + GActor->setName(const_cast(aNameValue.c_str())); + GActor->setIO(anIO); + aView->Display(GActor); + } + aView->Repaint(); + } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) { + Handle(AIS_InteractiveContext) ic = occViewer->getAISContext(); + Handle(GEOM_AISShape) aSh = new GEOM_AISShape (Shape,const_cast(aNameValue.c_str())); - aSh->setName(const_cast(aNameValue.c_str())); - aSh->setIO(anIO); - ic->Display(aSh); - ic->AddOrRemoveCurrentObject(aSh,true); - }*/ - // update object browser - SalomeApp_Application* app = NULL; //dynamic_cast(app); - if (app) { - CAM_Module* module = app->module("Geometry"); - SalomeApp_Module* appMod = dynamic_cast(module); - if (appMod) - appMod->updateObjBrowser(true); - } - } + aSh->setName(const_cast(aNameValue.c_str())); + aSh->setIO(anIO); + ic->Display(aSh); + ic->AddOrRemoveCurrentObject(aSh,true); + }*/ + // update object browser + SalomeApp_Application* app = NULL; //dynamic_cast(app); + if (app) { + CAM_Module* module = app->module("Geometry"); + SalomeApp_Module* appMod = dynamic_cast(module); + if (appMod) + appMod->updateObjBrowser(true); + } + } } } }; // MESSAGE("createAndDisplayGO"); - ProcessVoidEvent(new TEvent (Entry)); + ProcessVoidEvent(new TEvent (Entry, isUpdated)); class TEventUpdateBrowser: public SALOME_Event { public: - TEventUpdateBrowser() {} - virtual void Execute() { + TEventUpdateBrowser() {} + virtual void Execute() { SalomeApp_Application* app = dynamic_cast(SUIT_Session::session()->activeApplication()); if (app) { - CAM_Module* module = app->module("Geometry"); - SalomeApp_Module* appMod = dynamic_cast(module); - if (appMod) appMod->updateObjBrowser(true); - } + CAM_Module* module = app->module("Geometry"); + SalomeApp_Module* appMod = dynamic_cast(module); + if (appMod) appMod->updateObjBrowser(true); + } } }; - ProcessVoidEvent(new TEventUpdateBrowser ()); + if (isUpdated) + ProcessVoidEvent(new TEventUpdateBrowser ()); } void GEOM_Swig::createAndDisplayFitAllGO (const char* Entry) @@ -243,22 +239,22 @@ void GEOM_Swig::createAndDisplayFitAllGO (const char* Entry) public: TEventFitAll() {} virtual void Execute() { - SUIT_Application* app = SUIT_Session::session()->activeApplication(); - if (!app) return; - - if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) - { - SVTK_View* aView = aViewWindow->getView(); - aView->GetRenderer()->OnFitAll(); - } - else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) - { - Handle(V3d_Viewer) aViewer3d = occViewer->getViewer3d(); - aViewer3d->InitActiveViews(); - - if (aViewer3d->MoreActiveViews()) - aViewer3d->ActiveView()->FitAll(); - } + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if (!app) return; + + if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) + { + SVTK_View* aView = aViewWindow->getView(); + aView->GetRenderer()->OnFitAll(); + } + else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) + { + Handle(V3d_Viewer) aViewer3d = occViewer->getViewer3d(); + aViewer3d->InitActiveViews(); + + if (aViewer3d->MoreActiveViews()) + aViewer3d->ActiveView()->FitAll(); + } } }; @@ -266,6 +262,25 @@ void GEOM_Swig::createAndDisplayFitAllGO (const char* Entry) ProcessVoidEvent(new TEventFitAll()); } +void GEOM_Swig::UpdateViewer() +{ + class TEventUpdateViewer: public SALOME_Event + { + public: + TEventUpdateViewer() {} + virtual void Execute() { + SUIT_Application* app = SUIT_Session::session()->activeApplication(); + if (!app) return; + SalomeApp_Study* ActiveStudy = dynamic_cast(app->activeStudy()); + if (!ActiveStudy) return; + + GEOM_Displayer(ActiveStudy).UpdateViewer(); + } + }; + + ProcessVoidEvent(new TEventUpdateViewer()); +} + int GEOM_Swig::getIndexTopology(const char* SubIOR, const char* IOR) { GEOM::GEOM_Gen_var aGeomGen = GeometryGUI::GetGeomGen(); @@ -344,14 +359,15 @@ const char* GEOM_Swig::getShapeTypeIcon(const char* IOR) return "None"; } -void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode) +void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode, bool isUpdated) { class TEvent: public SALOME_Event { std::string myEntry; int myMode; + bool myUpdateViewer; public: - TEvent(const char* theEntryArg, int theModeArg): - myEntry(theEntryArg), myMode(theModeArg) + TEvent(const char* theEntryArg, int theModeArg, bool theUpdated): + myEntry(theEntryArg), myMode(theModeArg), myUpdateViewer(theUpdated) {} virtual void Execute() { SUIT_Application* anApp = SUIT_Session::session()->activeApplication(); @@ -361,31 +377,85 @@ void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode) new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", ""); if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) { - SVTK_View* aView = aViewWindow->getView(); - aView->SetDisplayMode(anIO, myMode); - aView->Repaint(); + SVTK_View* aView = aViewWindow->getView(); + aView->SetDisplayMode(anIO, myMode); + if (myUpdateViewer) + aView->Repaint(); } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) { - SOCC_Viewer* soccViewer = dynamic_cast(occViewer); - if (soccViewer) - soccViewer->switchRepresentation(anIO, myMode); + SOCC_Viewer* soccViewer = dynamic_cast(occViewer); + if (soccViewer) + soccViewer->switchRepresentation(anIO, myMode, myUpdateViewer); } } }; - ProcessVoidEvent(new TEvent (theEntry, theMode)); + ProcessVoidEvent(new TEvent (theEntry, theMode, isUpdated)); } -void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue) +void GEOM_Swig::setVectorsMode(const char* theEntry, bool isOn, bool isUpdated) +{ + 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(aViewWindow->getViewManager()->getViewModel()); + SVTK_Prs* vtkPrs = dynamic_cast( 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(occViewer); + if (soccViewer) { + SOCC_Prs* occPrs = dynamic_cast( 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): - myEntry(theEntryArg), myRed(theR), myGreen(theG), myBlue(theB) + 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(); @@ -395,43 +465,50 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue) new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", ""); if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)){ - SVTK_View* aView = aViewWindow->getView(); + SVTK_View* aView = aViewWindow->getView(); QColor aColor (myRed, myGreen, myBlue); aView->SetColor(anIO, aColor); - aView->Repaint(); + 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); - ite.Value()->Redisplay(Standard_True); - occViewer->update(); - break; - } - } + Handle(AIS_InteractiveContext) ic = occViewer->getAISContext(); + SOCC_Viewer* soccViewer = dynamic_cast(occViewer); + if (soccViewer) + { + SALOME_Prs* prs= soccViewer->CreatePrs( myEntry.c_str() ); + const SOCC_Prs* anOCCPrs = dynamic_cast( prs ); + if ( !anOCCPrs || anOCCPrs->IsNull() ) + return; + + // get objects to be displayed + AIS_ListOfInteractive anAISObjects; + anOCCPrs->GetObjects( anAISObjects ); + AIS_ListIteratorOfListOfInteractive ite( anAISObjects ); + Quantity_Color CSFColor = Quantity_Color(myRed/255., myGreen/255., myBlue/255., Quantity_TOC_RGB); + for ( ; ite.More(); ite.Next() ) + { + if(!ic->IsDisplayed(ite.Value()))continue; //only displayed ais + 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); // as in OnColor + } + if (myUpdateViewer) occViewer->update(); + } } } }; - ProcessVoidEvent(new TEvent(theEntry, red, green, blue)); + ProcessVoidEvent(new TEvent(theEntry, red, green, blue, isUpdated)); } -void GEOM_Swig::setTransparency(const char* theEntry, float transp) +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): - myEntry(theEntryArg), myParam(theParam) + TEvent(const char* theEntryArg, float theParam, bool theUpdated): + myEntry(theEntryArg), myParam(theParam), myUpdateViewer(theUpdated) {} virtual void Execute() { SUIT_Application* anApp = SUIT_Session::session()->activeApplication(); @@ -441,18 +518,19 @@ void GEOM_Swig::setTransparency(const char* theEntry, float transp) new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", ""); if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) { - SVTK_View* aView = aViewWindow->getView(); - aView->SetTransparency(anIO, myParam); - aView->Repaint(); + 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(occViewer); - if (soccViewer) - soccViewer->setTransparency(anIO, myParam); + SOCC_Viewer* soccViewer = dynamic_cast(occViewer); + if (soccViewer) + soccViewer->setTransparency(anIO, myParam, myUpdateViewer); } } }; - ProcessVoidEvent(new TEvent (theEntry, transp)); + ProcessVoidEvent(new TEvent (theEntry, transp, isUpdated)); } @@ -493,44 +571,44 @@ void GEOM_Swig::eraseGO (const char* Entry, bool allWindows) GEOM_Displayer(ActiveStudy).Erase(aIO, true); /* if (myFromAllWindows) { - QPtrList aWindows = app->desktop()->windows(); - SUIT_ViewWindow* aWin = 0; - for (aWin = aWindows.first(); aWin; aWin = aWindows.next()) { - EraseObject(aWin, aIO); - } + QPtrList aWindows = app->desktop()->windows(); + SUIT_ViewWindow* aWin = 0; + for (aWin = aWindows.first(); aWin; aWin = aWindows.next()) { + EraseObject(aWin, aIO); + } } else { - SUIT_ViewWindow* aWin = app->desktop()->activeWindow(); - if (aWin) - EraseObject(aWin, aIO); - }*/ + SUIT_ViewWindow* aWin = app->desktop()->activeWindow(); + if (aWin) + EraseObject(aWin, aIO); + }*/ } /* private: void EraseObject(SUIT_ViewWindow* theWin, Handle (SALOME_InteractiveObject) theIO) { if (theWin->getViewManager()->getType() == OCCViewer_Viewer::Type()){ - OCCViewer_ViewWindow* vw = dynamic_cast( theWin ); - if ( vw ) { - OCCViewer_ViewManager* vm = dynamic_cast( vw->getViewManager() ); - if ( vm ) { - SOCC_Viewer* aViewer = dynamic_cast(vm->getOCCViewer()); - if (aViewer) { - SALOME_Prs* aPrs = aViewer->CreatePrs(myEntry.c_str()); - if (aPrs) { - SALOME_OCCPrs* aOccPrs = dynamic_cast(aPrs); - if (aOccPrs) { - aViewer->Erase(aOccPrs); - aViewer->Repaint(); - } - } - } - } - } + OCCViewer_ViewWindow* vw = dynamic_cast( theWin ); + if ( vw ) { + OCCViewer_ViewManager* vm = dynamic_cast( vw->getViewManager() ); + if ( vm ) { + SOCC_Viewer* aViewer = dynamic_cast(vm->getOCCViewer()); + if (aViewer) { + SALOME_Prs* aPrs = aViewer->CreatePrs(myEntry.c_str()); + if (aPrs) { + SALOME_OCCPrs* aOccPrs = dynamic_cast(aPrs); + if (aOccPrs) { + aViewer->Erase(aOccPrs); + aViewer->Repaint(); + } + } + } + } + } } else if (theWin->getViewManager()->getType() == SVTK_Viewer::Type()){ - SVTK_ViewWindow* aViewWindow = dynamic_cast( theWin ); - if (aViewWindow) { - aViewWindow->Erase(theIO); - } + SVTK_ViewWindow* aViewWindow = dynamic_cast( theWin ); + if (aViewWindow) { + aViewWindow->Erase(theIO); + } } }*/ @@ -557,44 +635,44 @@ void GEOM_Swig::setDeflection(const char* theEntry, float theDeflect) new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", ""); if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) { - vtkActorCollection* aActors = aViewWindow->getRenderer()->GetActors(); - aActors->InitTraversal(); - while (vtkActor* aAct = aActors->GetNextActor()) { - if (GEOM_Actor* aGeomActor = dynamic_cast(aAct)) { - if (aGeomActor->hasIO()) { - Handle(SALOME_InteractiveObject) aNextIO = aGeomActor->getIO(); - if (aNextIO->isSame(anIO)) { - aGeomActor->setDeflection(myParam); - aViewWindow->Repaint(); - return; - } - } - } - } - // aView->SetTransparency(anIO, myParam); - //aView->Repaint(); + vtkActorCollection* aActors = aViewWindow->getRenderer()->GetActors(); + aActors->InitTraversal(); + while (vtkActor* aAct = aActors->GetNextActor()) { + if (GEOM_Actor* aGeomActor = dynamic_cast(aAct)) { + if (aGeomActor->hasIO()) { + Handle(SALOME_InteractiveObject) aNextIO = aGeomActor->getIO(); + if (aNextIO->isSame(anIO)) { + aGeomActor->setDeflection(myParam); + aViewWindow->Repaint(); + return; + } + } + } + } + // aView->SetTransparency(anIO, myParam); + //aView->Repaint(); } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) { - Handle(AIS_InteractiveContext) aContext = occViewer->getAISContext(); - AIS_ListOfInteractive aAISList; - aContext->DisplayedObjects(aAISList); - AIS_ListIteratorOfListOfInteractive it(aAISList); - for (; it.More(); it.Next()) { - Handle(SALOME_InteractiveObject) aObj = - Handle(SALOME_InteractiveObject)::DownCast(it.Value()->GetOwner()); - if ((!aObj.IsNull()) && aObj->hasEntry() && aObj->isSame(anIO)) { - Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast(it.Value()); - if (!aShape.IsNull()) { - Handle(AIS_Drawer) aDrawer = aShape->Attributes(); - if (aDrawer.IsNull()) - aDrawer = new AIS_Drawer(); - aDrawer->SetDeviationCoefficient(myParam); - aShape->SetAttributes(aDrawer); - aContext->Redisplay(aShape, true, true); - aContext->UpdateCurrentViewer(); - return; - } - } - } + Handle(AIS_InteractiveContext) aContext = occViewer->getAISContext(); + AIS_ListOfInteractive aAISList; + aContext->DisplayedObjects(aAISList); + AIS_ListIteratorOfListOfInteractive it(aAISList); + for (; it.More(); it.Next()) { + Handle(SALOME_InteractiveObject) aObj = + Handle(SALOME_InteractiveObject)::DownCast(it.Value()->GetOwner()); + if ((!aObj.IsNull()) && aObj->hasEntry() && aObj->isSame(anIO)) { + Handle(AIS_Shape) aShape = Handle(AIS_Shape)::DownCast(it.Value()); + if (!aShape.IsNull()) { + TopoDS_Shape aSh = aShape->Shape(); + if (!aSh.IsNull()) + BRepTools::Clean(aSh); + + aShape->SetOwnDeviationCoefficient( myParam ); + aShape->SetOwnHLRDeviationAngle( 1.57 ); + aContext->Redisplay(aShape); + return; + } + } + } } } };