Salome HOME
Merge branch 'occ/new_mg_licnese' of https://codev-tuleap.cea.fr/plugins/git/salome... occ/new_mg_licnese
authorAnthony Geay <anthony.geay@edf.fr>
Fri, 10 Sep 2021 13:24:05 +0000 (15:24 +0200)
committerAnthony Geay <anthony.geay@edf.fr>
Fri, 10 Sep 2021 13:24:05 +0000 (15:24 +0200)
12 files changed:
src/SMESHUtils/SMESH_MGLicenseKeyGen.cxx
src/SMESHUtils/SMESH_MGLicenseKeyGen.hxx
src/SMESH_SWIG/CMakeLists.txt
src/SMESH_SWIG/SMeshHelper.cxx
src/SMESH_SWIG/SMeshHelper.h
src/SMESH_SWIG/SMeshHelper.i
src/Tools/MGCleanerPlug/MGCleanerMonPlugDialog.py
src/Tools/MGCleanerPlug/MGCleanerMonViewText.py
src/Tools/MGCleanerPlug/MGCleanerplug_plugin.py
src/Tools/YamsPlug/monViewText.py
src/Tools/YamsPlug/monYamsPlugDialog.py
src/Tools/YamsPlug/yamsplug_plugin.py

index 99336c6a34a28e226cae3228ba8be9858bdfaec1..ec06d988548ae0d1a1a1010a6e161dda1fc55e62 100644 (file)
@@ -152,12 +152,16 @@ namespace
                                  0,
                                  NULL
                                  );
-    if ( msgLen > 0 )
-      error = (char*) cstr;
-
-    LocalFree(cstr);
+    if ( msgLen > 0 ) {
+#  if defined( UNICODE )
+      error = Kernel_Utils::encode_s((wchar_t*)cstr);
+#  else
+      error = (char*)cstr;
+#  endif
+      LocalFree(cstr);
+    }
 
-    return msgLen;
+    return (bool)msgLen;
 
 #endif
   }
@@ -259,11 +263,11 @@ namespace
 
 #ifdef WIN32
 
-    std::string outFile = tmpDir + "libMeshGemsKeyGenerator.dll";
+    std::string outFile = tmpDir + "MeshGemsKeyGenerator.dll";
 
     // use wget (== Invoke-WebRequest) PowerShell command available since Windows 7
     std::string psCmd = "wget -Uri " + url + " -OutFile " + outFile;
-    std::string   cmd = "start powershell.exe " + psCmd;
+    std::string   cmd = "powershell.exe " + psCmd;
 
 #else
 
@@ -290,6 +294,8 @@ namespace
 
     if ( ok )
       libraryFile._name = outFile;
+    else
+      error = "Can't download file " + url;
 
     return ok;
   }
@@ -372,27 +378,27 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
     if ( !loadLibrary( error, libraryFile ))
       return false;
 
+    bool ok = false;
     typedef bool (*SignFun)(void* );
-    SignFun signFun = (SignFun) GetProc( theLibraryHandle, "SignCAD" ); 
+    SignFun signFun = (SignFun) GetProc( theLibraryHandle, "SignCAD" );
     if ( !signFun )
     {
       if ( ! getLastError( error ))
         error = SMESH_Comment( "Can't find symbol 'SignCAD' in '") << getenv( theEnvVar ) << "'";
     }
+    else
+    {
+      SMESH_TRY;
 
-    bool ok;
-
-    SMESH_TRY;
-
-    ok = signFun( meshgems_cad );
-
-    SMESH_CATCH( SMESH::returnError );
+      ok = signFun( meshgems_cad );
 
-    if ( !error.empty() )
-      ok = false;
-    else if ( !ok )
-      error = "SignCAD() failed (located in '" + libraryFile._name + "')";
+      SMESH_CATCH( SMESH::returnError );
 
+      if ( !error.empty() )
+        ok = false;
+      else if ( !ok )
+        error = "SignCAD() failed (located in '" + libraryFile._name + "')";
+    }
     return ok;
   }
 
@@ -411,6 +417,7 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
     if ( !loadLibrary( error, libraryFile ))
       return false;
 
+    bool ok = false;
     typedef bool (*SignFun)(void* );
     SignFun signFun = (SignFun) GetProc( theLibraryHandle, "SignMesh" );
     if ( !signFun )
@@ -418,19 +425,19 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
       if ( ! getLastError( error ))
         error = SMESH_Comment( "Can't find symbol 'SignMesh' in '") << getenv( theEnvVar ) << "'";
     }
-    bool ok;
-
-    SMESH_TRY;
-
-    ok = signFun( meshgems_mesh );
+    else
+    {
+      SMESH_TRY;
 
-    SMESH_CATCH( SMESH::returnError );
+      ok = signFun( meshgems_mesh );
 
-    if ( !error.empty() )
-      ok = false;
-    else if ( !ok )
-      error = "SignMesh() failed (located in '" + libraryFile._name + "')";
+      SMESH_CATCH( SMESH::returnError );
 
+      if ( !error.empty() )
+        ok = false;
+      else if ( !ok )
+        error = "SignMesh() failed (located in '" + libraryFile._name + "')";
+    }
     return ok;
   }
 
@@ -463,8 +470,10 @@ namespace SMESHUtils_MGLicenseKeyGen // API implementation
       if ( ! getLastError( error ))
         error = SMESH_Comment( "Can't find symbol 'GetKey' in '") << getenv( theEnvVar ) << "'";
     }
-    key = keyFun( gmfFile, nbVertex, nbEdge, nbFace, nbVol );
-
+    else
+    {
+      key = keyFun( gmfFile, nbVertex, nbEdge, nbFace, nbVol );
+    }
     if ( key.empty() )
       error = "GetKey() failed (located in '" + libraryFile._name + "')";
 
index c81fa3090ae331a467214159956244e0a751e65c..796cde4b58d2ad0c2cd5358b3280485460d71f82 100644 (file)
@@ -44,7 +44,7 @@ namespace SMESHUtils_MGLicenseKeyGen
                                        int                nbVol,
                                        std::string&       error);
 
-  SMESHUtils_EXPORT bool        CheckKeyGeLibrary( std::string& error );
+  SMESHUtils_EXPORT bool        CheckKeyGenLibrary( std::string& error );
 
   SMESHUtils_EXPORT std::string GetLibraryName();
 }
index 53b87e321ee04ceeecd62bc65b467a9d6f7cf8f1..bd3a578d4c49517b490a2a57c8aaa9c7c73251fb 100644 (file)
@@ -25,6 +25,8 @@ include_directories(
   ${PROJECT_SOURCE_DIR}/src/SMDS
   ${PROJECT_SOURCE_DIR}/src/SMESH
   ${PROJECT_SOURCE_DIR}/src/SMESH_I
+  ${PROJECT_SOURCE_DIR}/src/Driver
+  ${PROJECT_SOURCE_DIR}/src/DriverGMF
   ${CMAKE_CURRENT_SOURCE_DIR}
   ${PROJECT_BINARY_DIR}/idl
 )
@@ -123,7 +125,7 @@ IF(${CMAKE_VERSION} VERSION_LESS "3.8.0")
 ELSE()
   SWIG_ADD_LIBRARY(SMeshHelper LANGUAGE python SOURCES ${SMeshHelper_SOURCES})
 ENDIF()
-SWIG_LINK_LIBRARIES(SMeshHelper ${PYTHON_LIBRARIES} ${PLATFORM_LIBS} SMESHEngine )
+SWIG_LINK_LIBRARIES(SMeshHelper ${PYTHON_LIBRARIES} ${PLATFORM_LIBS} SMESHEngine MeshDriverGMF )
 SWIG_CHECK_GENERATION(SMeshHelper)
 IF(WIN32)
   SET_TARGET_PROPERTIES(_SMeshHelper PROPERTIES DEBUG_OUTPUT_NAME _SMeshHelper_d)
index ee2d54b05f57210512fe23eccb0696af91b19bcc..92991e20c66b8a6ebc61bfa07ac5069b124f79f6 100644 (file)
 
 #include <cstring>
 
+#include <DriverGMF_Read.hxx>
+#include <SMESH_MGLicenseKeyGen.hxx>
+
+
 std::string BuildSMESHInstanceInternal()
 {
   Engines::EngineComponent_var zeRef = RetrieveSMESHInstance();
   CORBA::String_var ior = KERNEL::getORB()->object_to_string(zeRef);
   return std::string(ior.in());
 }
+
+std::string GetMGLicenseKeyImpl(const char* gmfFile)
+{
+  smIdType nbVertex, nbEdge, nbFace, nbVol;
+  DriverGMF_Read gmfReader;
+  gmfReader.SetFile( gmfFile );
+  gmfReader.GetMeshInfo( nbVertex, nbEdge, nbFace, nbVol );
+
+  std::string errorTxt;
+  std::string key = SMESHUtils_MGLicenseKeyGen::GetKey( gmfFile,
+                                                        FromSmIdType<int>( nbVertex ),
+                                                        FromSmIdType<int>( nbEdge ),
+                                                        FromSmIdType<int>( nbFace ),
+                                                        FromSmIdType<int>( nbVol ),
+                                                        errorTxt );
+  if ( !errorTxt.empty() )
+  {
+    std::cerr << "Error: Pb with MeshGems license: " << errorTxt << std::endl;
+    key = "<" + errorTxt + ">";
+  }
+  return key;
+}
index 58b2c5321ffc1b024a4b3e064c49c77c3eb1788b..9c912869ebadc71da439a40f3f350791ee975a4c 100644 (file)
@@ -22,3 +22,5 @@
 #include <string>
 
 std::string BuildSMESHInstanceInternal();
+
+std::string GetMGLicenseKeyImpl(const char* gmfFile);
index b73a87db93d123246656a1709710d10c44bd6299..d1220cb9021e06fbafbae93c6cd32ba575468d60 100644 (file)
@@ -31,4 +31,9 @@
   {
     return BuildSMESHInstanceInternal();
   }
+
+  std::string GetMGLicenseKey(const char* gmfFile)
+  {
+    return GetMGLicenseKeyImpl( gmfFile );
+  }
 }
index c701b3449f95ad76ab8b97fa8ccf13d0fa90266f..f5c226b8781f81474288e2492de0e51fd296eb69 100644 (file)
@@ -525,18 +525,6 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
 
   def PrepareLigneCommande(self):
     """
-    #use doc examples of mg-cleaner:
-    ls -al /data/tmplgls/salome/prerequis/install/COMMON_64/MeshGems-1.0/bin
-    source /data/tmplgls/salome/prerequis/install/LICENSE/dlim8.var.sh
-    export PATH=/data/tmplgls/salome/prerequis/install/COMMON_64/MeshGems-1.0/bin/Linux_64:$PATH
-    cp -r /data/tmplgls/salome/prerequis/install/COMMON_64/MeshGems-1.0/examples .
-    cd examples
-    mg-cleaner.exe --help
-    mg-cleaner.exe --in case7.mesh --out case7-test.mesh --check
-    mg-cleaner.exe case7.mesh case7-fix.mesh --fix
-    mg-cleaner.exe --in Porsche.mesh --out Porsche-test.mesh --check
-    mg-cleaner.exe --in Porsche.mesh --out Porschefix.mesh --fix
-    mg-cleaner.exe --in Porsche.mesh --out PorscheNewfix.mesh --fix --resolution_length 0.03
     """
     
     #self.commande="mg-cleaner.exe --in " + self.fichierIn + " --out " + self.fichierOut + " --fix2pass" 
@@ -577,6 +565,11 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     if not self.CB_ComputedOverlapDistance.isChecked(): #computed default
       self.commande+=" --overlap_distance " + self.SP_toStr(self.SP_OverlapDistance)
     self.commande+=" --overlap_angle " + str(self.SP_OverlapAngle.value())
+
+    import SMeshHelper
+    key = SMeshHelper.GetMGLicenseKey( self.fichierIn )
+    self.commande+=' --key ' + key
+
     if verbose: print(("INFO: MGCCleaner command:\n  %s" % self.commande))
     return True
 
index 5df87ad6a043f100dc37afb822cb80298143e2a9..a117ed2e9c75f488b8011ecee4b6c80ec57c5f7d 100644 (file)
@@ -35,11 +35,6 @@ from MGCleanerViewText_ui import Ui_ViewExe
 
 verbose = True
 
-force = os.getenv("FORCE_DISTENE_LICENSE_FILE")
-if force != None:
-    os.environ["DISTENE_LICENSE_FILE"] = force
-    os.environ["DLIM8VAR"] = "NOTHING"
-
 class MGCleanerMonViewText(Ui_ViewExe, QDialog):
     """
     Classe permettant la visualisation de texte
index 1058e658c526002962a6ddcee11abc588cb1e124..7bc19e021a544d180c7695788c34eecff2ab7548 100644 (file)
@@ -31,15 +31,6 @@ def MGCleanerLct(context):
   import tempfile
   from qtsalome import QFileDialog, QMessageBox
   
-  #prior test to avoid unnecessary user GUI work with ending crash
-  try :
-      os.environ['DISTENE_LICENSE_FILE']
-  except:
-      QMessageBox.warning(None, "Products", """\
-Distene's product MeshGem Cleaner is not installed.
-required environment variable:
-DISTENE_LICENSE_FILE='.../dlim8.var.sh'""")
-      return
   import MGCleanerMonPlugDialog
   window = MGCleanerMonPlugDialog.getDialog()
   window.show()
index eb371b0f10a5d445e0f6d4b1b1f0f5b9a4cac54a..082c9fa01366c364467205265c77aa7869b8842a 100644 (file)
@@ -34,11 +34,6 @@ from ViewText_ui import Ui_ViewExe
 
 verbose = True
 
-force = os.getenv("FORCE_DISTENE_LICENSE_FILE")
-if force != None:
-    os.environ["DISTENE_LICENSE_FILE"] = force
-    os.environ["DLIM8VAR"] = "NOTHING"
-
 class MonViewText(Ui_ViewExe, QDialog):
     """
     Classe permettant la visualisation de texte
index 63efd6c2d58d54f4497dbceb3328ea590918dee4..477a2b4e4fbd5345bc03a41040663b6e418115e0 100644 (file)
@@ -545,6 +545,10 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
 
     self.commande+=' --in "'  + self.fichierIn +'"'
     self.commande+=' --out "' + self.fichierOut +'"'
+
+    import SMeshHelper
+    key = SMeshHelper.GetMGLicenseKey( self.fichierIn )
+    self.commande+=' --key ' + key
     
     print(self.commande)
     return True
index 2784065034ef4bcbdedafc74d6970f279db963d8..4a0b005fb5bbf85567570f45b663065ec48fb945 100644 (file)
@@ -31,15 +31,6 @@ def YamsLct(context):
   import tempfile
   from qtsalome import QFileDialog, QMessageBox
   
-  #prior test to avoid unnecessary user GUI work with ending crash
-  try :
-      os.environ['DISTENE_LICENSE_FILE']
-  except:
-      QMessageBox.warning(None,"Products","""\
-Distene's product MeshGem SurfOpt is not installed.
-required environment variable:
-DISTENE_LICENSE_FILE='.../dlim8.var.sh'""")
-      return
   import monYamsPlugDialog
   window = monYamsPlugDialog.getDialog()
   window.show()