diff --git a/code/X3DImporter.cpp b/code/X3DImporter.cpp old mode 100755 new mode 100644 index c71453211..feaa0ca37 --- a/code/X3DImporter.cpp +++ b/code/X3DImporter.cpp @@ -1610,8 +1610,10 @@ void X3DImporter::InternReadFile(const std::string& pFile, aiScene* pScene, IOSy 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 , also in -> materials(in Assimp logical view) diff --git a/code/X3DImporter_Networking.cpp b/code/X3DImporter_Networking.cpp index 9d55900cb..744d805ba 100644 --- a/code/X3DImporter_Networking.cpp +++ b/code/X3DImporter_Networking.cpp @@ -51,9 +51,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // Header files, Assimp. #include +#include + namespace Assimp { +static std::regex pattern_parentDir(R"((^|/)[^/]+/../)"); + // 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(); }