[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42435] trunk/blender/source/blender/ blenkernel/intern/dynamicpaint.c: Fix: Dynamic Paint sub-steps didn' t work for constraint controlled brush objects.
Miika Hamalainen
miika.hamalainen at kolumbus.fi
Mon Dec 5 14:36:47 CET 2011
Revision: 42435
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42435
Author: miikah
Date: 2011-12-05 13:36:41 +0000 (Mon, 05 Dec 2011)
Log Message:
-----------
Fix: Dynamic Paint sub-steps didn't work for constraint controlled brush objects.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c
Modified: trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c 2011-12-05 11:02:54 UTC (rev 42434)
+++ trunk/blender/source/blender/blenkernel/intern/dynamicpaint.c 2011-12-05 13:36:41 UTC (rev 42435)
@@ -24,6 +24,7 @@
#include "BLI_utildefines.h"
#include "DNA_anim_types.h"
+#include "DNA_constraint_types.h"
#include "DNA_dynamicpaint_types.h"
#include "DNA_group_types.h" /*GroupObject*/
#include "DNA_material_types.h"
@@ -39,6 +40,7 @@
#include "BKE_bvhutils.h" /* bvh tree */
#include "BKE_blender.h"
#include "BKE_cdderivedmesh.h"
+#include "BKE_constraint.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
#include "BKE_colortools.h"
@@ -453,15 +455,35 @@
static void subframe_updateObject(Scene *scene, Object *ob, int flags, float frame)
{
DynamicPaintModifierData *pmd = (DynamicPaintModifierData *)modifiers_findByType(ob, eModifierType_DynamicPaint);
+ bConstraint *con;
/* if other is dynamic paint canvas, dont update */
if (pmd && pmd->canvas)
return;
- /* if object has parent, update it too */
- if ((flags & UPDATE_PARENTS) && ob->parent) subframe_updateObject(scene, ob->parent, 0, frame);
- if ((flags & UPDATE_PARENTS) && ob->track) subframe_updateObject(scene, ob->track, 0, frame);
+ /* if object has parents, update them too */
+ if (flags & UPDATE_PARENTS) {
+ if (ob->parent) subframe_updateObject(scene, ob->parent, 0, frame);
+ if (ob->track) subframe_updateObject(scene, ob->track, 0, frame);
+ /* also update constraint targets */
+ for (con = ob->constraints.first; con; con=con->next) {
+ bConstraintTypeInfo *cti= constraint_get_typeinfo(con);
+ ListBase targets = {NULL, NULL};
+
+ if (cti && cti->get_constraint_targets) {
+ bConstraintTarget *ct;
+ cti->get_constraint_targets(con, &targets);
+ for (ct= targets.first; ct; ct= ct->next) {
+ if (ct->tar)
+ subframe_updateObject(scene, ct->tar, 0, frame);
+ }
+ /* free temp targets */
+ if (cti->flush_constraint_targets)
+ cti->flush_constraint_targets(con, &targets, 0);
+ }
+ }
+ }
/* for curve following objects, parented curve has to be updated too */
if(ob->type==OB_CURVE) {
Curve *cu= ob->data;
More information about the Bf-blender-cvs
mailing list