diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-05-06 15:12:00 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-05-06 15:12:00 +0400 |
commit | c36365935c5146b56753bd997f0a873fc2589b15 (patch) | |
tree | 927751dff14d2b11e94d32fcc2e7c476cbb52423 /source/blender/collada | |
parent | f39464870ccbf59702e644bcec58369770276826 (diff) |
Fix #35229: collada crash exporting constraints with no target set.
Diffstat (limited to 'source/blender/collada')
-rw-r--r-- | source/blender/collada/AnimationExporter.cpp | 22 | ||||
-rw-r--r-- | source/blender/collada/SceneExporter.cpp | 15 |
2 files changed, 25 insertions, 12 deletions
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp index 89bcebc41d6..3cd0efe6978 100644 --- a/source/blender/collada/AnimationExporter.cpp +++ b/source/blender/collada/AnimationExporter.cpp @@ -199,12 +199,16 @@ void AnimationExporter::make_anim_frames_from_targets(Object *ob, std::vector<fl * - ct->matrix members have not yet been calculated here! */ cti->get_constraint_targets(con, &targets); - if (cti) { - for (ct = (bConstraintTarget *)targets.first; ct; ct = ct->next) { - obtar = ct->tar; + + for (ct = (bConstraintTarget *)targets.first; ct; ct = ct->next) { + obtar = ct->tar; + + if (obtar) find_frames(obtar, frames); - } } + + if (cti->flush_constraint_targets) + cti->flush_constraint_targets(con, &targets, 1); } } } @@ -1546,9 +1550,15 @@ void AnimationExporter::calc_ob_mat_at_time(Object *ob, float ctime , float mat[ cti->get_constraint_targets(con, &targets); for (ct = (bConstraintTarget *)targets.first; ct; ct = ct->next) { obtar = ct->tar; - BKE_animsys_evaluate_animdata(scene, &obtar->id, obtar->adt, ctime, ADT_RECALC_ANIM); - BKE_object_where_is_calc_time(scene, obtar, ctime); + + if (obtar) { + BKE_animsys_evaluate_animdata(scene, &obtar->id, obtar->adt, ctime, ADT_RECALC_ANIM); + BKE_object_where_is_calc_time(scene, obtar, ctime); + } } + + if (cti->flush_constraint_targets) + cti->flush_constraint_targets(con, &targets, 1); } } BKE_object_where_is_calc_time(scene, ob, ctime); diff --git a/source/blender/collada/SceneExporter.cpp b/source/blender/collada/SceneExporter.cpp index 604e131b44b..aaf9588f918 100644 --- a/source/blender/collada/SceneExporter.cpp +++ b/source/blender/collada/SceneExporter.cpp @@ -215,13 +215,16 @@ void SceneExporter::writeNodes(Object *ob, Scene *sce) Object *obtar; cti->get_constraint_targets(con, &targets); - if (cti) { - for (ct = (bConstraintTarget *)targets.first; ct; ct = ct->next) { - obtar = ct->tar; - std::string tar_id(id_name(obtar)); - colladaNode.addExtraTechniqueChildParameter("blender",con_tag,"target_id",tar_id); - } + + for (ct = (bConstraintTarget *)targets.first; ct; ct = ct->next) { + obtar = ct->tar; + std::string tar_id((obtar) ? id_name(obtar) : ""); + colladaNode.addExtraTechniqueChildParameter("blender",con_tag,"target_id",tar_id); } + + if (cti->flush_constraint_targets) + cti->flush_constraint_targets(con, &targets, 1); + } con = con->next; |