mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-13 02:00:35 +05:00
0021827: [CEA 650] TUI setColor on an object displayed in wireframe is ignored
This commit is contained in:
parent
6c588d710b
commit
506a331dc5
@ -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();
|
||||
};
|
@ -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
|
||||
|
@ -30,12 +30,16 @@
|
||||
#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
|
||||
|
@ -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 ));
|
||||
if ( !appStudy ) return;
|
||||
|
||||
QVariant v = appStudy->getObjectProperty(mgrId,selected.First()->getEntry(), COLOR_PROP, ic);
|
||||
// get selection manager
|
||||
LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
|
||||
if ( !aSelMgr ) return;
|
||||
|
||||
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
|
||||
// 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() );
|
||||
|
||||
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 );
|
||||
// get view id
|
||||
int mgrId = window->getViewManager()->getGlobalId();
|
||||
|
||||
#if OCC_VERSION_LARGE > 0x06040000 // Porting to OCCT6.5.1
|
||||
Handle(TColStd_HArray1OfByte) aTexture = aCurPointAspect->GetTexture();
|
||||
#else
|
||||
Handle(Graphic3d_HArray1OfBytes) aTexture = aCurPointAspect->GetTexture();
|
||||
#endif
|
||||
if ( isVTK ) {
|
||||
SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
|
||||
if ( !vtkVW ) return;
|
||||
|
||||
aCurDrawer->SetPointAspect(new Prs3d_PointAspect(aColor, 1, aWidth, aHeight, aTexture));
|
||||
}
|
||||
ic->SetLocalAttributes(io, aCurDrawer, Standard_False);
|
||||
}
|
||||
}
|
||||
// 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 );
|
||||
|
||||
io->SetColor( aColor );
|
||||
if ( io->IsKind( STANDARD_TYPE(GEOM_AISShape) ) ) {
|
||||
Handle(GEOM_AISShape) aGAISShape = Handle(GEOM_AISShape)::DownCast( io );
|
||||
aGAISShape->SetShadingColor( aColor );
|
||||
aGAISShape->storeBoundaryColors();
|
||||
}
|
||||
// show Choose Color dialog box
|
||||
color = QColorDialog::getColor( v.value<QColor>(), app->desktop() );
|
||||
if ( !color.isValid() ) return;
|
||||
|
||||
appStudy->setObjectProperty(mgrId,It.Value()->getEntry(), COLOR_PROP, c);
|
||||
|
||||
io->Redisplay( Standard_True );
|
||||
// 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;
|
||||
|
||||
// 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));
|
||||
// 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;
|
||||
|
||||
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 )
|
||||
// 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;
|
||||
|
@ -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
|
||||
# <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
|
||||
|
||||
|
@ -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));
|
@ -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
|
||||
|
@ -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();
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user