Salome HOME
Fix compilation warnings
[modules/smesh.git] / src / SMESHGUI / SMESHGUI.cxx
index 2d2a0f182f7743fa96d713cc3521df2ef3a6dc62..0f03c092616068f22cdc7b0b7dfb51489cd0a353 100644 (file)
@@ -23,6 +23,9 @@
 //  Author : Nicolas REJNERI, Open CASCADE S.A.S.
 
 #include <Standard_math.hxx>  // E.A. must be included before Python.h to fix compilation on windows
+#ifdef HAVE_FINITE
+#undef HAVE_FINITE            // VSR: avoid compilation warning on Linux : "HAVE_FINITE" redefined
+#endif
 #include "Python.h"
 //  SMESH includes
 #include "SMESHGUI.h"
     else if ( theCommandID == 116 ) {
       filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
     }
+    else if ( theCommandID == 117 ) {
+      filter.append( QObject::tr( "SAUV files (*.sauv*)" ) );
+      filter.append( QObject::tr( "All files (*)" ) );
+    }
 
     QString anInitialPath = "";
     if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
               }
               break;
             }
+          case 117:
+            {
+              // SAUV format
+              SMESH::DriverMED_ReadStatus res;
+              aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toLatin1().constData(), res );
+              if ( res != SMESH::DRS_OK ) {
+                errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
+                               arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
+              }
+              break;
+            }
           }
         }
         catch ( const SALOME::SALOME_Exception& S_ex ) {
     const bool isUNV = ( theCommandID == 123 || theCommandID == 126 );
     const bool isSTL = ( theCommandID == 140 || theCommandID == 141 );
     const bool isCGNS= ( theCommandID == 142 || theCommandID == 143 );
+    const bool isSAUV= ( theCommandID == 144 || theCommandID == 145 );
 
     // actually, the following condition can't be met (added for insurance)
     if( selected.Extent() == 0 ||
     SMESH::SMESH_Mesh_var aMesh = aMeshOrGroup->GetMesh();
     QString aMeshName = (*aMeshIter).second;
 
-    if ( isMED || isCGNS )
+    if ( isMED || isCGNS || isSAUV )
     {
       // check for equal group names within each mesh
       for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
       }
       delete fd;
     }
-    else if ( isMED ) // Export to MED
+    else if ( isMED || isSAUV ) // Export to MED or SAUV
     {
       QMap<QString, SMESH::MED_VERSION> aFilterMap;
       //QString v21 (aMesh->GetVersionString(SMESH::MED_V2_1, 2));
-      QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2));
-      //aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 );
-      aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 );
+      if ( isMED ) {
+       QString v22 (aMesh->GetVersionString(SMESH::MED_V2_2, 2));
+       //aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v21 ) + " (*.med)", SMESH::MED_V2_1 );
+       aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( v22 ) + " (*.med)", SMESH::MED_V2_2 );
+      }
+      else { // isSAUV
+       aFilterMap.insert("All files (*)", SMESH::MED_V2_1 );
+       aFilterMap.insert("SAUV files (*.sauv)", SMESH::MED_V2_2 );
+       aFilterMap.insert("SAUV files (*.sauve)", SMESH::MED_V2_1 );
+      }
 
       QStringList filters;
       QString aDefaultFilter;
                                           aFormat, toOverwrite && aMeshIndex == 0 );
           }
         }
+        else if ( isSAUV )
+       {
+         for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ )
+         {
+           SMESH::SMESH_Mesh_var aMeshItem = SMESH::SMESH_Mesh::_narrow( (*aMeshIter).first );
+           if( !aMeshItem->_is_nil() )
+             aMeshItem->ExportSAUV( aFilename.toLatin1().data(), toCreateGroups );
+         }
+       }
         else if ( isDAT )
         {
           if ( aMeshOrGroup->_is_equivalent( aMesh ))
           else if( aGroupObject->GetType() == SMESH::ELEM0D )
             anActor->Set0DColor( aColor.R, aColor.G, aColor.B );
           else {
-           QColor c;
-           int delta;
-           SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100");
+            QColor c;
+            int delta;
+            SMESH::GetColor("SMESH", "fill_color", c, delta, "0,170,255|-100");
             anActor->SetSufaceColor( aColor.R, aColor.G, aColor.B, delta );
-         }
+          }
         }
       }
     }
       }
       case 1132:{
         QColor c, e, b, n, c0D, o, outl, selection, preselection;
-       int delta;
+        int delta;
         int size0D = 0;
         int Edgewidth = 0;
         vtkFloatingPointType Shrink = 0.0;
         aDlg->SetColor(2, e);
         aDlg->SetColor(3, n);
         aDlg->SetColor(4, outl);
-       aDlg->SetDeltaBrightness(delta);
+        aDlg->SetDeltaBrightness(delta);
         aDlg->SetColor(5, c0D);
         aDlg->SetColor(6, o);
         aDlg->SetIntValue(1, Edgewidth);
           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();
+          QColor selectioncolor = aDlg->GetColor(7);
+          QColor preSelectioncolor = aDlg->GetColor(8);
+          int delta = aDlg->GetDeltaBrightness();
 
           /* Point marker */
           theMarkerMap[ aStudy->StudyId() ] = aDlg->getCustomMarkerMap();
                 anActor->SetSufaceColor(vtkFloatingPointType (color.red()) / 255.,
                                         vtkFloatingPointType (color.green()) / 255.,
                                         vtkFloatingPointType (color.blue()) / 255.,
-                                       delta);
+                                        delta);
                 /* edge color */
                 anActor->SetEdgeColor(vtkFloatingPointType (edgecolor.red()) / 255.,
                                       vtkFloatingPointType (edgecolor.green()) / 255.,
                                       vtkFloatingPointType (edgecolor.blue()) / 255.);
-               /* edge outline */
+                /* edge outline */
                 anActor->SetOutlineColor(vtkFloatingPointType (outlinecolor.red()) / 255.,
-                                        vtkFloatingPointType (outlinecolor.green()) / 255.,
-                                        vtkFloatingPointType (outlinecolor.blue()) / 255.);
+                                         vtkFloatingPointType (outlinecolor.green()) / 255.,
+                                         vtkFloatingPointType (outlinecolor.blue()) / 255.);
 
-               /* selection */
+                /* selection */
                 anActor->SetHighlightColor(vtkFloatingPointType (selectioncolor.red()) / 255.,
-                                          vtkFloatingPointType (selectioncolor.green()) / 255.,
-                                          vtkFloatingPointType (selectioncolor.blue()) / 255.);
-               /* pre-selection */
+                                           vtkFloatingPointType (selectioncolor.green()) / 255.,
+                                           vtkFloatingPointType (selectioncolor.blue()) / 255.);
+                /* pre-selection */
                 anActor->SetPreHighlightColor(vtkFloatingPointType (preSelectioncolor.red()) / 255.,
-                                             vtkFloatingPointType (preSelectioncolor.green()) / 255.,
-                                             vtkFloatingPointType (preSelectioncolor.blue()) / 255.);
-               
+                                              vtkFloatingPointType (preSelectioncolor.green()) / 255.,
+                                              vtkFloatingPointType (preSelectioncolor.blue()) / 255.);
+                
 
                 /* Shrink factor and size edges */
                 anActor->SetShrinkFactor(aDlg->GetIntValue(2) / 100.);
@@ -1975,6 +2010,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case 116:
   case 115:
+  case 117:
   case 113:
   case 112:
   case 111:                                     // IMPORT
@@ -2013,6 +2049,8 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case 141:
   case 142:
   case 143:
+  case 144:
+  case 145:
     {
       ::ExportMeshToFile(theCommandID);
       break;
@@ -3371,16 +3409,19 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction(  114, "NUM" );
   createSMESHAction(  115, "STL" );
   createSMESHAction(  116, "CGNS" );
+  createSMESHAction(  117, "SAUV" );
   createSMESHAction(  121, "DAT" );
   createSMESHAction(  122, "MED" );
   createSMESHAction(  123, "UNV" );
   createSMESHAction(  140, "STL" );
   createSMESHAction(  142, "CGNS" );
+  createSMESHAction(  144, "SAUV" );
   createSMESHAction(  124, "EXPORT_DAT" );
   createSMESHAction(  125, "EXPORT_MED" );
   createSMESHAction(  126, "EXPORT_UNV" );
   createSMESHAction(  141, "EXPORT_STL" );
   createSMESHAction(  143, "EXPORT_CGNS" );
+  createSMESHAction(  145, "EXPORT_SAUV" );
   createSMESHAction(  150, "FILE_INFO" );
   createSMESHAction(   33, "DELETE",          "ICON_DELETE", Qt::Key_Delete );
   createSMESHAction( 5105, "SEL_FILTER_LIB" );
@@ -3547,6 +3588,7 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createMenu( 116, importId, -1 );
 #endif
+  createMenu( 117, importId, -1 );
   createMenu( 121, exportId, -1 );
   createMenu( 122, exportId, -1 );
   createMenu( 123, exportId, -1 );
@@ -3554,6 +3596,7 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createMenu( 142, exportId, -1 ); // export to CGNS
 #endif
+  createMenu( 144, exportId, -1 ); // export to SAUV
   createMenu( separator(), fileId, 10 );
 
   createMenu( 33, editId, -1 );
@@ -3857,6 +3900,7 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createPopupItem( 143, OB, mesh_group, multiple_non_empty );   // EXPORT_CGNS
 #endif
+  createPopupItem( 145, OB, mesh_group, multiple_non_empty );   // EXPORT_SAUV
   createPopupItem(  33, OB, mesh_part + " " + hyp_alg );        // DELETE
   popupMgr()->insert( separator(), -1, 0 );
 
@@ -4451,7 +4495,7 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( notifyMode, "indexes", indices );
 
   int infoGroup = addPreference( tr( "PREF_GROUP_INFO" ), genTab );
-  setPreferenceProperty( computeGroup, "columns", 2 );
+  setPreferenceProperty( infoGroup, "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" ) );
@@ -4461,6 +4505,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 );
@@ -5117,17 +5166,17 @@ void SMESHGUI::storeVisualParameters (int savePoint)
 
                   // Colors (surface:edge:)
                   vtkFloatingPointType r, g, b;
-                 int delta;
-                 
+                  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);
 
-                 colorStr += gDigitsSep; colorStr += "backsurface";
-                 colorStr += gDigitsSep; colorStr += QString::number(delta);
-                                     
+                  colorStr += gDigitsSep; colorStr += "backsurface";
+                  colorStr += gDigitsSep; colorStr += QString::number(delta);
+                                      
 
                   aSmeshActor->GetEdgeColor(r, g, b);
                   colorStr += gDigitsSep; colorStr += "edge";
@@ -5501,43 +5550,43 @@ void SMESHGUI::restoreVisualParameters (int savePoint)
               if (colors.count() == 16 || colors.count() == 18 ) {
                 if (colors[0] != "surface" || colors[4]  != "backsurface" ||
                     (colors[8] != "edge" && colors[6] != "edge" ) || (colors[12] != "node" && colors[10] != "node") ||
-                   (colors.count() == 18 && colors[14] != "outline")) {
+                    (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 or surface:r:g:b:backsurface:delta:edge:r:g:b:node:r:g:b:outline:r:g:b");
                 }
                 else {
-                 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();
-                 }
+                  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);