exportGMF( &mgTetraHPC, fileskinmesh.ToCString(), meshDS );
- if ( useLib )
+ if ( true /*useLib*/ )
{
TCollection_AsciiString cmd = TCollection_AsciiString("mg-tetra_hpc.exe") +
" --number_of_subdomains=" + NbPart +
<< " 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");
#include <SMESH_Comment.hxx>
#include <SMESH_File.hxx>
+#include <SMESH_MGLicenseKeyGen.hxx>
#include <Utils_SALOME_Exception.hxx>
-#include <vector>
-#include <iterator>
#include <cstring>
+#include <iostream>
+#include <iterator>
+#include <vector>
#ifdef USE_MG_LIBS
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");
*/
//================================================================================
-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 );
*/
//================================================================================
-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
}
// compute
- bool ok = _libData->Compute( outFile );
+ bool ok = _libData->Compute( outFile );
GetLog(); // write a log file
_logFile = ""; // not to write it again
#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;
}
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 ) {
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);
LibData* _libData;
std::set<int> _openFiles;
std::string _logFile;
+
+
+ // count mesh entities for MG license key generation
+ int _nbNodes;
+ int _nbEdges;
+ int _nbFaces;
+ int _nbVolumes;
};
#endif