Salome HOME
Integrated to V7_main: 0022366: EDF SMESH: Create Mesh dialog box improvement: create...
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_GroupDlg.cxx
index 932a322995e43318573df86b7d9988b63bb41e96..832ac1c8d4bb31f0ec965a847601068307101f88 100644 (file)
@@ -38,7 +38,7 @@
 
 #include <SMESH_TypeFilter.hxx>
 #include <SMESH_Actor.h>
-#include <SMESH_ActorUtils.h>
+//#include <SMESH_ActorUtils.h>
 #include <SMESH_LogicalFilter.hxx>
 
 // SALOME GEOM includes
@@ -921,7 +921,7 @@ bool SMESHGUI_GroupDlg::onApply()
   QStringList anEntryList;
 
   SMESH::SMESH_GroupBase_var resultGroup;
-  bool isCreation;
+  bool isCreation, isConversion = false;
     
   if (myGrpTypeId == 0)  // standalone
   {
@@ -940,8 +940,9 @@ bool SMESHGUI_GroupDlg::onApply()
         else
           myGroup = myMesh->ConvertToStandalone( myGroupOnGeom );
 
-        myGroupOnGeom = SMESH::SMESH_GroupOnGeom::_nil();
+        myGroupOnGeom   = SMESH::SMESH_GroupOnGeom::_nil();
         myGroupOnFilter = SMESH::SMESH_GroupOnFilter::_nil();
+        isConversion    = true;
       }
     }
 
@@ -1142,13 +1143,25 @@ bool SMESHGUI_GroupDlg::onApply()
       myGroupOnGeom   = SMESH::SMESH_GroupOnGeom::_nil();
       myGroupOnFilter = SMESH::SMESH_GroupOnFilter::_nil();
       myFilter        = SMESH::Filter::_nil();
+
+      setDefaultGroupColor(); // reset color for case if 'auto-color' feature is enabled.
     }
     else
     {
       resultGroup->SetName(myName->text().toLatin1().data());
 
       if ( aMeshGroupSO )
+      {
         if(SMESH_Actor *anActor = SMESH::FindActorByEntry(aMeshGroupSO->GetID().c_str())) {
+          if ( isConversion ) { // need to reset TVisualObj and actor
+            Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
+            SMESH::RemoveVisualObjectWithActors( anIO->getEntry(), true );
+            SMESH::Update( anIO,true);
+            myActorsList.clear();
+            anActor = SMESH::FindActorByEntry( anIO->getEntry() );
+            if ( !anActor ) return false;
+            myActorsList.append( anActor );
+          }
           anActor->setName(myName->text().toLatin1().data());
           QColor c;
           int delta;
@@ -1158,16 +1171,17 @@ bool SMESHGUI_GroupDlg::onApply()
           case grpBallSelection:   anActor->SetBallColor( aColor.R, aColor.G, aColor.B ); break;
           case grpEdgeSelection:   anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B ); break;
           case grpVolumeSelection: 
-              SMESH::GetColor("SMESH", "volume_color", c , delta, "255,0,170|-100");
-              anActor->SetVolumeColor( aColor.R, aColor.G, aColor.B, delta ); break;          
-              break;
+            SMESH::GetColor("SMESH", "volume_color", c , delta, "255,0,170|-100");
+            anActor->SetVolumeColor( aColor.R, aColor.G, aColor.B, delta ); break;          
+            break;
           case grpFaceSelection:   
           default:
-              SMESH::GetColor("SMESH", "fill_color", c , delta, "0,170,255|-100");
-              anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); break;          
-              break;
+            SMESH::GetColor("SMESH", "fill_color", c , delta, "0,170,255|-100");
+            anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta ); break;          
+            break;
           }
         }
+      }
     }
     SMESHGUI::Modified();
     mySMESHGUI->updateObjBrowser(true);
@@ -1191,6 +1205,8 @@ void SMESHGUI_GroupDlg::onOK()
   if ( onApply() )
     reject();
   setIsApplyAndClose( false );
+
+  if ( myFilterDlg ) myFilterDlg->UnRegisterFilters();
 }
 
 //=================================================================================
@@ -2200,6 +2216,8 @@ void SMESHGUI_GroupDlg::reject()
   mySMESHGUI->ResetState();
 
   QDialog::reject();
+
+  if ( myFilterDlg ) myFilterDlg->UnRegisterFilters();
 }
 
 //=================================================================================
@@ -2454,15 +2472,20 @@ void SMESHGUI_GroupDlg::setDefaultGroupColor()
 
   bool isAutoColor = myMesh->GetAutoColor();
 
-  QColor aQColor;
+  QColor aQColor = myColorBtn->color();
   if( !isAutoColor )
   {
-    int r = 0, g = 0, b = 0;
-    SMESH::GetColor( "SMESH", "default_grp_color", r, g, b, QColor( 255, 170, 0 ) );
-    aQColor.setRgb( r, g, b );
+    if ( !aQColor.isValid() ) {
+      int r = 0, g = 0, b = 0;
+      SMESH::GetColor( "SMESH", "default_grp_color", r, g, b, QColor( 255, 170, 0 ) );
+      aQColor.setRgb( r, g, b );
+    }
   }
   else
   {
+#ifdef SIMPLE_AUTOCOLOR   // simplified algorithm for auto-colors
+    SALOMEDS::Color aColor = SMESHGUI::getPredefinedUniqueColor();
+#else                     // old algorithm  for auto-colors
     SMESH::ListOfGroups aListOfGroups = *myMesh->GetGroups();
 
     QList<SALOMEDS::Color> aReservedColors;
@@ -2474,6 +2497,8 @@ void SMESHGUI_GroupDlg::setDefaultGroupColor()
     }
 
     SALOMEDS::Color aColor = SMESHGUI::getUniqueColor( aReservedColors );
+#endif                    // SIMPLE_AUTOCOLOR
+
     aQColor.setRgb( (int)( aColor.R * 255.0 ),
                     (int)( aColor.G * 255.0 ),
                     (int)( aColor.B * 255.0 ) );