diff --git a/code/nel/tools/3d/ig_elevation/main.cpp b/code/nel/tools/3d/ig_elevation/main.cpp index 0d12d371b..3983dc4ec 100644 --- a/code/nel/tools/3d/ig_elevation/main.cpp +++ b/code/nel/tools/3d/ig_elevation/main.cpp @@ -35,7 +35,14 @@ #include "nel/3d/scene_group.h" -#include +#ifdef NL_OS_WINDOWS + #include +#else + #include /* for directories functions */ + #include + #include /* getcwd, chdir -- replacement for getCurDiretory & setCurDirectory on windows */ +#endif + // --------------------------------------------------------------------------- @@ -73,11 +80,11 @@ struct SExportOptions return false; else fclose (f); - + try { CConfigFile cf; - + cf.load (sFilename); // Out @@ -126,6 +133,7 @@ struct CZoneLimits }; // --------------------------------------------------------------------------- +#ifdef NL_OS_WINDOWS // win32 code void dir (const string &sFilter, vector &sAllFiles, bool bFullPath) { WIN32_FIND_DATA findData; @@ -133,7 +141,7 @@ void dir (const string &sFilter, vector &sAllFiles, bool bFullPath) char sCurDir[MAX_PATH]; sAllFiles.clear (); GetCurrentDirectory (MAX_PATH, sCurDir); - hFind = FindFirstFile (sFilter.c_str(), &findData); + hFind = FindFirstFile (("*"+sFilter).c_str(), &findData); while (hFind != INVALID_HANDLE_VALUE) { DWORD res = GetFileAttributes(findData.cFileName); @@ -150,6 +158,48 @@ void dir (const string &sFilter, vector &sAllFiles, bool bFullPath) FindClose (hFind); } +void getcwd (char *dir, int length) +{ + GetCurrentDirectoryA (length, dir); +} + +void chdir(const char *path) +{ + SetCurrentDirectoryA (path); +} + +#else // posix version of the void dir(...) function. +void dir (const string &sFilter, vector &sAllFiles, bool bFullPath) +{ + char sCurDir[MAX_PATH]; + DIR* dp = NULL; + struct dirent *dirp= NULL; + + getcwd ( sCurDir, MAX_PATH ) ; + sAllFiles.clear (); + if ( (dp = opendir( sCurDir )) == NULL) + { + string sTmp = string("ERROR : Can't open the dir : \"")+string(sCurDir)+string("\"") ; + outString ( sTmp ) ; + return ; + } + + while ( (dirp = readdir(dp)) != NULL) + { + std:string sFileName = std::string(dirp->d_name) ; + if (sFileName.substr((sFileName.length()-sFilter.length()),sFilter.length()).find(sFilter)!= std::string::npos ) + { + if (bFullPath) + sAllFiles.push_back(string(sCurDir) + "/" + sFileName); + else + sAllFiles.push_back(sFileName); + } + + } + closedir(dp); +} +#endif + // --------------------------------------------------------------------------- CZoneRegion *loadLand (const string &filename) @@ -222,17 +272,19 @@ void SaveInstanceGroup (const char* sFilename, CInstanceGroup *pIG) } catch (const Exception &e) { - outString(string(e.what())); + string stTmp = string(e.what()) ; + outString( stTmp ); } } else { - outString(string("Couldn't create ") + sFilename); + string stTemp = string("Couldn't create ") + string(sFilename) ; + outString( stTemp ); } } /** Get the Z of the height map at the given position - */ + */ static float getHeightMapZ(float x, float y, const CZoneLimits &zl, const SExportOptions &options, CBitmap *heightMap1, CBitmap *heightMap2) { float deltaZ = 0.0f, deltaZ2 = 0.0f; @@ -274,8 +326,8 @@ int main(int nNbArg, char**ppArgs) NL3D_BlockMemoryAssertOnPurge = false; char sCurDir[MAX_PATH]; - GetCurrentDirectory (MAX_PATH, sCurDir); - + getcwd (sCurDir, MAX_PATH); + if (nNbArg != 2) { printf ("Use : ig_elevation configfile.cfg\n"); @@ -322,7 +374,7 @@ int main(int nNbArg, char**ppArgs) // Load the 2 height maps CBitmap *HeightMap1 = NULL; - if (options.HeightMapFile1 != "") + if (!options.HeightMapFile1.empty()) { HeightMap1 = new CBitmap; try @@ -334,7 +386,9 @@ int main(int nNbArg, char**ppArgs) } else { - outString(string("Couldn't not open " + options.HeightMapFile1 + " : heightmap 1 map ignored")); + string sTmp = string("Couldn't not open ")+string(options.HeightMapFile1) + +string(" : heightmap 1 map ignored"); + outString(sTmp); delete HeightMap1; HeightMap1 = NULL; } @@ -348,7 +402,7 @@ int main(int nNbArg, char**ppArgs) } } CBitmap *HeightMap2 = NULL; - if (options.HeightMapFile2 != "") + if (!options.HeightMapFile2.empty()) { HeightMap2 = new CBitmap; try @@ -360,7 +414,9 @@ int main(int nNbArg, char**ppArgs) } else { - outString(string("Couldn't not open " + options.HeightMapFile2 + " : heightmap 2 map ignored\n")); + string sTmp = string("Couldn't not open ")+string(options.HeightMapFile2) + +string(" : heightmap 2 map ignored\n"); + outString(sTmp); delete HeightMap2; HeightMap2 = NULL; } @@ -376,15 +432,15 @@ int main(int nNbArg, char**ppArgs) // Get all files vector vAllFiles; - SetCurrentDirectory (options.InputIGDir.c_str()); - dir ("*.ig", vAllFiles, false); - SetCurrentDirectory (sCurDir); + chdir (options.InputIGDir.c_str()); + dir (".ig", vAllFiles, false); + chdir (sCurDir); for (uint32 i = 0; i < vAllFiles.size(); ++i) { - SetCurrentDirectory (options.InputIGDir.c_str()); + chdir (options.InputIGDir.c_str()); CInstanceGroup *pIG = LoadInstanceGroup (vAllFiles[i].c_str()); - SetCurrentDirectory (sCurDir); + chdir (sCurDir); if (pIG != NULL) { bool realTimeSunContribution = pIG->getRealTimeSunContribution(); @@ -395,14 +451,12 @@ int main(int nNbArg, char**ppArgs) vector Portals; vector PLN; pIG->retrieve (vGlobalPos, IA, Clusters, Portals, PLN); - + if (IA.empty() && PLN.empty() && Portals.empty() && Clusters.empty()) continue; uint k; - - // elevate instance for(k = 0; k < IA.size(); ++k) { @@ -416,7 +470,6 @@ int main(int nNbArg, char**ppArgs) CVector lightPos = vGlobalPos + PLN[k].getPosition(); PLN[k].setPosition( PLN[k].getPosition() + getHeightMapZ(lightPos.x, lightPos.y, zl, options, HeightMap1, HeightMap2) * CVector::K); } - // portals std::vector portal; @@ -459,12 +512,12 @@ int main(int nNbArg, char**ppArgs) pIGout->enableRealTimeSunContribution(realTimeSunContribution); - SetCurrentDirectory (options.OutputIGDir.c_str()); + chdir (options.OutputIGDir.c_str()); SaveInstanceGroup (vAllFiles[i].c_str(), pIGout); - SetCurrentDirectory (sCurDir); + chdir (sCurDir); delete pIG; } } return 1; -} \ No newline at end of file +}