Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-06 15:12:00 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-05-06 15:12:00 +0400
commitc36365935c5146b56753bd997f0a873fc2589b15 (patch)
tree927751dff14d2b11e94d32fcc2e7c476cbb52423
parentf39464870ccbf59702e644bcec58369770276826 (diff)
Fix #35229: collada crash exporting constraints with no target set.
-rw-r--r--source/blender/collada/AnimationExporter.cpp22
-rw-r--r--source/blender/collada/SceneExporter.cpp15
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;