[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19756] branches/blender2.5/blender/source /blender/blenkernel/intern/depsgraph.c: Drivers: Depsgraph building works again
Joshua Leung
aligorith at gmail.com
Thu Apr 16 14:49:12 CEST 2009
Revision: 19756
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19756
Author: aligorith
Date: 2009-04-16 14:49:12 +0200 (Thu, 16 Apr 2009)
Log Message:
-----------
Drivers: Depsgraph building works again
Cleaned up the code for adding driver relationships in the Depsgraph (see! I said it was going to be easy). Now, adding drivers works nicely.
Modified Paths:
--------------
branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c
Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c 2009-04-16 12:38:44 UTC (rev 19755)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/depsgraph.c 2009-04-16 12:49:12 UTC (rev 19756)
@@ -312,64 +312,25 @@
for (fcu= adt->drivers.first; fcu; fcu= fcu->next) {
ChannelDriver *driver= fcu->driver;
+ DriverTarget *dtar;
- if (driver->type == DRIVER_TYPE_PYTHON) {
- /* PyDriver / 'Expression' */
-
- /* skip if invalid in some way */
- if ((driver->flag & DRIVER_FLAG_INVALID) || (driver->expression[0] == '\0'))
- continue;
-#ifndef DISABLE_PYTHON
- else {
- /* now we need refs to all objects mentioned in this
- * pydriver expression, to call 'dag_add_relation'
- * for each of them */
- Object **obarray = NULL; // XXX BPY_pydriver_get_objects(fcu->driver);
- if (obarray) {
- Object *ob, **oba = obarray;
+ /* loop over targets, adding relationships as appropriate */
+ for (dtar= driver->targets.first; dtar; dtar= dtar->next) {
+ if (dtar->id) {
+ if (GS(dtar->id->name)==ID_OB) {
+ Object *ob= (Object *)dtar->id;
- while (*oba) {
- ob = *oba;
- node1 = dag_get_node(dag, ob);
- if (ob->type == OB_ARMATURE)
- dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Python Driver");
- else
- dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Python Driver");
- oba++;
- }
+ /* normal channel-drives-channel */
+ node1 = dag_get_node(dag, dtar->id);
- MEM_freeN(obarray);
+ /* check if bone... */
+ if ((ob->type==OB_ARMATURE) && dtar->rna_path && strstr(dtar->rna_path, "pose.pose_channels["))
+ dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Driver");
+ else
+ dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Driver");
}
}
-#endif /* DISABLE_PYTHON */
}
- else if (driver->type == DRIVER_TYPE_ROTDIFF) {
- // XXX rotational difference
- }
-#if 0 // XXX old animato
- else if (driver->id) {
- if(GS(driver->id->name)==ID_OB) {
- /* normal channel-drives-channel */
- node1 = dag_get_node(dag, driver->id);
-
- // XXX how to find out rnapath is bone?
- if( ((Object *)driver->id)->type==OB_ARMATURE )
- dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Ipo Driver");
- else
- dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Ipo Driver");
- }
- }
-#endif // XXX old animato
-#if 0 // XXX old 'normal' type
-
- else if (icu->driver->ob) {
- node1 = dag_get_node(dag, icu->driver->ob);
- if(icu->driver->blocktype==ID_AR)
- dag_add_relation(dag, node1, node, isdata?DAG_RL_DATA_DATA:DAG_RL_DATA_OB, "Ipo Driver");
- else
- dag_add_relation(dag, node1, node, isdata?DAG_RL_OB_DATA:DAG_RL_OB_OB, "Ipo Driver");
- }
-#endif // XXX old 'normal' type
}
}
@@ -449,35 +410,10 @@
/* driver dependencies, nla modifiers */
#if 0 // XXX old animation system
- if(ob->ipo)
- dag_add_driver_relation(ob->ipo, dag, node, 0);
-
- key= ob_get_key(ob);
- 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;
- for (chan = ob->action->chanbase.first; chan; chan=chan->next){
- if(chan->ipo)
- dag_add_driver_relation(chan->ipo, dag, node, 1);
- for (conchan=chan->constraintChannels.first; conchan; conchan=conchan->next)
- if(conchan->ipo)
- dag_add_driver_relation(conchan->ipo, dag, node, 1);
- }
- }
if(ob->nlastrips.first) {
bActionStrip *strip;
bActionChannel *chan;
for(strip= ob->nlastrips.first; strip; strip= strip->next) {
- if(strip->act && strip->act!=ob->action)
- for (chan = strip->act->chanbase.first; chan; chan=chan->next)
- if(chan->ipo)
- dag_add_driver_relation(chan->ipo, dag, node, 1);
if(strip->modifiers.first) {
bActionModifier *amod;
for(amod= strip->modifiers.first; amod; amod= amod->next) {
More information about the Bf-blender-cvs
mailing list