Salome HOME
Update of CheckDone
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_HypothesesUtils.cxx
index 42847411ba21f6d29df4542e7065076733b70973..8a07c2b9b206b7bd60e86e4946c2270f445b1951 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -34,7 +34,8 @@
 #include "SMESHGUI_VTKUtils.h"
 #include "SMESHGUI_XmlHandler.h"
 
-#include "SMESH_Actor.h"
+#include <SMESH_Actor.h>
+#include <SMESH_TryCatch.hxx>
 
 // SALOME GUI includes
 #include <SUIT_Desktop.h>
@@ -67,6 +68,7 @@
  #define LoadLib( name ) LoadLibrary( name )
  #define GetProc GetProcAddress
  #define UnLoadLib( handle ) FreeLibrary( handle );
+ #define env_sep ";"
 #else // WIN32
  #define LibHandle void*
  #ifdef DYNLOAD_LOCAL
  #endif // DYNLOAD_LOCAL
  #define GetProc dlsym
  #define UnLoadLib( handle ) dlclose( handle );
+ #define env_sep ":"
 #endif // WIN32
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 namespace SMESH
 {
   typedef IMap<QString,HypothesisData*> THypothesisDataMap;
@@ -197,7 +194,7 @@ namespace SMESH
       if (cenv)
         HypsXml.sprintf("%s", cenv);
 
-      QStringList HypsXmlList = HypsXml.split(":", QString::SkipEmptyParts);
+      QStringList HypsXmlList = HypsXml.split(env_sep, QString::SkipEmptyParts);
       if (HypsXmlList.count() == 0) {
         SUIT_MessageBox::critical(SMESHGUI::desktop(),
                                   QObject::tr("SMESH_WRN_WARNING"),
@@ -329,8 +326,7 @@ namespace SMESH
         hypoSet != myListOfHypothesesSets.end();
         ++hypoSet ) {
       HypothesesSet* aSet = *hypoSet;
-      if ( aSet && ( aSet->count( true ) || aSet->count( false )) &&
-          aSet->maxDim() <= maxDim)
+      if ( aSet && 0 <= aSet->maxDim() && aSet->maxDim() <= maxDim )
       {
         aSetNameList.append( mangledHypoSetName( aSet ));
       }
@@ -495,7 +491,7 @@ namespace SMESH
 
   SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator(const QString& aHypType)
   {
-    if(MYDEBUG) MESSAGE("Get HypothesisCreator for " << aHypType.toLatin1().data());
+    MESSAGE("Get HypothesisCreator for " << aHypType.toLatin1().data());
 
     SMESHGUI_GenericHypothesisCreator* aCreator = 0;
 
@@ -520,7 +516,7 @@ namespace SMESH
       // 3. Load Client Plugin Library
       try {
         // load plugin library
-        if(MYDEBUG) MESSAGE("Loading client meshers plugin library ...");
+        MESSAGE("Loading client meshers plugin library ...");
 #ifdef WIN32
 #ifdef UNICODE
         LPTSTR path = new TCHAR[aClientLibName.length() + 1];
@@ -550,21 +546,21 @@ namespace SMESH
         }
         else {
           // get method, returning hypothesis creator
-          if(MYDEBUG) MESSAGE("Find GetHypothesisCreator() method ...");
+          MESSAGE("Find GetHypothesisCreator() method ...");
           typedef SMESHGUI_GenericHypothesisCreator* (*GetHypothesisCreator) \
             ( const QString& );
           GetHypothesisCreator procHandle =
             (GetHypothesisCreator)GetProc(libHandle, "GetHypothesisCreator");
           if (!procHandle) {
-            if(MYDEBUG) MESSAGE("bad hypothesis client plugin library");
+            MESSAGE("bad hypothesis client plugin library");
             UnLoadLib(libHandle);
           }
           else {
             // get hypothesis creator
-            if(MYDEBUG) MESSAGE("Get Hypothesis Creator for " << aHypType.toLatin1().data());
+            MESSAGE("Get Hypothesis Creator for " << aHypType.toLatin1().data());
             aCreator = procHandle( aHypType );
             if (!aCreator) {
-              if(MYDEBUG) MESSAGE("no such a hypothesis in this plugin");
+              MESSAGE("no such a hypothesis in this plugin");
             }
             else {
               // map hypothesis creator to a hypothesis name
@@ -591,9 +587,9 @@ namespace SMESH
 
   SMESH::SMESH_Hypothesis_ptr CreateHypothesis(const QString& aHypType,
                                                const QString& aHypName,
-                                               const bool isAlgo)
+                                               const bool /*isAlgo*/)
   {
-    if(MYDEBUG) MESSAGE("Create " << aHypType.toLatin1().data() <<
+    MESSAGE("Create " << aHypType.toLatin1().data() <<
                         " with name " << aHypName.toLatin1().data());
     HypothesisData* aHypData = GetHypothesisData(aHypType);
     QString aServLib = aHypData->ServerLibName;
@@ -627,16 +623,19 @@ namespace SMESH
 
     HypothesisData* aHypData = GetHypothesisData(aHypType);
     QString aServLib = aHypData->ServerLibName;
+    SMESH_TRY;
     return SMESHGUI::GetSMESHGen()->IsApplicable( aHypType.toLatin1().data(),
                                                   aServLib.toUtf8().data(),
                                                   theGeomObject,
                                                   toCheckAll);
+    SMESH_CATCH( SMESH::printErrorInDebugMode );
+    return false;
   }
 
 
   bool AddHypothesisOnMesh (SMESH::SMESH_Mesh_ptr aMesh, SMESH::SMESH_Hypothesis_ptr aHyp)
   {
-    if(MYDEBUG) MESSAGE ("SMESHGUI::AddHypothesisOnMesh");
+    MESSAGE ("SMESHGUI::AddHypothesisOnMesh");
     int res = SMESH::HYP_UNKNOWN_FATAL;
     SUIT_OverrideCursor wc;
 
@@ -646,6 +645,7 @@ namespace SMESH
       try {
         CORBA::String_var error;
         res = aMesh->AddHypothesis(aShapeObject, aHyp, error.out());
+        UpdateViewer(aMesh);
         if (res > SMESH::HYP_OK) {
           wc.suspend();
           processHypothesisStatus(res, aHyp, true, error.in() );
@@ -664,11 +664,11 @@ namespace SMESH
 
   bool AddHypothesisOnSubMesh (SMESH::SMESH_subMesh_ptr aSubMesh, SMESH::SMESH_Hypothesis_ptr aHyp)
   {
-    if(MYDEBUG) MESSAGE("SMESHGUI::AddHypothesisOnSubMesh() ");
+    MESSAGE("SMESHGUI::AddHypothesisOnSubMesh() ");
     int res = SMESH::HYP_UNKNOWN_FATAL;
     SUIT_OverrideCursor wc;
 
-    if (!aSubMesh->_is_nil() && ! aHyp->_is_nil()) {
+    if ( !aSubMesh->_is_nil() && !aHyp->_is_nil() ) {
       try {
         SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
         _PTR(SObject) SsubM = SMESH::FindSObject(aSubMesh);
@@ -677,6 +677,7 @@ namespace SMESH
         {
           CORBA::String_var error;
           res = aMesh->AddHypothesis( aShapeObject, aHyp, error.out() );
+          UpdateViewer(aMesh);
           if (res > SMESH::HYP_OK) {
             wc.suspend();
             processHypothesisStatus( res, aHyp, true, error.in() );
@@ -765,12 +766,7 @@ namespace SMESH
             processHypothesisStatus(res, anHyp, false);
             wc.resume();
           }
-          if ( _PTR(SObject) meshSO = SMESH::FindSObject(aMesh) )
-          {
-            if ( SMESH_Actor* actor = SMESH::FindActorByEntry( meshSO->GetID().c_str() ))
-              if( actor->GetVisibility() )
-                actor->Update();
-          }
+          UpdateViewer(aMesh);
         }
       } catch(const SALOME::SALOME_Exception& S_ex) {
         wc.suspend();
@@ -779,6 +775,16 @@ namespace SMESH
       }
     }
     return res < SMESH::HYP_UNKNOWN_FATAL;
+  } 
+
+  void UpdateViewer(SMESH::SMESH_Mesh_ptr theMesh)
+  {
+    if (_PTR(SObject) meshSO = SMESH::FindSObject(theMesh))
+    {
+      if (SMESH_Actor* actor = SMESH::FindActorByEntry(meshSO->GetID().c_str()))
+        if (actor->GetVisibility())
+          actor->Update();
+    }
   }
 
   SObjectList GetMeshesUsingAlgoOrHypothesis(SMESH::SMESH_Hypothesis_ptr AlgoOrHyp)
@@ -792,7 +798,7 @@ namespace SMESH
       if (SO_Hypothesis) {
         SObjectList listSO = SMESH::getStudy()->FindDependances(SO_Hypothesis);
 
-        if(MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency number ="<<listSO.size());
+        MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency number ="<<listSO.size());
         for (unsigned int i = 0; i < listSO.size(); i++) {
           _PTR(SObject) SO = listSO[i];
           if (SO) {
@@ -800,7 +806,7 @@ namespace SMESH
             if (aFather) {
               _PTR(SObject) SOfatherFather = aFather->GetFather();
               if (SOfatherFather) {
-                if(MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency added to list");
+                MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency added to list");
                 index++;
                 listSOmesh.resize(index);
                 listSOmesh[index - 1] = SOfatherFather;
@@ -810,7 +816,7 @@ namespace SMESH
         }
       }
     }
-    if (MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): completed");
+    MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): completed");
     return listSOmesh;
   }