[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