[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [12260] trunk/blender/source/blender/ blenkernel:

Brecht Van Lommel brechtvanlommel at pandora.be
Mon Oct 15 12:36:31 CEST 2007


Revision: 12260
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=12260
Author:   blendix
Date:     2007-10-15 12:36:30 +0200 (Mon, 15 Oct 2007)

Log Message:
-----------

Bugfix:

Object constraints with a driven influence ipo were not being evaluated
properly. The code for adding the depsgraph relation and updating without
time changes was simply missing.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_constraint.h
    trunk/blender/source/blender/blenkernel/intern/action.c
    trunk/blender/source/blender/blenkernel/intern/constraint.c
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/blenkernel/intern/object.c

Modified: trunk/blender/source/blender/blenkernel/BKE_constraint.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_constraint.h	2007-10-14 20:58:57 UTC (rev 12259)
+++ trunk/blender/source/blender/blenkernel/BKE_constraint.h	2007-10-15 10:36:30 UTC (rev 12260)
@@ -76,7 +76,7 @@
 /* Constraint Channel function prototypes */
 struct bConstraintChannel *get_constraint_channel(ListBase *list, const char *name);
 struct bConstraintChannel *verify_constraint_channel(ListBase *list, const char *name);
-void do_constraint_channels(struct ListBase *conbase, struct ListBase *chanbase, float ctime);
+void do_constraint_channels(struct ListBase *conbase, struct ListBase *chanbase, float ctime, int onlydrivers);
 void copy_constraint_channels(ListBase *dst, ListBase *src);
 void clone_constraint_channels(struct ListBase *dst, struct ListBase *src);
 void free_constraint_channels(ListBase *chanbase);

Modified: trunk/blender/source/blender/blenkernel/intern/action.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/action.c	2007-10-14 20:58:57 UTC (rev 12259)
+++ trunk/blender/source/blender/blenkernel/intern/action.c	2007-10-15 10:36:30 UTC (rev 12260)
@@ -718,7 +718,8 @@
 				/* This call also sets the pchan flags */
 				execute_action_ipo(achan, pchan);
 			}
-			do_constraint_channels(&pchan->constraints, &achan->constraintChannels, ctime);
+			/* 0 = do all ipos, not only drivers */
+			do_constraint_channels(&pchan->constraints, &achan->constraintChannels, ctime, 0);
 		}
 	}
 	

Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c	2007-10-14 20:58:57 UTC (rev 12259)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c	2007-10-15 10:36:30 UTC (rev 12260)
@@ -886,7 +886,7 @@
 /* -------------------------------- Constraint Channels ---------------------------- */
 
 /* does IPO's of constraint channels only */
-void do_constraint_channels (ListBase *conbase, ListBase *chanbase, float ctime)
+void do_constraint_channels (ListBase *conbase, ListBase *chanbase, float ctime, int onlydrivers)
 {
 	bConstraint *con;
 	bConstraintChannel *chan;
@@ -901,13 +901,15 @@
 			calc_ipo(chan->ipo, ctime);
 			
 			for (icu=chan->ipo->curve.first; icu; icu=icu->next) {
-				switch (icu->adrcode) {
-					case CO_ENFORCE:
-					{
-						/* Influence is clamped to 0.0f -> 1.0f range */
-						con->enforce = CLAMPIS(icu->curval, 0.0f, 1.0f);
+				if(!onlydrivers || icu->driver) {
+					switch (icu->adrcode) {
+						case CO_ENFORCE:
+						{
+							/* Influence is clamped to 0.0f -> 1.0f range */
+							con->enforce = CLAMPIS(icu->curval, 0.0f, 1.0f);
+						}
+							break;
 					}
-						break;
 				}
 			}
 		}

Modified: trunk/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2007-10-14 20:58:57 UTC (rev 12259)
+++ trunk/blender/source/blender/blenkernel/intern/depsgraph.c	2007-10-15 10:36:30 UTC (rev 12260)
@@ -348,6 +348,7 @@
 static void build_dag_object(DagForest *dag, DagNode *scenenode, Object *ob, int mask)
 {
 	bConstraint *con;
+	bConstraintChannel *conchan;
 	DagNode * node;
 	DagNode * node2;
 	DagNode * node3;
@@ -401,9 +402,12 @@
 	if(key && key->ipo)
 		dag_add_driver_relation(key->ipo, dag, node, 1);
 	
+	for (conchan=ob->constraintChannels.first; conchan; conchan=conchan->next)
+		if(conchan->ipo)
+			dag_add_driver_relation(conchan->ipo, dag, node, 0);
+
 	if(ob->action) {
 		bActionChannel *chan;
-		bConstraintChannel *conchan;
 		for (chan = ob->action->chanbase.first; chan; chan=chan->next){
 			if(chan->ipo)
 				dag_add_driver_relation(chan->ipo, dag, node, 1);

Modified: trunk/blender/source/blender/blenkernel/intern/object.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/object.c	2007-10-14 20:58:57 UTC (rev 12259)
+++ trunk/blender/source/blender/blenkernel/intern/object.c	2007-10-15 10:36:30 UTC (rev 12260)
@@ -1542,12 +1542,14 @@
 		else 
 			do_all_object_actions(ob);
 		
-		/* do constraint ipos ..., note it needs stime */
-		do_constraint_channels(&ob->constraints, &ob->constraintChannels, stime);
+		/* do constraint ipos ..., note it needs stime (0 = all ipos) */
+		do_constraint_channels(&ob->constraints, &ob->constraintChannels, stime, 0);
 	}
 	else {
 		/* but, the drivers have to be done */
 		if(ob->ipo) do_ob_ipodrivers(ob, ob->ipo, stime);
+		/* do constraint ipos ..., note it needs stime (1 = only drivers ipos) */
+		do_constraint_channels(&ob->constraints, &ob->constraintChannels, stime, 1);
 	}
 	
 	if(ob->parent) {





More information about the Bf-blender-cvs mailing list