[Bf-blender-cvs] [06e3e47] alembic_basic_io: Fix for opening files using relative path during .blend file loading.

Kévin Dietrich noreply at git.blender.org
Fri Jun 24 22:29:27 CEST 2016


Commit: 06e3e4730f85ad91c3b365f8ed53d20b9ee7b3b7
Author: Kévin Dietrich
Date:   Fri Jun 24 18:40:02 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB06e3e4730f85ad91c3b365f8ed53d20b9ee7b3b7

Fix for opening files using relative path during .blend file loading.

===================================================================

M	source/blender/blenkernel/BKE_cachefile.h
M	source/blender/blenkernel/intern/cachefile.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/makesrna/intern/rna_cachefile.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_cachefile.h b/source/blender/blenkernel/BKE_cachefile.h
index b101bb6..004ea20 100644
--- a/source/blender/blenkernel/BKE_cachefile.h
+++ b/source/blender/blenkernel/BKE_cachefile.h
@@ -41,7 +41,7 @@ void *BKE_cachefile_add(struct Main *bmain, const char *name);
 
 void BKE_cachefile_free(struct CacheFile *cache_file);
 
-void BKE_cachefile_load(struct CacheFile *cache_file);
+void BKE_cachefile_load(struct CacheFile *cache_file, const char *relabase);
 
 void BKE_cachefiles_open_next_file(struct Main *bmain, float ctime);
 
diff --git a/source/blender/blenkernel/intern/cachefile.c b/source/blender/blenkernel/intern/cachefile.c
index 35a98b8..0f93686 100644
--- a/source/blender/blenkernel/intern/cachefile.c
+++ b/source/blender/blenkernel/intern/cachefile.c
@@ -45,6 +45,15 @@
 #  include "ABC_alembic.h"
 #endif
 
+static void get_absolute_path(char *r_absolute, const char *relative, const char *base)
+{
+	BLI_strncpy(r_absolute, relative, FILE_MAX);
+
+	if (BLI_path_is_rel(r_absolute)) {
+		BLI_path_abs(r_absolute, base);
+	}
+}
+
 void *BKE_cachefile_add(Main *bmain, const char *name)
 {
 	CacheFile *cache_file = BKE_libblock_alloc(bmain, ID_CF, name);
@@ -67,15 +76,10 @@ void BKE_cachefile_free(CacheFile *cache_file)
 #endif
 }
 
-void BKE_cachefile_load(CacheFile *cache_file)
+void BKE_cachefile_load(CacheFile *cache_file, const char *relabase)
 {
 	char filename[FILE_MAX];
-	BLI_strncpy(filename, cache_file->filepath, FILE_MAX);
-
-	/* Ensure absolute paths. */
-	if (BLI_path_is_rel(filename)) {
-		BLI_path_abs(filename, G.main->name);
-	}
+	get_absolute_path(filename, cache_file->filepath, relabase);
 
 #ifdef WITH_ALEMBIC
 	if (cache_file->handle) {
@@ -107,12 +111,7 @@ void BKE_cachefiles_open_next_file(Main *bmain, float ctime)
 
 bool BKE_cachefile_filepath_get(CacheFile *cache_file, float frame, char *r_filepath)
 {
-	BLI_strncpy(r_filepath, cache_file->filepath, FILE_MAX);
-
-	/* Ensure absolute paths. */
-	if (BLI_path_is_rel(r_filepath)) {
-		BLI_path_abs(r_filepath, G.main->name);
-	}
+	get_absolute_path(r_filepath, cache_file->filepath, G.main->name);
 
 	int fframe;
 	int frame_len;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 6b09b3a..8cd7fde 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2273,16 +2273,15 @@ static void lib_link_cachefiles(FileData *fd, Main *main)
 	for (cache_file = main->cachefiles.first; cache_file; cache_file = cache_file->id.next) {
 		if (cache_file->id.tag & LIB_TAG_NEED_LINK) {
 			cache_file->id.tag &= ~LIB_TAG_NEED_LINK;
+
+			BKE_cachefile_load(cache_file, fd->relabase);
 		}
 	}
-
-	UNUSED_VARS(fd);
 }
 
 static void direct_link_cachefile(FileData *fd, CacheFile *cache_file)
 {
 	cache_file->handle = NULL;
-	BKE_cachefile_load(cache_file);
 	UNUSED_VARS(fd);
 }
 
diff --git a/source/blender/makesrna/intern/rna_cachefile.c b/source/blender/makesrna/intern/rna_cachefile.c
index 46b9f1e..6572c9d 100644
--- a/source/blender/makesrna/intern/rna_cachefile.c
+++ b/source/blender/makesrna/intern/rna_cachefile.c
@@ -44,9 +44,9 @@ static void rna_CacheFile_update_handle(Main *bmain, Scene *scene, PointerRNA *p
 {
 	CacheFile *cache_file = (CacheFile *)ptr->data;
 
-	BKE_cachefile_load(cache_file);
+	BKE_cachefile_load(cache_file, bmain->name);
 
-	UNUSED_VARS(bmain, scene);
+	UNUSED_VARS(scene);
 }
 
 #else




More information about the Bf-blender-cvs mailing list