X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESH_SWIG_WITHIHM%2FlibSMESH_Swig.cxx;h=4d7bb2ae15a422f0fbd123af8360d64118c4082d;hb=bd7477efc255f965c479d88d1be1ee3dbf4aa760;hp=1adb3d4f0178b5c68a78971b6725e57a43ae3fc3;hpb=c98d9fcd7f02c1f1f5c24dd3e709ed75228d66c4;p=modules%2Fsmesh.git diff --git a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx index 1adb3d4f0..4d7bb2ae1 100644 --- a/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx +++ b/src/SMESH_SWIG_WITHIHM/libSMESH_Swig.cxx @@ -35,6 +35,7 @@ #include #include #include +#include #include @@ -202,14 +203,13 @@ namespace void SetDomain(const char* theMeshOrSubMeshEntry, const char* theDomainEntry, - const SALOMEDS::Study_var& theStudy, const SALOMEDS::StudyBuilder_var& theStudyBuilder, long theRefOnAppliedDomainTag, const QString& theAppliedDomainMEN, const QString& theAppliedDomainICON) { - SALOMEDS::SObject_var aMeshOrSubMeshSO = theStudy->FindObjectID(theMeshOrSubMeshEntry); - SALOMEDS::SObject_var aHypothesisSO = theStudy->FindObjectID(theDomainEntry); + SALOMEDS::SObject_var aMeshOrSubMeshSO = KERNEL::getStudyServant()->FindObjectID(theMeshOrSubMeshEntry); + SALOMEDS::SObject_var aHypothesisSO = KERNEL::getStudyServant()->FindObjectID(theDomainEntry); if(!aMeshOrSubMeshSO->_is_nil() && !aHypothesisSO->_is_nil()){ //Find or Create Applied Hypothesis root @@ -245,12 +245,10 @@ namespace void SetHypothesis(const char* theMeshOrSubMeshEntry, const char* theDomainEntry, - const SALOMEDS::Study_var& theStudy, const SALOMEDS::StudyBuilder_var& theStudyBuilder) { SetDomain(theMeshOrSubMeshEntry, theDomainEntry, - theStudy, theStudyBuilder, SMESH::Tag_RefOnAppliedHypothesis, QObject::tr("SMESH_MEN_APPLIED_HYPOTHESIS"), @@ -262,12 +260,10 @@ namespace void SetAlgorithms(const char* theMeshOrSubMeshEntry, const char* theDomainEntry, - const SALOMEDS::Study_var& theStudy, const SALOMEDS::StudyBuilder_var& theStudyBuilder) { SetDomain(theMeshOrSubMeshEntry, theDomainEntry, - theStudy, theStudyBuilder, SMESH::Tag_RefOnAppliedAlgorithms, QObject::tr("SMESH_MEN_APPLIED_ALGORIHTMS"), @@ -302,7 +298,7 @@ SMESH_Swig::SMESH_Swig() } }; - MESSAGE("Constructeur"); + //MESSAGE("Constructeur"); if(CORBA::is_nil(anORB)) ProcessVoidEvent(new TEvent(anORB)); @@ -313,21 +309,15 @@ SMESH_Swig::SMESH_Swig() //=============================================================== void -SMESH_Swig::Init(int theStudyID) +SMESH_Swig::Init() { class TEvent: public SALOME_Event { - int myStudyID; - SALOMEDS::Study_var& myStudy; SALOMEDS::StudyBuilder_var& myStudyBuilder; SALOMEDS::SComponent_var& mySComponentMesh; public: - TEvent(int theStudyID, - SALOMEDS::Study_var& theStudy, - SALOMEDS::StudyBuilder_var& theStudyBuilder, + TEvent(SALOMEDS::StudyBuilder_var& theStudyBuilder, SALOMEDS::SComponent_var& theSComponentMesh): - myStudyID (theStudyID), - myStudy (theStudy), myStudyBuilder (theStudyBuilder), mySComponentMesh(theSComponentMesh) {} @@ -345,26 +335,22 @@ SMESH_Swig::Init(int theStudyID) SUIT_Application* anApplication = aSession->activeApplication(); SalomeApp_Application* anApp = dynamic_cast(anApplication); - SALOME_NamingService* aNamingService = anApp->namingService(); - CORBA::Object_var anObject = aNamingService->Resolve("/myStudyManager"); - SALOMEDS::StudyManager_var aStudyMgr = SALOMEDS::StudyManager::_narrow(anObject); - myStudy = aStudyMgr->GetStudyByID(myStudyID); + SALOMEDS::Study_var aStudy = KERNEL::getStudyServant(); SMESH::SMESH_Gen_var aSMESHGen = SMESHGUI::GetSMESHGen(); - aSMESHGen->SetCurrentStudy( myStudy.in() ); - myStudyBuilder = myStudy->NewBuilder(); + myStudyBuilder = aStudy->NewBuilder(); SALOMEDS::GenericAttribute_var anAttr; SALOMEDS::AttributeName_var aName; SALOMEDS::AttributePixMap_var aPixmap; - SALOMEDS::SComponent_var aSComponent = myStudy->FindComponent("SMESH"); + SALOMEDS::SComponent_var aSComponent = aStudy->FindComponent("SMESH"); if ( aSComponent->_is_nil() ) { - bool aLocked = myStudy->GetProperties()->IsLocked(); + bool aLocked = aStudy->GetProperties()->IsLocked(); if (aLocked) - myStudy->GetProperties()->SetLocked(false); + aStudy->GetProperties()->SetLocked(false); SMESHGUI* aSMESHGUI = SMESHGUI::GetSMESHGUI(); //SRN: BugID IPAL9186, load a SMESH gui if it hasn't been loaded @@ -387,13 +373,13 @@ SMESH_Swig::Init(int theStudyID) aPixmap->SetPixMap( "ICON_OBJBROWSER_SMESH" ); aPixmap->UnRegister(); - SALOMEDS::UseCaseBuilder_var useCaseBuilder = myStudy->GetUseCaseBuilder(); + SALOMEDS::UseCaseBuilder_var useCaseBuilder = KERNEL::getStudyServant()->GetUseCaseBuilder(); useCaseBuilder->SetRootCurrent(); useCaseBuilder->Append( aSComponent.in() ); myStudyBuilder->DefineComponentInstance(aSComponent,aSMESHGen); if (aLocked) - myStudy->GetProperties()->SetLocked(true); + KERNEL::getStudyServant()->GetProperties()->SetLocked(true); } mySComponentMesh = SALOMEDS::SComponent::_narrow(aSComponent); @@ -402,11 +388,9 @@ SMESH_Swig::Init(int theStudyID) } }; - MESSAGE("Init"); + //MESSAGE("Init"); - ProcessVoidEvent(new TEvent(theStudyID, - myStudy, - myStudyBuilder, + ProcessVoidEvent(new TEvent(myStudyBuilder, mySComponentMesh)); } @@ -414,17 +398,16 @@ SMESH_Swig::Init(int theStudyID) //=============================================================== SMESH_Swig::~SMESH_Swig() { - MESSAGE("Destructeur"); + //MESSAGE("Destructeur"); } //=============================================================== const char* SMESH_Swig::AddNewMesh(const char* theIOR) { - MESSAGE("AddNewMesh"); // VSR: added temporarily - to be removed - objects are published automatically by engine - SALOMEDS::SObject_var aSObject = myStudy->FindObjectIOR(theIOR); + SALOMEDS::SObject_var aSObject = KERNEL::getStudyServant()->FindObjectIOR(theIOR); if (aSObject->_is_nil()) { //Find or Create Hypothesis root @@ -456,8 +439,6 @@ const char* SMESH_Swig::AddNewMesh(const char* theIOR) //=============================================================== const char* SMESH_Swig::AddNewHypothesis(const char* theIOR) { - MESSAGE("AddNewHypothesis"); - SALOMEDS::SObject_var aSObject = ::AddHypothesis(theIOR, mySComponentMesh, myStudyBuilder); @@ -471,8 +452,6 @@ const char* SMESH_Swig::AddNewHypothesis(const char* theIOR) //=============================================================== const char* SMESH_Swig::AddNewAlgorithms(const char* theIOR) { - MESSAGE("AddNewAlgorithms"); - SALOMEDS::SObject_var aSObject = ::AddAlgorithms(theIOR, mySComponentMesh, myStudyBuilder); @@ -487,8 +466,8 @@ const char* SMESH_Swig::AddNewAlgorithms(const char* theIOR) void SMESH_Swig::SetShape(const char* theShapeEntry, const char* theMeshEntry) { - SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID( theShapeEntry ); - SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID( theMeshEntry ); + SALOMEDS::SObject_var aGeomShapeSO = KERNEL::getStudyServant()->FindObjectID( theShapeEntry ); + SALOMEDS::SObject_var aMeshSO = KERNEL::getStudyServant()->FindObjectID( theMeshEntry ); if(!aMeshSO->_is_nil() && !aGeomShapeSO->_is_nil()){ SALOMEDS::SObject_var aSObject = myStudyBuilder->NewObjectToTag(aMeshSO, SMESH::Tag_RefOnShape); @@ -506,7 +485,6 @@ void SMESH_Swig::SetHypothesis(const char* theMeshOrSubMeshEntry, { ::SetHypothesis(theMeshOrSubMeshEntry, theDomainEntry, - myStudy, myStudyBuilder); } @@ -517,7 +495,6 @@ void SMESH_Swig::SetAlgorithms(const char* theMeshOrSubMeshEntry, { ::SetAlgorithms(theMeshOrSubMeshEntry, theDomainEntry, - myStudy, myStudyBuilder); } @@ -526,7 +503,7 @@ void SMESH_Swig::SetAlgorithms(const char* theMeshOrSubMeshEntry, void SMESH_Swig::UnSetHypothesis(const char* theDomainEntry) { - SALOMEDS::SObject_var aDomainSO = myStudy->FindObjectID(theDomainEntry); + SALOMEDS::SObject_var aDomainSO = KERNEL::getStudyServant()->FindObjectID(theDomainEntry); if(!aDomainSO->_is_nil()) myStudyBuilder->RemoveObject(aDomainSO); } @@ -535,7 +512,7 @@ const char* SMESH_Swig::AddSubMesh(const char* theMeshEntry, const char* theSubMeshIOR, int theShapeType) { - SALOMEDS::SObject_var aMeshSO = myStudy->FindObjectID(theMeshEntry); + SALOMEDS::SObject_var aMeshSO = KERNEL::getStudyServant()->FindObjectID(theMeshEntry); if(!aMeshSO->_is_nil()) { long aShapeTag; QString aSubMeshName; @@ -598,11 +575,11 @@ const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry, const char* theSubMeshIOR, int ShapeType) { - SALOMEDS::SObject_var aGeomShapeSO = myStudy->FindObjectID(theGeomShapeEntry); + SALOMEDS::SObject_var aGeomShapeSO = KERNEL::getStudyServant()->FindObjectID(theGeomShapeEntry); if(!aGeomShapeSO->_is_nil()) { const char * aSubMeshEntry = AddSubMesh(theMeshEntry,theSubMeshIOR,ShapeType); - SALOMEDS::SObject_var aSubMeshSO = myStudy->FindObjectID(aSubMeshEntry); + SALOMEDS::SObject_var aSubMeshSO = KERNEL::getStudyServant()->FindObjectID(aSubMeshEntry); if ( !aSubMeshSO->_is_nil()) { SetShape( theGeomShapeEntry, aSubMeshEntry ); CORBA::String_var aString = aSubMeshSO->GetID(); @@ -615,6 +592,148 @@ const char* SMESH_Swig::AddSubMeshOnShape(const char* theMeshEntry, return ""; } +/*! + \brief Gets window with specified identifier + \internal + \param id window identifier + \return pointer on the window +*/ + +SUIT_ViewWindow* getWnd( const int id ) +{ + SUIT_ViewWindow* resWnd = 0; + SUIT_Session* aSession = SUIT_Session::session(); + SUIT_Application* anApplication = aSession->activeApplication(); + SalomeApp_Application* app = dynamic_cast(anApplication); + if ( app ) { + ViewManagerList vmlist = app->viewManagers(); + foreach( SUIT_ViewManager* vm, vmlist ) { + QVector vwlist = vm->getViews(); + foreach ( SUIT_ViewWindow* vw, vwlist ) { + if ( id == vw->getId() ) { + resWnd = vw; + break; + } + } + } + } + return resWnd; +} + +class TGetActorAspect: public SALOME_Event +{ +public: + typedef actorAspect TResult; + TResult myResult; + const char* _entry; + int _wid; + TGetActorAspect( const char* Mesh_Entry, int viewId ) + { + _entry = Mesh_Entry; + _wid = viewId; + } + virtual void Execute() + { + SMESH_Actor* anActor; + if (_wid) + { + SUIT_ViewWindow* w = getWnd(_wid); + anActor = SMESH::FindActorByEntry( w, _entry ); + } + else + anActor = SMESH::FindActorByEntry( _entry ); + if ( !anActor ) + { + MESSAGE("GetActorAspect: no actor corresponding to: " << _entry); + return; + } + anActor->GetSufaceColor(myResult.surfaceColor.r, + myResult.surfaceColor.g, + myResult.surfaceColor.b, + myResult.surfaceColor.delta); + anActor->GetVolumeColor(myResult.volumeColor.r, + myResult.volumeColor.g, + myResult.volumeColor.b, + myResult.volumeColor.delta); + anActor->GetEdgeColor(myResult.edgeColor.r, + myResult.edgeColor.g, + myResult.edgeColor.b); + anActor->GetNodeColor(myResult.nodeColor.r, + myResult.nodeColor.g, + myResult.nodeColor.b); + myResult.opacity= anActor->GetOpacity(); + MESSAGE("opacity: " << myResult.opacity); + } +}; + +actorAspect SMESH_Swig::GetActorAspect( const char* Mesh_Entry, int viewId ) +{ + return ProcessEvent(new TGetActorAspect( Mesh_Entry, viewId)); +} + +void SMESH_Swig::SetActorAspect( const actorAspect& actorPres, const char* Mesh_Entry, int viewId ) +{ + class TSetActorAspect: public SALOME_Event + { + public: + const char* _entry; + actorAspect _actorPres; + int _wid; + TSetActorAspect(const actorAspect& actorPres, const char* Mesh_Entry, int viewId ) + { + _entry = Mesh_Entry; + _actorPres = actorPres; + _wid = viewId; + } + virtual void Execute() + { + SMESH_Actor* anActor; + if (_wid) + { + SUIT_ViewWindow* w = getWnd(_wid); + anActor = SMESH::FindActorByEntry( w, _entry ); + } + else + anActor = SMESH::FindActorByEntry( _entry ); + if ( !anActor ) + { + MESSAGE("SetActorAspect: no actor corresponding to: " << _entry); + return; + } + anActor->SetSufaceColor(_actorPres.surfaceColor.r, + _actorPres.surfaceColor.g, + _actorPres.surfaceColor.b, + _actorPres.surfaceColor.delta); + anActor->SetVolumeColor(_actorPres.volumeColor.r, + _actorPres.volumeColor.g, + _actorPres.volumeColor.b, + _actorPres.volumeColor.delta); + anActor->SetEdgeColor(_actorPres.edgeColor.r, + _actorPres.edgeColor.g, + _actorPres.edgeColor.b); + anActor->SetNodeColor(_actorPres.nodeColor.r, + _actorPres.nodeColor.g, + _actorPres.nodeColor.b); + anActor->SetOpacity(_actorPres.opacity); + if (_wid) + { + SUIT_ViewWindow* w = getWnd(_wid); + w->repaint(); + } + else + { + SUIT_Session* aSession = SUIT_Session::session(); + SUIT_Application* anApplication = aSession->activeApplication(); + SalomeApp_Application* anApp = dynamic_cast(anApplication); + SUIT_ViewManager* vman = anApp->getViewManager(VTKViewer_Viewer::Type(),true); + vman->getActiveView()->repaint(); + } + } + }; + + ProcessVoidEvent(new TSetActorAspect(actorPres, Mesh_Entry, viewId)); +} + void SMESH_Swig::CreateAndDisplayActor( const char* Mesh_Entry ) { // SMESH_Actor* Mesh = smeshGUI->ReadScript(aM); @@ -681,7 +800,7 @@ void SMESH_Swig::EraseActor( const char* Mesh_Entry, const bool allViewers ) void SMESH_Swig::SetName(const char* theEntry, const char* theName) { - SALOMEDS::SObject_var aSObject = myStudy->FindObjectID(theEntry); + SALOMEDS::SObject_var aSObject = KERNEL::getStudyServant()->FindObjectID(theEntry); SALOMEDS::GenericAttribute_var anAttr; SALOMEDS::AttributeName_var aName; if(!aSObject->_is_nil()){ @@ -707,15 +826,12 @@ void SMESH_Swig::SetMeshIcon(const char* theMeshEntry, { class TEvent: public SALOME_Event { - SALOMEDS::Study_var myStudy; std::string myMeshEntry; bool myIsComputed, myIsEmpty; public: - TEvent(const SALOMEDS::Study_var& theStudy, - const std::string& theMeshEntry, + TEvent(const std::string& theMeshEntry, const bool theIsComputed, const bool isEmpty): - myStudy (theStudy), myMeshEntry (theMeshEntry), myIsComputed(theIsComputed), myIsEmpty (isEmpty) @@ -725,15 +841,14 @@ void SMESH_Swig::SetMeshIcon(const char* theMeshEntry, void Execute() { - SALOMEDS::SObject_ptr aMeshSO = myStudy->FindObjectID(myMeshEntry.c_str()); + SALOMEDS::SObject_ptr aMeshSO = KERNEL::getStudyServant()->FindObjectID(myMeshEntry.c_str()); if(_PTR(SObject) aMesh = ClientFactory::SObject(aMeshSO)) SMESH::ModifiedMesh(aMesh,myIsComputed,myIsEmpty); // aMeshSO->UnRegister(); ~aMesh() already called UnRegister()! } }; - ProcessVoidEvent(new TEvent(myStudy, - theMeshEntry, + ProcessVoidEvent(new TEvent(theMeshEntry, theIsComputed, isEmpty)); }