From 6d8c94187119deb2671b65ffc8a0add3ca72b902 Mon Sep 17 00:00:00 2001 From: eap Date: Thu, 5 Aug 2021 15:33:26 +0300 Subject: [PATCH] bos #24596 [CEA] New MeshGems license --- src/GHS3DPRLPlugin/CMakeLists.txt | 1 + .../GHS3DPRLPlugin_GHS3DPRL.cxx | 8 ++- src/GHS3DPRLPlugin/MG_TetraHPC_API.cxx | 55 +++++++++++++++---- src/GHS3DPRLPlugin/MG_TetraHPC_API.hxx | 9 ++- 4 files changed, 58 insertions(+), 15 deletions(-) diff --git a/src/GHS3DPRLPlugin/CMakeLists.txt b/src/GHS3DPRLPlugin/CMakeLists.txt index 0bc8aac..febf877 100644 --- a/src/GHS3DPRLPlugin/CMakeLists.txt +++ b/src/GHS3DPRLPlugin/CMakeLists.txt @@ -54,6 +54,7 @@ SET(_link_LIBRARIES ${SMESH_SMDS} ${SMESH_StdMeshers} ${SMESH_MeshDriverGMF} + ${SMESH_SMESHUtils} ${KERNEL_SalomeGenericObj} ${KERNEL_SALOMELocalTrace} ${KERNEL_SALOMEBasics} diff --git a/src/GHS3DPRLPlugin/GHS3DPRLPlugin_GHS3DPRL.cxx b/src/GHS3DPRLPlugin/GHS3DPRLPlugin_GHS3DPRL.cxx index 71ff805..eb92f30 100644 --- a/src/GHS3DPRLPlugin/GHS3DPRLPlugin_GHS3DPRL.cxx +++ b/src/GHS3DPRLPlugin/GHS3DPRLPlugin_GHS3DPRL.cxx @@ -321,7 +321,7 @@ bool GHS3DPRLPlugin_GHS3DPRL::Compute(SMESH_Mesh& theMesh, exportGMF( &mgTetraHPC, fileskinmesh.ToCString(), meshDS ); - if ( useLib ) + if ( true /*useLib*/ ) { TCollection_AsciiString cmd = TCollection_AsciiString("mg-tetra_hpc.exe") + " --number_of_subdomains=" + NbPart + @@ -337,9 +337,11 @@ bool GHS3DPRLPlugin_GHS3DPRL::Compute(SMESH_Mesh& theMesh, << " Creating a log file : " << logFileName << endl << endl; mgTetraHPC.SetLogFile( logFileName.ToCString() ); - mgTetraHPC.Compute( cmd.ToCString() ); + std::string log; + mgTetraHPC.Compute( cmd.ToCString(), log ); - std::string log = mgTetraHPC.GetLog(); + if ( log.empty() ) + log = mgTetraHPC.GetLog(); if ( log.find(" Dlim " ) != std::string::npos || log.find(" license ") != std::string::npos ) return error("License problem"); diff --git a/src/GHS3DPRLPlugin/MG_TetraHPC_API.cxx b/src/GHS3DPRLPlugin/MG_TetraHPC_API.cxx index b8b59d5..0edfd15 100644 --- a/src/GHS3DPRLPlugin/MG_TetraHPC_API.cxx +++ b/src/GHS3DPRLPlugin/MG_TetraHPC_API.cxx @@ -21,11 +21,13 @@ #include #include +#include #include -#include -#include #include +#include +#include +#include #ifdef USE_MG_LIBS @@ -584,6 +586,14 @@ void MG_TetraHPC_API::LibData::Init() bool MG_TetraHPC_API::LibData::Compute( const std::string& outFile ) { + // MG license + std::string errorTxt; + if ( !SMESHUtils_MGLicenseKeyGen::SignMesh( _tria_mesh, errorTxt )) + { + AddError( SMESH_Comment( "Problem with library SalomeMeshGemsKeyGenerator: ") << errorTxt ); + return false; + } + // Set surface mesh status_t ret = tetra_hpc_set_input_mesh( _session, _tria_mesh ); if ( ret != STATUS_OK ) MG_Error( "unable to set surface mesh"); @@ -635,7 +645,8 @@ struct MG_TetraHPC_API::LibData // to avoid compiler warnings */ //================================================================================ -MG_TetraHPC_API::MG_TetraHPC_API(volatile bool& cancelled_flag, double& progress) +MG_TetraHPC_API::MG_TetraHPC_API(volatile bool& cancelled_flag, double& progress): + _nbNodes(0), _nbEdges(0), _nbFaces(0), _nbVolumes(0) { _useLib = false; _libData = new LibData( cancelled_flag, progress ); @@ -695,7 +706,7 @@ void MG_TetraHPC_API::SetUseExecutable() */ //================================================================================ -bool MG_TetraHPC_API::Compute( const std::string& cmdLine ) +bool MG_TetraHPC_API::Compute( const std::string& cmdLine, std::string& errStr ) { if ( _useLib ) { #ifdef USE_MG_LIBS @@ -744,7 +755,7 @@ bool MG_TetraHPC_API::Compute( const std::string& cmdLine ) } // compute - bool ok = _libData->Compute( outFile ); + bool ok = _libData->Compute( outFile ); GetLog(); // write a log file _logFile = ""; // not to write it again @@ -753,14 +764,26 @@ bool MG_TetraHPC_API::Compute( const std::string& cmdLine ) #endif } - (void)cmdLine; // unused - // Run library ONLY + // add MG license key + { + std::string errorTxt, meshIn; + std::string key = SMESHUtils_MGLicenseKeyGen::GetKey( meshIn, + _nbNodes, _nbEdges, _nbFaces, _nbVolumes, + errorTxt ); + if ( key.empty() ) + { + errStr = "Problem with library SalomeMeshGemsKeyGenerator: " + errorTxt; + return false; + } + + const_cast< std::string& >( cmdLine ) += " --key " + key; + } - // int err = system( cmdLine.c_str() ); // run + int err = system( cmdLine.c_str() ); // run - // if ( err ) - // errStr = SMESH_Comment("system(mg-tetra.exe ...) command failed with error: ") - // << strerror( errno ); + if ( err ) + errStr = SMESH_Comment("system(mg-tetra.exe ...) command failed with error: ") + << strerror( errno ); return false; } @@ -1012,6 +1035,16 @@ int MG_TetraHPC_API::GmfOpenMesh(const char* theFile, int rdOrWr, int ver, int void MG_TetraHPC_API::GmfSetKwd(int iMesh, GmfKwdCod what, int nb ) { + if ( iMesh == 1 ) + { + switch ( what ) { + case GmfVertices: _nbNodes = nb; break; + case GmfEdges: _nbEdges = nb; break; + case GmfTriangles: _nbFaces = nb; break; + default:; + } + } + if ( _useLib ) { #ifdef USE_MG_LIBS switch ( what ) { diff --git a/src/GHS3DPRLPlugin/MG_TetraHPC_API.hxx b/src/GHS3DPRLPlugin/MG_TetraHPC_API.hxx index b4f9153..d1aed51 100644 --- a/src/GHS3DPRLPlugin/MG_TetraHPC_API.hxx +++ b/src/GHS3DPRLPlugin/MG_TetraHPC_API.hxx @@ -52,7 +52,7 @@ public: void GmfSetLin(int iMesh, GmfKwdCod what, int id ); // required void GmfSetLin(int iMesh, GmfKwdCod what, int node1, int node2, int node3, int domain ); // tria - bool Compute( const std::string& cmdLine ); + bool Compute( const std::string& cmdLine, std::string& errStr ); // OUT from MESHGEMS int GmfOpenMesh(const char* theFile, int rdOrWr, int * ver, int * dim); @@ -81,6 +81,13 @@ private: LibData* _libData; std::set _openFiles; std::string _logFile; + + + // count mesh entities for MG license key generation + int _nbNodes; + int _nbEdges; + int _nbFaces; + int _nbVolumes; }; #endif -- 2.39.2