-// Copyright (C) 2004-2016 CEA/DEN, EDF R&D
+// Copyright (C) 2004-2021 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#ifdef WIN32
#define NOMINMAX
#endif
+
#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
_nbRequiredTria = nb;
}
- void AddNode( double x, double y, double z, int domain )
+ void AddNode( double x, double y, double z, int /*domain*/ )
{
_xyz.push_back( x );
_xyz.push_back( y );
_nodeSize.push_back( size );
}
- void AddEdgeNodes( int node1, int node2, int domain )
+ void AddEdgeNodes( int node1, int node2, int /*domain*/ )
{
_edgeNodes.push_back( node1 );
_edgeNodes.push_back( node2 );
}
- void AddTriaNodes( int node1, int node2, int node3, int domain )
+ void AddTriaNodes( int node1, int node2, int node3, int /*domain*/ )
{
_triaNodes.push_back( node1 );
_triaNodes.push_back( node2 );
_triaNodes.push_back( node3 );
}
- void AddTetraNodes( int node1, int node2, int node3, int node4, int domain )
+ void AddTetraNodes( int node1, int node2, int node3, int node4, int /*domain*/ )
{
_tetraNodes.push_back( node1 );
_tetraNodes.push_back( node2 );
// progress message (10%): "MGMESSAGE 1009001 0 1 1.000000e+01"
data->_progress = atof( desc + 24 );
- _progressInCallBack = true;
+ data->_progressInCallBack = true;
}
- if ( !_progressInCallBack )
+ if ( !data->_progressInCallBack )
{
// Compute progress
// corresponding messages are:
bool MG_Tetra_API::LibData::Compute()
{
status_t ret;
+ std::string errorTxt;
if ( _tetraNodes.empty() )
{
+ if ( !SMESHUtils_MGLicenseKeyGen::SignMesh( _tria_mesh, errorTxt ))
+ {
+ AddError( SMESH_Comment( "Problem with library SalomeMeshGemsKeyGenerator: ") << errorTxt );
+ return false;
+ }
// Set surface mesh
ret = tetra_set_surface_mesh( _session, _tria_mesh );
if ( ret != STATUS_OK ) MG_Error( "unable to set surface mesh");
}
else
{
+ if ( !SMESHUtils_MGLicenseKeyGen::SignMesh( _tria_mesh, errorTxt ))
+ {
+ AddError( SMESH_Comment( "Problem with library SalomeMeshGemsKeyGenerator: ") << errorTxt );
+ return false;
+ }
ret = tetra_set_volume_mesh( _session, _tria_mesh );
if ( ret != STATUS_OK ) MG_Error( "unable to set volume mesh");
}
return true;
}
+#else // ifdef USE_MG_LIBS
+
+struct MG_Tetra_API::LibData // to avoid compiler warnings
+{
+ volatile bool& _cancelled_flag;
+ double& _progress;
+ LibData(volatile bool& cancelled_flag, double& progress):
+ _cancelled_flag{cancelled_flag}, _progress{progress}
+ {}
+};
#endif // ifdef USE_MG_LIBS
*/
//================================================================================
-MG_Tetra_API::MG_Tetra_API(volatile bool& cancelled_flag, double& progress)
+MG_Tetra_API::MG_Tetra_API(volatile bool& cancelled_flag, double& progress):
+ _nbNodes(0), _nbEdges(0), _nbFaces(0), _nbVolumes(0)
{
_useLib = false;
+ _libData = new LibData( cancelled_flag, progress );
#ifdef USE_MG_LIBS
_useLib = true;
- _libData = new LibData( cancelled_flag, progress );
_libData->Init();
if ( getenv("MG_TETRA_USE_EXE"))
_useLib = false;
}
// compute
- bool ok = _libData->Compute();
+ bool ok = _libData->Compute();
GetLog(); // write a log file
_logFile = ""; // not to write it again
#endif
}
+ // 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
if ( err )
*/
//================================================================================
-void MG_Tetra_API::GmfGetLin( int iMesh, GmfKwdCod what, int* nbNodes, int* faceInd, int* ori, int* domain, int dummy )
+void MG_Tetra_API::GmfGetLin( int iMesh, GmfKwdCod what, int* nbNodes, int* faceInd, int* ori, int* domain, int /*dummy*/ )
{
if ( _useLib ) {
#ifdef USE_MG_LIBS
void MG_Tetra_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;
+ case GmfTetrahedra: _nbVolumes += nb; break;
+ default:;
+ }
+ }
+
if ( _useLib ) {
#ifdef USE_MG_LIBS
switch ( what ) {