Implementation a selection of a mesh entries from python.

This commit is contained in:
rnv 2017-08-02 15:10:31 +03:00
parent 4a591503f8
commit 7c1bf48314
3 changed files with 114 additions and 20 deletions

View File

@ -49,6 +49,7 @@
#include <SalomeApp_Application.h> #include <SalomeApp_Application.h>
#include <LightApp_SelectionMgr.h> #include <LightApp_SelectionMgr.h>
#include <SVTK_RenderWindowInteractor.h> #include <SVTK_RenderWindowInteractor.h>
#include <VTKViewer_Algorithm.h>
// OCCT includes // OCCT includes
#include <TopAbs.hxx> #include <TopAbs.hxx>
@ -62,6 +63,10 @@
#include CORBA_SERVER_HEADER(SMESH_Gen) #include CORBA_SERVER_HEADER(SMESH_Gen)
#include CORBA_SERVER_HEADER(SMESH_Hypothesis) #include CORBA_SERVER_HEADER(SMESH_Hypothesis)
// VTK includes
#include <vtkActorCollection.h>
#include <vtkRenderer.h>
static CORBA::ORB_var anORB; static CORBA::ORB_var anORB;
namespace namespace
@ -892,17 +897,18 @@ public:
{} {}
virtual void Execute() virtual void Execute()
{ {
SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI();
if( !aSMESHGUI )
return;
LightApp_SelectionMgr* selMgr = SMESH::GetSelectionMgr( aSMESHGUI ); LightApp_SelectionMgr* selMgr = 0;
SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
if( anApp )
selMgr = dynamic_cast<LightApp_SelectionMgr*>( anApp->selectionMgr() );
if( !selMgr ) if( !selMgr )
return; return;
selMgr->clearFilters(); selMgr->clearFilters();
SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( aSMESHGUI ); SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
if(!aViewWindow) if(!aViewWindow)
return; return;
@ -960,26 +966,106 @@ void SMESH_Swig::select( const char* id, int id1, bool append ) {
class TGetSelectionModeEvent : public SALOME_Event class TGetSelectionModeEvent : public SALOME_Event
{ {
public: public:
typedef int TResult; typedef SelectionMode TResult;
TResult myResult; TResult myResult;
TGetSelectionModeEvent() : myResult( -1 ) {} TGetSelectionModeEvent() : myResult( Undefined ) {}
virtual void Execute() virtual void Execute()
{ {
SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI(); SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( );
if( !aSMESHGUI )
return;
SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( aSMESHGUI );
if(!aViewWindow) if(!aViewWindow)
return; return;
myResult = aViewWindow->SelectionMode(); myResult = (SelectionMode) aViewWindow->SelectionMode();
} }
}; };
/*! /*!
\brief Get selection mode of the active VTK View window. \brief Get selection mode of the active VTK View window.
*/ */
int SMESH_Swig::getSelectionMode() { SelectionMode SMESH_Swig::getSelectionMode() {
return ProcessEvent( new TGetSelectionModeEvent() ); return ProcessEvent( new TGetSelectionModeEvent() );
} }
/*!
* Event to set selection mode
*/
class TSetSelectionModeEvent : public SALOME_Event
{
SelectionMode mySelectionMode;
public:
TSetSelectionModeEvent(const SelectionMode selectionMode) :
mySelectionMode(selectionMode)
{}
virtual void Execute()
{
SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
if(!aViewWindow)
return;
Selection_Mode prevMode = aViewWindow->SelectionMode();
bool changePointRepresentation = ( prevMode == NodeSelection && mySelectionMode != Node ) ||
(prevMode != NodeSelection && mySelectionMode == Node);
if( changePointRepresentation ) {
vtkRenderer *aRenderer = aViewWindow->getRenderer();
VTK::ActorCollectionCopy aCopy(aRenderer->GetActors());
vtkActorCollection *aCollection = aCopy.GetActors();
aCollection->InitTraversal();
while(vtkActor *anAct = aCollection->GetNextActor()){
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
if(anActor->GetVisibility()){
anActor->SetPointRepresentation(mySelectionMode == Node);
}
}
}
}
aViewWindow->SetSelectionMode(mySelectionMode);
}
};
void SMESH_Swig::setSelectionMode(SelectionMode selectionMode){
ProcessVoidEvent( new TSetSelectionModeEvent( selectionMode ) );
}
class TGetSelectedEvent : public SALOME_Event
{
public:
typedef std::vector<int> TResult;
TResult myResult;
const char* myId;
TGetSelectedEvent( const char* id) :
myResult( std::vector<int>() ),
myId(id)
{}
virtual void Execute()
{
SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow();
if( !aViewWindow )
return;
SVTK_Selector* aSelector = aViewWindow->GetSelector();
if( !aSelector )
return;
SMESH_Actor* anActor = SMESH::FindActorByEntry( myId );
if ( !anActor || !anActor->hasIO() )
return;
TColStd_IndexedMapOfInteger aMapIndex;
aSelector->GetIndex(anActor->getIO(),aMapIndex);
for( int i = 1; i <= aMapIndex.Extent(); i++ )
myResult.push_back( aMapIndex( i ) );
}
};
std::vector<int> SMESH_Swig::getSelected( const char* Mesh_Entry ) {
return ProcessEvent( new TGetSelectedEvent(Mesh_Entry) );
}

View File

@ -45,8 +45,9 @@
#include <SVTK_Selection.h> #include <SVTK_Selection.h>
enum typedef enum
{ {
Undefined = -1,
Node = NodeSelection, Node = NodeSelection,
Cell = CellSelection, Cell = CellSelection,
EdgeOfCell = EdgeOfCellSelection, EdgeOfCell = EdgeOfCellSelection,
@ -56,7 +57,7 @@ enum
Actor = ActorSelection, Actor = ActorSelection,
Elem0D = Elem0DSelection, Elem0D = Elem0DSelection,
Ball = BallSelection Ball = BallSelection
}; } SelectionMode;
typedef struct typedef struct
{ {
@ -128,8 +129,11 @@ public:
actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 ); actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 ); void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
void setSelectionMode( SelectionMode selectionMode );
std::vector<int> getSelected( const char* Mesh_Entry );
// --------------------- for the test purposes ----------------------- // --------------------- for the test purposes -----------------------
int getSelectionMode(); SelectionMode getSelectionMode();
void select( const char *id, std::vector<int> ids, bool append = false ); void select( const char *id, std::vector<int> ids, bool append = false );
void select( const char *id, int id1, bool append = false ); void select( const char *id, int id1, bool append = false );

View File

@ -55,9 +55,10 @@ namespace std {
/* Selection mode enumeration (corresponds to constants from the SALOME_Selection.h) */ /* Selection mode enumeration (corresponds to constants from the SALOME_Selection.h) */
enum enum SelectionMode
{ {
Node, Undefined = -1,
Node = 0,
Cell, Cell,
EdgeOfCell, EdgeOfCell,
Edge, Edge,
@ -131,8 +132,11 @@ class SMESH_Swig
actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 ); actorAspect GetActorAspect(const char* Mesh_Entry, int viewId = 0 );
void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 ); void SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId = 0 );
void setSelectionMode( SelectionMode selectionMode);
std::vector<int> getSelected( const char* Mesh_Entry );
// --------------------- for the test purposes ----------------------- // --------------------- for the test purposes -----------------------
int getSelectionMode(); SelectionMode getSelectionMode();
void select( const char *id, std::vector<int> ids, bool append = false ); void select( const char *id, std::vector<int> ids, bool append = false );
void select( const char *id, int id1, bool append = false ); void select( const char *id, int id1, bool append = false );