X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FMG_ADAPT.cxx;h=ce0bbeeab570496794415d7b943b2ac1dc73e15c;hp=9e393660604fec544e004245c9b9b66a6e826a28;hb=abe3e0bbe9a83c7b07818571dc949d87c2fd0f4a;hpb=b099bfe29f33249f81ce784f5cacb660c4add911 diff --git a/src/SMESHGUI/MG_ADAPT.cxx b/src/SMESHGUI/MG_ADAPT.cxx index 9e3936606..ce0bbeeab 100644 --- a/src/SMESHGUI/MG_ADAPT.cxx +++ b/src/SMESHGUI/MG_ADAPT.cxx @@ -37,6 +37,17 @@ #include #include + +static std::string removeFile(std::string fileName, int& notOk) +{ + std::string errStr; + notOk = std::remove(fileName.c_str()); + if (notOk) errStr = ToComment(" \n error while removing file : ") + << fileName; + else errStr= ToComment("\n file : ")<< fileName << " succesfully deleted! \n "; + + return errStr; +} namespace { struct GET_DEFAULT // struct used to get default value from GetOptionValue() @@ -484,7 +495,9 @@ throw (std::invalid_argument) if (op_val->second != optionValue) { - const char* ptr = optionValue.c_str(); + + std::string lowerOptionValue = toLowerStr(optionValue); + const char* ptr = lowerOptionValue.c_str(); // strip white spaces while (ptr[0] == ' ') ptr++; @@ -497,7 +510,7 @@ throw (std::invalid_argument) if (i == 0) { // empty string } else if (_charOptions.count(optionName)) { - // do not check strings + // do not check strings } else if (_doubleOptions.count(optionName)) { // check if value is double toDbl(ptr, &typeOk); @@ -581,6 +594,18 @@ throw (std::invalid_argument) return val; } //================================================================================ +/*! + * \brief Converts a string to a lower + */ +//================================================================================ +std::string MgAdapt::toLowerStr(const std::string& str) +{ + std::string s = str; + for ( size_t i = 0; i <= s.size(); ++i ) + s[i] = tolower( s[i] ); + return s; +} +//================================================================================ /*! * \brief Converts a string to a bool */ @@ -662,7 +687,7 @@ std::string MgAdapt::getCommandToRun(MgAdapt* hyp) int MgAdapt::compute(std::string& errStr) { - std::string cmd= getCommandToRun(); + std::string cmd = getCommandToRun(); int err = 0; execCmd( cmd.c_str(), err ); // run @@ -675,6 +700,7 @@ int MgAdapt::compute(std::string& errStr) { convertMeshFile(meshFormatOutputMesh, solFormatOutput); } + //~if (!err) cleanUp(); return err; } @@ -682,8 +708,19 @@ void MgAdapt::execCmd( const char* cmd, int& err) { err = 1; std::array buffer; - std:: ofstream logStream; - logStream.open(logFile); + std::streambuf* buf; + outFileStream fileStream; + if (printLogInFile) + { + fileStream.open(logFile); + buf = fileStream.rdbuf(); + } + else + { + buf = std::cout.rdbuf(); + } + std::ostream logStream(buf); + std::unique_ptr pipe(popen(cmd, "r"), pclose ); if(!pipe) { @@ -693,9 +730,34 @@ void MgAdapt::execCmd( const char* cmd, int& err) { logStream<::iterator it = tmpFilesToBeDeleted.begin(); + for (; it!=tmpFilesToBeDeleted.end(); ++it) + { + errStr=removeFile(*it, notOk); + if (notOk) + { + appendMsgToLogFile(errStr); + } + + } +} + +void MgAdapt::appendMsgToLogFile(std::string& msg) +{ + std::ofstream logStream; + logStream.open(logFile, std::ofstream::out | std::ofstream::app); + logStream<< msg; + logStream.close(); +} //================================================================================ /*! * \brief Return command to run MG-Tetra mesher excluding file prefix (-f) @@ -717,6 +779,8 @@ std::string MgAdapt::getCommandToRun() errStr = ToComment(" failed to find .mesh or .sol file from converter ")<< strerror( errno ); return errStr; } + tmpFilesToBeDeleted.push_back(meshIn); + tmpFilesToBeDeleted.push_back(solFileIn); if(useBackgroundMap && !isFileExist(sizeMapIn)) { @@ -724,8 +788,7 @@ std::string MgAdapt::getCommandToRun() return errStr; } - meshFormatOutputMesh = meshIn; - solFormatOutput.push_back(solFileIn); + cmd+= " --in "+ meshIn; meshFormatOutputMesh = getFileName()+".mesh"; @@ -735,12 +798,22 @@ std::string MgAdapt::getCommandToRun() { cmd+= " --background_mesh "+ sizeMapIn ; cmd+= " --background_sizemap "+ solFileIn; + tmpFilesToBeDeleted.push_back(sizeMapIn); } //~else //~{ //~// constant value TODO //~} - + /* sizemap file is not adapted in case of only surface adaptation see MeshGems docs */ + std::string adapOp = "adaptation"; + std::string adpOpVal = getOptionValue(adapOp); + std::string surfaceAdapt = "surface"; + if(surfaceAdapt != adpOpVal ) + { + std::string solFileOut = getFileName()+".sol"; + cmd+= " --write_sizemap "+ solFileOut; + solFormatOutput.push_back(solFileOut); + } if (verbosityLevel != defaultVerboseLevel()) { @@ -1298,7 +1371,8 @@ void MgAdapt::getTimeStepInfos(std::string aFile, med_int& numdt, med_int& numit if ( erreur < 0 ) { - //~addMessage( ToComment(" error: error while reading field last time step ") << nomcha << " in file " << aFile , /*fatal=*/true ); + //~addMessage( ToComment(" error: error while reading field ") << nomcha << "step (numdt, numit) = " <<"("<< numdt<< ", " \ + numit<< ")" <<" in file " << aFile , /*fatal=*/true ); return; }