-// Copyright (C) 2007-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2007-2020 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
_hexesMaxLevel = hyp->GetHexesMaxLevel();
_hexesMinSize = hyp->GetMinSize();
_hexesMaxSize = hyp->GetMaxSize();
+ _approxAngle = hyp->GetGeomApproxAngle();
_hexoticIgnoreRidges = hyp->GetHexoticIgnoreRidges();
_hexoticInvalidElements = hyp->GetHexoticInvalidElements();
_hexoticSharpAngleThreshold = hyp->GetHexoticSharpAngleThreshold();
_growth = hyp->GetGrowth();
_facesWithLayers = hyp->GetFacesWithLayers();
_imprintedFaces = hyp->GetImprintedFaces();
+ _keepFiles = hyp->GetKeepFiles();
+ _removeLogOnSuccess = hyp->GetRemoveLogOnSuccess();
+ _logInStandardOutput = hyp->GetStandardOutputLog();
}
else {
cout << std::endl;
_hexesMaxLevel = hyp->GetDefaultHexesMaxLevel();
_hexesMinSize = hyp->GetDefaultMinSize();
_hexesMaxSize = hyp->GetDefaultMaxSize();
+ _approxAngle = hyp->GetDefaultGeomApproxAngle();
_hexoticIgnoreRidges = hyp->GetDefaultHexoticIgnoreRidges();
_hexoticInvalidElements = hyp->GetDefaultHexoticInvalidElements();
_hexoticSharpAngleThreshold = hyp->GetDefaultHexoticSharpAngleThreshold();
_growth = hyp->GetDefaultGrowth();
_facesWithLayers = hyp->GetDefaultFacesWithLayers();
_imprintedFaces = hyp->GetDefaultImprintedFaces();
+ _keepFiles = hyp->GetDefaultKeepFiles();
+ _removeLogOnSuccess = hyp->GetDefaultRemoveLogOnSuccess();
+ _logInStandardOutput = hyp->GetDefaultStandardOutputLog();
}
}
// read a result
// --------------
- if ( mgHexa.IsExecutable() )
+ if ( mgHexa.IsExecutable() && SMESH_File( Hexotic_Out.ToCString() ).exists() )
{
#ifndef WIN32
modeFile_Out += Hexotic_Out;
&aHelper, _nbShape, tabShape, tabBox );
std::string log = mgHexa.GetLog();
+ hexahedraMessage = "failed";
if ( Ok )
{
hexahedraMessage = "success";
-#ifndef _DEBUG_
- removeFile(Hexotic_Out);
- removeFile(Hexotic_In);
- //removeFile(aLogFileName);
- for( size_t i=0; i<sizeMapFiles.size(); i++)
- {
- removeFile( TCollection_AsciiString( sizeMapFiles[i].c_str() ) );
- }
-#endif
+ if ( _removeLogOnSuccess )
+ removeFile( aLogFileName );
}
- else
+ else if ( !log.empty() )
{
- hexahedraMessage = "failed";
- if ( mgHexa.IsExecutable() )
- cout << "Problem with MG-Hexa output file " << Hexotic_Out.ToCString() << std::endl;
- // analyse log file
- if ( !log.empty() )
+ if( _computeCanceled )
+ error( "interruption initiated by user" );
+ else
{
+ // get problem description from the log file
char msgLic[] = " Dlim ";
- std::string log = mgHexa.GetLog();
const char* fileBeg = &log[0], *fileEnd = fileBeg + log.size();
if ( std::search( fileBeg, fileEnd, msgLic, msgLic+strlen(msgLic)) != fileEnd )
error("Licence problems.");
}
- if ( !errStr.empty() )
- error(errStr);
+ }
+ else if ( !errStr.empty() )
+ {
+ // the log file is empty
+ removeFile( aLogFileName );
+ INFOS( "MG-Hexa Error, " << errStr);
+ error(COMPERR_ALGO_FAILED, errStr);
+ }
+
+ if ( !Ok && mgHexa.IsExecutable() )
+ cout << "Problem with MG-Hexa output file " << Hexotic_Out.ToCString() << std::endl;
+
+ if ( !_keepFiles )
+ {
+ if (! Ok && _computeCanceled )
+ removeFile( aLogFileName );
+ removeFile(Hexotic_Out);
+ removeFile(Hexotic_In);
+ for ( size_t i = 0; i < sizeMapFiles.size(); i++ )
+ removeFile( sizeMapFiles[i].c_str() );
}
cout << "Hexahedra meshing " << hexahedraMessage << std::endl;
cout << std::endl;
_iShape = 0;
}
- if(_computeCanceled)
- return error(SMESH_Comment("interruption initiated by user"));
-
return Ok;
}
bool HexoticPlugin_Hexotic::Compute(SMESH_Mesh & aMesh, SMESH_MesherHelper* aHelper)
{
_computeCanceled = false;
-/*
- SMESH_ComputeErrorPtr myError = SMESH_ComputeError::New();
-*/
+ /*
+ SMESH_ComputeErrorPtr myError = SMESH_ComputeError::New();
+ */
bool Ok = true;
TCollection_AsciiString hexahedraMessage;
TCollection_AsciiString aQuote("");
#ifdef WIN32
- aQuote = "\"";
+ aQuote = "\"";
#endif
SetParameters(_hypothesis);
Hexotic_In = aTmpDir + "Hexotic"+getSuffix()+"_In.mesh";
Hexotic_Out = aTmpDir + "Hexotic"+getSuffix()+"_Out.mesh";
Hexotic_SizeMap_Prefix = aTmpDir + "Hexotic_SizeMap";
-
+
MG_Hexotic_API mgHexa( _computeCanceled, _progress );
std::vector<std::string> sizeMapFiles = writeSizeMapFile( &mgHexa, Hexotic_SizeMap_Prefix.ToCString() );
// read a result
// --------------
- if ( mgHexa.IsExecutable() )
+ if ( mgHexa.IsExecutable() && SMESH_File( Hexotic_Out.ToCString() ).exists() )
{
modeFile_Out += Hexotic_Out;
system( modeFile_Out.ToCString() );