Salome HOME
0021275: EDF 1681 SMESH: Find the number of nodes of any group
[modules/smesh.git] / src / SMESHGUI / SMESHGUI.cxx
index 2fab514646611a79430b7039cc7a35be58c86885..ab1bde810a5e8bcdf581536fa5b725af6c978a46 100644 (file)
             anActor->SetEdgeColor( aColor.R, aColor.G, aColor.B );
           else if( aGroupObject->GetType() == SMESH::ELEM0D )
             anActor->Set0DColor( aColor.R, aColor.G, aColor.B );
-          else
-            anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B );
+          else {
+           QColor c;
+           int delta;
+           SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100");
+            anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta );
+         }
         }
       }
     }
         return;
       }
       case 1132:{
-        QColor c, e, b, n, c0D, o;
+        QColor c, e, b, n, c0D, o, outl, selection, preselection;
+       int delta;
         int size0D = 0;
         int Edgewidth = 0;
         vtkFloatingPointType Shrink = 0.0;
           if(IObject->hasEntry()){
             if(SMESH_Actor *anActor = SMESH::FindActorByEntry(IObject->getEntry())){
               vtkFloatingPointType color[3];
-              anActor->GetSufaceColor(color[0], color[1], color[2]);
+              anActor->GetSufaceColor(color[0], color[1], color[2],delta);
               int c0 = int (color[0] * 255);
               int c1 = int (color[1] * 255);
               int c2 = int (color[2] * 255);
               c2 = int (edgecolor[2] * 255);
               e.setRgb(c0, c1, c2);
 
-              vtkFloatingPointType backfacecolor[3];
-              anActor->GetBackSufaceColor(backfacecolor[0], backfacecolor[1], backfacecolor[2]);
-              c0 = int (backfacecolor[0] * 255);
-              c1 = int (backfacecolor[1] * 255);
-              c2 = int (backfacecolor[2] * 255);
-              b.setRgb(c0, c1, c2);
-
               vtkFloatingPointType nodecolor[3];
               anActor->GetNodeColor(nodecolor[0], nodecolor[1], nodecolor[2]);
               c0 = int (nodecolor[0] * 255);
               c2 = int (color0D[2] * 255);
               c0D.setRgb(c0, c1, c2);
 
+              vtkFloatingPointType outlineColor[3];
+              anActor->GetOutlineColor(outlineColor[0], outlineColor[1], outlineColor[2]);
+              c0 = int (outlineColor[0] * 255);
+              c1 = int (outlineColor[1] * 255);
+              c2 = int (outlineColor[2] * 255);
+              outl.setRgb(c0, c1, c2);
+
+              vtkFloatingPointType hColor[3];
+              anActor->GetHighlightColor(hColor[0], hColor[1], hColor[2]);
+              c0 = int (hColor[0] * 255);
+              c1 = int (hColor[1] * 255);
+              c2 = int (hColor[2] * 255);
+              selection.setRgb(c0, c1, c2);
+
+              vtkFloatingPointType phColor[3];
+              anActor->GetPreHighlightColor(phColor[0], phColor[1], phColor[2]);
+              c0 = int (phColor[0] * 255);
+              c1 = int (phColor[1] * 255);
+              c2 = int (phColor[2] * 255);
+              preselection.setRgb(c0, c1, c2);
+
               size0D = (int)anActor->Get0DSize();
               if(size0D == 0)
                 size0D = 1;
         aDlg->SetColor(1, c);
         aDlg->SetColor(2, e);
         aDlg->SetColor(3, n);
-        aDlg->SetColor(4, b);
+        aDlg->SetColor(4, outl);
+       aDlg->SetDeltaBrightness(delta);
         aDlg->SetColor(5, c0D);
         aDlg->SetColor(6, o);
         aDlg->SetIntValue(1, Edgewidth);
         aDlg->SetIntValue(3, size0D);
         aDlg->SetDoubleValue(1, faces_orientation_scale);
         aDlg->SetBooleanValue(1, faces_orientation_3dvectors);
+        aDlg->SetColor(7, selection);
+        aDlg->SetColor(8, preselection);
  
         aDlg->setCustomMarkerMap( theMarkerMap[ aStudy->StudyId() ] );
 
           QColor color = aDlg->GetColor(1);
           QColor edgecolor = aDlg->GetColor(2);
           QColor nodecolor = aDlg->GetColor(3);
-          QColor backfacecolor = aDlg->GetColor(4);
+          QColor outlinecolor = aDlg->GetColor(4);
           QColor color0D = aDlg->GetColor(5);
           QColor faces_orientation_color = aDlg->GetColor(6);
+         QColor selectioncolor = aDlg->GetColor(7);
+         QColor preSelectioncolor = aDlg->GetColor(8);
+         int delta = aDlg->GetDeltaBrightness();
 
           /* Point marker */
           theMarkerMap[ aStudy->StudyId() ] = aDlg->getCustomMarkerMap();
                 /* actor color and backface color */
                 anActor->SetSufaceColor(vtkFloatingPointType (color.red()) / 255.,
                                         vtkFloatingPointType (color.green()) / 255.,
-                                        vtkFloatingPointType (color.blue()) / 255.);
-                anActor->SetBackSufaceColor(vtkFloatingPointType (backfacecolor.red()) / 255.,
-                                            vtkFloatingPointType (backfacecolor.green()) / 255.,
-                                            vtkFloatingPointType (backfacecolor.blue()) / 255.);
-
+                                        vtkFloatingPointType (color.blue()) / 255.,
+                                       delta);
                 /* edge color */
                 anActor->SetEdgeColor(vtkFloatingPointType (edgecolor.red()) / 255.,
                                       vtkFloatingPointType (edgecolor.green()) / 255.,
                                       vtkFloatingPointType (edgecolor.blue()) / 255.);
+               /* edge outline */
+                anActor->SetOutlineColor(vtkFloatingPointType (outlinecolor.red()) / 255.,
+                                        vtkFloatingPointType (outlinecolor.green()) / 255.,
+                                        vtkFloatingPointType (outlinecolor.blue()) / 255.);
+
+               /* selection */
+                anActor->SetHighlightColor(vtkFloatingPointType (selectioncolor.red()) / 255.,
+                                          vtkFloatingPointType (selectioncolor.green()) / 255.,
+                                          vtkFloatingPointType (selectioncolor.blue()) / 255.);
+               /* pre-selection */
+                anActor->SetPreHighlightColor(vtkFloatingPointType (preSelectioncolor.red()) / 255.,
+                                             vtkFloatingPointType (preSelectioncolor.green()) / 255.,
+                                             vtkFloatingPointType (preSelectioncolor.blue()) / 255.);
+               
 
                 /* Shrink factor and size edges */
                 anActor->SetShrinkFactor(aDlg->GetIntValue(2) / 100.);
@@ -4415,7 +4451,7 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( notifyMode, "indexes", indices );
 
   int infoGroup = addPreference( tr( "PREF_GROUP_INFO" ), genTab );
-  setPreferenceProperty( computeGroup, "columns", 2 );
+  setPreferenceProperty( computeGroup, "columns", 4 );
   int elemInfo = addPreference( tr( "PREF_ELEM_INFO" ), infoGroup, LightApp_Preferences::Selector, "SMESH", "mesh_elem_info" );
   modes.clear();
   modes.append( tr( "PREF_ELEM_INFO_SIMPLE" ) );
@@ -4425,6 +4461,11 @@ void SMESHGUI::createPreferences()
   indices.append( 1 );
   setPreferenceProperty( elemInfo, "strings", modes );
   setPreferenceProperty( elemInfo, "indexes", indices );
+  int nodesLim = addPreference( tr( "PREF_GPP_NODES_LIMIT" ), infoGroup, LightApp_Preferences::IntSpin, "SMESH", "info_groups_nodes_limit" );
+  setPreferenceProperty( nodesLim, "min", 0 );
+  setPreferenceProperty( nodesLim, "max", 10000000 );
+  setPreferenceProperty( nodesLim, "step", 10000 );
+  setPreferenceProperty( nodesLim, "special", tr( "PREF_UPDATE_LIMIT_NOLIMIT" ) );
 
   int segGroup = addPreference( tr( "PREF_GROUP_SEGMENT_LENGTH" ), genTab );
   setPreferenceProperty( segGroup, "columns", 2 );
@@ -4505,23 +4546,21 @@ void SMESHGUI::createPreferences()
   int elemGroup = addPreference( tr( "PREF_GROUP_ELEMENTS" ), meshTab );
   setPreferenceProperty( elemGroup, "columns", 2 );
 
-  addPreference( tr( "PREF_FILL"     ), elemGroup, LightApp_Preferences::Color, "SMESH", "fill_color" );
-  addPreference( tr( "PREF_OUTLINE"  ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" );
-  addPreference( tr( "PREF_BACKFACE" ), elemGroup, LightApp_Preferences::Color, "SMESH", "backface_color" );
+  int ColorId = addPreference( tr( "PREF_FILL"     ), elemGroup, LightApp_Preferences::BiColor, "SMESH", "fill_color" );
   addPreference( tr( "PREF_COLOR_0D" ), elemGroup, LightApp_Preferences::Color, "SMESH", "elem0d_color" );
+  
+  addPreference( tr( "PREF_OUTLINE"  ), elemGroup, LightApp_Preferences::Color, "SMESH", "outline_color" );
+  addPreference( tr( "PREF_WIREFRAME"  ), elemGroup, LightApp_Preferences::Color, "SMESH", "wireframe_color" );
+  
+  setPreferenceProperty( ColorId, "text", tr("PREF_BACKFACE") );
 
   int grpGroup = addPreference( tr( "PREF_GROUP_GROUPS" ), meshTab );
   setPreferenceProperty( grpGroup, "columns", 2 );
 
   addPreference( tr( "PREF_GRP_NAMES" ), grpGroup, LightApp_Preferences::Color, "SMESH", "group_name_color" );
 
-  //int sp = addPreference( "", elemGroup, LightApp_Preferences::Space );
-  //setPreferenceProperty( sp, "hstretch", 0 );
-  //setPreferenceProperty( sp, "vstretch", 0 );
-
   int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup,
                              LightApp_Preferences::IntSpin, "SMESH", "elem0d_size");
-  int sp = addPreference( "", elemGroup, LightApp_Preferences::Space );
   int elemW  = addPreference(tr("PREF_WIDTH"), elemGroup,
                              LightApp_Preferences::IntSpin, "SMESH", "element_width");
   int shrink = addPreference(tr("PREF_SHRINK_COEFF"), elemGroup,
@@ -4530,9 +4569,6 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( size0d, "min", 1 );
   setPreferenceProperty( size0d, "max", 10 );
 
-  setPreferenceProperty( sp, "hstretch", 0 );
-  setPreferenceProperty( sp, "vstretch", 0 );
-
   setPreferenceProperty( elemW, "min", 1 );
   setPreferenceProperty( elemW, "max", 5 );
 
@@ -5086,18 +5122,17 @@ void SMESHGUI::storeVisualParameters (int savePoint)
 
                   // Colors (surface:edge:)
                   vtkFloatingPointType r, g, b;
-
-                  aSmeshActor->GetSufaceColor(r, g, b);
+                 int delta;
+                 
+                  aSmeshActor->GetSufaceColor(r, g, b, delta);
                   QString colorStr ("surface");
                   colorStr += gDigitsSep; colorStr += QString::number(r);
                   colorStr += gDigitsSep; colorStr += QString::number(g);
                   colorStr += gDigitsSep; colorStr += QString::number(b);
 
-                  aSmeshActor->GetBackSufaceColor(r, g, b);
-                  colorStr += gDigitsSep; colorStr += "backsurface";
-                  colorStr += gDigitsSep; colorStr += QString::number(r);
-                  colorStr += gDigitsSep; colorStr += QString::number(g);
-                  colorStr += gDigitsSep; colorStr += QString::number(b);
+                 colorStr += gDigitsSep; colorStr += "backsurface";
+                 colorStr += gDigitsSep; colorStr += QString::number(delta);
+                                     
 
                   aSmeshActor->GetEdgeColor(r, g, b);
                   colorStr += gDigitsSep; colorStr += "edge";
@@ -5111,6 +5146,12 @@ void SMESHGUI::storeVisualParameters (int savePoint)
                   colorStr += gDigitsSep; colorStr += QString::number(g);
                   colorStr += gDigitsSep; colorStr += QString::number(b);
 
+                  aSmeshActor->GetOutlineColor(r, g, b);
+                  colorStr += gDigitsSep; colorStr += "outline";
+                  colorStr += gDigitsSep; colorStr += QString::number(r);
+                  colorStr += gDigitsSep; colorStr += QString::number(g);
+                  colorStr += gDigitsSep; colorStr += QString::number(b);
+
                   param = vtkParam + "Colors";
                   ip->setParameter(entry, param, colorStr.toLatin1().data());
 
@@ -5462,17 +5503,50 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
             // Colors
             else if (paramNameStr == "Colors") {
               QStringList colors = val.split(gDigitsSep, QString::SkipEmptyParts);
-              if (colors.count() == 16) {
+              if (colors.count() == 16 || colors.count() == 18 ) {
                 if (colors[0] != "surface" || colors[4]  != "backsurface" ||
-                    colors[8] != "edge"    || colors[12] != "node") {
+                    (colors[8] != "edge" && colors[6] != "edge" ) || (colors[12] != "node" && colors[10] != "node") ||
+                   (colors.count() == 18 && colors[14] != "outline")) {
                   MESSAGE("Invalid order of data in Colors, must be: "
-                          "surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b");
+                          "surface:r:g:b:backsurface:r:g:b:edge:r:g:b:node:r:g:b or surface:r:g:b:backsurface:delta:edge:r:g:b:node:r:g:b:outline:r:g:b");
                 }
                 else {
-                  aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat());
-                  aSmeshActor->SetBackSufaceColor(colors[5].toFloat(), colors[6].toFloat(), colors[7].toFloat());
-                  aSmeshActor->SetEdgeColor(colors[9].toFloat(), colors[10].toFloat(), colors[11].toFloat());
-                  aSmeshActor->SetNodeColor(colors[13].toFloat(), colors[14].toFloat(), colors[15].toFloat());
+                 int delta = 0; 
+                 float er,eg,eb;
+                 float nr,ng,nb;
+                 vtkFloatingPointType otr,otg,otb;
+                 //Old case backsurface color is independent
+                 if( colors.count() == 16 ) {
+                   QColor ffc;
+                   SMESH::GetColor( "SMESH", "fill_color", ffc, delta, "0,170,255|-100" ) ;              
+                   er = colors[9].toFloat();
+                   eg = colors[10].toFloat();
+                   eb = colors[11].toFloat();
+                   
+                   nr = colors[13].toFloat();
+                   ng = colors[14].toFloat();
+                   nb = colors[15].toFloat();
+                   SMESH::GetColor("SMESH", "outline_color", otr, otg, otb, QColor( 0, 70, 0 ) );
+                 } else {
+                   //New case backsurface color depends on surface color
+                   delta = colors[5].toInt();
+
+                   er = colors[7].toFloat();
+                   eg = colors[8].toFloat();
+                   eb = colors[9].toFloat();
+                   
+                   nr = colors[11].toFloat();
+                   ng = colors[12].toFloat();
+                   nb = colors[13].toFloat();
+
+                   otr = colors[15].toFloat();
+                   otg = colors[16].toFloat();
+                   otb = colors[17].toFloat();
+                 }
+                  aSmeshActor->SetSufaceColor(colors[1].toFloat(), colors[2].toFloat(), colors[3].toFloat(), delta);
+                  aSmeshActor->SetEdgeColor(er,eg,eb);
+                  aSmeshActor->SetNodeColor(nr,ng,nb);
+                  aSmeshActor->SetOutlineColor(otr,otg,otb);
                 }
               }
             }