]> SALOME platform Git repositories - plugins/blsurfplugin.git/commitdiff
Salome HOME
Compute Progress bar
authoreap <eap@opencascade.com>
Mon, 8 Jul 2013 11:27:50 +0000 (11:27 +0000)
committereap <eap@opencascade.com>
Mon, 8 Jul 2013 11:27:50 +0000 (11:27 +0000)
src/BLSURFPlugin/BLSURFPlugin_BLSURF.cxx

index 41ce9764803ce4a09cce32fa8084a00446c9ae68..4ca7d10a7ed3e7a1c38e7be0daa85ef28fdd2ed8 100644 (file)
@@ -1553,6 +1553,7 @@ namespace
   {
     std::string * _error;
     int           _verbosity;
+    double *      _progress;
   };
 
 
@@ -1659,6 +1660,7 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
   /* Set the message callback in the working context */
   message_cb_user_data mcud;
   mcud._error     = & this->SMESH_Algo::_comment;
+  mcud._progress  = & this->SMESH_Algo::_progress;
   mcud._verbosity =
     _hypothesis ? _hypothesis->GetVerbosity() : BLSURFPlugin_Hypothesis::GetDefaultVerbosity();
   context_set_message_callback(ctx, message_cb, &mcud);
@@ -1741,7 +1743,6 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
 
   assert(Py_IsInitialized());
   PyGILState_STATE gstate;
-  gstate = PyGILState_Ensure();
 
   string theSizeMapStr;
 
@@ -1792,6 +1793,7 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
         if (theSizeMapStr.find(bad_end) == (theSizeMapStr.size()-bad_end.size()-1))
           continue;
         // Expr To Python function, verification is performed at validation in GUI
+        gstate = PyGILState_Ensure();
         PyObject * obj = NULL;
         obj= PyRun_String(theSizeMapStr.c_str(), Py_file_input, main_dict, NULL);
         Py_DECREF(obj);
@@ -1799,6 +1801,7 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
         func = PyObject_GetAttrString(main_mod, "f");
         FaceId2PythonSmp[iface]=func;
         FaceId2SizeMap.erase(faceKey);
+        PyGILState_Release(gstate);
       }
 
       // Specific size map = Attractor
@@ -1958,6 +1961,7 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
           if (theSizeMapStr.find(bad_end) == (theSizeMapStr.size()-bad_end.size()-1))
             continue;
           // Expr To Python function, verification is performed at validation in GUI
+          gstate = PyGILState_Ensure();
           PyObject * obj = NULL;
           obj= PyRun_String(theSizeMapStr.c_str(), Py_file_input, main_dict, NULL);
           Py_DECREF(obj);
@@ -1965,6 +1969,7 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
           func = PyObject_GetAttrString(main_mod, "f");
           EdgeId2PythonSmp[ic]=func;
           EdgeId2SizeMap.erase(edgeKey);
+          PyGILState_Release(gstate);
         }
       }
       /* data of nodes existing on the edge */
@@ -2216,8 +2221,6 @@ bool BLSURFPlugin_BLSURF::compute(SMESH_Mesh&         aMesh,
     error(_comment);
   }
 
-  PyGILState_Release(gstate);
-
   std::cout << std::endl;
   std::cout << "End of Surface Mesh generation" << std::endl;
   std::cout << std::endl;
@@ -2845,8 +2848,11 @@ status_t message_cb(message_t *msg, void *user_data)
       len--;
     mcud->_error->append( desc, len );
   }
-  else if ( mcud->_verbosity > 0 ) {
-    std::cout << desc << std::endl;
+  else {
+    if ( errnumber == 3009001 )
+      * mcud->_progress = atof( desc + 11 ) / 100.;
+    if ( mcud->_verbosity > 0 )
+      std::cout << desc << std::endl;
   }
   return STATUS_OK;
 }