X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMGUI%2FGeometryGUI_Swig.cxx;h=432acc2236bc46ead248dad8e13aff750c5fb4d0;hb=2dbe613765884256942925d8a95293e3c473caec;hp=ffae0d61db0ec97890913e4da88242eadc3ef136;hpb=0170ada804284d8adc64a684a85175f2158c78bb;p=modules%2Fgeom.git diff --git a/src/GEOMGUI/GeometryGUI_Swig.cxx b/src/GEOMGUI/GeometryGUI_Swig.cxx index ffae0d61d..432acc223 100644 --- a/src/GEOMGUI/GeometryGUI_Swig.cxx +++ b/src/GEOMGUI/GeometryGUI_Swig.cxx @@ -1,40 +1,36 @@ -// GEOM GEOMGUI : GUI for Geometry component +// GEOM GEOMGUI : GUI for Geometry component // -// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2003 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 -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// 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 // +// File : GeometryGUI_Swig.cxx +// Author : Nicolas REJNERI, Paul RASCLE // -// -// File : GeometryGUI_Swig.cxx -// Author : Nicolas REJNERI, Paul RASCLE -// Module : GEOM -// $Header$ #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" @@ -50,15 +46,10 @@ #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 +57,7 @@ #include #include #include +#include // IDL Headers #include @@ -145,7 +137,8 @@ void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated) 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); } @@ -269,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(); @@ -347,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(); @@ -366,29 +379,31 @@ void GEOM_Swig::setDisplayMode(const char* theEntry, int theMode) if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) { SVTK_View* aView = aViewWindow->getView(); aView->SetDisplayMode(anIO, myMode); - aView->Repaint(); + if (myUpdateViewer) + aView->Repaint(); } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) { SOCC_Viewer* soccViewer = dynamic_cast(occViewer); if (soccViewer) - soccViewer->switchRepresentation(anIO, myMode); + 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::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(); @@ -401,7 +416,8 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue) 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; @@ -416,25 +432,27 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue) 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(); + ic->Redisplay(ite.Value(), true, true); + if (myUpdateViewer) + occViewer->update(); break; } } } } }; - 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(); @@ -446,16 +464,17 @@ void GEOM_Swig::setTransparency(const char* theEntry, float transp) if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(anApp)) { SVTK_View* aView = aViewWindow->getView(); aView->SetTransparency(anIO, myParam); - aView->Repaint(); + if (myUpdateViewer) + aView->Repaint(); } else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) { SOCC_Viewer* soccViewer = dynamic_cast(occViewer); if (soccViewer) - soccViewer->setTransparency(anIO, myParam); + soccViewer->setTransparency(anIO, myParam, myUpdateViewer); } } }; - ProcessVoidEvent(new TEvent (theEntry, transp)); + ProcessVoidEvent(new TEvent (theEntry, transp, isUpdated)); } @@ -587,13 +606,13 @@ void GEOM_Swig::setDeflection(const char* theEntry, float theDeflect) 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(); + TopoDS_Shape aSh = aShape->Shape(); + if (!aSh.IsNull()) + BRepTools::Clean(aSh); + + aShape->SetOwnDeviationCoefficient( myParam ); + aShape->SetOwnHLRDeviationAngle( 1.57 ); + aContext->Redisplay(aShape); return; } }