diff options
author | Sybren A. Stüvel <sybren@stuvel.eu> | 2017-02-08 13:50:21 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@stuvel.eu> | 2017-02-08 14:26:36 +0300 |
commit | ac38d5652be1119934a2bb472f76070bd4b8789d (patch) | |
tree | e5932f08c7904733190804e94f177774c5ef50b4 /source/blender/alembic | |
parent | 95e7f93fa2a8055ea50fbcc45db8124087ce210e (diff) |
Alembic export: avoid infinite loops trying to find parent objects.
Also added some assertions for debugging purposes
Reviewed by: Kévin Dietrich
Diffstat (limited to 'source/blender/alembic')
-rw-r--r-- | source/blender/alembic/intern/abc_exporter.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc index 896292418ea..d17506ff8b0 100644 --- a/source/blender/alembic/intern/abc_exporter.cc +++ b/source/blender/alembic/intern/abc_exporter.cc @@ -413,6 +413,10 @@ void AbcExporter::createTransformWriter(Object *ob, Object *parent, Object *dupl { const std::string name = get_object_dag_path_name(ob, dupliObParent); + /* An object should not be its own parent, or we'll get infinite loops. */ + BLI_assert(ob != parent); + 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"; @@ -429,6 +433,14 @@ void AbcExporter::createTransformWriter(Object *ob, Object *parent, Object *dupl 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); + } + } else { createTransformWriter(parent, dupliObParent, dupliObParent); } |