Salome HOME
PAL10501. SetCurrentStudy() to SMESH_Gen in GetSMESHGen()
[modules/smesh.git] / src / SMESHGUI / SMESHGUI.cxx
index 4d9cb4fcd46a2f72a60d9b9e1cac10c1edb1eaf4..15c9c94cd0a115e8c17fa15033683bc03df3553e 100644 (file)
@@ -184,7 +184,6 @@ namespace{
     if(!filename.isEmpty()) {
       SUIT_OverrideCursor wc;
       _PTR(Study) aStudy = SMESH::GetActiveStudyDocument();
-      theComponentMesh->SetCurrentStudy( _CAST(Study,aStudy)->GetStudy() );
 
       try {
        SMESH::mesh_array_var aMeshes = new SMESH::mesh_array;
@@ -1063,10 +1062,6 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   if( !mgr )
     return false;
 
-  if (CORBA::is_nil(GetSMESHGen()->GetCurrentStudy())) {
-    GetSMESHGen()->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy());
-  }
-
   SUIT_ViewWindow* view = application()->desktop()->activeWindow();
   SVTK_ViewWindow* vtkwnd = dynamic_cast<SVTK_ViewWindow*>( view );
 
@@ -1168,6 +1163,9 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       if (aSel)
         aSel->selectedObjects( sel_objects );
 
+      if( theCommandID==302 )
+       startOperation( myEraseAll );
+
       SALOME_ListIteratorOfListIO anIt( sel_objects );
       for( ; anIt.More(); anIt.Next() )
       {
@@ -1268,10 +1266,11 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case 701:                                    // COMPUTE MESH
     {
       if(checkLock(aStudy)) break;
-      if ( vtkwnd ) {
-       LightApp_SelectionMgr *Sel = selectionMgr();
-       SALOME_ListIO selected; Sel->selectedObjects( selected );
 
+      LightApp_SelectionMgr *Sel = selectionMgr();
+      SALOME_ListIO selected; Sel->selectedObjects( selected );
+
+      if ( vtkwnd ) {
        int nbSel = selected.Extent();
        if (nbSel != 1){
          break;
@@ -1280,7 +1279,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
        SMESH::SMESH_Mesh_var aMesh;
        SMESH::SMESH_subMesh_var aSubMesh;
        Handle(SALOME_InteractiveObject) IObject = selected.First();
-       if (IObject->hasEntry()){
+       if (IObject->hasEntry()) {
          _PTR(SObject) aMeshSObj = aStudy->FindObjectID(IObject->getEntry());
          GEOM::GEOM_Object_var aShapeObject = SMESH::GetShapeOnMeshOrSubMesh( aMeshSObj );
          if ( aShapeObject->_is_nil() ) {
@@ -1288,69 +1287,50 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
            break;
          }
          if( aMeshSObj ) {
-           SMESH::SMESH_Mesh_var aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(aMeshSObj);
-           SMESH::SMESH_subMesh_var aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(aMeshSObj);
-
-           if (!aMesh->_is_nil()){
-             GEOM::GEOM_Object_var refShapeObject = SMESH::GetShapeOnMeshOrSubMesh(aMeshSObj);
-             if (!refShapeObject->_is_nil()) {
-               if(!GetSMESHGen()->IsReadyToCompute(aMesh,refShapeObject)){
-                 SUIT_MessageBox::warn1(desktop(),
-                                       tr("SMESH_WRN_WARNING"),
-                                       tr("SMESH_WRN_MISSING_PARAMETERS"),
-                                       tr("SMESH_BUT_OK"));
-                 break;
-               }
-               try{
-                 if (GetSMESHGen()->Compute(aMesh,refShapeObject))
-                    SMESH::ModifiedMesh(aMeshSObj,true);
-                 // TO Do : change icon of all submeshes
-                  else
-                    SUIT_MessageBox::warn1(desktop(),
-                                          tr("SMESH_WRN_WARNING"),
-                                          tr("SMESH_WRN_COMPUTE_FAILED"),
-                                          tr("SMESH_BUT_OK"));
-               }
-               catch(const SALOME::SALOME_Exception & S_ex){
-                 SalomeApp_Tools::QtCatchCorbaException(S_ex);
-               }
-             }
-           }else if(!aSubMesh->_is_nil()){
+           aMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>(aMeshSObj);
+           aSubMesh = SMESH::SObjectToInterface<SMESH::SMESH_subMesh>(aMeshSObj);
+            if ( !aSubMesh->_is_nil() )
              aMesh = aSubMesh->GetFather();
-             GEOM::GEOM_Object_var refShapeObject = SMESH::GetShapeOnMeshOrSubMesh(aMeshSObj);
-             if(!refShapeObject->_is_nil()){
-               bool compute = GetSMESHGen()->IsReadyToCompute(aMesh,refShapeObject);
-               if(!compute){
-                 SUIT_MessageBox::warn1(desktop(),
-                                       tr("SMESH_WRN_WARNING"),
-                                       tr("SMESH_WRN_MISSING_PARAMETERS"),
-                                       tr("SMESH_BUT_OK"));
-                 break;
-               }
-               try{
-                 if ( GetSMESHGen()->Compute(aMesh,refShapeObject) )
-                    SMESH::ModifiedMesh(aMeshSObj,true);
-                 // TO Do : change icon of all submeshes
-                  else
-                    SUIT_MessageBox::warn1(desktop(),
-                                          tr("SMESH_WRN_WARNING"),
-                                          tr("SMESH_WRN_COMPUTE_FAILED"),
-                                          tr("SMESH_BUT_OK"));
-               }catch(const SALOME::SALOME_Exception & S_ex){
-                 SalomeApp_Tools::QtCatchCorbaException(S_ex);
-               }
-             }
-           }
+
+           if (!aMesh->_is_nil()) {
+//               if(!GetSMESHGen()->IsReadyToCompute(aMesh,aShapeObject)) {
+//                 SUIT_MessageBox::warn1(desktop(),
+//                                        tr("SMESH_WRN_WARNING"),
+//                                        tr("SMESH_WRN_MISSING_PARAMETERS"),
+//                                        tr("SMESH_BUT_OK"));
+//                 break;
+//               }
+              SMESH::algo_error_array_var errors = GetSMESHGen()->GetAlgoState(aMesh,aShapeObject);
+              if ( errors->length() > 0 ) {
+                SUIT_MessageBox::warn1(desktop(),
+                                       tr("SMESH_WRN_WARNING"),
+                                       SMESH::GetMessageOnAlgoStateErrors( errors.in() ),
+                                       tr("SMESH_BUT_OK"));
+                break;
+              }
+              try{
+                if (GetSMESHGen()->Compute(aMesh,aShapeObject))
+                  SMESH::ModifiedMesh(aMeshSObj,true);
+                else
+                  SUIT_MessageBox::warn1(desktop(),
+                                         tr("SMESH_WRN_WARNING"),
+                                         tr("SMESH_WRN_COMPUTE_FAILED"),
+                                         tr("SMESH_BUT_OK"));
+              }
+              catch(const SALOME::SALOME_Exception & S_ex){
+                SalomeApp_Tools::QtCatchCorbaException(S_ex);
+              }
+            }
          }
        }
-       CORBA::Long anId = aStudy->StudyId();
-       TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,IObject->getEntry());
-       if ( automaticUpdate() && aVisualObj){
-         aVisualObj->Update();
-         SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry());
-         if(!anActor){
-           anActor = SMESH::CreateActor(aStudy,IObject->getEntry());
-           if(anActor){
+        CORBA::Long anId = aStudy->StudyId();
+        TVisualObjPtr aVisualObj = SMESH::GetVisualObj(anId,IObject->getEntry());
+        if ( automaticUpdate() && aVisualObj){
+          aVisualObj->Update();
+          SMESH_Actor* anActor = SMESH::FindActorByEntry(IObject->getEntry());
+          if(!anActor){
+            anActor = SMESH::CreateActor(aStudy,IObject->getEntry());
+            if(anActor){
              SMESH::DisplayActor(view,anActor); //apo
              SMESH::FitAll();
            }
@@ -1364,6 +1344,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
                              tr("SMESH_BUT_OK"));
       }
       updateObjBrowser();
+      Sel->setSelectedObjects( selected );
       break;
     }
 
@@ -2560,12 +2541,14 @@ void SMESHGUI::initialize( CAM_Application* app )
   createPopupItem( 801, OB, mesh );                        // CREATE_GROUP
   createPopupItem( 802, OB, subMesh );                     // CONSTRUCT_GROUP
   popupMgr()->insert( separator(), -1, 0 );
-  createPopupItem( 1100, OB, hypo, "&& $hasReference={false}" );   // EDIT HYPOTHESIS
+  createPopupItem( 1100, OB, hypo, "" /*"&& $hasReference={false}"*/ );   // EDIT HYPOTHESIS
   createPopupItem( 1102, OB, hyp_alg ); // REMOVE HYPOTHESIS / ALGORITHMS
-  createPopupItem( 1101, OB, mesh_group + " " + hyp_alg, "&& $hasReference={false}" ); // RENAME
+  createPopupItem( 1101, OB, mesh_group + " " + hyp_alg, "" /*"&& $hasReference={false}"*/ ); // RENAME
   popupMgr()->insert( separator(), -1, 0 );
-  createPopupItem( 125, OB, mesh );                        // EXPORT_MED
-  createPopupItem( 126, OB, mesh );                        // EXPORT_UNV
+
+  QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( QtxPopupMgr::Selection::defSelCountParam() );
+  createPopupItem( 125, OB, mesh, only_one_non_empty );    // EXPORT_MED
+  createPopupItem( 126, OB, mesh, only_one_non_empty );    // EXPORT_UNV
   createPopupItem( 33, OB, subMesh + " " + group );        // DELETE
   popupMgr()->insert( separator(), -1, 0 );
 
@@ -2819,11 +2802,16 @@ void SMESHGUI::OnGUIEvent()
 
 SMESH::SMESH_Gen_var SMESHGUI::GetSMESHGen()
 {
+  _PTR(Study) aStudy = SMESH::GetActiveStudyDocument(); //Document OCAF de l'etude active
   if ( CORBA::is_nil( myComponentSMESH ) )
     {
       SMESHGUI aGUI; //SRN BugID: IPAL9186: Create an instance of SMESHGUI to initialize myComponentSMESH
+      if ( aStudy )
+        aGUI.myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy());
       return aGUI.myComponentSMESH;
     }
+  if ( aStudy )
+    myComponentSMESH->SetCurrentStudy(_CAST(Study,aStudy)->GetStudy());
   return myComponentSMESH;
 }
 
@@ -3114,6 +3102,6 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const
 LightApp_Displayer* SMESHGUI::displayer()
 {
   if( !myDisplayer )
-    myDisplayer = new SMESHGUI_Displayer( dynamic_cast<SalomeApp_Study*>( getApp()->activeStudy() ) );
+    myDisplayer = new SMESHGUI_Displayer( getApp() );
   return myDisplayer;
 }