mpIOHandler = pIOHandler;
Clear();// delete old graph.
- pIOHandler->PushDirectory(DefaultIOSystem::absolutePath(pFile));
+ std::string::size_type slashPos = pFile.find_last_of("\\/");
+ pIOHandler->PushDirectory(slashPos == std::string::npos ? std::string() : pFile.substr(0, slashPos + 1));
ParseFile(pFile, pIOHandler);
+ pIOHandler->PopDirectory();
//
// Assimp use static arrays of objects for fast speed of rendering. That's good, but need some additional operations/
// We know that geometry objects(meshes) are stored in <Shape>, also in <Shape>-><Appearance> materials(in Assimp logical view)
// Header files, Assimp.
#include <assimp/DefaultIOSystem.h>
+#include <regex>
+
namespace Assimp
{
+static std::regex pattern_parentDir(R"((^|/)[^/]+/../)");
+
// <Inline
// DEF="" ID
// USE="" IDREF
{
std::string full_path;
- full_path = mpIOHandler->CurrentDirectory() + "/" + url.front();
+ full_path = std::regex_replace(mpIOHandler->CurrentDirectory() + url.front(), pattern_parentDir, "$1");
// Attribute "url" can contain list of strings. But we need only one - first.
- mpIOHandler->PushDirectory(DefaultIOSystem::absolutePath(full_path));
+ std::string::size_type slashPos = full_path.find_last_of("\\/");
+ mpIOHandler->PushDirectory(slashPos == std::string::npos ? std::string() : full_path.substr(0, slashPos + 1));
ParseFile(full_path, mpIOHandler);
mpIOHandler->PopDirectory();
}