diff --git a/lib/ivis_opengl/imd.h b/lib/ivis_opengl/imd.h index a077ab222..c56638991 100644 --- a/lib/ivis_opengl/imd.h +++ b/lib/ivis_opengl/imd.h @@ -47,6 +47,11 @@ //************************************************************************* void modelShutdown(); + +/// Get filename of model pointer. This is really slow, so do not abuse for logging +/// purposes, for example. +const QString &modelName(iIMDShape *model); + iIMDShape *modelGet(const QString &filename); #endif diff --git a/lib/ivis_opengl/imdload.cpp b/lib/ivis_opengl/imdload.cpp index b17200687..44938abb5 100644 --- a/lib/ivis_opengl/imdload.cpp +++ b/lib/ivis_opengl/imdload.cpp @@ -110,6 +110,7 @@ void modelShutdown() { iV_IMDRelease(i.value()); } + models.clear(); } static bool tryLoad(const QString &path, const QString &filename) @@ -134,6 +135,20 @@ static bool tryLoad(const QString &path, const QString &filename) return false; } +const QString &modelName(iIMDShape *model) +{ + for (MODELMAP::iterator i = models.begin(); i != models.end(); i = models.erase(i)) + { + if (i.value() == model) + { + return i.key(); + } + } + ASSERT(false, "An IMD pointer could not be backtraced to a filename!"); + static QString error; + return error; +} + iIMDShape *modelGet(const QString &filename) { QString name(filename.toLower()); diff --git a/src/effects.cpp b/src/effects.cpp index fb363830d..befec65e3 100644 --- a/src/effects.cpp +++ b/src/effects.cpp @@ -2537,8 +2537,8 @@ bool writeFXData(const char *fileName) ini.setValue("lifeSpan", it->lifeSpan); ini.setValue("radius", it->radius); - const char *imd_name = resGetNamefromData("IMD", it->imd); - if (imd_name && *imd_name) + const QString &imd_name = modelName(it->imd); + if (!imd_name.isEmpty()) { ini.setValue("imd_name", imd_name); }