Salome HOME
IMP 23373: [CEA 1170] Optimization of a 3D mesh using MG-Tetra
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_HypothesesUtils.cxx
index ad2e6f3f3d6b091ccdf572ad7c9dd582c312f6c2..c1fc49bee78d6131bc95fe04ff1a9491d2ae4b1e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -49,9 +49,7 @@
 #include <string>
 
 // Qt includes
-#include <QMap>
 #include <QDir>
-//#include <QList>
 
 
 // Other includes
@@ -74,7 +72,7 @@
 #endif
 
 #ifdef _DEBUG_
-static int MYDEBUG = 1;
+static int MYDEBUG = 0;
 #else
 static int MYDEBUG = 0;
 #endif
@@ -180,7 +178,8 @@ namespace SMESH
   void InitAvailableHypotheses()
   {
     SUIT_OverrideCursor wc;
-    if (myHypothesesMap.empty() && myAlgorithmsMap.empty()) {
+    if ( myHypothesesMap.empty() && myAlgorithmsMap.empty() )
+    {
       // Resource manager
       SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr();
       if (!resMgr) return;
@@ -283,14 +282,14 @@ namespace SMESH
   QStringList GetAvailableHypotheses( const bool isAlgo,
                                       const int  theDim,
                                       const bool isAux,
-                                      const bool isNeedGeometry,
+                                      const bool hasGeometry,
                                       const bool isSubMesh)
   {
     QStringList aHypList;
 
     // Init list of available hypotheses, if needed
     InitAvailableHypotheses();
-    bool checkGeometry = ( !isNeedGeometry && isAlgo );
+    bool checkGeometry = ( isAlgo );
     const char* context = isSubMesh ? "LOCAL" : "GLOBAL";
     // fill list of hypotheses/algorithms
     THypothesisDataMap& pMap = isAlgo ? myAlgorithmsMap : myHypothesesMap;
@@ -302,7 +301,8 @@ namespace SMESH
           ( theDim < 0              || aData->Dim.contains( theDim )) &&
           ( isAlgo                  || aData->IsAuxOrNeedHyp == isAux ) &&
           ( aData->Context == "ANY" || aData->Context == context ) &&
-          ( !checkGeometry          || aData->IsNeedGeometry == isNeedGeometry ))
+          ( !checkGeometry          || (!aData->IsNeedGeometry  ||
+                                        ( aData->IsNeedGeometry > 0 ) == hasGeometry)))
       {
         aHypList.append(anIter.key());
       }
@@ -369,6 +369,90 @@ namespace SMESH
     return aHypData;
   }
 
+  //================================================================================
+  /*!
+   * \brief Return the HypothesisData holding a name of a group of hypotheses
+   *        a given hypothesis belongs to
+   */
+  //================================================================================
+
+  HypothesisData* GetGroupTitle( const HypothesisData* hyp, const bool isAlgo )
+  {
+    static std::vector< std::vector< HypothesisData > > theGroups;
+    if ( theGroups.empty() )
+    {
+      theGroups.resize(14); // 14: isAlgo * 10 + dim
+
+      QString dummyS("GROUP");
+      QList<int> dummyIL; dummyIL << 1;
+      QStringList dummySL;
+      HypothesisData group( dummyS,dummyS,dummyS,dummyS,dummyS,dummyS,dummyS,-1,-1,
+                            dummyIL, 0, dummySL,dummySL,dummySL,dummySL,0,0 );
+      // no group
+      int key = 0;
+      theGroups[ key ].push_back( group );
+
+      // 1D algo
+      key = 11;
+      //        0: Basic
+      group.Label = "GROUP:" + QObject::tr( "SMESH_1D_ALGO_GROUP_BASIC" );
+      theGroups[ key ].push_back( group );
+      //        1: Advanced
+      group.Label = "GROUP:" + QObject::tr( "SMESH_1D_ALGO_GROUP_ADVANCED" );
+      theGroups[ key ].push_back( group );
+
+      // 1D hypotheses
+      key = 01;
+      //        0: Basic
+      group.Label = "GROUP:" + QObject::tr( "SMESH_1D_HYP_GROUP_BASIC" );
+      theGroups[ key ].push_back( group );
+      //        1: Progression
+      group.Label = "GROUP:" + QObject::tr( "SMESH_1D_HYP_GROUP_PROGRESSION" );
+      theGroups[ key ].push_back( group );
+      //        2: Advanced
+      group.Label = "GROUP:" + QObject::tr( "SMESH_1D_HYP_GROUP_ADVANCED" );
+      theGroups[ key ].push_back( group );
+
+      // 2D algo
+      key = 12;
+      //        0: Regular
+      group.Label = "GROUP:" + QObject::tr( "SMESH_2D_ALGO_GROUP_REGULAR" );
+      theGroups[ key ].push_back( group );
+      //        1: Free
+      group.Label = "GROUP:" + QObject::tr( "SMESH_2D_ALGO_GROUP_FREE" );
+      theGroups[ key ].push_back( group );
+      //        2: Advanced
+      group.Label = "GROUP:" + QObject::tr( "SMESH_2D_ALGO_GROUP_ADVANCED" );
+      theGroups[ key ].push_back( group );
+
+      // 3D algo
+      key = 13;
+      //        0: Regular
+      group.Label = "GROUP:" + QObject::tr( "SMESH_3D_ALGO_GROUP_REGULAR" );
+      theGroups[ key ].push_back( group );
+      //        1: Free
+      group.Label = "GROUP:" + QObject::tr( "SMESH_3D_ALGO_GROUP_FREE" );
+      theGroups[ key ].push_back( group );
+      //        2: Advanced
+      group.Label = "GROUP:" + QObject::tr( "SMESH_3D_ALGO_GROUP_ADVANCED" );
+      theGroups[ key ].push_back( group );
+    }
+
+    size_t key = 0, groupID = 0;
+    if ( hyp && !hyp->Dim.isEmpty() )
+    {
+      key     = hyp->Dim[0] + isAlgo * 10;
+      groupID = hyp->GroupID;
+    }
+
+    if ( key < theGroups.size() && !theGroups[ key ].empty() )
+    {
+      std::vector< HypothesisData > & group = theGroups[ key ];
+      return & ( groupID < group.size() ? group[ groupID ] : group.back() );
+    }
+    return & theGroups[ 0 ][ 0 ];
+  }
+
   bool IsAvailableHypothesis(const HypothesisData* algoData,
                              const QString&        hypType,
                              bool&                 isAuxiliary)
@@ -378,7 +462,7 @@ namespace SMESH
       return false;
     if ( algoData->BasicHypos.contains( hypType ))
       return true;
-    if ( algoData->OptionalHypos.contains( hypType)) {
+    if ( algoData->OptionalHypos.contains( hypType )) {
       isAuxiliary = true;
       return true;
     }
@@ -629,7 +713,7 @@ namespace SMESH
             {
               SMESH_Hypothesis_var hypo = SMESH_Hypothesis::_narrow( SObjectToObject( aHypObj ) );
               SObjectList meshList = GetMeshesUsingAlgoOrHypothesis( hypo );
-              for( int i = 0; i < meshList.size(); i++ )
+              for( size_t i = 0; i < meshList.size(); i++ )
                 RemoveHypothesisOrAlgorithmOnMesh( meshList[ i ], hypo );
             }
         }
@@ -729,7 +813,7 @@ namespace SMESH
   QString GetMessageOnAlgoStateErrors(const algo_error_array& errors)
   {
     QString resMsg; // PAL14861 = QObject::tr("SMESH_WRN_MISSING_PARAMETERS") + ":\n";
-    for ( int i = 0; i < errors.length(); ++i ) {
+    for ( size_t i = 0; i < errors.length(); ++i ) {
       const SMESH::AlgoStateError & error = errors[ i ];
       const bool hasAlgo = ( strlen( error.algoName ) != 0 );
       QString msg;