[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