0021827: [CEA 650] TUI setColor on an object displayed in wireframe is ignored

This commit is contained in:
vsr 2012-09-04 05:09:12 +00:00
parent 6c588d710b
commit 506a331dc5
8 changed files with 299 additions and 224 deletions

View File

@ -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();
};

View File

@ -35,8 +35,6 @@ salomeinclude_HEADERS = \
GEOM_Displayer.h \ GEOM_Displayer.h \
GEOMGUI_OCCSelector.h \ GEOMGUI_OCCSelector.h \
GEOMGUI_Selection.h \ GEOMGUI_Selection.h \
GeometryGUI_Swig.hxx \
GeometryGUI_Swig.i \
GEOM_GEOMGUI.hxx GEOM_GEOMGUI.hxx
dist_libGEOM_la_SOURCES = \ dist_libGEOM_la_SOURCES = \
@ -44,8 +42,7 @@ dist_libGEOM_la_SOURCES = \
GEOMGUI.cxx \ GEOMGUI.cxx \
GEOM_Displayer.cxx \ GEOM_Displayer.cxx \
GEOMGUI_OCCSelector.cxx \ GEOMGUI_OCCSelector.cxx \
GEOMGUI_Selection.cxx \ GEOMGUI_Selection.cxx
GeometryGUI_Swig.cxx
MOC_FILES = \ MOC_FILES = \
GeometryGUI_moc.cxx GeometryGUI_moc.cxx

View File

@ -30,12 +30,16 @@
#include "GEOM_ToolsGUI.hxx" #include "GEOM_ToolsGUI.hxx"
#include <GEOMGUI.h> #include <GEOMGUI.h>
#include <SALOMEDSClient.hxx> #include <SALOMEDSClient.hxx>
class GEOM_Displayer; class GEOM_Displayer;
class SALOME_View; class SALOME_View;
class SALOME_ListIO; class SALOME_ListIO;
class SalomeApp_Study;
class SVTK_View;
class QColor;
class Handle_SALOME_InteractiveObject;
class Handle_AIS_InteractiveContext;
#include <QList> #include <QList>
@ -54,6 +58,8 @@ public:
enum ActionType { SHOWDLG, INCR, DECR }; enum ActionType { SHOWDLG, INCR, DECR };
static void SetColor( const QString&, const QColor&, bool );
private: private:
// Import and export topology methods // Import and export topology methods
bool Import(); bool Import();
@ -89,6 +95,18 @@ private:
_PTR(Study), _PTR(Study),
QList<SALOME_View*>, QList<SALOME_View*>,
GEOM_Displayer* ); 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 #endif // GEOMTOOLSGUI_H

View File

@ -267,88 +267,192 @@ void GEOMToolsGUI::OnDisableAutoColor()
return; return;
aMainObject->SetAutoColor( false ); 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() void GEOMToolsGUI::OnColor()
{ {
SALOME_ListIO selected; // get active application
SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() ); 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() ); SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
if ( app && appStudy ) { if ( !appStudy ) return;
// get selection manager
LightApp_SelectionMgr* aSelMgr = app->selectionMgr(); LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
if ( aSelMgr ) { if ( !aSelMgr ) return;
// get selection
SALOME_ListIO selected;
aSelMgr->selectedObjects( selected ); aSelMgr->selectedObjects( selected );
if ( !selected.IsEmpty() ) { if ( selected.IsEmpty() ) return;
// get active view
SUIT_ViewWindow* window = app->desktop()->activeWindow(); SUIT_ViewWindow* window = app->desktop()->activeWindow();
bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() ); bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() ); bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
// get view id
int mgrId = window->getViewManager()->getGlobalId(); int mgrId = window->getViewManager()->getGlobalId();
if ( isVTK ) { if ( isVTK ) {
SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window ); SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
if ( !vtkVW ) if ( !vtkVW ) return;
return;
// get initial color (use first object from selection)
SVTK_View* aView = vtkVW->getView(); SVTK_View* aView = vtkVW->getView();
QColor initcolor = aView->GetColor( selected.First() ); QColor color = aView->GetColor( selected.First() );
QColor c = QColorDialog::getColor( initcolor, app->desktop() ); QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), COLOR_PROP, color );
if ( c.isValid() ) {
// 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(); SUIT_OverrideCursor();
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
QString matProp; GEOMToolsGUI::setVtkColor( appStudy, mgrId, aView, It.Value(), color );
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 ) { else if ( isOCC ) {
// find AIS interactive object (for first item in selection)
Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( selected.First() ); Handle(AIS_InteractiveObject) io = GEOMBase::GetAIS( selected.First() );
if ( !io.IsNull() ) { if ( io.IsNull() ) return;
// get initial color (use first object from selection)
Quantity_Color aColor; Quantity_Color aColor;
io->Color( aColor ); io->Color( aColor );
QColor ic = QColor((int )( aColor.Red() * 255.0 ), QColor color = QColor((int)( aColor.Red() * 255.0 ),
(int)( aColor.Green() * 255.0 ), (int)( aColor.Green() * 255.0 ),
(int)( aColor.Blue() * 255.0 )); (int)( aColor.Blue() * 255.0 ));
QVariant v = appStudy->getObjectProperty( mgrId, selected.First()->getEntry(), COLOR_PROP, color );
QVariant v = appStudy->getObjectProperty(mgrId,selected.First()->getEntry(), COLOR_PROP, ic); // show Choose Color dialog box
color = QColorDialog::getColor( v.value<QColor>(), app->desktop() );
if ( !color.isValid() ) return;
QColor initcolor = v.value<QColor>(); // iterate through list of objects and assign new color
QColor c = QColorDialog::getColor( initcolor, app->desktop() );
if ( c.isValid() ) {
SUIT_OverrideCursor(); 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() ); OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*> ( window->getViewManager()->getViewModel() );
Handle (AIS_InteractiveContext) ic = vm->getAISContext(); Handle (AIS_InteractiveContext) ic = vm->getAISContext();
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) { 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; QString matProp;
matProp = appStudy->getObjectProperty(mgrId,It.Value()->getEntry(), MATERIAL_PROP, matProp).toString(); matProp = study->getObjectProperty( mgrId, IO->getEntry(), MATERIAL_PROP, matProp ).toString();
Material_Model material; Material_Model material;
material.fromProperties( matProp ); 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
// 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) ) ) { if ( io->IsKind( STANDARD_TYPE(AIS_Shape) ) ) {
TopoDS_Shape theShape = Handle(AIS_Shape)::DownCast( io )->Shape(); TopoDS_Shape theShape = Handle(AIS_Shape)::DownCast( io )->Shape();
bool onlyVertex = (theShape.ShapeType() == TopAbs_VERTEX || GEOM_Displayer::isCompoundOfVertices( theShape )); bool onlyVertex = (theShape.ShapeType() == TopAbs_VERTEX || GEOM_Displayer::isCompoundOfVertices( theShape ));
if ( onlyVertex ) { if ( onlyVertex ) {
// Set color for a point // set color for a point
Handle(AIS_Drawer) aCurDrawer = io->Attributes(); Handle(AIS_Drawer) aCurDrawer = io->Attributes();
Handle(Prs3d_PointAspect) aCurPointAspect = aCurDrawer->PointAspect(); Handle(Prs3d_PointAspect) aCurPointAspect = aCurDrawer->PointAspect();
Quantity_Color aCurColor; Quantity_Color aCurColor;
@ -361,13 +465,11 @@ void GEOMToolsGUI::OnColor()
else { else {
Standard_Integer aWidth, aHeight; Standard_Integer aWidth, aHeight;
aCurPointAspect->GetTextureSize( aWidth, aHeight ); aCurPointAspect->GetTextureSize( aWidth, aHeight );
#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1 #if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
Handle(TColStd_HArray1OfByte) aTexture = aCurPointAspect->GetTexture(); Handle(TColStd_HArray1OfByte) aTexture = aCurPointAspect->GetTexture();
#else #else
Handle(Graphic3d_HArray1OfBytes) aTexture = aCurPointAspect->GetTexture(); Handle(Graphic3d_HArray1OfBytes) aTexture = aCurPointAspect->GetTexture();
#endif #endif
aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aColor, 1, aWidth, aHeight, aTexture ) ); aCurDrawer->SetPointAspect( new Prs3d_PointAspect( aColor, 1, aWidth, aHeight, aTexture ) );
} }
ic->SetLocalAttributes( io, aCurDrawer, Standard_False ); ic->SetLocalAttributes( io, aCurDrawer, Standard_False );
@ -381,36 +483,23 @@ void GEOMToolsGUI::OnColor()
aGAISShape->storeBoundaryColors(); aGAISShape->storeBoundaryColors();
} }
appStudy->setObjectProperty(mgrId,It.Value()->getEntry(), COLOR_PROP, c);
io->Redisplay( Standard_True ); io->Redisplay( Standard_True );
study->setObjectProperty( mgrId, IO->getEntry(), COLOR_PROP, color );
}
// store color to GEOM_Object // store color to GEOM_Object
_PTR(Study) aStudy = appStudy->studyDS(); _PTR(Study) aStudy = study->studyDS();
_PTR(SObject) aSObject( aStudy->FindObjectID( It.Value()->getEntry() ) ); _PTR(SObject) aSObject( aStudy->FindObjectID( IO->getEntry() ) );
GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object_var anObject =
GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject)); GEOM::GEOM_Object::_narrow(GeometryGUI::ClientSObjectToObject(aSObject));
SALOMEDS::Color aSColor; SALOMEDS::Color aSColor;
aSColor.R = (double)c.red() / 255.0; aSColor.R = (double)color.red() / 255.0;
aSColor.G = (double)c.green() / 255.0; aSColor.G = (double)color.green() / 255.0;
aSColor.B = (double)c.blue() / 255.0; aSColor.B = (double)color.blue() / 255.0;
anObject->SetColor( aSColor ); anObject->SetColor( aSColor );
anObject->SetAutoColor( false ); anObject->SetAutoColor( false );
} }
} // for
ic->UpdateCurrentViewer();
GeometryGUI::Modified();
} // if c.isValid()
} // first IO is not null
} // if ( isOCC )
} // if ( selection not empty )
}
}
app->updateActions(); //SRN: To update a Save button in the toolbar
}
void GEOMToolsGUI::OnTexture() void GEOMToolsGUI::OnTexture()
{ {

View File

@ -17,14 +17,6 @@
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # 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 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 # Step 2: build the dynamic library from cpp built source files and
# dependant libraries. # 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 | # dependant libs |
# #
# The file libGEOM_Swig.py will be installed to the # The files libGEOM_Swig.py and _libGEOM_Swig.so will be installed to the
# <prefix>/bin/salome directory.
# The library _libGEOM_Swig.so will be installed to the
# <prefix>/lib/python<version>/site-package/salome directory. # <prefix>/lib/python<version>/site-package/salome directory.
# #
SWIG_FLAGS = @SWIG_FLAGS@ -I$(srcdir) -I$(srcdir)/../GEOMGUI SWIG_FLAGS = @SWIG_FLAGS@ -I$(srcdir) -I$(srcdir)/../GEOMGUI
SWIG_SOURCES = libGEOM_Swig.i SWIG_SOURCES = libGEOM_Swig.i
salomeinclude_HEADERS = $(SWIG_SOURCES) libGEOM_Swig.h
salomepython_PYTHON = libGEOM_Swig.py salomepython_PYTHON = libGEOM_Swig.py
salomepyexec_LTLIBRARIES = _libGEOM_Swig.la salomepyexec_LTLIBRARIES = _libGEOM_Swig.la
libGEOM_Swig.py: swig_wrap.cpp _libGEOM_Swig_la_SOURCES = $(SWIG_SOURCES) libGEOM_Swig.h libGEOM_Swig.cxx
BUILT_SOURCES = swig_wrap.cpp nodist__libGEOM_Swig_la_SOURCES = swig_wrap.cpp
_libGEOM_Swig_la_SOURCES = $(SWIG_SOURCES)
nodist__libGEOM_Swig_la_SOURCES = $(BUILT_SOURCES)
salomeinclude_HEADERS = $(SWIG_SOURCES)
_libGEOM_Swig_la_CPPFLAGS = \ _libGEOM_Swig_la_CPPFLAGS = \
$(QT_INCLUDES) \ $(QT_INCLUDES) \
@ -73,16 +61,22 @@ _libGEOM_Swig_la_CPPFLAGS = \
$(GUI_CXXFLAGS) \ $(GUI_CXXFLAGS) \
$(CORBA_CXXFLAGS) \ $(CORBA_CXXFLAGS) \
$(CORBA_INCLUDES) \ $(CORBA_INCLUDES) \
-I$(srcdir)/../GEOMClient \
-I$(srcdir)/../OBJECT \
-I$(srcdir)/../GEOMGUI \ -I$(srcdir)/../GEOMGUI \
-I$(srcdir)/../GEOMToolsGUI \
-I$(top_builddir)/idl -I$(top_builddir)/idl
_libGEOM_Swig_la_LDFLAGS = -module _libGEOM_Swig_la_LDFLAGS = -module
_libGEOM_Swig_la_LIBADD = \ _libGEOM_Swig_la_LIBADD = \
../GEOMGUI/libGEOM.la \ ../GEOMGUI/libGEOM.la \
../GEOMToolsGUI/libGEOMToolsGUI.la \
$(PYTHON_LIBS) $(PYTHON_LIBS)
swig_wrap.cpp : $(SWIG_SOURCES) swig_wrap.cpp : $(SWIG_SOURCES)
$(SWIG) $(SWIG_FLAGS) -o $@ $< $(SWIG) $(SWIG_FLAGS) -o $@ $<
libGEOM_Swig.py: swig_wrap.cpp
CLEANFILES = swig_wrap.cpp libGEOM_Swig.py CLEANFILES = swig_wrap.cpp libGEOM_Swig.py

View File

@ -21,12 +21,13 @@
// //
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : GeometryGUI_Swig.cxx // File : libGEOM_Swig.cxx
// Author : Nicolas REJNERI, Paul RASCLE // Author : Nicolas REJNERI, Paul RASCLE
// //
#include "GeometryGUI_Swig.hxx" #include "libGEOM_Swig.h"
#include "GeometryGUI.h" #include "GeometryGUI.h"
#include "GEOMToolsGUI.h"
#include "SUIT_Desktop.h" #include "SUIT_Desktop.h"
#include "SUIT_Session.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) void GEOM_Swig::setColor(const char* theEntry, int red, int green, int blue, bool isUpdated)
{ {
class TEvent: public SALOME_Event { class TEvent: public SALOME_Event {
std::string myEntry; QString myEntry;
int myRed; int myRed;
int myGreen; int myGreen;
int myBlue; 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(); SUIT_Application* anApp = SUIT_Session::session()->activeApplication();
if (!anApp) return; if (!anApp) return;
GEOMToolsGUI::SetColor( myEntry, QColor( myRed, myGreen, myBlue), myUpdateViewer );
/*
Handle(SALOME_InteractiveObject) anIO = Handle(SALOME_InteractiveObject) anIO =
new SALOME_InteractiveObject(myEntry.c_str(), "GEOM", ""); 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(); if (myUpdateViewer) occViewer->update();
} }
} }*/
} }
}; };
ProcessVoidEvent(new TEvent(theEntry, red, green, blue, isUpdated)); ProcessVoidEvent(new TEvent(theEntry, red, green, blue, isUpdated));

View File

@ -21,9 +21,10 @@
// //
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : GeometryGUI_Swig.hxx // File : libGEOM_Swig.h
// Author : Nicolas REJNERI, Paul RASCLE // Author : Nicolas REJNERI, Paul RASCLE
// //
#ifndef GEOMETRYGUI_SWIG_HXX #ifndef GEOMETRYGUI_SWIG_HXX
#define GEOMETRYGUI_SWIG_HXX #define GEOMETRYGUI_SWIG_HXX

View File

@ -26,5 +26,51 @@
// //
%module libGEOM_Swig %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();
};