Salome HOME
0020614: EDF 1133 SMESH : Put new added elements and nodes to group
authorvsr <vsr@opencascade.com>
Wed, 5 May 2010 15:23:42 +0000 (15:23 +0000)
committervsr <vsr@opencascade.com>
Wed, 5 May 2010 15:23:42 +0000 (15:23 +0000)
Additional changes: converting of groups on geometry to standalone group by demand

src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.h
src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.h
src/SMESHGUI/SMESHGUI_NodesDlg.cxx
src/SMESHGUI/SMESHGUI_NodesDlg.h
src/SMESHGUI/SMESH_msg_en.ts

index 00d8b532b7a04137ac96d1eb667b6ec66df4d1f3..03ade25cb3965e7544d279adcf0a18e99f8d166b 100644 (file)
@@ -483,6 +483,30 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
       else
         anArrayOfIndices[i] = aListId[ i ].toInt();
 
+    bool addToGroup = GroupGroups->isChecked();
+    QString aGroupName;
+
+    SMESH::SMESH_GroupBase_var aGroup;
+    int idx = 0;
+    if( addToGroup ) {
+      aGroupName = ComboBox_GroupName->currentText();
+      for ( int i = 1; i < ComboBox_GroupName->count(); i++ ) {
+       QString aName = ComboBox_GroupName->itemText( i );
+       if ( aGroupName == aName && ( i == ComboBox_GroupName->currentIndex() || idx == 0 ) )
+         idx = i;
+      }
+      if ( idx > 0 ) {
+       SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( myGroups[idx-1] );
+       if ( !aGeomGroup->_is_nil() ) {
+         int res = SUIT_MessageBox::question( this, tr( "SMESH_WRN_WARNING" ),
+                                              tr( "MESH_STANDALONE_GRP_CHOSEN" ).arg( aGroupName ),
+                                              tr( "SMESH_BUT_YES" ), tr( "SMESH_BUT_NO" ), 0, 1 );
+         if ( res == 1 ) return;
+       }
+       aGroup = myGroups[idx-1];
+      }
+    }
+
     long anElemId = -1;
     SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
     switch (myElementType) {
@@ -499,34 +523,37 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
     }
     case SMDSAbs_Volume:
       anElemId = aMeshEditor->AddVolume(anArrayOfIndices.inout()); break;
-    default:;
+    default: break;
     }
 
-    if( anElemId != -1 && GroupGroups->isChecked() ) {
-      SMESH::SMESH_Group_var aGroup;
-      QString aGroupName = ComboBox_GroupName->currentText();
-      SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
-      for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-        SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-        if( !aGroupBase->_is_nil() ) {
-          SMESH::SMESH_Group_var aRefGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-          if( !aRefGroup->_is_nil() ) {
-            QString aRefGroupName( aRefGroup->GetName() );
-            if( aRefGroupName == aGroupName ) {
-              aGroup = aRefGroup; // // add node to existing group
-              break;
-            }
-          }
-        }
+    if ( anElemId != -1 && addToGroup && !aGroupName.isEmpty() ) {
+      SMESH::SMESH_Group_var aGroupUsed;
+      if ( aGroup->_is_nil() ) {
+       // create new group 
+       aGroupUsed = SMESH::AddGroup( myMesh, (SMESH::ElementType)myElementType, aGroupName );
+       if ( !aGroupUsed->_is_nil() ) {
+         myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroupUsed));
+         ComboBox_GroupName->addItem( aGroupName );
+       }
+      }
+      else {
+       SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGroup );
+       if ( !aGeomGroup->_is_nil() ) {
+         aGroupUsed = myMesh->ConvertToStandalone( aGeomGroup );
+         if ( !aGroupUsed->_is_nil() && idx > 0 ) {
+           myGroups[idx-1] = SMESH::SMESH_GroupBase::_duplicate(aGroupUsed);
+           SMESHGUI::GetSMESHGUI()->getApp()->updateObjectBrowser();
+         }
+       }
+       else
+         aGroupUsed = SMESH::SMESH_Group::_narrow( aGroup );
       }
-      if( aGroup->_is_nil() ) // create new group
-        aGroup = SMESH::AddGroup( myMesh, (SMESH::ElementType)myElementType, aGroupName );
 
-      if( !aGroup->_is_nil() ) {
+      if ( !aGroupUsed->_is_nil() ) {
         SMESH::long_array_var anIdList = new SMESH::long_array;
         anIdList->length( 1 );
         anIdList[0] = anElemId;
-        aGroup->Add( anIdList.inout() );
+        aGroupUsed->Add( anIdList.inout() );
       }
     }
 
@@ -699,18 +726,18 @@ void SMESHGUI_AddMeshElementDlg::SelectionIntoArgument()
 
   // process groups
   if ( !myMesh->_is_nil() && myEntry != aCurrentEntry ) {
+    myGroups.clear();
     ComboBox_GroupName->clear();
     ComboBox_GroupName->addItem( QString() );
     SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
     for ( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-      SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-      if ( !aGroupBase->_is_nil() && aGroupBase->GetType() == (SMESH::ElementType)myElementType ) {
-        SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-        if ( !aGroup->_is_nil() ) {
-          QString aGroupName( aGroup->GetName() );
-          if ( !aGroupName.isEmpty() )
-            ComboBox_GroupName->addItem( aGroupName );
-        }
+      SMESH::SMESH_GroupBase_var aGroup = aListOfGroups[i];
+      if ( !aGroup->_is_nil() && aGroup->GetType() == (SMESH::ElementType)myElementType ) {
+       QString aGroupName( aGroup->GetName() );
+       if ( !aGroupName.isEmpty() ) {
+         myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroup));
+         ComboBox_GroupName->addItem( aGroupName );
+       }
       }
     }
   }
index f4a6016ffefbeaf35f77558b527feaeaf41bc590..6c95a37cb363c865b23b39dc2f5b7c6cf4c51e7d 100644 (file)
@@ -78,6 +78,8 @@ private:
   
   bool                        isValid();
   
+  typedef QList<SMESH::SMESH_GroupBase_var> GrpList;
+  
   SMESHGUI*                   mySMESHGUI;              /* Current SMESHGUI object */
   LightApp_SelectionMgr*      mySelectionMgr;          /* User shape selection */
   int                         myNbOkNodes;             /* to check when arguments is defined */
@@ -94,6 +96,7 @@ private:
   SMESH_Actor*                myActor;
   SMESH::TElementSimulation*  mySimulation;
   QString                     myEntry;
+  GrpList                     myGroups;
   
   QGroupBox*                  GroupConstructors;
   QRadioButton*               Constructor1;
index 538e78a8417fae8028037a52346eab1a620d12c4..601006b705de9b2b3cb4bde2ed6202eb8a8276a1 100644 (file)
@@ -720,6 +720,30 @@ void SMESHGUI_AddQuadraticElementDlg::ClickOnApply()
   for (int i = 0; i < aNumberOfIds; i++)
     anArrayOfIdeces[i] = anIds[ i ];
 
+  bool addToGroup = GroupGroups->isChecked();
+  QString aGroupName;
+  
+  SMESH::SMESH_GroupBase_var aGroup;
+  int idx = 0;
+  if( addToGroup ) {
+    aGroupName = ComboBox_GroupName->currentText();
+    for ( int i = 1; i < ComboBox_GroupName->count(); i++ ) {
+      QString aName = ComboBox_GroupName->itemText( i );
+      if ( aGroupName == aName && ( i == ComboBox_GroupName->currentIndex() || idx == 0 ) )
+       idx = i;
+    }
+    if ( idx > 0 ) {
+      SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( myGroups[idx-1] );
+      if ( !aGeomGroup->_is_nil() ) {
+       int res = SUIT_MessageBox::question( this, tr( "SMESH_WRN_WARNING" ),
+                                            tr( "MESH_STANDALONE_GRP_CHOSEN" ).arg( aGroupName ),
+                                            tr( "SMESH_BUT_YES" ), tr( "SMESH_BUT_NO" ), 0, 1 );
+       if ( res == 1 ) return;
+      }
+      aGroup = myGroups[idx-1];
+    }
+  }
+
   SMESH::ElementType anElementType;
   long anElemId = -1;
   SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
@@ -737,33 +761,37 @@ void SMESHGUI_AddQuadraticElementDlg::ClickOnApply()
   case QUAD_HEXAHEDRON:
     anElementType = SMESH::VOLUME;
     anElemId = aMeshEditor->AddVolume(anArrayOfIdeces.inout()); break;
+  default: break;
   }
     
-  if( anElemId != -1 && GroupGroups->isChecked() ) {
-    SMESH::SMESH_Group_var aGroup;
-    QString aGroupName = ComboBox_GroupName->currentText();
-    SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
-    for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-      SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-      if( !aGroupBase->_is_nil() ) {
-        SMESH::SMESH_Group_var aRefGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-        if( !aRefGroup->_is_nil() ) {
-          QString aRefGroupName( aRefGroup->GetName() );
-          if( aRefGroupName == aGroupName ) {
-            aGroup = aRefGroup; // // add node to existing group
-            break;
-          }
-        }
+  if ( anElemId != -1 && addToGroup && !aGroupName.isEmpty() ) {
+    SMESH::SMESH_Group_var aGroupUsed;
+    if ( aGroup->_is_nil() ) {
+      // create new group 
+      aGroupUsed = SMESH::AddGroup( myMesh, anElementType, aGroupName );
+      if ( !aGroupUsed->_is_nil() ) {
+       myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroupUsed));
+       ComboBox_GroupName->addItem( aGroupName );
       }
     }
-    if( aGroup->_is_nil() ) // create new group
-      aGroup = SMESH::AddGroup( myMesh, anElementType, aGroupName );
-
-    if( !aGroup->_is_nil() ) {
+    else {
+      SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGroup );
+      if ( !aGeomGroup->_is_nil() ) {
+       aGroupUsed = myMesh->ConvertToStandalone( aGeomGroup );
+       if ( !aGroupUsed->_is_nil() && idx > 0 ) {
+         myGroups[idx-1] = SMESH::SMESH_GroupBase::_duplicate(aGroupUsed);
+         SMESHGUI::GetSMESHGUI()->getApp()->updateObjectBrowser();
+       }
+      }
+      else
+       aGroupUsed = SMESH::SMESH_Group::_narrow( aGroup );
+    }
+    
+    if ( !aGroupUsed->_is_nil() ) {
       SMESH::long_array_var anIdList = new SMESH::long_array;
       anIdList->length( 1 );
       anIdList[0] = anElemId;
-      aGroup->Add( anIdList.inout() );
+      aGroupUsed->Add( anIdList.inout() );
     }
   }
 
@@ -936,18 +964,18 @@ void SMESHGUI_AddQuadraticElementDlg::SelectionIntoArgument()
     case QUAD_HEXAHEDRON:
       anElementType = SMESH::VOLUME; break;
     }
+    myGroups.clear();
     ComboBox_GroupName->clear();
     ComboBox_GroupName->addItem( QString() );
     SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
     for ( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-      SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-      if ( !aGroupBase->_is_nil() && aGroupBase->GetType() == anElementType ) {
-        SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-        if ( !aGroup->_is_nil() ) {
-          QString aGroupName( aGroup->GetName() );
-          if ( !aGroupName.isEmpty() )
-            ComboBox_GroupName->addItem( aGroupName );
-        }
+      SMESH::SMESH_GroupBase_var aGroup = aListOfGroups[i];
+      if ( !aGroup->_is_nil() && aGroup->GetType() == anElementType ) {
+       QString aGroupName( aGroup->GetName() );
+       if ( !aGroupName.isEmpty() ) {
+         myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroup));
+         ComboBox_GroupName->addItem( aGroupName );
+       }
       }
     }
   }
index 37d5f12d060226bbf0d18fb511bd450f52bdfc91..30b4d9f013740f3fe342a7bea821129fe99006c0 100644 (file)
@@ -71,6 +71,8 @@ public:
   ~SMESHGUI_AddQuadraticElementDlg();
   
 private:
+  typedef QList<SMESH::SMESH_GroupBase_var> GrpList;
+
   void                        Init();
   void                        closeEvent( QCloseEvent* );
   void                        hideEvent( QHideEvent* );    /* ESC key */
@@ -93,6 +95,7 @@ private:
   SMESH_Actor*                myActor;
   SMESH::TElementSimulation*  mySimulation;
   QString                     myEntry;
+  GrpList                     myGroups;
   
   int                         myType;
   bool                        myIsEditCorners;
index 8a97c4302cc9d9dd3e4c1c726d244305fe5fcc92..1501f082519498b1091735a818df8e9c9e193126 100644 (file)
@@ -449,6 +449,31 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply()
       if(checkEditLine(false) == -1) {return;}
       busy = true;
       long anElemId = -1;
+
+      bool addToGroup = GroupGroups->isChecked();
+      QString aGroupName;
+      
+      SMESH::SMESH_GroupBase_var aGroup;
+      int idx = 0;
+      if( addToGroup ) {
+       aGroupName = ComboBox_GroupName->currentText();
+       for ( int i = 1; i < ComboBox_GroupName->count(); i++ ) {
+         QString aName = ComboBox_GroupName->itemText( i );
+         if ( aGroupName == aName && ( i == ComboBox_GroupName->currentIndex() || idx == 0 ) )
+           idx = i;
+       }
+       if ( idx > 0 ) {
+         SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( myGroups[idx-1] );
+         if ( !aGeomGroup->_is_nil() ) {
+           int res = SUIT_MessageBox::question( this, tr( "SMESH_WRN_WARNING" ),
+                                                tr( "MESH_STANDALONE_GRP_CHOSEN" ).arg( aGroupName ),
+                                                tr( "SMESH_BUT_YES" ), tr( "SMESH_BUT_NO" ), 0, 1 );
+           if ( res == 1 ) return;
+         }
+         aGroup = myGroups[idx-1];
+       }
+      }
+
       if (GetConstructorId() == 0)
         {
           SMESH::long_array_var anIdsOfNodes = new SMESH::long_array;
@@ -509,31 +534,34 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply()
           }
         }
 
-      if( anElemId != -1 && GroupGroups->isChecked() ) {
-        SMESH::SMESH_Group_var aGroup;
-        QString aGroupName = ComboBox_GroupName->currentText();
-        SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
-        for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-          SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-          if( !aGroupBase->_is_nil() ) {
-            SMESH::SMESH_Group_var aRefGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-            if( !aRefGroup->_is_nil() ) {
-              QString aRefGroupName( aRefGroup->GetName() );
-              if( aRefGroupName == aGroupName ) {
-                aGroup = aRefGroup; // // add node to existing group
-                break;
-              }
-            }
-          }
-        }
-        if( aGroup->_is_nil() ) // create new group
-          aGroup = SMESH::AddGroup( myMesh, SMESH::VOLUME, aGroupName );
-
-        if( !aGroup->_is_nil() ) {
+      if ( anElemId != -1 && addToGroup && !aGroupName.isEmpty() ) {
+       SMESH::SMESH_Group_var aGroupUsed;
+       if ( aGroup->_is_nil() ) {
+         // create new group 
+         aGroupUsed = SMESH::AddGroup( myMesh, SMESH::VOLUME, aGroupName );
+         if ( !aGroupUsed->_is_nil() ) {
+           myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroupUsed));
+           ComboBox_GroupName->addItem( aGroupName );
+         }
+       }
+       else {
+         SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGroup );
+         if ( !aGeomGroup->_is_nil() ) {
+           aGroupUsed = myMesh->ConvertToStandalone( aGeomGroup );
+           if ( !aGroupUsed->_is_nil() && idx > 0 ) {
+             myGroups[idx-1] = SMESH::SMESH_GroupBase::_duplicate(aGroupUsed);
+             SMESHGUI::GetSMESHGUI()->getApp()->updateObjectBrowser();
+           }
+         }
+         else
+           aGroupUsed = SMESH::SMESH_Group::_narrow( aGroup );
+       }
+       
+        if ( !aGroupUsed->_is_nil() ) {
           SMESH::long_array_var anIdList = new SMESH::long_array;
           anIdList->length( 1 );
           anIdList[0] = anElemId;
-          aGroup->Add( anIdList.inout() );
+          aGroupUsed->Add( anIdList.inout() );
         }
       }
 
@@ -734,17 +762,17 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::SelectionIntoArgument()
   
   // process groups
   if ( !myMesh->_is_nil() && myEntry != aCurrentEntry ) {
+    myGroups.clear();
     ComboBox_GroupName->clear();
     ComboBox_GroupName->addItem( QString() );
     SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
     for ( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-      SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-      if ( !aGroupBase->_is_nil() && aGroupBase->GetType() == SMESH::VOLUME ) {
-        SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-        if ( !aGroup->_is_nil() ) {
-          QString aGroupName( aGroup->GetName() );
-          if ( !aGroupName.isEmpty() )
-            ComboBox_GroupName->addItem( aGroupName );
+      SMESH::SMESH_GroupBase_var aGroup = aListOfGroups[i];
+      if ( !aGroup->_is_nil() && aGroup->GetType() == SMESH::VOLUME ) {
+       QString aGroupName( aGroup->GetName() );
+       if ( !aGroupName.isEmpty() ) {
+         myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroup));
+         ComboBox_GroupName->addItem( aGroupName );
         }
       }
     }
index 2a6ee3735a8c1ef764ef4ecb04ba09526876f7de..33415c5ac4c93d55eab059c721f47f0602411c57 100644 (file)
@@ -69,6 +69,8 @@ public:
   ~SMESHGUI_CreatePolyhedralVolumeDlg();
 
 private:
+  typedef QList<SMESH::SMESH_GroupBase_var> GrpList;
+
   void                     Init();
   void                     closeEvent( QCloseEvent* );
   void                     enterEvent( QEvent* );          /* mouse enter the QWidget */
@@ -93,6 +95,7 @@ private:
   SMESH_Actor*             myActor;
   SMESH::TPolySimulation*  mySimulation;
   QString                  myEntry;
+  GrpList                  myGroups;
   
   QGroupBox*               ConstructorsBox;
   QButtonGroup*            GroupConstructors;
index 71c66f23d54c1e6f997be6439d9acd61c9ce6a35..d12100ca293ee4ca3fae5eb09301f784b73b7956 100644 (file)
@@ -51,6 +51,8 @@
 #include <LightApp_Application.h>
 #include <LightApp_SelectionMgr.h>
 
+#include <SalomeApp_Application.h>
+
 #include <SVTK_ViewWindow.h>
 #include <VTKViewer_Algorithm.h>
 #include <VTKViewer_CellLocationsArray.h>
@@ -439,35 +441,64 @@ bool SMESHGUI_NodesDlg::ClickOnApply()
   aParameters << SpinBox_Y->text();
   aParameters << SpinBox_Z->text();
 
+  bool addToGroup = GroupGroups->isChecked();
+  QString aGroupName;
+
+  SMESH::SMESH_GroupBase_var aGroup;
+  int idx = 0;
+  if( addToGroup ) {
+    aGroupName = ComboBox_GroupName->currentText();
+    for ( int i = 1; i < ComboBox_GroupName->count(); i++ ) {
+      QString aName = ComboBox_GroupName->itemText( i );
+      if ( aGroupName == aName && ( i == ComboBox_GroupName->currentIndex() || idx == 0 ) )
+       idx = i;
+    }
+    if ( idx > 0 ) {
+      SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( myGroups[idx-1] );
+      if ( !aGeomGroup->_is_nil() ) {
+       int res = SUIT_MessageBox::question( this, tr( "SMESH_WRN_WARNING" ),
+                                            tr( "MESH_STANDALONE_GRP_CHOSEN" ).arg( aGroupName ),
+                                            tr( "SMESH_BUT_YES" ), tr( "SMESH_BUT_NO" ), 0, 1 );
+       if ( res == 1 ) return false;
+      }
+      aGroup = myGroups[idx-1];
+    }
+  }
+      
   mySimulation->SetVisibility( false );
+
   long aNodeId = SMESH::AddNode( myMesh, x, y, z, aParameters );
+
   SMESH::SetPointRepresentation( true );
 
-  if( aNodeId != -1 && GroupGroups->isChecked() ) {
-    SMESH::SMESH_Group_var aGroup;
-    QString aGroupName = ComboBox_GroupName->currentText();
-    SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
-    for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-      SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-      if( !aGroupBase->_is_nil() ) {
-        SMESH::SMESH_Group_var aRefGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-        if( !aRefGroup->_is_nil() ) {
-          QString aRefGroupName( aRefGroup->GetName() );
-          if( aRefGroupName == aGroupName ) {
-            aGroup = aRefGroup; // // add node to existing group
-            break;
-          }
-        }
+  if ( aNodeId != -1 && addToGroup && !aGroupName.isEmpty() ) {
+    SMESH::SMESH_Group_var aGroupUsed;
+    if ( aGroup->_is_nil() ){
+      // create new group 
+      aGroupUsed = SMESH::AddGroup( myMesh, SMESH::NODE, aGroupName );
+      if ( !aGroupUsed->_is_nil() ) {
+       myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroupUsed));
+       ComboBox_GroupName->addItem( aGroupName );
+      }
+    }
+    else {
+      SMESH::SMESH_GroupOnGeom_var aGeomGroup = SMESH::SMESH_GroupOnGeom::_narrow( aGroup );
+      if ( !aGeomGroup->_is_nil() ) {
+       aGroupUsed = myMesh->ConvertToStandalone( aGeomGroup );
+       if ( !aGroupUsed->_is_nil() && idx > 0 ) {
+         myGroups[idx-1] = SMESH::SMESH_GroupBase::_duplicate(aGroupUsed);
+         SMESHGUI::GetSMESHGUI()->getApp()->updateObjectBrowser();
+       }
       }
+      else
+       aGroupUsed = SMESH::SMESH_Group::_narrow( aGroup );
     }
-    if( aGroup->_is_nil() ) // create new group
-      aGroup = SMESH::AddGroup( myMesh, SMESH::NODE, aGroupName );
 
-    if( !aGroup->_is_nil() ) {
+    if ( !aGroupUsed->_is_nil() ) {
       SMESH::long_array_var anIdList = new SMESH::long_array;
       anIdList->length( 1 );
       anIdList[0] = aNodeId;
-      aGroup->Add( anIdList.inout() );
+      aGroupUsed->Add( anIdList.inout() );
     }
   }
 
@@ -581,17 +612,17 @@ void SMESHGUI_NodesDlg::SelectionIntoArgument()
 
   // process groups
   if ( !myMesh->_is_nil() && myEntry != aCurrentEntry ) {
+    myGroups.clear();
     ComboBox_GroupName->clear();
     ComboBox_GroupName->addItem( QString() );
     SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
     for( int i = 0, n = aListOfGroups.length(); i < n; i++ ) {
-      SMESH::SMESH_GroupBase_var aGroupBase = aListOfGroups[i];
-      if ( !aGroupBase->_is_nil() && aGroupBase->GetType() == SMESH::NODE ) {
-        SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aGroupBase );
-        if ( !aGroup->_is_nil() ) {
-          QString aGroupName( aGroup->GetName() );
-          if ( !aGroupName.isEmpty() )
-            ComboBox_GroupName->addItem( aGroupName );
+      SMESH::SMESH_GroupBase_var aGroup = aListOfGroups[i];
+      if ( !aGroup->_is_nil() && aGroup->GetType() == SMESH::NODE ) {
+       QString aGroupName( aGroup->GetName() );
+       if ( !aGroupName.isEmpty() ) {
+         myGroups.append(SMESH::SMESH_GroupBase::_duplicate(aGroup));
+         ComboBox_GroupName->addItem( aGroupName );
         }
       }
     }
index 3ba529b6cff4aa485f5b58404fe0577876aac89b..0c3c8274b1ad7785c18693f2a686983a675613df 100644 (file)
@@ -66,6 +66,8 @@ public:
   ~SMESHGUI_NodesDlg();
 
 private:
+  typedef QList<SMESH::SMESH_GroupBase_var> GrpList;
+  
   LightApp_SelectionMgr*  mySelectionMgr;
   SVTK_Selector*          mySelector;
   SMESHGUI*               mySMESHGUI;
@@ -73,6 +75,7 @@ private:
   SMESH::SMESH_Mesh_var   myMesh;
   SMESH::TNodeSimulation* mySimulation;
   QString                 myEntry;
+  GrpList                 myGroups;
 
   void                    Init();
   void                    enterEvent( QEvent* );
@@ -81,7 +84,7 @@ private:
   void                    keyPressEvent( QKeyEvent* );
   
   bool                    isValid();
-  
+
   QGroupBox*              GroupConstructors;
   QRadioButton*           Constructor1;
   QGroupBox*              GroupCoordinates;
index 3f86b72dda4bfec07f476fac1b53ecea55b84a1e..18a50ace6a125687d9dd9f57b715b79700abed65 100644 (file)
@@ -761,8 +761,13 @@ Please, select a mesh and try again</translation>
         </message>
         <message>
             <source>GROUP_NAME_IS_EMPTY</source>
-            <translation>Name of group is empty
-Please input a name of new group or choose the existing one</translation>
+            <translation>Name of group is not specified.
+Please enter a name of new group to be created or choose an existing one.</translation>
+        </message>
+        <message>
+            <source>MESH_STANDALONE_GRP_CHOSEN</source>
+            <translation>Group on geometry is chosen: %1.
+Do you want to convert it to the standalone group?</translation>
         </message>
         <message>
             <source>NODE_ID</source>