[Bf-blender-cvs] [5cbff013de] temp-sybren-alembic: Alembic: do not presume to predict the parent name
Sybren A. Stüvel
noreply at git.blender.org
Fri Feb 24 17:05:47 CET 2017
Commit: 5cbff013de5188ecbcf45194ed2f253d789133a0
Author: Sybren A. Stüvel
Date: Wed Feb 15 15:25:16 2017 +0100
Branches: temp-sybren-alembic
https://developer.blender.org/rB5cbff013de5188ecbcf45194ed2f253d789133a0
Alembic: do not presume to predict the parent name
AbcExporter::createTransformWriter() tries to predict the parent Xform
name, but if it cannot be found has multiple ways of creating it, possibly
under a different name than originally searched for.
===================================================================
M source/blender/alembic/intern/abc_exporter.cc
M source/blender/alembic/intern/abc_exporter.h
===================================================================
diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc
index 77141a9119..7b099bdf25 100644
--- a/source/blender/alembic/intern/abc_exporter.cc
+++ b/source/blender/alembic/intern/abc_exporter.cc
@@ -409,7 +409,7 @@ void AbcExporter::exploreTransform(EvaluationContext *eval_ctx, Object *ob, Obje
free_object_duplilist(lb);
}
-void AbcExporter::createTransformWriter(Object *ob, Object *parent, Object *dupliObParent)
+AbcTransformWriter * AbcExporter::createTransformWriter(Object *ob, Object *parent, Object *dupliObParent)
{
const std::string name = get_object_dag_path_name(ob, dupliObParent);
@@ -418,43 +418,45 @@ void AbcExporter::createTransformWriter(Object *ob, Object *parent, Object *dupl
BLI_assert(ob != dupliObParent);
/* check if we have already created a transform writer for this object */
- if (getXForm(name) != NULL){
- std::cerr << "xform " << name << " already exists\n";
- return;
+ AbcTransformWriter *my_writer = getXForm(name);
+ if (my_writer != NULL){
+ return my_writer;
}
- AbcTransformWriter *parent_xform = NULL;
+ AbcTransformWriter *parent_writer = NULL;
if (parent) {
- const std::string parentname = get_object_dag_path_name(parent, dupliObParent);
- parent_xform = getXForm(parentname);
-
- if (!parent_xform) {
- if (parent->parent) {
- createTransformWriter(parent, parent->parent, dupliObParent);
- }
- else if (parent == dupliObParent) {
- if (dupliObParent->parent == NULL) {
- createTransformWriter(parent, NULL, NULL);
- }
- else {
- createTransformWriter(parent, dupliObParent->parent, dupliObParent->parent);
- }
+ /* Since there are so many different ways to find parents (as evident
+ * in the number of conditions below), we can't really look up the
+ * parent by name. We'll just call createTransformWriter(), which will
+ * return the parent's AbcTransformWriter pointer. */
+ if (parent->parent) {
+ parent_writer = createTransformWriter(parent, parent->parent, dupliObParent);
+ }
+ else if (parent == dupliObParent) {
+ if (dupliObParent->parent == NULL) {
+ parent_writer = createTransformWriter(parent, NULL, NULL);
}
else {
- createTransformWriter(parent, dupliObParent, dupliObParent);
+ parent_writer = createTransformWriter(parent, dupliObParent->parent, dupliObParent->parent);
}
-
- parent_xform = getXForm(parentname);
}
+ else {
+ parent_writer = createTransformWriter(parent, dupliObParent, dupliObParent);
+ }
+
+ BLI_assert(parent_writer);
}
- if (parent_xform) {
- m_xforms[name] = new AbcTransformWriter(ob, parent_xform->alembicXform(), parent_xform, m_trans_sampling_index, m_settings);
+ if (parent_writer) {
+ my_writer = new AbcTransformWriter(ob, parent_writer->alembicXform(), parent_writer, m_trans_sampling_index, m_settings);
}
else {
- m_xforms[name] = new AbcTransformWriter(ob, m_writer->archive().getTop(), NULL, m_trans_sampling_index, m_settings);
+ my_writer = new AbcTransformWriter(ob, m_writer->archive().getTop(), NULL, m_trans_sampling_index, m_settings);
}
+
+ m_xforms[name] = my_writer;
+ return my_writer;
}
void AbcExporter::createShapeWriters(EvaluationContext *eval_ctx)
diff --git a/source/blender/alembic/intern/abc_exporter.h b/source/blender/alembic/intern/abc_exporter.h
index b0eb8e185d..6848eda9ad 100644
--- a/source/blender/alembic/intern/abc_exporter.h
+++ b/source/blender/alembic/intern/abc_exporter.h
@@ -104,7 +104,7 @@ private:
void createTransformWritersHierarchy(EvaluationContext *eval_ctx);
void createTransformWritersFlat();
- void createTransformWriter(Object *ob, Object *parent, Object *dupliObParent);
+ AbcTransformWriter * createTransformWriter(Object *ob, Object *parent, Object *dupliObParent);
void exploreTransform(EvaluationContext *eval_ctx, Object *ob, Object *parent, Object *dupliObParent = NULL);
void exploreObject(EvaluationContext *eval_ctx, Object *ob, Object *dupliObParent);
void createShapeWriters(EvaluationContext *eval_ctx);
More information about the Bf-blender-cvs
mailing list