From 506a331dc5c43d7add77017401da049880b03cfa Mon Sep 17 00:00:00 2001 From: vsr Date: Tue, 4 Sep 2012 05:09:12 +0000 Subject: [PATCH] 0021827: [CEA 650] TUI setColor on an object displayed in wireframe is ignored --- src/GEOMGUI/GeometryGUI_Swig.i | 73 ---- src/GEOMGUI/Makefile.am | 5 +- src/GEOMToolsGUI/GEOMToolsGUI.h | 20 +- src/GEOMToolsGUI/GEOMToolsGUI_1.cxx | 349 +++++++++++------- src/GEOM_SWIG_WITHIHM/Makefile.am | 30 +- .../libGEOM_Swig.cxx} | 11 +- .../libGEOM_Swig.h} | 3 +- src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i | 48 ++- 8 files changed, 307 insertions(+), 232 deletions(-) delete mode 100644 src/GEOMGUI/GeometryGUI_Swig.i rename src/{GEOMGUI/GeometryGUI_Swig.cxx => GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx} (99%) rename src/{GEOMGUI/GeometryGUI_Swig.hxx => GEOM_SWIG_WITHIHM/libGEOM_Swig.h} (98%) diff --git a/src/GEOMGUI/GeometryGUI_Swig.i b/src/GEOMGUI/GeometryGUI_Swig.i deleted file mode 100644 index e9a4339ba..000000000 --- a/src/GEOMGUI/GeometryGUI_Swig.i +++ /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(); -}; diff --git a/src/GEOMGUI/Makefile.am b/src/GEOMGUI/Makefile.am index 2ac3a347b..71f187ae0 100644 --- a/src/GEOMGUI/Makefile.am +++ b/src/GEOMGUI/Makefile.am @@ -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 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI.h b/src/GEOMToolsGUI/GEOMToolsGUI.h index 4241124f6..d980f5ee1 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI.h +++ b/src/GEOMToolsGUI/GEOMToolsGUI.h @@ -30,12 +30,16 @@ #include "GEOM_ToolsGUI.hxx" #include - #include 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 @@ -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, 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 diff --git a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx index 64983d176..925585ca6 100644 --- a/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx +++ b/src/GEOMToolsGUI/GEOMToolsGUI_1.cxx @@ -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( 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( window ); + if ( !vtkVW ) return; + SVTK_View* aView = vtkVW->getView(); + + GEOMToolsGUI::setVtkColor( appStudy, mgrId, aView, IO, color ); + } + else if ( isOCC ) { + OCCViewer_Viewer* vm = dynamic_cast ( 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( 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( 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 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 ( 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( 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(), 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(), app->desktop() ); + if ( !color.isValid() ) return; + + // iterate through list of objects and assign new color + SUIT_OverrideCursor(); + OCCViewer_Viewer* vm = dynamic_cast ( 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; diff --git a/src/GEOM_SWIG_WITHIHM/Makefile.am b/src/GEOM_SWIG_WITHIHM/Makefile.am index e468bfb0d..132fff96d 100644 --- a/src/GEOM_SWIG_WITHIHM/Makefile.am +++ b/src/GEOM_SWIG_WITHIHM/Makefile.am @@ -17,14 +17,6 @@ # 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 -# /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 # /lib/python/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/GEOMGUI/GeometryGUI_Swig.cxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx similarity index 99% rename from src/GEOMGUI/GeometryGUI_Swig.cxx rename to src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx index 2c4529085..f423db40e 100644 --- a/src/GEOMGUI/GeometryGUI_Swig.cxx +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.cxx @@ -21,12 +21,13 @@ // // GEOM GEOMGUI : GUI for Geometry component -// File : GeometryGUI_Swig.cxx +// File : libGEOM_Swig.cxx // Author : Nicolas REJNERI, Paul RASCLE // -#include "GeometryGUI_Swig.hxx" +#include "libGEOM_Swig.h" #include "GeometryGUI.h" +#include "GEOMToolsGUI.h" #include "SUIT_Desktop.h" #include "SUIT_Session.h" @@ -450,7 +451,7 @@ void GEOM_Swig::setVectorsMode(const char* theEntry, bool isOn, bool isUpdated) void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, bool isUpdated) { class TEvent: public SALOME_Event { - std::string myEntry; + QString myEntry; int myRed; int myGreen; int myBlue; @@ -463,6 +464,8 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, boo 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", ""); @@ -496,7 +499,7 @@ void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, boo } if (myUpdateViewer) occViewer->update(); } - } + }*/ } }; ProcessVoidEvent(new TEvent(theEntry, red, green, blue, isUpdated)); diff --git a/src/GEOMGUI/GeometryGUI_Swig.hxx b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h similarity index 98% rename from src/GEOMGUI/GeometryGUI_Swig.hxx rename to src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h index 3ddb4b6da..5f85b568b 100644 --- a/src/GEOMGUI/GeometryGUI_Swig.hxx +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.h @@ -21,9 +21,10 @@ // // GEOM GEOMGUI : GUI for Geometry component -// File : GeometryGUI_Swig.hxx +// File : libGEOM_Swig.h // Author : Nicolas REJNERI, Paul RASCLE // + #ifndef GEOMETRYGUI_SWIG_HXX #define GEOMETRYGUI_SWIG_HXX diff --git a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i index fc1b8fea4..6bf220c2d 100644 --- a/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i +++ b/src/GEOM_SWIG_WITHIHM/libGEOM_Swig.i @@ -26,5 +26,51 @@ // %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(); +}; -- 2.39.2