[Bf-blender-cvs] [6b5dde499b] id_override_static: Alembic export: avoid infinite loops trying to find parent objects.
Sybren A. Stüvel
noreply at git.blender.org
Thu Feb 9 14:52:22 CET 2017
Commit: 6b5dde499b0acab4bf1f9bdb22e7ab66c41df04c
Author: Sybren A. Stüvel
Date: Wed Feb 8 11:50:21 2017 +0100
Branches: id_override_static
https://developer.blender.org/rB6b5dde499b0acab4bf1f9bdb22e7ab66c41df04c
Alembic export: avoid infinite loops trying to find parent objects.
Also added some assertions for debugging purposes
Reviewed by: Kévin Dietrich
===================================================================
M source/blender/alembic/intern/abc_exporter.cc
===================================================================
diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc
index 896292418e..d17506ff8b 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);
}
More information about the Bf-blender-cvs
mailing list