X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYBRIDPlugin%2FMG_HYBRID_API.cxx;h=3288283bfe72ec32c432576f873da4d8595b7eb1;hb=7972d6e3ce34777547876d3f4d52fc7c09d39334;hp=767d5ce5d9b7020b054a69f003599b3f693fc885;hpb=ce44b53a3367fc92294721c9e72122da6011a069;p=plugins%2Fhybridplugin.git diff --git a/src/HYBRIDPlugin/MG_HYBRID_API.cxx b/src/HYBRIDPlugin/MG_HYBRID_API.cxx index 767d5ce..3288283 100644 --- a/src/HYBRIDPlugin/MG_HYBRID_API.cxx +++ b/src/HYBRIDPlugin/MG_HYBRID_API.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2004-2016 CEA/DEN, EDF R&D +// Copyright (C) 2004-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -21,11 +21,13 @@ #include #include +#include #include -#include -#include #include +#include +#include +#include #ifdef USE_MG_LIBS @@ -340,7 +342,7 @@ struct MG_HYBRID_API::LibData } void ReadPrismNodes( int* node1, int* node2, int* node3, int* node4, - int* node5, int* node6, int* domain ) + int* node5, int* node6, int* /*domain*/ ) { integer vtx[6]; status_t ret = mesh_get_prism_vertices( _hybrid_mesh, _count, vtx); @@ -362,6 +364,27 @@ struct MG_HYBRID_API::LibData ++_count; } + void ReadPyramidNodes( int* node1, int* node2, int* node3, int* node4, int* node5, int* domain ) + { + integer vtx[6]; + status_t ret = mesh_get_pyramid_vertices( _hybrid_mesh, _count, vtx); + if (ret != STATUS_OK) MG_Error( "unable to get resulting pyramid" ); + + *node1 = vtx[0]; + *node2 = vtx[1]; + *node3 = vtx[2]; + *node4 = vtx[3]; + *node5 = vtx[4]; + + integer tag; + ret = mesh_get_pyramid_tag( _hybrid_mesh, _count, &tag ); + if (ret != STATUS_OK) MG_Error( "unable to get resulting pyramid tag" ); + + *domain = tag; + + ++_count; + } + void ReadCorner( int* node ) { if ( _count <= ReadNbCorners() ) @@ -407,7 +430,7 @@ struct MG_HYBRID_API::LibData _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 ); @@ -673,8 +696,18 @@ void MG_HYBRID_API::LibData::Init() bool MG_HYBRID_API::LibData::Compute() { + // MG license + std::string errorTxt; + status_t ret; + + if ( !SMESHUtils_MGLicenseKeyGen::SignMesh( _surf_mesh, "hybrid", errorTxt )) + { + AddError( SMESH_Comment( "Problem with library SalomeMeshGemsKeyGenerator: ") << errorTxt ); + return false; + } + // Set surface mesh - status_t ret = hybrid_set_surface_mesh( _session, _surf_mesh ); + ret = hybrid_set_surface_mesh( _session, _surf_mesh ); if ( ret != STATUS_OK ) MG_Error( "unable to set surface mesh"); #ifndef WIN32 @@ -709,6 +742,14 @@ bool MG_HYBRID_API::LibData::Compute() return true; } +#else // ifdef USE_MG_LIBS + +struct MG_HYBRID_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 @@ -720,11 +761,12 @@ bool MG_HYBRID_API::LibData::Compute() //================================================================================ MG_HYBRID_API::MG_HYBRID_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_HYBRID_USE_EXE")) _useLib = false; @@ -822,6 +864,21 @@ bool MG_HYBRID_API::Compute( const std::string& cmdLine, std::string& errStr ) #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; + } + if ( key != "0") + const_cast< std::string& >( cmdLine ) += " --key " + key; + } + int err = system( cmdLine.c_str() ); // run if ( err ) @@ -910,7 +967,7 @@ void MG_HYBRID_API::GmfGotoKwd( int iMesh, GmfKwdCod what ) */ //================================================================================ -void MG_HYBRID_API::GmfGetLin( int iMesh, GmfKwdCod what, int* nbNodes, int* faceInd, int* ori, int* domain, int dummy ) +void MG_HYBRID_API::GmfGetLin( int iMesh, GmfKwdCod what, int* nbNodes, int* faceInd, int* ori, int* domain, int /*dummy*/ ) { if ( _useLib ) { #ifdef USE_MG_LIBS @@ -1118,6 +1175,16 @@ int MG_HYBRID_API::GmfOpenMesh(const char* theFile, int rdOrWr, int ver, int di void MG_HYBRID_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 GmfQuadrilaterals: _nbFaces += nb; break; + default:; + } + } if ( _useLib ) { #ifdef USE_MG_LIBS switch ( what ) {