Salome HOME
IPAL53919: Pb with nodes after element removal
[modules/smesh.git] / src / SMESHGUI / SMESHGUI.cxx
index 4c791176951b1161cc2618ddd0c451e5cf4fc139..441d71f47c98e41f0047c88aa84d16d40b17a205 100644 (file)
@@ -975,6 +975,7 @@ namespace
       aSel->selectedObjects( selected );
 
     if ( selected.Extent() >= 1 ) {
+      SUIT_OverrideCursor wc;
       SALOME_ListIteratorOfListIO It( selected );
       for( ; It.More(); It.Next()){
         Handle(SALOME_InteractiveObject) IObject = It.Value();
@@ -1595,6 +1596,7 @@ namespace
         return;
       } // case SMESHOp::OpProperties:
       } // switch(theCommandID)
+      SUIT_OverrideCursor wc;
       SALOME_ListIteratorOfListIO It( selected );
       for( ; It.More(); It.Next()){
         Handle(SALOME_InteractiveObject) IObject = It.Value();
@@ -2599,6 +2601,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpOrientationOnFaces:
     {
+      SUIT_OverrideCursor wc;
       LightApp_SelectionMgr* mgr = selectionMgr();
       SALOME_ListIO selected; mgr->selectedObjects( selected );
 
@@ -3352,12 +3355,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     for ( ; It.More(); It.Next() )
     {
       Handle(SALOME_InteractiveObject) IOS = It.Value();
-      SMESH::SMESH_Mesh_var aMesh =
-        SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IOS);
+      SMESH::SMESH_Mesh_var aMesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(IOS);
       if ( aMesh->_is_nil()) continue;
       try {
-        SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true);
         aMesh->Clear();
+        if ( aMesh->NbNodes() == 0 ) // imported mesh is not empty
+          SMESH::RemoveVisualObjectWithActors(IOS->getEntry(), true);
         _PTR(SObject) aMeshSObj = SMESH::FindSObject(aMesh);
         SMESH::ModifiedMesh( aMeshSObj, false, true);
         // hide groups and submeshes
@@ -4377,7 +4380,7 @@ void SMESHGUI::initialize( CAM_Application* app )
     isNotEmpty("numberOfNodes <> 0"),
 
     // has nodes, edges, etc in VISIBLE! actor
-    hasNodes("(numberOfNodes > 0 )"),//&& isVisible)"),
+    hasNodes("(numberOfNodes > 0 ) && hasActor"),
     hasElems("(count( elemTypes ) > 0)"),
     hasDifferentElems("(count( elemTypes ) > 1)"),
     hasBalls("({'BallElem'} in elemTypes)"),
@@ -4490,7 +4493,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   popupMgr()->setRule( action( SMESHOp::OpDMShading ), "displayMode = 'eSurface'", QtxPopupMgr::ToggleRule );
 
   popupMgr()->insert( action( SMESHOp::OpDMNodes ), anId, -1 );
-  popupMgr()->setRule( action( SMESHOp::OpDMNodes ), aMeshInVTK + "&&" + hasNodes, QtxPopupMgr::VisibleRule );
+  popupMgr()->setRule( action( SMESHOp::OpDMNodes ), aMeshInVTK + "&&" + hasNodes + "&&" + hasElems, QtxPopupMgr::VisibleRule );
   popupMgr()->setRule( action( SMESHOp::OpDMNodes ), "displayMode = 'ePoint'", QtxPopupMgr::ToggleRule );
 
   popupMgr()->insert( separator(), anId, -1 );
@@ -4529,7 +4532,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   popupMgr()->insert( separator(), anId, -1 );
 
   popupMgr()->insert( action( SMESHOp::OpDEChoose ), anId, -1 );
-  popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&&" + aType + "&&" + isNotEmpty, QtxPopupMgr::VisibleRule );
+  popupMgr()->setRule( action( SMESHOp::OpDEChoose ), aClient + "&& $type in {" + mesh + "} &&" + hasDifferentElems, QtxPopupMgr::VisibleRule );
 
   popupMgr()->insert( separator(), anId, -1 );
 
@@ -4998,19 +5001,6 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( lim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) );
   addPreference( tr( "PREF_INCREMENTAL_LIMIT" ), autoUpdate, LightApp_Preferences::Bool, "SMESH", "incremental_limit" );
 
-  int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab );
-  setPreferenceProperty( qaGroup, "columns", 2 );
-  addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" );
-  addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" );
-  int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" );
-  setPreferenceProperty( prec, "min", 0 );
-  setPreferenceProperty( prec, "max", 100 );
-  int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" );
-  setPreferenceProperty( doubleNodesTol, "precision", 10 );
-  setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 );
-  setPreferenceProperty( doubleNodesTol, "max", 1000000.0 );
-  setPreferenceProperty( doubleNodesTol, "step", 0.0000001 );
-
   int dispgroup = addPreference( tr( "PREF_DISPLAY_MODE_GROUP" ), genTab );
   setPreferenceProperty( dispgroup, "columns", 2 );
   int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" );
@@ -5044,6 +5034,18 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( maxAngle, "min", 1 );
   setPreferenceProperty( maxAngle, "max", 90 );
 
+  int qaGroup = addPreference( tr( "PREF_GROUP_QUALITY" ), genTab );
+  setPreferenceProperty( qaGroup, "columns", 2 );
+  addPreference( tr( "PREF_DISPLAY_ENTITY" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "display_entity" );
+  addPreference( tr( "PREF_PRECISION_USE" ), qaGroup, LightApp_Preferences::Bool, "SMESH", "use_precision" );
+  int prec = addPreference( tr( "PREF_PRECISION_VALUE" ), qaGroup, LightApp_Preferences::IntSpin, "SMESH", "controls_precision" );
+  setPreferenceProperty( prec, "min", 0 );
+  setPreferenceProperty( prec, "max", 100 );
+  int doubleNodesTol = addPreference( tr( "PREF_EQUAL_NODES_TOL" ), qaGroup, LightApp_Preferences::DblSpin, "SMESH", "equal_nodes_tolerance" );
+  setPreferenceProperty( doubleNodesTol, "precision", 10 );
+  setPreferenceProperty( doubleNodesTol, "min", 0.0000000001 );
+  setPreferenceProperty( doubleNodesTol, "max", 1000000.0 );
+  setPreferenceProperty( doubleNodesTol, "step", 0.0000001 );
 
 
   int exportgroup = addPreference( tr( "PREF_GROUP_EXPORT" ), genTab );