]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0021827: [CEA 650] TUI setColor on an object displayed in wireframe is ignored
authorvsr <vsr@opencascade.com>
Tue, 4 Sep 2012 05:09:12 +0000 (05:09 +0000)
committervsr <vsr@opencascade.com>
Tue, 4 Sep 2012 05:09:12 +0000 (05:09 +0000)
src/GEOMGUI/GeometryGUI_Swig.cxx [deleted file]
src/GEOMGUI/GeometryGUI_Swig.hxx [deleted file]
src/GEOMGUI/GeometryGUI_Swig.i [deleted file]
src/GEOMGUI/Makefile.am
src/GEOMToolsGUI/GEOMToolsGUI.h
src/GEOMToolsGUI/GEOMToolsGUI_1.cxx
src/GEOM_SWIG_WITHIHM/Makefile.am
src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx [new file with mode: 0644]
src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h [new file with mode: 0644]
src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i

diff --git a/src/GEOMGUI/GeometryGUI_Swig.cxx b/src/GEOMGUI/GeometryGUI_Swig.cxx
deleted file mode 100644 (file)
index 2c45290..0000000
+++ /dev/null
@@ -1,756 +0,0 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// 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
-// 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.
-//
-// 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
-//
-
-// GEOM GEOMGUI : GUI for Geometry component
-// File   : GeometryGUI_Swig.cxx
-// Author : Nicolas REJNERI, Paul RASCLE
-//
-#include "GeometryGUI_Swig.hxx"
-
-#include "GeometryGUI.h"
-
-#include "SUIT_Desktop.h"
-#include "SUIT_Session.h"
-#include "SalomeApp_Application.h"
-#include "SalomeApp_Study.h"
-
-#include "OB_Browser.h"
-
-#include "OCCViewer_ViewWindow.h"
-#include "OCCViewer_ViewManager.h"
-#include "SOCC_ViewModel.h"
-#include <SOCC_Prs.h>
-
-#include "SVTK_ViewModel.h"
-#include "SVTK_ViewWindow.h"
-#include "SVTK_View.h"
-#include "SVTK_Renderer.h"
-#include <SVTK_Prs.h>
-
-#include "GEOM_Actor.h"
-#include "GEOM_Client.hxx"
-#include "GEOM_AISShape.hxx"
-#include "GEOM_InteractiveObject.hxx"
-#include "GEOM_Displayer.h"
-#include "GEOM_Constants.h"
-
-#include "SALOME_Event.h"
-
-// OCCT Includes
-#include <TopAbs.hxx>
-#include <TopoDS_Shape.hxx>
-#include <AIS_ListOfInteractive.hxx>
-#include <AIS_ListIteratorOfListOfInteractive.hxx>
-#include <AIS_Drawer.hxx>
-#include <Prs3d_IsoAspect.hxx>
-#include <BRepTools.hxx>
-
-// IDL Headers
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(GEOM_Gen)
-
-#include <vtkRenderer.h>
-
-static SHAPE_READER(ShapeReader);
-
-inline OCCViewer_Viewer* GetOCCViewer(SUIT_Application* theApp){
-  SUIT_ViewWindow* window = theApp->desktop()->activeWindow();
-  if(window && window->getViewManager()->getType() == OCCViewer_Viewer::Type()){
-    OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
-    if ( vw ) {
-      OCCViewer_ViewManager* vm = dynamic_cast<OCCViewer_ViewManager*>( vw->getViewManager() );
-      if ( vm )
-        return vm->getOCCViewer();
-    }
-  }
-
-  return 0;
-}
-
-inline SVTK_ViewWindow* GetSVTKViewWindow(SUIT_Application* theApp){
-  SUIT_ViewWindow* window = theApp->desktop()->activeWindow();
-  if(window && window->getViewManager()->getType() == SVTK_Viewer::Type())
-    return dynamic_cast<SVTK_ViewWindow*>( window );
-
-  return 0;
-}
-
-GEOM_Swig::GEOM_Swig()
-{
-  // MESSAGE("Constructeur");
-}
-
-GEOM_Swig::~GEOM_Swig()
-{
-  // MESSAGE("Destructeur");
-}
-
-void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated)
-{
-  class TEvent: public SALOME_Event
-  {
-    std::string myEntry;
-    bool        myUpdateViewer;
-  public:
-    TEvent(const char* theEntry, bool toUpdateViewer):
-      myEntry(theEntry),
-      myUpdateViewer(toUpdateViewer)
-    {}
-    virtual void Execute()
-    {
-      SUIT_Application* app = SUIT_Session::session()->activeApplication();
-      if (!app) return;
-
-      SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
-      if (!ActiveStudy) return;
-
-      _PTR(Study) aStudy(ActiveStudy->studyDS());
-      _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
-
-      GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen();
-      if (CORBA::is_nil(Geom)) {
-        GeometryGUI::InitGeomGen();
-        Geom = GeometryGUI::GetGeomGen();
-      }
-      if (CORBA::is_nil(Geom))
-        return;
-
-      std::string aFatherIOR;
-      _PTR(SComponent) father = aStudy->FindComponent("GEOM");
-      if (!father)
-        return;
-      if (!father->ComponentIOR(aFatherIOR)) {
-        CORBA::String_var objStr = SalomeApp_Application::orb()->object_to_string(Geom);
-        aStudyBuilder->LoadWith(father, objStr.in());
-        father->ComponentIOR(aFatherIOR);
-      }
-
-      _PTR(SObject) obj = aStudy->FindObjectID(myEntry);
-      if (!obj)
-        return;
-
-      // Create new actor
-      _PTR(GenericAttribute) anAttr;
-      if (!obj->FindAttribute(anAttr, "AttributeIOR"))
-        return;
-      _PTR(AttributeIOR) anIOR(anAttr);
-      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);
-          std::string aNameValue = aName->Value();
-          // open transaction
-          /*SUIT_Operation* op = new SalomeApp_ImportOperation (app);
-          op->start();
-
-          _PTR(SObject) newObj1 = aStudyBuilder->NewObject(father);
-          aStudyBuilder->Addreference(newObj1, obj);
-          // commit transaction
-          op->commit();*/
-          Handle(GEOM_InteractiveObject) anIO =
-            new GEOM_InteractiveObject (const_cast<char*>(anIORValue.c_str()),
-                                        const_cast<char*>(aFatherIOR.c_str()),
-                                        "GEOM",
-                                        const_cast<char*>( obj->GetID().c_str()));
-
-          GEOM_Displayer(ActiveStudy).Display(anIO, myUpdateViewer);
-          /*if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) {
-            SVTK_View* aView = aViewWindow->getView();
-            int aMode = aView->GetDisplayMode();
-
-            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<char*>(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<char*>(aNameValue.c_str()));
-            aSh->setName(const_cast<char*>(aNameValue.c_str()));
-            aSh->setIO(anIO);
-            ic->Display(aSh);
-            ic->AddOrRemoveCurrentObject(aSh,true);
-            }*/
-          // update object browser
-          SalomeApp_Application* app = NULL; //dynamic_cast<SalomeApp_Application*>(app);
-          if (app) {
-            CAM_Module* module = app->module("Geometry");
-            SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>(module);
-            if (appMod)
-              appMod->updateObjBrowser(true);
-          }
-        }
-      }
-    }
-  };
-
-  // MESSAGE("createAndDisplayGO");
-  ProcessVoidEvent(new TEvent (Entry, isUpdated));
-
-  class TEventUpdateBrowser: public SALOME_Event
-    {
-      public:
-        TEventUpdateBrowser() {}
-        virtual void Execute() {
-          SalomeApp_Application* app =
-            dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
-          if (app) {
-            CAM_Module* module = app->module("Geometry");
-            SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>(module);
-            if (appMod) appMod->updateObjBrowser(true);
-          }
-        }
-    };
-
-  if (isUpdated)
-    ProcessVoidEvent(new TEventUpdateBrowser ());
-}
-
-void GEOM_Swig::createAndDisplayFitAllGO (const char* Entry)
-{
-  class TEventFitAll: public SALOME_Event
-  {
-    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();
-          }
-      }
-  };
-
-  createAndDisplayGO(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<SalomeApp_Study*>(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();
-  if (CORBA::is_nil(aGeomGen))
-    return -1;
-
-  GEOM::GEOM_Object_var aMainShape = aGeomGen->GetIORFromString(IOR);
-  GEOM::GEOM_Object_var aSubShape  = aGeomGen->GetIORFromString(SubIOR);
-  if (CORBA::is_nil(aMainShape) || CORBA::is_nil(aSubShape))
-    return -1;
-
-  GEOM::GEOM_IShapesOperations_var anIShapesOperations =
-    aGeomGen->GetIShapesOperations(aMainShape->GetStudyID());
-  if (CORBA::is_nil(anIShapesOperations))
-    return -1;
-
-  return anIShapesOperations->GetTopologyIndex(aMainShape, aSubShape);
-}
-
-const char* GEOM_Swig::getShapeTypeString(const char* IOR)
-{
-  TCollection_AsciiString aTypeName ("Shape of unknown type");
-
-  GEOM::GEOM_Gen_var aGeomGen = GeometryGUI::GetGeomGen();
-  if (!CORBA::is_nil(aGeomGen))
-  {
-    GEOM::GEOM_Object_var aShape = aGeomGen->GetIORFromString(IOR);
-    if (!CORBA::is_nil(aShape))
-    {
-      GEOM::GEOM_IShapesOperations_var anIShapesOperations =
-        aGeomGen->GetIShapesOperations(aShape->GetStudyID());
-      if (!CORBA::is_nil(anIShapesOperations))
-      {
-        aTypeName = anIShapesOperations->GetShapeTypeString(aShape);
-      }
-    }
-  }
-
-  return CORBA::string_dup(aTypeName.ToCString());
-}
-
-
-const char* GEOM_Swig::getShapeTypeIcon(const char* IOR)
-{
-  GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen();
-  if ( CORBA::is_nil( Geom ) )
-    return "None";
-
-  GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(IOR);
-  TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape);
-
-  if( shape.IsNull() ) {
-    return "None" ;
-  }
-
-  switch (shape.ShapeType() )
-    {
-    case TopAbs_COMPOUND:
-      { return "ICON_OBJBROWSER_COMPOUND" ;}
-    case  TopAbs_COMPSOLID:
-      { return "ICON_OBJBROWSER_COMPSOLID" ;}
-    case TopAbs_SOLID:
-      { return "ICON_OBJBROWSER_SOLID" ;}
-    case TopAbs_SHELL:
-      { return "ICON_OBJBROWSER_SHELL" ;}
-    case TopAbs_FACE:
-      { return "ICON_OBJBROWSER_FACE" ;}
-    case TopAbs_WIRE:
-      { return "ICON_OBJBROWSER_WIRE" ;}
-    case TopAbs_EDGE:
-      { return "ICON_OBJBROWSER_EDGE" ;}
-    case TopAbs_VERTEX:
-      { return "ICON_OBJBROWSER_VERTEX" ;}
-    }
-
-  return "None";
-}
-
-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, bool theUpdated):
-      myEntry(theEntryArg), myMode(theModeArg), 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->SetDisplayMode(anIO, myMode);
-        if (myUpdateViewer)
-          aView->Repaint();
-      }
-      else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
-        SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
-        if (soccViewer)
-          soccViewer->switchRepresentation(anIO, myMode, myUpdateViewer);
-      }
-    }
-  };
-
-  ProcessVoidEvent(new TEvent (theEntry, theMode, isUpdated));
-}
-
-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<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();
-        SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
-        if (soccViewer)
-          {
-            SALOME_Prs*   prs=      soccViewer->CreatePrs( myEntry.c_str() );
-            const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( 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, isUpdated));
-}
-
-void GEOM_Swig::setIsos(const char* Entry, int nbU, int nbV, bool isUpdated )
-{
-  class TEvent: public SALOME_Event {
-    std::string myEntry;
-    int myNbU, myNbV;
-    bool myUpdateViewer;
-  public:
-    TEvent(const char* theEntry, int theNbU, int theNbV, bool theUpdated):
-      myEntry(theEntry), myNbU(theNbU), myNbV(theNbV), myUpdateViewer(theUpdated)
-    {}
-    virtual void Execute() {
-      SUIT_Application* app = SUIT_Session::session()->activeApplication();
-      if (!app) return;
-      SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
-      if (!study) return;
-
-      Handle(SALOME_InteractiveObject) anIO =
-        new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
-
-      if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) {
-        SVTK_Viewer* aView = dynamic_cast<SVTK_Viewer*>(aViewWindow->getViewManager()->getViewModel());
-       SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( aView->CreatePrs( myEntry.c_str() ) );
-       if ( vtkPrs ) {
-         vtkActorCollection* anActors = vtkPrs->GetObjects();
-         anActors->InitTraversal();
-         GEOM_Actor* anActor = GEOM_Actor::SafeDownCast( anActors->GetNextActor() );
-         if ( anActor ) {
-           int aIsos[2]={myNbU,myNbV};
-           anActor->SetNbIsos(aIsos);
-           anActor->StoreIsoNumbers();
-           QString anIsos = QString("%1%2%3").arg(myNbU).arg(DIGIT_SEPARATOR).arg(myNbV);
-           int aMgrId = aView->getViewManager()->getGlobalId();
-           study->setObjectProperty(aMgrId, myEntry.c_str(), ISOS_PROP, anIsos);
-         }
-       }
-       
-       if (myUpdateViewer)
-          aView->Repaint();
-      }
-      else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) {
-        Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
-        SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
-        if (soccViewer) {
-         int aMgrId = soccViewer->getViewManager()->getGlobalId();
-          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() );
-             if ( !aSh.IsNull() ) {
-               Handle(AIS_Drawer) drawer = aSh->Attributes();
-               QVariant v = study->getObjectProperty( aMgrId, myEntry.c_str(), EDGE_WIDTH_PROP, QVariant() );
-               int width = v.isValid() ? v.toInt() : 1;
-               drawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbU) );
-               drawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbV) );
-               aSh->storeIsoNumbers();
-                ic->SetLocalAttributes(aSh, drawer);
-               ic->Redisplay(aSh);
-               QString anIsos = QString("%1%2%3").arg(myNbU).arg(DIGIT_SEPARATOR).arg(myNbV);
-               study->setObjectProperty(aMgrId, myEntry.c_str(), ISOS_PROP, anIsos);
-             }
-            }
-          }
-        }
-      }
-    }
-  };
-
-  ProcessVoidEvent(new TEvent (Entry, nbU, nbV, 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);
-      }
-    }
-  };
-
-  ProcessVoidEvent(new TEvent (theEntry, transp, isUpdated));
-}
-
-
-class TInitGeomGenEvent: public SALOME_Event {
-public:
-  typedef bool TResult;
-  TResult myResult;
-  TInitGeomGenEvent() : myResult(false) {}
-  virtual void Execute() {
-    myResult = GeometryGUI::InitGeomGen();
-  }
-};
-bool GEOM_Swig::initGeomGen()
-{
-  return ProcessEvent(new TInitGeomGenEvent());
-}
-
-
-
-void GEOM_Swig::eraseGO (const char* Entry, bool allWindows)
-{
-  class TEvent: public SALOME_Event
-  {
-    std::string myEntry;
-    bool myFromAllWindows;
-  public:
-    TEvent(const char* theEntry, bool fromAllWindows):
-      myEntry(theEntry), myFromAllWindows(fromAllWindows)
-    {}
-    virtual void Execute()
-    {
-      SUIT_Application* app = SUIT_Session::session()->activeApplication();
-      if (!app) return;
-      SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
-      if (!ActiveStudy) return;
-
-      Handle (SALOME_InteractiveObject) aIO = new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
-
-      GEOM_Displayer(ActiveStudy).Erase(aIO, true);
-      /*      if (myFromAllWindows) {
-        QPtrList<SUIT_ViewWindow> 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);
-          }*/
-    }
-
-    /*  private:
-    void EraseObject(SUIT_ViewWindow* theWin, Handle (SALOME_InteractiveObject) theIO)
-    {
-      if (theWin->getViewManager()->getType() == OCCViewer_Viewer::Type()){
-        OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( theWin );
-        if ( vw ) {
-          OCCViewer_ViewManager* vm = dynamic_cast<OCCViewer_ViewManager*>( vw->getViewManager() );
-          if ( vm ) {
-            SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>(vm->getOCCViewer());
-            if (aViewer) {
-              SALOME_Prs* aPrs = aViewer->CreatePrs(myEntry.c_str());
-              if (aPrs) {
-                SALOME_OCCPrs* aOccPrs =  dynamic_cast<SALOME_OCCPrs*>(aPrs);
-                if (aOccPrs) {
-                  aViewer->Erase(aOccPrs);
-                  aViewer->Repaint();
-                }
-              }
-            }
-          }
-        }
-      } else if (theWin->getViewManager()->getType() == SVTK_Viewer::Type()){
-        SVTK_ViewWindow* aViewWindow = dynamic_cast<SVTK_ViewWindow*>( theWin );
-        if (aViewWindow) {
-          aViewWindow->Erase(theIO);
-        }
-      }
-      }*/
-
-  };
-  ProcessVoidEvent(new TEvent(Entry, allWindows));
-}
-
-
-
-void GEOM_Swig::setDeflection(const char* theEntry, float theDeflect)
-{
-  class TEvent: public SALOME_Event {
-    std::string myEntry;
-    float myParam;
-  public:
-    TEvent(const char* theEntryArg, float theParam):
-      myEntry(theEntryArg), myParam(theParam)
-    {}
-    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)) {
-        vtkActorCollection* aActors = aViewWindow->getRenderer()->GetActors();
-        aActors->InitTraversal();
-        while (vtkActor* aAct = aActors->GetNextActor()) {
-          if (GEOM_Actor* aGeomActor = dynamic_cast<GEOM_Actor*>(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()) {
-              TopoDS_Shape aSh = aShape->Shape();
-              if (!aSh.IsNull())
-                BRepTools::Clean(aSh);
-
-              aShape->SetOwnDeviationCoefficient( myParam );
-              aShape->SetOwnHLRDeviationAngle( 1.57 );
-              aContext->Redisplay(aShape);
-              return;
-            }
-          }
-        }
-      }
-    }
-  };
-
-  ProcessVoidEvent(new TEvent (theEntry, theDeflect));
-}
-
diff --git a/src/GEOMGUI/GeometryGUI_Swig.hxx b/src/GEOMGUI/GeometryGUI_Swig.hxx
deleted file mode 100644 (file)
index 3ddb4b6..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// 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
-// 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.
-//
-// 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
-//
-
-// GEOM GEOMGUI : GUI for Geometry component
-// File   : GeometryGUI_Swig.hxx
-// Author : Nicolas REJNERI, Paul RASCLE
-//
-#ifndef GEOMETRYGUI_SWIG_HXX
-#define GEOMETRYGUI_SWIG_HXX
-
-#include "GEOM_GEOMGUI.hxx"
-
-// IDL Headers
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(GEOM_Gen)
-#include CORBA_SERVER_HEADER(SALOMEDS)
-#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
-
-class GEOMGUI_EXPORT GEOM_Swig
-{
-public:
-  GEOM_Swig();
-  ~GEOM_Swig();
-
-  void createAndDisplayGO(const char* Entry, bool isUpdated = true);
-  void eraseGO(const char* Entry, bool allWindows);
-  void createAndDisplayFitAllGO(const char* Entry);
-  void UpdateViewer();
-  void setDisplayMode(const char* Entry, int mode, bool isUpdated = true);
-  void setVectorsMode(const char* Entry, bool isSet, bool isUpdated = true);
-  void setColor(const char* Entry, int red, int green, int blue, bool isUpdated = true);
-  void setTransparency(const char* Entry, float transp, bool isUpdated = true);
-  void setIsos(const char* Entry, int nbU, int nbV, bool isUpdated =true);
-  void setDeflection(const char* Entry, float deflect);
-
-  int  getIndexTopology(const char *SubEntry, const char *Entry);
-  const char* getShapeTypeString(const char *Entry);
-  const char* getShapeTypeIcon(const char *Ior);
-
-  bool initGeomGen();
-};
-
-#endif // GEOMETRYGUI_SWIG_HXX
diff --git a/src/GEOMGUI/GeometryGUI_Swig.i b/src/GEOMGUI/GeometryGUI_Swig.i
deleted file mode 100644 (file)
index e9a4339..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
-//
-// 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
-// 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.
-//
-// 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
-//
-
-// GEOM GEOMGUI : GUI for Geometry component
-// File   : GeometryGUI_Swig.i
-// Author : Nicolas REJNERI, Paul RASCLE
-//
-%{
-#include "GeometryGUI_Swig.hxx"
-%}
-
-/*
-  managing C++ exception in the Python API
-*/
-%exception
-{
-  class PyAllowThreadsGuard {
-   public:
-    // Py_BEGIN_ALLOW_THREADS
-    PyAllowThreadsGuard() { _save = PyEval_SaveThread(); }
-    // Py_END_ALLOW_THREADS
-    ~PyAllowThreadsGuard() { PyEval_RestoreThread(_save); }
-   private:
-    PyThreadState *_save;
-  };
-
-  PyAllowThreadsGuard guard;
-
-  $action
-}
-
-class GEOM_Swig
-{
- public:
-  GEOM_Swig();
-  ~GEOM_Swig();
-
-  void createAndDisplayGO(const char* Entry, bool isUpdated =true);
-  void eraseGO(const char* Entry, bool allWindows);
-  void createAndDisplayFitAllGO(const char* Entry);
-  void UpdateViewer();
-  int  getIndexTopology(const char *SubEntry, const char *Entry);
-  const char* getShapeTypeString(const char *Entry);
-
-  void setDisplayMode(const char* Entry, int mode, bool isUpdated =true);
-  void setVectorsMode(const char* Entry, bool isSet, bool isUpdated =true);
-  void setColor(const char* Entry, int red, int green, int blue, bool isUpdated =true);
-  void setTransparency(const char* Entry, float transp, bool isUpdated =true);
-  void setIsos(const char* Entry, int nbU, int nbV, bool isUpdated =true);
-  void setDeflection(const char* Entry, float deflect);
-  const char* getShapeTypeIcon(const char *Ior);
-
-  bool initGeomGen();
-};
index 2ac3a347bbe19be826a3d42ebac69ed17f4ea1c4..71f187ae0f73b93681ea62cf0850f0faf4f58060 100644 (file)
@@ -35,8 +35,6 @@ salomeinclude_HEADERS =       \
        GEOM_Displayer.h        \
        GEOMGUI_OCCSelector.h   \
        GEOMGUI_Selection.h     \
-       GeometryGUI_Swig.hxx    \
-       GeometryGUI_Swig.i      \
        GEOM_GEOMGUI.hxx
 
 dist_libGEOM_la_SOURCES =      \
@@ -44,8 +42,7 @@ dist_libGEOM_la_SOURCES =     \
        GEOMGUI.cxx             \
        GEOM_Displayer.cxx      \
         GEOMGUI_OCCSelector.cxx        \
-       GEOMGUI_Selection.cxx   \
-       GeometryGUI_Swig.cxx
+       GEOMGUI_Selection.cxx
 
 MOC_FILES =                    \
        GeometryGUI_moc.cxx
index 4241124f648abd30e3f49fff5f52faafd68123fc..d980f5ee15831d7cfd20ac61fa8b3d9ff6c2d4e8 100644 (file)
 #include "GEOM_ToolsGUI.hxx"
 
 #include <GEOMGUI.h>
-
 #include <SALOMEDSClient.hxx>
 
 class GEOM_Displayer;
 class SALOME_View;
 class SALOME_ListIO;
+class SalomeApp_Study;
+class SVTK_View;
+class QColor;
+class Handle_SALOME_InteractiveObject;
+class Handle_AIS_InteractiveContext;
 
 #include <QList>
 
@@ -54,6 +58,8 @@ public:
 
   enum ActionType { SHOWDLG, INCR, DECR };
 
+  static void  SetColor( const QString&, const QColor&, bool );
+
 private:
   // Import and export topology methods
   bool         Import();
@@ -89,6 +95,18 @@ private:
                                          _PTR(Study),
                                          QList<SALOME_View*>,
                                          GEOM_Displayer* );
+
+  static void setVtkColor( SalomeApp_Study* study,
+                          int mgrId,
+                          SVTK_View* view,
+                          const Handle_SALOME_InteractiveObject& IO,
+                          const QColor& color );
+
+  static void setOccColor( SalomeApp_Study* study,
+                          int mgrId,
+                          const Handle_AIS_InteractiveContext& ic,
+                          const Handle_SALOME_InteractiveObject& IO,
+                          const QColor& color );
 };
 
 #endif // GEOMTOOLSGUI_H
index 64983d176e5ecc88111b8ae8dee4a52dcfadd430..925585ca67506a5a6336b4a64a1035356ca02dfc 100644 (file)
@@ -267,151 +267,240 @@ void GEOMToolsGUI::OnDisableAutoColor()
     return;
 
   aMainObject->SetAutoColor( false );
+}
+
+void GEOMToolsGUI::SetColor( const QString& entry, const QColor& color, bool /*updateViewer*/ )
+{
+  if ( entry.isEmpty() || !color.isValid() ) return;
+
+  // get active application
+  SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+  if ( !app ) return;
+
+  // get current study
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
+  if ( !appStudy ) return;
+
+  // get active view
+  SUIT_ViewWindow* window = app->desktop()->activeWindow();
+  bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
+  bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
+
+  // get view id
+  int mgrId = window->getViewManager()->getGlobalId();
+
+  Handle(SALOME_InteractiveObject) IO =
+    new SALOME_InteractiveObject( entry.toLatin1().data(), "GEOM", "");
+
+  if ( isVTK ) {
+    SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
+    if ( !vtkVW ) return;
+    SVTK_View* aView = vtkVW->getView();
+
+    GEOMToolsGUI::setVtkColor( appStudy, mgrId, aView, IO, color );
+  }
+  else if ( isOCC ) {
+    OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*> ( window->getViewManager()->getViewModel() );
+    Handle (AIS_InteractiveContext) ic = vm->getAISContext();
+    GEOMToolsGUI::setOccColor( appStudy, mgrId, ic, IO, color ); 
+  }
 
+  // mark study as modified
+  GeometryGUI::Modified();
+  
+  // update actions
+  app->updateActions(); //SRN: To update a Save button in the toolbar
 }
 
 void GEOMToolsGUI::OnColor()
 {
-  SALOME_ListIO selected;
+  // get active application
   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+  if ( !app ) return;
+
+  // get current study
   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
-  if ( app && appStudy ) {
-    LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
-    if ( aSelMgr ) {
-      aSelMgr->selectedObjects( selected );
-      if ( !selected.IsEmpty() ) {
-        SUIT_ViewWindow* window = app->desktop()->activeWindow();
-        bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
-        bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
-        int mgrId = window->getViewManager()->getGlobalId();
-        if ( isVTK ) {
-          SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
-          if ( !vtkVW )
-            return;
-          SVTK_View* aView = vtkVW->getView();
-          QColor initcolor = aView->GetColor( selected.First()  );
-          QColor c = QColorDialog::getColor( initcolor, app->desktop() );
-          if ( c.isValid() ) {
-            SUIT_OverrideCursor();
-            for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
-              QString matProp;
-              matProp = appStudy->getObjectProperty(mgrId,It.Value()->getEntry(), MATERIAL_PROP, matProp).toString();
-              Material_Model material;
-              material.fromProperties( matProp );
-              if ( !material.isPhysical() ) {
-                aView->SetColor( It.Value(), c );
-                appStudy->setObjectProperty(mgrId,It.Value()->getEntry(),COLOR_PROP, c);
-              }
-              // store color to GEOM_Object
-              _PTR(Study) aStudy = appStudy->studyDS();
-              _PTR(SObject) aSObject( aStudy->FindObjectID( It.Value()->getEntry() ) );
-              GEOM::GEOM_Object_var anObject =
-              GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject));
-              SALOMEDS::Color aSColor;
-              aSColor.R = (double)c.red() / 255.0;
-              aSColor.G = (double)c.green() / 255.0;
-              aSColor.B = (double)c.blue() / 255.0;
-              anObject->SetColor( aSColor );
-              anObject->SetAutoColor( false );          
-            }
-            GeometryGUI::Modified();
-          }
-        } // if ( isVTK )
-        else if ( isOCC ) {
-               Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( selected.First() );
-          if ( !io.IsNull() ) {
-            Quantity_Color aColor;
-            io->Color( aColor ); 
-            QColor ic = QColor((int )( aColor.Red() * 255.0 ),
-                             (int)( aColor.Green() * 255.0 ),
-                             (int)( aColor.Blue() * 255.0 ));      
-
-                             QVariant v = appStudy->getObjectProperty(mgrId,selected.First()->getEntry(), COLOR_PROP, ic);
-
-            QColor initcolor = v.value<QColor>();
-            QColor c =  QColorDialog::getColor( initcolor, app->desktop() );
-            if ( c.isValid() ) {
-              SUIT_OverrideCursor();
-              aColor = Quantity_Color( c.red() / 255., c.green() / 255., c.blue() / 255., Quantity_TOC_RGB );
-              OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*> ( window->getViewManager()->getViewModel() );
-              Handle (AIS_InteractiveContext) ic = vm->getAISContext();
-              for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
-                QString matProp;
-                matProp = appStudy->getObjectProperty(mgrId,It.Value()->getEntry(), MATERIAL_PROP, matProp).toString();
-               Material_Model material;
-               material.fromProperties( matProp );
-                io = GEOMBase::GetAIS( It.Value(), true );
-                if ( !io.IsNull()  && !material.isPhysical() ) { // change color only for shapes with not physical type of material
-                  
-                  if ( io->IsKind( STANDARD_TYPE(AIS_Shape) ) ) {
-                    TopoDS_Shape theShape = Handle(AIS_Shape)::DownCast( io )->Shape();
-                    bool onlyVertex = (theShape.ShapeType() == TopAbs_VERTEX || GEOM_Displayer::isCompoundOfVertices( theShape ));
-                    if (onlyVertex) {
-                      // Set color for a point
-
-                      Handle(AIS_Drawer) aCurDrawer = io->Attributes();
-                      Handle(Prs3d_PointAspect) aCurPointAspect =  aCurDrawer->PointAspect();
-                      Quantity_Color aCurColor;
-                      Standard_Real aCurScale;
-                      Aspect_TypeOfMarker aCurTypeOfMarker;
-                      aCurPointAspect->Aspect()->Values( aCurColor, aCurTypeOfMarker, aCurScale );
-                      if ( aCurTypeOfMarker != Aspect_TOM_USERDEFINED ) {
-                        aCurDrawer->SetPointAspect(new Prs3d_PointAspect(aCurTypeOfMarker, aColor, aCurScale));
-                      }
-                      else {
-                        Standard_Integer aWidth, aHeight;
-                        aCurPointAspect->GetTextureSize( aWidth, aHeight );
+  if ( !appStudy ) return;
 
-#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
-                        Handle(TColStd_HArray1OfByte) aTexture = aCurPointAspect->GetTexture();
-#else
-                        Handle(Graphic3d_HArray1OfBytes) aTexture = aCurPointAspect->GetTexture();
-#endif
+  // get selection manager
+  LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+  if ( !aSelMgr ) return;
 
-                        aCurDrawer->SetPointAspect(new Prs3d_PointAspect(aColor, 1, aWidth, aHeight, aTexture));
-                      }
-                      ic->SetLocalAttributes(io, aCurDrawer, Standard_False);
-                    }
-                  }
-
-                  io->SetColor( aColor );
-                  if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) {
-                    Handle(GEOM_AISShape) aGAISShape = Handle(GEOM_AISShape)::DownCast( io );
-                    aGAISShape->SetShadingColor( aColor );
-                    aGAISShape->storeBoundaryColors();
-                  }
-
-                  appStudy->setObjectProperty(mgrId,It.Value()->getEntry(), COLOR_PROP, c);
-                 
-                  io->Redisplay( Standard_True );
-
-                  // store color to GEOM_Object
-                  _PTR(Study) aStudy = appStudy->studyDS();
-                  _PTR(SObject) aSObject( aStudy->FindObjectID( It.Value()->getEntry() ) );
-                  GEOM::GEOM_Object_var anObject =
-                    GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject));
-
-
-                  SALOMEDS::Color aSColor;
-                  aSColor.R = (double)c.red() / 255.0;
-                  aSColor.G = (double)c.green() / 255.0;
-                  aSColor.B = (double)c.blue() / 255.0;
-                  anObject->SetColor( aSColor );
-                  anObject->SetAutoColor( false );              
-                }
-              } // for
-              ic->UpdateCurrentViewer();
-              GeometryGUI::Modified();
-            } // if c.isValid()
-          } // first IO is not null
-        } // if ( isOCC )
-      } // if ( selection not empty )
+  // get selection
+  SALOME_ListIO selected;
+  aSelMgr->selectedObjects( selected );
+  if ( selected.IsEmpty() ) return;
+  
+  // get active view
+  SUIT_ViewWindow* window = app->desktop()->activeWindow();
+  bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
+  bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
+
+  // get view id
+  int mgrId = window->getViewManager()->getGlobalId();
+
+  if ( isVTK ) {
+    SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
+    if ( !vtkVW ) return;
+
+    // get initial color (use first object from selection)
+    SVTK_View* aView = vtkVW->getView();
+    QColor color = aView->GetColor( selected.First()  );
+    QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), COLOR_PROP, color );
+
+    // show Choose Color dialog box
+    color = QColorDialog::getColor( v.value<QColor>(), app->desktop() );
+    if ( !color.isValid() ) return;
+
+    // iterate through list of objects and assign new color
+    SUIT_OverrideCursor();
+    for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
+      GEOMToolsGUI::setVtkColor( appStudy, mgrId, aView, It.Value(), color ); 
+    }
+  }
+  else if ( isOCC ) {
+    // find AIS interactive object (for first item in selection)
+    Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( selected.First() );
+    if ( io.IsNull() ) return;
+
+    // get initial color (use first object from selection)
+    Quantity_Color aColor;
+    io->Color( aColor ); 
+    QColor color = QColor((int)( aColor.Red()   * 255.0 ),
+                         (int)( aColor.Green() * 255.0 ),
+                         (int)( aColor.Blue()  * 255.0 ));
+    QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), COLOR_PROP, color );
+
+    // show Choose Color dialog box
+    color = QColorDialog::getColor( v.value<QColor>(), app->desktop() );
+    if ( !color.isValid() ) return;
+
+    // iterate through list of objects and assign new color
+    SUIT_OverrideCursor();
+    OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*> ( window->getViewManager()->getViewModel() );
+    Handle (AIS_InteractiveContext) ic = vm->getAISContext();
+    for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
+      GEOMToolsGUI::setOccColor( appStudy, mgrId, ic, It.Value(), color ); 
     }
   }
 
+  // mark study as modified
+  GeometryGUI::Modified();
+  
+  // update actions
   app->updateActions(); //SRN: To update a Save button in the toolbar
 }
 
+
+void GEOMToolsGUI::setVtkColor( SalomeApp_Study* study,                     // study
+                               int mgrId,                                  // view window id
+                               SVTK_View* view,                            // VTK view
+                               const Handle(SALOME_InteractiveObject)& IO, // interactive object
+                               const QColor& color )                       // color 
+{
+  // get material property
+  QString matProp;
+  matProp = study->getObjectProperty( mgrId, IO->getEntry(), MATERIAL_PROP, matProp ).toString();
+  Material_Model material;
+  material.fromProperties( matProp );
+
+  // change color only for shapes with not physical type of material
+  if ( !material.isPhysical() ) {
+    view->SetColor( IO, color );
+    study->setObjectProperty( mgrId, IO->getEntry(), COLOR_PROP, color );
+  }
+
+  // store color to GEOM_Object
+  _PTR(Study) aStudy = study->studyDS();
+  _PTR(SObject) aSObject( aStudy->FindObjectID( IO->getEntry() ) );
+  if ( !aSObject ) return;
+
+  GEOM::GEOM_Object_var anObject =
+    GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject));
+
+  if ( CORBA::is_nil( anObject ) ) return;
+
+  SALOMEDS::Color aSColor;
+  aSColor.R = (double)color.red() / 255.0;
+  aSColor.G = (double)color.green() / 255.0;
+  aSColor.B = (double)color.blue() / 255.0;
+  anObject->SetColor( aSColor );
+  anObject->SetAutoColor( false );
+}
+
+void GEOMToolsGUI::setOccColor( SalomeApp_Study* study,                     // study
+                               int mgrId,                                  // view window id
+                               const Handle(AIS_InteractiveContext)& ic,   // OCC interactive context
+                               const Handle(SALOME_InteractiveObject)& IO, // interactive object
+                               const QColor& color )                       // color 
+{
+  // get AIS object
+  Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( IO, true );
+  if ( io.IsNull() ) return;
+
+  // get material property
+  QString matProp;
+  matProp = study->getObjectProperty( mgrId, IO->getEntry(), MATERIAL_PROP, matProp ).toString();
+  Material_Model material;
+  material.fromProperties( matProp );
+
+  Quantity_Color aColor = Quantity_Color( color.red() / 255., color.green() / 255., color.blue() / 255., Quantity_TOC_RGB );
+             
+  // change color only for shapes with not physical type of material
+  if ( !material.isPhysical() ) {
+    if ( io->IsKind( STANDARD_TYPE(AIS_Shape) ) ) {
+      TopoDS_Shape theShape = Handle(AIS_Shape)::DownCast( io )->Shape();
+      bool onlyVertex = (theShape.ShapeType() == TopAbs_VERTEX || GEOM_Displayer::isCompoundOfVertices( theShape ));
+      if ( onlyVertex ) {
+       // set color for a point
+       Handle(AIS_Drawer) aCurDrawer = io->Attributes();
+       Handle(Prs3d_PointAspect) aCurPointAspect =  aCurDrawer->PointAspect();
+       Quantity_Color aCurColor;
+       Standard_Real aCurScale;
+       Aspect_TypeOfMarker aCurTypeOfMarker;
+       aCurPointAspect->Aspect()->Values( aCurColor, aCurTypeOfMarker, aCurScale );
+       if ( aCurTypeOfMarker != Aspect_TOM_USERDEFINED ) {
+         aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aCurTypeOfMarker, aColor, aCurScale ) );
+       }
+       else {
+         Standard_Integer aWidth, aHeight;
+         aCurPointAspect->GetTextureSize( aWidth, aHeight );
+#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
+         Handle(TColStd_HArray1OfByte) aTexture = aCurPointAspect->GetTexture();
+#else
+         Handle(Graphic3d_HArray1OfBytes) aTexture = aCurPointAspect->GetTexture();
+#endif
+         aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aColor, 1, aWidth, aHeight, aTexture ) );
+       }
+       ic->SetLocalAttributes( io, aCurDrawer, Standard_False );
+      }
+    }
+    
+    io->SetColor( aColor );
+    if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) {
+      Handle(GEOM_AISShape) aGAISShape = Handle(GEOM_AISShape)::DownCast( io );
+      aGAISShape->SetShadingColor( aColor );
+      aGAISShape->storeBoundaryColors();
+    }
+
+    io->Redisplay( Standard_True );
+
+    study->setObjectProperty( mgrId, IO->getEntry(), COLOR_PROP, color );
+  }    
+
+  // store color to GEOM_Object
+  _PTR(Study) aStudy = study->studyDS();
+  _PTR(SObject) aSObject( aStudy->FindObjectID( IO->getEntry() ) );
+  GEOM::GEOM_Object_var anObject =
+    GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject));
+  SALOMEDS::Color aSColor;
+  aSColor.R = (double)color.red() / 255.0;
+  aSColor.G = (double)color.green() / 255.0;
+  aSColor.B = (double)color.blue() / 255.0;
+  anObject->SetColor( aSColor );
+  anObject->SetAutoColor( false );              
+}
+
 void GEOMToolsGUI::OnTexture()
 {
   SALOME_ListIO selected;
index e468bfb0d3a5f4bfccb6db16ed9a93737aef4270..132fff96df7e4bb0c45c5aee1a488e70c3ba8d26 100644 (file)
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-#  GEOM GEOM_SWIG : binding of C++ omplementaion with Python
-#  File   : Makefile.in
-#  Author : Nicolas REJNERI, Paul RASCLE
-#  Modified by : Alexander BORODIN (OCN) - autotools usage
-#  Module : GEOM
-#  $Header$
-# Libraries targets
-#
 include $(top_srcdir)/adm_local/unix/make_common_starter.am
 
 # ===============================================================
@@ -40,28 +32,24 @@ include $(top_srcdir)/adm_local/unix/make_common_starter.am
 # Step 2: build the dynamic library from cpp built source files and
 #         dependant libraries.
 #
-# swig_wrap.cpp -- gcc --> swig_wrap.o    |-- link --> _libSALOME_Swig.la
+# swig_wrap.cpp -- gcc --> swig_wrap.o    |-- link --> _libGEOM_Swig.la
 #                          +              |
 #                          dependant libs |
 #
-# The file libGEOM_Swig.py will be installed to the
-# <prefix>/bin/salome directory.
-# The library _libGEOM_Swig.so will be installed to the 
+# The files libGEOM_Swig.py and _libGEOM_Swig.so will be installed to the
 # <prefix>/lib/python<version>/site-package/salome directory.
 #
 
 SWIG_FLAGS    = @SWIG_FLAGS@ -I$(srcdir) -I$(srcdir)/../GEOMGUI
 SWIG_SOURCES  = libGEOM_Swig.i
 
+salomeinclude_HEADERS = $(SWIG_SOURCES) libGEOM_Swig.h
+
 salomepython_PYTHON = libGEOM_Swig.py
 salomepyexec_LTLIBRARIES = _libGEOM_Swig.la
 
-libGEOM_Swig.py: swig_wrap.cpp
-BUILT_SOURCES = swig_wrap.cpp
-_libGEOM_Swig_la_SOURCES        = $(SWIG_SOURCES)
-nodist__libGEOM_Swig_la_SOURCES = $(BUILT_SOURCES)
-
-salomeinclude_HEADERS           = $(SWIG_SOURCES)
+_libGEOM_Swig_la_SOURCES        = $(SWIG_SOURCES) libGEOM_Swig.h libGEOM_Swig.cxx
+nodist__libGEOM_Swig_la_SOURCES = swig_wrap.cpp
 
 _libGEOM_Swig_la_CPPFLAGS =            \
        $(QT_INCLUDES)                  \
@@ -73,16 +61,22 @@ _libGEOM_Swig_la_CPPFLAGS =         \
        $(GUI_CXXFLAGS)                 \
        $(CORBA_CXXFLAGS)               \
        $(CORBA_INCLUDES)               \
+       -I$(srcdir)/../GEOMClient       \
+       -I$(srcdir)/../OBJECT           \
        -I$(srcdir)/../GEOMGUI          \
+       -I$(srcdir)/../GEOMToolsGUI     \
        -I$(top_builddir)/idl
 
 _libGEOM_Swig_la_LDFLAGS = -module
 _libGEOM_Swig_la_LIBADD  =             \
        ../GEOMGUI/libGEOM.la           \
+       ../GEOMToolsGUI/libGEOMToolsGUI.la      \
        $(PYTHON_LIBS)
 
 swig_wrap.cpp : $(SWIG_SOURCES)
        $(SWIG) $(SWIG_FLAGS) -o $@ $<
 
+libGEOM_Swig.py: swig_wrap.cpp
+
 CLEANFILES = swig_wrap.cpp libGEOM_Swig.py
 
diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx
new file mode 100644 (file)
index 0000000..f423db4
--- /dev/null
@@ -0,0 +1,759 @@
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// 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
+// 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.
+//
+// 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
+//
+
+// GEOM GEOMGUI : GUI for Geometry component
+// File   : libGEOM_Swig.cxx
+// Author : Nicolas REJNERI, Paul RASCLE
+//
+#include "libGEOM_Swig.h"
+
+#include "GeometryGUI.h"
+#include "GEOMToolsGUI.h"
+
+#include "SUIT_Desktop.h"
+#include "SUIT_Session.h"
+#include "SalomeApp_Application.h"
+#include "SalomeApp_Study.h"
+
+#include "OB_Browser.h"
+
+#include "OCCViewer_ViewWindow.h"
+#include "OCCViewer_ViewManager.h"
+#include "SOCC_ViewModel.h"
+#include <SOCC_Prs.h>
+
+#include "SVTK_ViewModel.h"
+#include "SVTK_ViewWindow.h"
+#include "SVTK_View.h"
+#include "SVTK_Renderer.h"
+#include <SVTK_Prs.h>
+
+#include "GEOM_Actor.h"
+#include "GEOM_Client.hxx"
+#include "GEOM_AISShape.hxx"
+#include "GEOM_InteractiveObject.hxx"
+#include "GEOM_Displayer.h"
+#include "GEOM_Constants.h"
+
+#include "SALOME_Event.h"
+
+// OCCT Includes
+#include <TopAbs.hxx>
+#include <TopoDS_Shape.hxx>
+#include <AIS_ListOfInteractive.hxx>
+#include <AIS_ListIteratorOfListOfInteractive.hxx>
+#include <AIS_Drawer.hxx>
+#include <Prs3d_IsoAspect.hxx>
+#include <BRepTools.hxx>
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+
+#include <vtkRenderer.h>
+
+static SHAPE_READER(ShapeReader);
+
+inline OCCViewer_Viewer* GetOCCViewer(SUIT_Application* theApp){
+  SUIT_ViewWindow* window = theApp->desktop()->activeWindow();
+  if(window && window->getViewManager()->getType() == OCCViewer_Viewer::Type()){
+    OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( window );
+    if ( vw ) {
+      OCCViewer_ViewManager* vm = dynamic_cast<OCCViewer_ViewManager*>( vw->getViewManager() );
+      if ( vm )
+        return vm->getOCCViewer();
+    }
+  }
+
+  return 0;
+}
+
+inline SVTK_ViewWindow* GetSVTKViewWindow(SUIT_Application* theApp){
+  SUIT_ViewWindow* window = theApp->desktop()->activeWindow();
+  if(window && window->getViewManager()->getType() == SVTK_Viewer::Type())
+    return dynamic_cast<SVTK_ViewWindow*>( window );
+
+  return 0;
+}
+
+GEOM_Swig::GEOM_Swig()
+{
+  // MESSAGE("Constructeur");
+}
+
+GEOM_Swig::~GEOM_Swig()
+{
+  // MESSAGE("Destructeur");
+}
+
+void GEOM_Swig::createAndDisplayGO (const char* Entry, bool isUpdated)
+{
+  class TEvent: public SALOME_Event
+  {
+    std::string myEntry;
+    bool        myUpdateViewer;
+  public:
+    TEvent(const char* theEntry, bool toUpdateViewer):
+      myEntry(theEntry),
+      myUpdateViewer(toUpdateViewer)
+    {}
+    virtual void Execute()
+    {
+      SUIT_Application* app = SUIT_Session::session()->activeApplication();
+      if (!app) return;
+
+      SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
+      if (!ActiveStudy) return;
+
+      _PTR(Study) aStudy(ActiveStudy->studyDS());
+      _PTR(StudyBuilder) aStudyBuilder = aStudy->NewBuilder();
+
+      GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen();
+      if (CORBA::is_nil(Geom)) {
+        GeometryGUI::InitGeomGen();
+        Geom = GeometryGUI::GetGeomGen();
+      }
+      if (CORBA::is_nil(Geom))
+        return;
+
+      std::string aFatherIOR;
+      _PTR(SComponent) father = aStudy->FindComponent("GEOM");
+      if (!father)
+        return;
+      if (!father->ComponentIOR(aFatherIOR)) {
+        CORBA::String_var objStr = SalomeApp_Application::orb()->object_to_string(Geom);
+        aStudyBuilder->LoadWith(father, objStr.in());
+        father->ComponentIOR(aFatherIOR);
+      }
+
+      _PTR(SObject) obj = aStudy->FindObjectID(myEntry);
+      if (!obj)
+        return;
+
+      // Create new actor
+      _PTR(GenericAttribute) anAttr;
+      if (!obj->FindAttribute(anAttr, "AttributeIOR"))
+        return;
+      _PTR(AttributeIOR) anIOR(anAttr);
+      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);
+          std::string aNameValue = aName->Value();
+          // open transaction
+          /*SUIT_Operation* op = new SalomeApp_ImportOperation (app);
+          op->start();
+
+          _PTR(SObject) newObj1 = aStudyBuilder->NewObject(father);
+          aStudyBuilder->Addreference(newObj1, obj);
+          // commit transaction
+          op->commit();*/
+          Handle(GEOM_InteractiveObject) anIO =
+            new GEOM_InteractiveObject (const_cast<char*>(anIORValue.c_str()),
+                                        const_cast<char*>(aFatherIOR.c_str()),
+                                        "GEOM",
+                                        const_cast<char*>( obj->GetID().c_str()));
+
+          GEOM_Displayer(ActiveStudy).Display(anIO, myUpdateViewer);
+          /*if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) {
+            SVTK_View* aView = aViewWindow->getView();
+            int aMode = aView->GetDisplayMode();
+
+            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<char*>(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<char*>(aNameValue.c_str()));
+            aSh->setName(const_cast<char*>(aNameValue.c_str()));
+            aSh->setIO(anIO);
+            ic->Display(aSh);
+            ic->AddOrRemoveCurrentObject(aSh,true);
+            }*/
+          // update object browser
+          SalomeApp_Application* app = NULL; //dynamic_cast<SalomeApp_Application*>(app);
+          if (app) {
+            CAM_Module* module = app->module("Geometry");
+            SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>(module);
+            if (appMod)
+              appMod->updateObjBrowser(true);
+          }
+        }
+      }
+    }
+  };
+
+  // MESSAGE("createAndDisplayGO");
+  ProcessVoidEvent(new TEvent (Entry, isUpdated));
+
+  class TEventUpdateBrowser: public SALOME_Event
+    {
+      public:
+        TEventUpdateBrowser() {}
+        virtual void Execute() {
+          SalomeApp_Application* app =
+            dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
+          if (app) {
+            CAM_Module* module = app->module("Geometry");
+            SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>(module);
+            if (appMod) appMod->updateObjBrowser(true);
+          }
+        }
+    };
+
+  if (isUpdated)
+    ProcessVoidEvent(new TEventUpdateBrowser ());
+}
+
+void GEOM_Swig::createAndDisplayFitAllGO (const char* Entry)
+{
+  class TEventFitAll: public SALOME_Event
+  {
+    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();
+          }
+      }
+  };
+
+  createAndDisplayGO(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<SalomeApp_Study*>(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();
+  if (CORBA::is_nil(aGeomGen))
+    return -1;
+
+  GEOM::GEOM_Object_var aMainShape = aGeomGen->GetIORFromString(IOR);
+  GEOM::GEOM_Object_var aSubShape  = aGeomGen->GetIORFromString(SubIOR);
+  if (CORBA::is_nil(aMainShape) || CORBA::is_nil(aSubShape))
+    return -1;
+
+  GEOM::GEOM_IShapesOperations_var anIShapesOperations =
+    aGeomGen->GetIShapesOperations(aMainShape->GetStudyID());
+  if (CORBA::is_nil(anIShapesOperations))
+    return -1;
+
+  return anIShapesOperations->GetTopologyIndex(aMainShape, aSubShape);
+}
+
+const char* GEOM_Swig::getShapeTypeString(const char* IOR)
+{
+  TCollection_AsciiString aTypeName ("Shape of unknown type");
+
+  GEOM::GEOM_Gen_var aGeomGen = GeometryGUI::GetGeomGen();
+  if (!CORBA::is_nil(aGeomGen))
+  {
+    GEOM::GEOM_Object_var aShape = aGeomGen->GetIORFromString(IOR);
+    if (!CORBA::is_nil(aShape))
+    {
+      GEOM::GEOM_IShapesOperations_var anIShapesOperations =
+        aGeomGen->GetIShapesOperations(aShape->GetStudyID());
+      if (!CORBA::is_nil(anIShapesOperations))
+      {
+        aTypeName = anIShapesOperations->GetShapeTypeString(aShape);
+      }
+    }
+  }
+
+  return CORBA::string_dup(aTypeName.ToCString());
+}
+
+
+const char* GEOM_Swig::getShapeTypeIcon(const char* IOR)
+{
+  GEOM::GEOM_Gen_var Geom = GeometryGUI::GetGeomGen();
+  if ( CORBA::is_nil( Geom ) )
+    return "None";
+
+  GEOM::GEOM_Object_var aShape = Geom->GetIORFromString(IOR);
+  TopoDS_Shape shape = ShapeReader.GetShape(Geom, aShape);
+
+  if( shape.IsNull() ) {
+    return "None" ;
+  }
+
+  switch (shape.ShapeType() )
+    {
+    case TopAbs_COMPOUND:
+      { return "ICON_OBJBROWSER_COMPOUND" ;}
+    case  TopAbs_COMPSOLID:
+      { return "ICON_OBJBROWSER_COMPSOLID" ;}
+    case TopAbs_SOLID:
+      { return "ICON_OBJBROWSER_SOLID" ;}
+    case TopAbs_SHELL:
+      { return "ICON_OBJBROWSER_SHELL" ;}
+    case TopAbs_FACE:
+      { return "ICON_OBJBROWSER_FACE" ;}
+    case TopAbs_WIRE:
+      { return "ICON_OBJBROWSER_WIRE" ;}
+    case TopAbs_EDGE:
+      { return "ICON_OBJBROWSER_EDGE" ;}
+    case TopAbs_VERTEX:
+      { return "ICON_OBJBROWSER_VERTEX" ;}
+    }
+
+  return "None";
+}
+
+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, bool theUpdated):
+      myEntry(theEntryArg), myMode(theModeArg), 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->SetDisplayMode(anIO, myMode);
+        if (myUpdateViewer)
+          aView->Repaint();
+      }
+      else if (OCCViewer_Viewer* occViewer = GetOCCViewer(anApp)) {
+        SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
+        if (soccViewer)
+          soccViewer->switchRepresentation(anIO, myMode, myUpdateViewer);
+      }
+    }
+  };
+
+  ProcessVoidEvent(new TEvent (theEntry, theMode, isUpdated));
+}
+
+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<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 {
+    QString 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;
+
+      GEOMToolsGUI::SetColor( myEntry, QColor( myRed, myGreen, myBlue), myUpdateViewer );
+      /*
+      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();
+        SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
+        if (soccViewer)
+          {
+            SALOME_Prs*   prs=      soccViewer->CreatePrs( myEntry.c_str() );
+            const SOCC_Prs* anOCCPrs = dynamic_cast<const SOCC_Prs*>( 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, isUpdated));
+}
+
+void GEOM_Swig::setIsos(const char* Entry, int nbU, int nbV, bool isUpdated )
+{
+  class TEvent: public SALOME_Event {
+    std::string myEntry;
+    int myNbU, myNbV;
+    bool myUpdateViewer;
+  public:
+    TEvent(const char* theEntry, int theNbU, int theNbV, bool theUpdated):
+      myEntry(theEntry), myNbU(theNbU), myNbV(theNbV), myUpdateViewer(theUpdated)
+    {}
+    virtual void Execute() {
+      SUIT_Application* app = SUIT_Session::session()->activeApplication();
+      if (!app) return;
+      SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
+      if (!study) return;
+
+      Handle(SALOME_InteractiveObject) anIO =
+        new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
+
+      if (SVTK_ViewWindow* aViewWindow = GetSVTKViewWindow(app)) {
+        SVTK_Viewer* aView = dynamic_cast<SVTK_Viewer*>(aViewWindow->getViewManager()->getViewModel());
+       SVTK_Prs* vtkPrs = dynamic_cast<SVTK_Prs*>( aView->CreatePrs( myEntry.c_str() ) );
+       if ( vtkPrs ) {
+         vtkActorCollection* anActors = vtkPrs->GetObjects();
+         anActors->InitTraversal();
+         GEOM_Actor* anActor = GEOM_Actor::SafeDownCast( anActors->GetNextActor() );
+         if ( anActor ) {
+           int aIsos[2]={myNbU,myNbV};
+           anActor->SetNbIsos(aIsos);
+           anActor->StoreIsoNumbers();
+           QString anIsos = QString("%1%2%3").arg(myNbU).arg(DIGIT_SEPARATOR).arg(myNbV);
+           int aMgrId = aView->getViewManager()->getGlobalId();
+           study->setObjectProperty(aMgrId, myEntry.c_str(), ISOS_PROP, anIsos);
+         }
+       }
+       
+       if (myUpdateViewer)
+          aView->Repaint();
+      }
+      else if (OCCViewer_Viewer* occViewer = GetOCCViewer(app)) {
+        Handle(AIS_InteractiveContext) ic = occViewer->getAISContext();
+        SOCC_Viewer* soccViewer = dynamic_cast<SOCC_Viewer*>(occViewer);
+        if (soccViewer) {
+         int aMgrId = soccViewer->getViewManager()->getGlobalId();
+          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() );
+             if ( !aSh.IsNull() ) {
+               Handle(AIS_Drawer) drawer = aSh->Attributes();
+               QVariant v = study->getObjectProperty( aMgrId, myEntry.c_str(), EDGE_WIDTH_PROP, QVariant() );
+               int width = v.isValid() ? v.toInt() : 1;
+               drawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbU) );
+               drawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, width, myNbV) );
+               aSh->storeIsoNumbers();
+                ic->SetLocalAttributes(aSh, drawer);
+               ic->Redisplay(aSh);
+               QString anIsos = QString("%1%2%3").arg(myNbU).arg(DIGIT_SEPARATOR).arg(myNbV);
+               study->setObjectProperty(aMgrId, myEntry.c_str(), ISOS_PROP, anIsos);
+             }
+            }
+          }
+        }
+      }
+    }
+  };
+
+  ProcessVoidEvent(new TEvent (Entry, nbU, nbV, 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);
+      }
+    }
+  };
+
+  ProcessVoidEvent(new TEvent (theEntry, transp, isUpdated));
+}
+
+
+class TInitGeomGenEvent: public SALOME_Event {
+public:
+  typedef bool TResult;
+  TResult myResult;
+  TInitGeomGenEvent() : myResult(false) {}
+  virtual void Execute() {
+    myResult = GeometryGUI::InitGeomGen();
+  }
+};
+bool GEOM_Swig::initGeomGen()
+{
+  return ProcessEvent(new TInitGeomGenEvent());
+}
+
+
+
+void GEOM_Swig::eraseGO (const char* Entry, bool allWindows)
+{
+  class TEvent: public SALOME_Event
+  {
+    std::string myEntry;
+    bool myFromAllWindows;
+  public:
+    TEvent(const char* theEntry, bool fromAllWindows):
+      myEntry(theEntry), myFromAllWindows(fromAllWindows)
+    {}
+    virtual void Execute()
+    {
+      SUIT_Application* app = SUIT_Session::session()->activeApplication();
+      if (!app) return;
+      SalomeApp_Study* ActiveStudy = dynamic_cast<SalomeApp_Study*>(app->activeStudy());
+      if (!ActiveStudy) return;
+
+      Handle (SALOME_InteractiveObject) aIO = new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", "");
+
+      GEOM_Displayer(ActiveStudy).Erase(aIO, true);
+      /*      if (myFromAllWindows) {
+        QPtrList<SUIT_ViewWindow> 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);
+          }*/
+    }
+
+    /*  private:
+    void EraseObject(SUIT_ViewWindow* theWin, Handle (SALOME_InteractiveObject) theIO)
+    {
+      if (theWin->getViewManager()->getType() == OCCViewer_Viewer::Type()){
+        OCCViewer_ViewWindow* vw = dynamic_cast<OCCViewer_ViewWindow*>( theWin );
+        if ( vw ) {
+          OCCViewer_ViewManager* vm = dynamic_cast<OCCViewer_ViewManager*>( vw->getViewManager() );
+          if ( vm ) {
+            SOCC_Viewer* aViewer = dynamic_cast<SOCC_Viewer*>(vm->getOCCViewer());
+            if (aViewer) {
+              SALOME_Prs* aPrs = aViewer->CreatePrs(myEntry.c_str());
+              if (aPrs) {
+                SALOME_OCCPrs* aOccPrs =  dynamic_cast<SALOME_OCCPrs*>(aPrs);
+                if (aOccPrs) {
+                  aViewer->Erase(aOccPrs);
+                  aViewer->Repaint();
+                }
+              }
+            }
+          }
+        }
+      } else if (theWin->getViewManager()->getType() == SVTK_Viewer::Type()){
+        SVTK_ViewWindow* aViewWindow = dynamic_cast<SVTK_ViewWindow*>( theWin );
+        if (aViewWindow) {
+          aViewWindow->Erase(theIO);
+        }
+      }
+      }*/
+
+  };
+  ProcessVoidEvent(new TEvent(Entry, allWindows));
+}
+
+
+
+void GEOM_Swig::setDeflection(const char* theEntry, float theDeflect)
+{
+  class TEvent: public SALOME_Event {
+    std::string myEntry;
+    float myParam;
+  public:
+    TEvent(const char* theEntryArg, float theParam):
+      myEntry(theEntryArg), myParam(theParam)
+    {}
+    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)) {
+        vtkActorCollection* aActors = aViewWindow->getRenderer()->GetActors();
+        aActors->InitTraversal();
+        while (vtkActor* aAct = aActors->GetNextActor()) {
+          if (GEOM_Actor* aGeomActor = dynamic_cast<GEOM_Actor*>(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()) {
+              TopoDS_Shape aSh = aShape->Shape();
+              if (!aSh.IsNull())
+                BRepTools::Clean(aSh);
+
+              aShape->SetOwnDeviationCoefficient( myParam );
+              aShape->SetOwnHLRDeviationAngle( 1.57 );
+              aContext->Redisplay(aShape);
+              return;
+            }
+          }
+        }
+      }
+    }
+  };
+
+  ProcessVoidEvent(new TEvent (theEntry, theDeflect));
+}
+
diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h
new file mode 100644 (file)
index 0000000..5f85b56
--- /dev/null
@@ -0,0 +1,63 @@
+// Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+// 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
+// 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.
+//
+// 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
+//
+
+// GEOM GEOMGUI : GUI for Geometry component
+// File   : libGEOM_Swig.h
+// Author : Nicolas REJNERI, Paul RASCLE
+//
+
+#ifndef GEOMETRYGUI_SWIG_HXX
+#define GEOMETRYGUI_SWIG_HXX
+
+#include "GEOM_GEOMGUI.hxx"
+
+// IDL Headers
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(GEOM_Gen)
+#include CORBA_SERVER_HEADER(SALOMEDS)
+#include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
+
+class GEOMGUI_EXPORT GEOM_Swig
+{
+public:
+  GEOM_Swig();
+  ~GEOM_Swig();
+
+  void createAndDisplayGO(const char* Entry, bool isUpdated = true);
+  void eraseGO(const char* Entry, bool allWindows);
+  void createAndDisplayFitAllGO(const char* Entry);
+  void UpdateViewer();
+  void setDisplayMode(const char* Entry, int mode, bool isUpdated = true);
+  void setVectorsMode(const char* Entry, bool isSet, bool isUpdated = true);
+  void setColor(const char* Entry, int red, int green, int blue, bool isUpdated = true);
+  void setTransparency(const char* Entry, float transp, bool isUpdated = true);
+  void setIsos(const char* Entry, int nbU, int nbV, bool isUpdated =true);
+  void setDeflection(const char* Entry, float deflect);
+
+  int  getIndexTopology(const char *SubEntry, const char *Entry);
+  const char* getShapeTypeString(const char *Entry);
+  const char* getShapeTypeIcon(const char *Ior);
+
+  bool initGeomGen();
+};
+
+#endif // GEOMETRYGUI_SWIG_HXX
index fc1b8fea470c16bca415252410770836197d20cd..6bf220c2d4553eea783b191716153c0ff4146ac3 100644 (file)
 //
 %module libGEOM_Swig
 
-%include "GeometryGUI_Swig.i"
+%{
+#include "libGEOM_Swig.h"
+%}
+
+/*
+  managing C++ exception in the Python API
+*/
+%exception
+{
+  class PyAllowThreadsGuard {
+   public:
+    // Py_BEGIN_ALLOW_THREADS
+    PyAllowThreadsGuard() { _save = PyEval_SaveThread(); }
+    // Py_END_ALLOW_THREADS
+    ~PyAllowThreadsGuard() { PyEval_RestoreThread(_save); }
+   private:
+    PyThreadState *_save;
+  };
+
+  PyAllowThreadsGuard guard;
+
+  $action
+}
+
+class GEOM_Swig
+{
+ public:
+  GEOM_Swig();
+  ~GEOM_Swig();
+
+  void createAndDisplayGO(const char* Entry, bool isUpdated =true);
+  void eraseGO(const char* Entry, bool allWindows);
+  void createAndDisplayFitAllGO(const char* Entry);
+  void UpdateViewer();
+  int  getIndexTopology(const char *SubEntry, const char *Entry);
+  const char* getShapeTypeString(const char *Entry);
+
+  void setDisplayMode(const char* Entry, int mode, bool isUpdated =true);
+  void setVectorsMode(const char* Entry, bool isSet, bool isUpdated =true);
+  void setColor(const char* Entry, int red, int green, int blue, bool isUpdated =true);
+  void setTransparency(const char* Entry, float transp, bool isUpdated =true);
+  void setIsos(const char* Entry, int nbU, int nbV, bool isUpdated =true);
+  void setDeflection(const char* Entry, float deflect);
+  const char* getShapeTypeIcon(const char *Ior);
+
+  bool initGeomGen();
+};