[Bf-blender-cvs] [32fb60c] alembic_basic_io: Add a flag to indicate that a cache is made of sequence of file or not.
Kévin Dietrich
noreply at git.blender.org
Wed Jun 1 17:28:25 CEST 2016
Commit: 32fb60ce1279c6454552d353bdf54cc5545ca996
Author: Kévin Dietrich
Date: Wed Jun 1 14:52:35 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rB32fb60ce1279c6454552d353bdf54cc5545ca996
Add a flag to indicate that a cache is made of sequence of file or not.
===================================================================
M source/blender/alembic/ABC_alembic.h
M source/blender/alembic/intern/abc_hair.cc
M source/blender/alembic/intern/abc_mesh.cc
M source/blender/alembic/intern/abc_object.h
M source/blender/alembic/intern/alembic_capi.cc
M source/blender/editors/io/io_alembic.c
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/intern/MOD_meshsequencecache.c
===================================================================
diff --git a/source/blender/alembic/ABC_alembic.h b/source/blender/alembic/ABC_alembic.h
index 668fa7e..7248641 100644
--- a/source/blender/alembic/ABC_alembic.h
+++ b/source/blender/alembic/ABC_alembic.h
@@ -55,7 +55,7 @@ int ABC_export(struct Scene *scene, struct bContext *C, const char *filepath,
int geogroups, int compression,
bool packuv, float scale);
-void ABC_import(struct bContext *C, const char *filepath, float scale);
+void ABC_import(struct bContext *C, const char *filepath, float scale, bool is_sequence);
void ABC_get_vertex_cache(const char *filepath, float time, void *verts, int max_verts, const char *object_path, int is_mvert);
diff --git a/source/blender/alembic/intern/abc_hair.cc b/source/blender/alembic/intern/abc_hair.cc
index 565a6aa..84cfe6f 100644
--- a/source/blender/alembic/intern/abc_hair.cc
+++ b/source/blender/alembic/intern/abc_hair.cc
@@ -363,17 +363,14 @@ void AbcHairReader::readObjectData(Main *bmain, Scene *scene, float time)
cu->actnu = hvertices->size() - 1;
cu->actvert = CU_ACT_NONE;
- if (true) {
+ if (m_settings->is_sequence || !m_curves_schema.isConstant()) {
ModifierData *md = modifier_new(eModifierType_MeshSequenceCache);
BLI_addtail(&m_object->modifiers, md);
MeshSeqCacheModifierData *mcmd = reinterpret_cast<MeshSeqCacheModifierData *>(md);
-// mcmd->type = MOD_MESHCACHE_TYPE_ABC;
-// mcmd->time_mode = MOD_MESHCACHE_TIME_SECONDS;
-// mcmd->forward_axis = OB_POSZ;
-// mcmd->up_axis = OB_NEGY;
BLI_strncpy(mcmd->filepath, m_iobject.getArchive().getName().c_str(), 1024);
BLI_strncpy(mcmd->abc_object_path, m_iobject.getFullName().c_str(), 1024);
+ mcmd->is_sequence = m_settings->is_sequence;
}
}
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index 6b3e943..7dbd698 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -1156,7 +1156,7 @@ void AbcMeshReader::readObjectData(Main *bmain, Scene *scene, float time)
/* Add a default mesh cache modifier */
- if (true || !is_constant) {
+ if (m_settings->is_sequence || !is_constant) {
ModifierData *md = modifier_new(eModifierType_MeshSequenceCache);
BLI_addtail(&m_object->modifiers, md);
@@ -1164,6 +1164,7 @@ void AbcMeshReader::readObjectData(Main *bmain, Scene *scene, float time)
BLI_strncpy(mcmd->filepath, m_iobject.getArchive().getName().c_str(), 1024);
BLI_strncpy(mcmd->abc_object_path, m_iobject.getFullName().c_str(), 1024);
+ mcmd->is_sequence = m_settings->is_sequence;
}
}
diff --git a/source/blender/alembic/intern/abc_object.h b/source/blender/alembic/intern/abc_object.h
index 4afcee8..df74a05 100644
--- a/source/blender/alembic/intern/abc_object.h
+++ b/source/blender/alembic/intern/abc_object.h
@@ -79,6 +79,7 @@ struct ImportSettings {
int from_up;
int from_forward;
float scale;
+ bool is_sequence;
};
class AbcObjectReader {
diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index 7ec4a20..5ad7f68 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -517,7 +517,7 @@ static void import_startjob(void *cjv, short *stop, short *do_update, float *pro
WM_main_add_notifier(NC_SCENE | ND_FRAME, data->scene);
}
-void ABC_import(bContext *C, const char *filepath, float scale)
+void ABC_import(bContext *C, const char *filepath, float scale, bool is_sequence)
{
ImportJobData *job = static_cast<ImportJobData *>(MEM_mallocN(sizeof(ImportJobData), "ImportJobData"));
job->bmain = CTX_data_main(C);
@@ -525,6 +525,7 @@ void ABC_import(bContext *C, const char *filepath, float scale)
BLI_strncpy(job->filename, filepath, 1024);
job->settings.scale = scale;
+ job->settings.is_sequence = is_sequence;
wmJob *wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
diff --git a/source/blender/editors/io/io_alembic.c b/source/blender/editors/io/io_alembic.c
index e67357c..f9d544e 100644
--- a/source/blender/editors/io/io_alembic.c
+++ b/source/blender/editors/io/io_alembic.c
@@ -299,6 +299,13 @@ static void ui_alembic_import_settings(uiLayout *layout, PointerRNA *imfptr)
row = uiLayoutRow(box, false);
uiItemR(row, imfptr, "scale", 0, NULL, ICON_NONE);
+
+ box = uiLayoutBox(layout);
+ row = uiLayoutRow(box, false);
+ uiItemL(row, IFACE_("Options:"), ICON_NONE);
+
+ row = uiLayoutRow(box, false);
+ uiItemR(row, imfptr, "is_sequence", 0, NULL, ICON_NONE);
}
static void wm_alembic_import_draw(bContext *UNUSED(C), wmOperator *op)
@@ -320,8 +327,9 @@ static int wm_alembic_import_exec(bContext *C, wmOperator *op)
RNA_string_get(op->ptr, "filepath", filename);
const float scale = RNA_float_get(op->ptr, "scale");
+ const bool is_sequence = RNA_boolean_get(op->ptr, "is_sequence");
- ABC_import(C, filename, scale);
+ ABC_import(C, filename, scale, is_sequence);
return OPERATOR_FINISHED;
}
@@ -340,6 +348,8 @@ void WM_OT_alembic_import(wmOperatorType *ot)
FILE_DEFAULTDISPLAY, FILE_SORT_ALPHA);
RNA_def_float(ot->srna, "scale", 1.0f, 0.0f, 1000.0f, "Scale", "", 0.0f, 1000.0f);
+ RNA_def_boolean(ot->srna, "is_sequence", false,
+ "Sequence", "Whether the cache is separated in a series of file");
}
#endif
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index d999200..f7291fe 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1549,6 +1549,8 @@ typedef struct MeshSeqCacheModifierData {
char filepath[1024];
char abc_object_path[1024];
+ char is_sequence;
+ char pad[7];
} MeshSeqCacheModifierData;
#endif /* __DNA_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 8f92bab..c062bb5 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -4247,6 +4247,10 @@ static void rna_def_modifier_meshseqcache(BlenderRNA *brna)
prop = RNA_def_property(srna, "abc_object_path", PROP_STRING, PROP_NONE);
RNA_def_property_ui_text(prop, "Object", "Path to the object in the Alembic archive");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "is_sequence", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_ui_text(prop, "Sequence", "Whether the cache is separated in a series of files");
+ RNA_def_property_update(prop, 0, "rna_Modifier_update");
}
static void rna_def_modifier_laplaciandeform(BlenderRNA *brna)
diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.c b/source/blender/modifiers/intern/MOD_meshsequencecache.c
index 05354fb..f9f6f15 100644
--- a/source/blender/modifiers/intern/MOD_meshsequencecache.c
+++ b/source/blender/modifiers/intern/MOD_meshsequencecache.c
@@ -47,6 +47,7 @@ static void initData(ModifierData *md)
mcmd->filepath[0] = '\0';
mcmd->abc_object_path[0] = '\0';
+ mcmd->is_sequence = false;
}
static void copyData(ModifierData *md, ModifierData *target)
@@ -83,7 +84,7 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
int fframe;
int frame_len;
- if (BLI_path_frame_get(filepath, &fframe, &frame_len)) {
+ if (mcmd->is_sequence && BLI_path_frame_get(filepath, &fframe, &frame_len)) {
char ext[32];
BLI_path_frame_strip(filepath, true, ext);
BLI_path_frame(filepath, frame, frame_len);
@@ -125,7 +126,7 @@ static void deformVerts(ModifierData *md, Object *ob,
int fframe;
int frame_len;
- if (BLI_path_frame_get(filepath, &fframe, &frame_len)) {
+ if (mcmd->is_sequence && BLI_path_frame_get(filepath, &fframe, &frame_len)) {
char ext[32];
BLI_path_frame_strip(filepath, true, ext);
BLI_path_frame(filepath, frame, frame_len);
More information about the Bf-blender-cvs
mailing list