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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to