Commit: dd4e90852bedfcba822d382077504c36d61297d2
Author: Kévin Dietrich
Date: Thu Jun 30 02:44:42 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rBdd4e90852bedfcba822d382077504c36d61297d2
Modify the way time offset and scaling works.
Now rather than having two separate properties to override or offset the
current frame or time to lookup inside an archive, a single property is
used to simply override the current scene frame.
===================================================================
M source/blender/blenkernel/BKE_cachefile.h
M source/blender/blenkernel/intern/cachefile.c
M source/blender/blenkernel/intern/constraint.c
M source/blender/blenkernel/intern/scene.c
M source/blender/editors/interface/interface_templates.c
M source/blender/makesdna/DNA_cachefile_types.h
M source/blender/makesrna/intern/rna_cachefile.c
M source/blender/modifiers/intern/MOD_meshsequencecache.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_cachefile.h
b/source/blender/blenkernel/BKE_cachefile.h
index 487c6d9..c4c131f 100644
--- a/source/blender/blenkernel/BKE_cachefile.h
+++ b/source/blender/blenkernel/BKE_cachefile.h
@@ -45,12 +45,12 @@ struct CacheFile *BKE_cachefile_copy(struct Main *bmain,
struct CacheFile *cache
void BKE_cachefile_load(struct CacheFile *cache_file, const char *relabase);
-void BKE_cachefile_update_frame(struct Main *bmain, float ctime);
+void BKE_cachefile_update_frame(struct Main *bmain, float ctime, const float
fps);
bool BKE_cachefile_filepath_get(struct CacheFile *cache_file, float frame,
char *r_filename);
-float BKE_cachefile_time_offset(struct CacheFile *cache_file, float time);
+float BKE_cachefile_time_offset(struct CacheFile *cache_file, const float
time, const float fps);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/intern/cachefile.c
b/source/blender/blenkernel/intern/cachefile.c
index adf3837..78a4f64 100644
--- a/source/blender/blenkernel/intern/cachefile.c
+++ b/source/blender/blenkernel/intern/cachefile.c
@@ -61,8 +61,8 @@ void *BKE_cachefile_add(Main *bmain, const char *name)
cache_file->handle = NULL;
cache_file->filepath[0] = '\0';
- cache_file->frame_start = 0.0f;
- cache_file->frame_scale = 1.0f;
+ cache_file->override_frame = false;
+ cache_file->frame = 0.0f;
cache_file->is_sequence = false;
cache_file->scale = 1.0f;
@@ -85,8 +85,8 @@ CacheFile *BKE_cachefile_copy(Main *bmain, CacheFile
*cache_file)
BLI_strncpy(new_cache_file->filepath, cache_file->filepath, FILE_MAX);
- new_cache_file->frame_start = cache_file->frame_start;
- new_cache_file->frame_scale = cache_file->frame_scale;
+ new_cache_file->frame = cache_file->frame;
+ new_cache_file->override_frame = cache_file->override_frame;
new_cache_file->is_sequence = cache_file->is_sequence;
new_cache_file->scale = cache_file->scale;
@@ -115,7 +115,7 @@ void BKE_cachefile_load(CacheFile *cache_file, const char
*relabase)
#endif
}
-void BKE_cachefile_update_frame(Main *bmain, float ctime)
+void BKE_cachefile_update_frame(Main *bmain, const float ctime, const float
fps)
{
CacheFile *cache_file;
char filename[FILE_MAX];
@@ -125,7 +125,7 @@ void BKE_cachefile_update_frame(Main *bmain, float ctime)
continue;
}
- const float time = BKE_cachefile_time_offset(cache_file, ctime);
+ const float time = BKE_cachefile_time_offset(cache_file, ctime,
fps);
if (BKE_cachefile_filepath_get(cache_file, time, filename)) {
#ifdef WITH_ALEMBIC
@@ -156,7 +156,8 @@ bool BKE_cachefile_filepath_get(CacheFile *cache_file,
float frame, char *r_file
return true;
}
-float BKE_cachefile_time_offset(CacheFile *cache_file, float time)
+float BKE_cachefile_time_offset(CacheFile *cache_file, const float time, const
float fps)
{
- return (cache_file->frame_scale * time) - cache_file->frame_start;
+ const float frame = (cache_file->override_frame ? cache_file->frame :
time);
+ return cache_file->is_sequence ? frame : frame / fps;
}
diff --git a/source/blender/blenkernel/intern/constraint.c
b/source/blender/blenkernel/intern/constraint.c
index 51856f4..72110b1 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -4353,7 +4353,7 @@ static void transformcache_evaluate(bConstraint *con,
bConstraintOb *cob, ListBa
Scene *scene = cob->scene;
const float frame = BKE_scene_frame_get(scene);
- const float time = BKE_cachefile_time_offset(data->cache_file, frame /
FPS);
+ const float time = BKE_cachefile_time_offset(data->cache_file, frame,
FPS);
ABC_get_transform(data->cache_file->handle, cob->ob,
data->abc_object_path,
cob->matrix, time, data->cache_file->scale);
diff --git a/source/blender/blenkernel/intern/scene.c
b/source/blender/blenkernel/intern/scene.c
index 8c37402..5b1d56f 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -1906,7 +1906,7 @@ void BKE_scene_update_for_newframe_ex(EvaluationContext
*eval_ctx, Main *bmain,
BKE_mask_evaluate_all_masks(bmain, ctime, true);
/* Update animated cache files for modifiers. */
- BKE_cachefile_update_frame(bmain, ctime);
+ BKE_cachefile_update_frame(bmain, ctime, (((double)sce->r.frs_sec) /
(double)sce->r.frs_sec_base));
#ifdef POSE_ANIMATION_WORKAROUND
scene_armature_depsgraph_workaround(bmain);
diff --git a/source/blender/editors/interface/interface_templates.c
b/source/blender/editors/interface/interface_templates.c
index 02d88a5..170ac0a 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -3886,10 +3886,11 @@ void uiTemplateCacheFile(uiLayout *layout, bContext *C,
PointerRNA *ptr, const c
uiItemR(row, &fileptr, "filepath", 0, "", ICON_NONE);
row = uiLayoutRow(layout, false);
- uiItemR(row, &fileptr, "frame_start", 0, "Frame Start", ICON_NONE);
+ uiItemR(row, &fileptr, "override_frame", 0, "Override Frame",
ICON_NONE);
row = uiLayoutRow(layout, false);
- uiItemR(row, &fileptr, "frame_scale", 0, "Frame Scale", ICON_NONE);
+ uiLayoutSetEnabled(row, RNA_boolean_get(&fileptr, "override_frame"));
+ uiItemR(row, &fileptr, "frame", 0, "Frame", ICON_NONE);
row = uiLayoutRow(layout, false);
uiItemL(row, IFACE_("Manual Transform:"), ICON_NONE);
diff --git a/source/blender/makesdna/DNA_cachefile_types.h
b/source/blender/makesdna/DNA_cachefile_types.h
index 1156a9b..f8dcade 100644
--- a/source/blender/makesdna/DNA_cachefile_types.h
+++ b/source/blender/makesdna/DNA_cachefile_types.h
@@ -53,15 +53,13 @@ typedef struct CacheFile {
char is_sequence;
char forward_axis;
char up_axis;
- char pad;
+ char override_frame;
float scale;
-
- float frame_start;
- float frame_scale;
+ float frame; /* The frame/time to lookup in the cache file. */
short flag; /* Animation flag. */
- short pad2[3];
+ short pad;
} CacheFile;
#ifdef __cplusplus
diff --git a/source/blender/makesrna/intern/rna_cachefile.c
b/source/blender/makesrna/intern/rna_cachefile.c
index b7dc256..6ddfa22 100644
--- a/source/blender/makesrna/intern/rna_cachefile.c
+++ b/source/blender/makesrna/intern/rna_cachefile.c
@@ -68,16 +68,17 @@ static void rna_def_cachefile(BlenderRNA *brna)
/* ----------------- For Scene time ------------------- */
- prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "frame_start");
- RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
- RNA_def_property_ui_text(prop, "Frame Start", "Add this to the start
frame");
+ prop = RNA_def_property(srna, "override_frame", PROP_BOOLEAN,
PROP_NONE);
+ RNA_def_property_ui_text(prop, "Override Frame",
+ "Whether to use a custom frame for looking up
data in the cache file,"
+ " instead of using the current scene frame");
RNA_def_property_update(prop, 0, NULL);
- prop = RNA_def_property(srna, "frame_scale", PROP_FLOAT, PROP_NONE);
- RNA_def_property_float_sdna(prop, NULL, "frame_scale");
- RNA_def_property_range(prop, 0.0f, 100.0f);
- RNA_def_property_ui_text(prop, "Frame Scale", "Evaluation time in
seconds");
+ prop = RNA_def_property(srna, "frame", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "frame");
+ RNA_def_property_range(prop, -MAXFRAME, MAXFRAME);
+ RNA_def_property_ui_text(prop, "Frame", "The time to use for looking up
the data in the cache file,"
+ " or to determine which file to
use in a file sequence");
RNA_def_property_update(prop, 0, NULL);
/* ----------------- Axis Conversion ----------------- */
diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.c
b/source/blender/modifiers/intern/MOD_meshsequencecache.c
index e2d40c4..58ac064 100644
--- a/source/blender/modifiers/intern/MOD_meshsequencecache.c
+++ b/source/blender/modifiers/intern/MOD_meshsequencecache.c
@@ -89,7 +89,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object
*ob,
Scene *scene = md->scene;
const float frame = BKE_scene_frame_get(scene);
- const float time = BKE_cachefile_time_offset(mcmd->cache_file, frame /
FPS);
+ const float time = BKE_cachefile_time_offset(mcmd->cache_file, frame,
FPS);
DerivedMesh *result = ABC_read_mesh(mcmd->cache_file->handle,
dm,
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs