From 8a20930c71dee32337cd15f3d36fa3574c6c9eea Mon Sep 17 00:00:00 2001 From: Gaia Clary Date: Wed, 13 Feb 2013 16:00:46 +0000 Subject: Collada: Fixed import of textures with path settings relative to main import file --- source/blender/collada/DocumentImporter.cpp | 31 ++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'source/blender/collada') diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp index 52dd587231d..8af4d0652d9 100644 --- a/source/blender/collada/DocumentImporter.cpp +++ b/source/blender/collada/DocumentImporter.cpp @@ -54,6 +54,7 @@ extern "C" { #include "BLI_math.h" #include "BLI_string.h" #include "BLI_utildefines.h" +#include "BLI_fileops.h" #include "BKE_camera.h" #include "BKE_main.h" @@ -1000,17 +1001,29 @@ bool DocumentImporter::writeImage(const COLLADAFW::Image *image) if (mImportStage != General) return true; - // XXX maybe it is necessary to check if the path is absolute or relative - const std::string& filepath = image->getImageURI().toNativePath(); - const char *filename = (const char *)filepath.c_str(); + const std::string& imagepath = image->getImageURI().toNativePath(); + char dir[FILE_MAX]; - char full_path[FILE_MAX]; - - BLI_split_dir_part(filename, dir, sizeof(dir)); - BLI_join_dirfile(full_path, sizeof(full_path), dir, filepath.c_str()); - Image *ima = BKE_image_load_exists(full_path); + char absolute_path[FILE_MAX]; + const char *workpath; + + BLI_split_dir_part(this->import_settings->filepath, dir, sizeof(dir)); + BLI_join_dirfile(absolute_path, sizeof(absolute_path), dir, imagepath.c_str()); + if (BLI_exists(absolute_path)) { + workpath = absolute_path; + } + else { + // Maybe imagepath was already absolute ? + if (!BLI_exists(imagepath.c_str())) { + fprintf(stderr, "Image not found: %s.\n", imagepath.c_str() ); + return true; + } + workpath = imagepath.c_str(); + } + + Image *ima = BKE_image_load_exists(workpath); if (!ima) { - fprintf(stderr, "Cannot create image.\n"); + fprintf(stderr, "Cannot create image: %s\n", workpath); return true; } this->uid_image_map[image->getUniqueId()] = ima; -- cgit v1.2.3