[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25720] trunk/blender: Durian Request: Drivers Recode

Joshua Leung aligorith at gmail.com
Mon Jan 4 22:15:47 CET 2010


Revision: 25720
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25720
Author:   aligorith
Date:     2010-01-04 22:15:45 +0100 (Mon, 04 Jan 2010)

Log Message:
-----------
Durian Request: Drivers Recode

Highlights:
* Support for Multi-Target Variables
This was the main reason for this recode. Previously, variables could only be used to give some RNA property used as an input source to the driver a name. However, this meant that effects such as Rotational Difference couldn't be used in conjunction with other effects and/or settings to achieve the powerful results. Now, a variable can take several input targets, perform some interesting operations on them, and spit out a representative value based on that.

* New Variable Types
With the introduction of multi-target variables, there are now 3 types of variable that can be used: single property (i.e. the only type previously), Rotational Difference (angle between two bones), and Distance (distance between two objects or bones).

* New Driver Types
In addition to the existing 'Average', 'Sum', and 'Expression' types, there is now the additional options of 'Minimum' and 'Maximum'. These take the smallest/largest value that one of the variables evaluates to.

* Fix for Driver F-Curve colouring bug 
Newly added drivers did not get automatically coloured in the Graph Editor properly. Was caused by inappropriate notifiers being used.


Notes:
* This commit breaks existing 2.5 files with drivers (in other words, they are lost forever). 
* Rigify has been corrected to work with the new system. The PyAPI for accessing targets used for the variables could still be made nicer (using subclassing to directly access?), but that is left for later.
* Version patching for 2.49 files still needs to be put back in place.

Modified Paths:
--------------
    trunk/blender/release/scripts/modules/rigify/arm_biped_generic.py
    trunk/blender/release/scripts/modules/rigify/finger_curl.py
    trunk/blender/release/scripts/modules/rigify/leg_biped_generic.py
    trunk/blender/release/scripts/modules/rigify/neck_flex.py
    trunk/blender/release/scripts/modules/rigify/palm_curl.py
    trunk/blender/release/scripts/modules/rigify/spine_pivot_flex.py
    trunk/blender/release/scripts/modules/rigify_utils.py
    trunk/blender/source/blender/blenkernel/BKE_fcurve.h
    trunk/blender/source/blender/blenkernel/intern/anim_sys.c
    trunk/blender/source/blender/blenkernel/intern/depsgraph.c
    trunk/blender/source/blender/blenkernel/intern/fcurve.c
    trunk/blender/source/blender/blenkernel/intern/ipo.c
    trunk/blender/source/blender/blenkernel/intern/object.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenloader/intern/writefile.c
    trunk/blender/source/blender/editors/animation/drivers.c
    trunk/blender/source/blender/editors/space_graph/graph_buttons.c
    trunk/blender/source/blender/editors/space_outliner/outliner.c
    trunk/blender/source/blender/makesdna/DNA_anim_types.h
    trunk/blender/source/blender/makesrna/RNA_access.h
    trunk/blender/source/blender/makesrna/intern/rna_fcurve.c
    trunk/blender/source/blender/python/intern/bpy_driver.c
    trunk/blender/source/blender/windowmanager/WM_types.h

Modified: trunk/blender/release/scripts/modules/rigify/arm_biped_generic.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/arm_biped_generic.py	2010-01-04 21:10:51 UTC (rev 25719)
+++ trunk/blender/release/scripts/modules/rigify/arm_biped_generic.py	2010-01-04 21:15:45 UTC (rev 25720)
@@ -254,11 +254,11 @@
         driver = driver_fcurve.driver
         driver.type = 'AVERAGE'
 
-        tar = driver.targets.new()
-        tar.name = "hinge"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = controller_path + '["hinge"]'
+        var = driver.variables.new()
+        var.name = "hinge"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = controller_path + '["hinge"]'
 
         mod = driver_fcurve.modifiers[0]
         mod.poly_order = 1

Modified: trunk/blender/release/scripts/modules/rigify/finger_curl.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/finger_curl.py	2010-01-04 21:10:51 UTC (rev 25719)
+++ trunk/blender/release/scripts/modules/rigify/finger_curl.py	2010-01-04 21:15:45 UTC (rev 25720)
@@ -251,18 +251,18 @@
         driver = fcurve_driver.driver
 
         # scale target
-        tar = driver.targets.new()
-        tar.name = "scale"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = controller_path + '.scale[1]'
+        var = driver.variables.new()
+        var.name = "scale"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = controller_path + '.scale[1]'
 
         # bend target
-        tar = driver.targets.new()
-        tar.name = "br"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = controller_path + '["bend_ratio"]'
+        var = driver.variables.new()
+        var.name = "br"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = controller_path + '["bend_ratio"]'
 
         # XXX - todo, any number
         if i == 0:

Modified: trunk/blender/release/scripts/modules/rigify/leg_biped_generic.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/leg_biped_generic.py	2010-01-04 21:10:51 UTC (rev 25719)
+++ trunk/blender/release/scripts/modules/rigify/leg_biped_generic.py	2010-01-04 21:15:45 UTC (rev 25720)
@@ -336,12 +336,12 @@
 
     fcurve = con.driver_add("influence", 0)
     driver = fcurve.driver
-    tar = driver.targets.new()
+    var = driver.variables.new()
     driver.type = 'AVERAGE'
-    tar.name = "var"
-    tar.id_type = 'OBJECT'
-    tar.id = obj
-    tar.data_path = hinge_driver_path
+    var.name = "var"
+    var.targets[0].id_type = 'OBJECT'
+    var.targets[0].id = obj
+    var.targets[0].data_path = hinge_driver_path
 
     mod = fcurve.modifiers[0]
     mod.poly_order = 1

Modified: trunk/blender/release/scripts/modules/rigify/neck_flex.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/neck_flex.py	2010-01-04 21:10:51 UTC (rev 25719)
+++ trunk/blender/release/scripts/modules/rigify/neck_flex.py	2010-01-04 21:15:45 UTC (rev 25720)
@@ -238,12 +238,12 @@
 
     fcurve = con.driver_add("influence", 0)
     driver = fcurve.driver
-    tar = driver.targets.new()
+    var = driver.variables.new()
     driver.type = 'AVERAGE'
-    tar.name = "var"
-    tar.id_type = 'OBJECT'
-    tar.id = obj
-    tar.data_path = hinge_driver_path
+    var.name = "var"
+    var.targets[0].id_type = 'OBJECT'
+    var.targets[0].id = obj
+    var.targets[0].data_path = hinge_driver_path
 
     #mod = fcurve_driver.modifiers.new('GENERATOR')
     mod = fcurve.modifiers[0]
@@ -262,11 +262,11 @@
     fcurve.modifiers.remove(0) # grr dont need a modifier
 
     for i in range(len(neck_chain)):
-        tar = driver.targets.new()
-        tar.name = target_names[i]
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1))
+        var = driver.variables.new()
+        var.name = target_names[i]
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1))
 
 
     for i, attr in enumerate(ex_chain.attr_names):
@@ -302,17 +302,17 @@
 
 
         # add target
-        tar = driver.targets.new()
-        tar.name = "bend_tot"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = head_driver_path + ('["bend_tot"]')
+        var = driver.variables.new()
+        var.name = "bend_tot"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = head_driver_path + ('["bend_tot"]')
 
-        tar = driver.targets.new()
-        tar.name = "bend"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = head_driver_path + ('["%s"]' % prop_name)
+        var = driver.variables.new()
+        var.name = "bend"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = head_driver_path + ('["%s"]' % prop_name)
 
 
         # finally constrain the original bone to this one

Modified: trunk/blender/release/scripts/modules/rigify/palm_curl.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/palm_curl.py	2010-01-04 21:10:51 UTC (rev 25719)
+++ trunk/blender/release/scripts/modules/rigify/palm_curl.py	2010-01-04 21:15:45 UTC (rev 25720)
@@ -169,22 +169,22 @@
     driver = driver_fcurves[0].driver
     driver.type = 'AVERAGE'
 
-    tar = driver.targets.new()
-    tar.name = "x"
-    tar.id_type = 'OBJECT'
-    tar.id = obj
-    tar.data_path = controller_path + ".rotation_euler[0]"
+    var = driver.variables.new()
+    var.name = "x"
+    var.targets[0].id_type = 'OBJECT'
+    var.targets[0].id = obj
+    var.targets[0].data_path = controller_path + ".rotation_euler[0]"
 
 
     # *****
     driver = driver_fcurves[1].driver
     driver.expression = "-x/4.0"
 
-    tar = driver.targets.new()
-    tar.name = "x"
-    tar.id_type = 'OBJECT'
-    tar.id = obj
-    tar.data_path = controller_path + ".rotation_euler[0]"
+    var = driver.variables.new()
+    var.name = "x"
+    var.targets[0].id_type = 'OBJECT'
+    var.targets[0].id = obj
+    var.targets[0].data_path = controller_path + ".rotation_euler[0]"
 
 
     # *****
@@ -194,17 +194,17 @@
     for fcurve in driver_fcurves:
         fcurve.modifiers.remove(0) # grr dont need a modifier
 
-    tar = driver.targets.new()
-    tar.name = "x"
-    tar.id_type = 'OBJECT'
-    tar.id = obj
-    tar.data_path = controller_path + ".rotation_euler[0]"
+    var = driver.variables.new()
+    var.name = "x"
+    var.targets[0].id_type = 'OBJECT'
+    var.targets[0].id = obj
+    var.targets[0].data_path = controller_path + ".rotation_euler[0]"
 
-    tar = driver.targets.new()
-    tar.name = "s"
-    tar.id_type = 'OBJECT'
-    tar.id = obj
-    tar.data_path = controller_path + '["spread"]'
+    var = driver.variables.new()
+    var.name = "s"
+    var.targets[0].id_type = 'OBJECT'
+    var.targets[0].id = obj
+    var.targets[0].data_path = controller_path + '["spread"]'
 
 
     for i, child_name in enumerate(children):

Modified: trunk/blender/release/scripts/modules/rigify/spine_pivot_flex.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/spine_pivot_flex.py	2010-01-04 21:10:51 UTC (rev 25719)
+++ trunk/blender/release/scripts/modules/rigify/spine_pivot_flex.py	2010-01-04 21:15:45 UTC (rev 25720)
@@ -341,12 +341,12 @@
     # add driver
     fcurve = con.driver_add("influence", 0)
     driver = fcurve.driver
-    tar = driver.targets.new()
+    var = driver.variables.new()
     driver.type = 'AVERAGE'
-    tar.name = "var"
-    tar.id_type = 'OBJECT'
-    tar.id = obj
-    tar.data_path = ex.ribcage_copy_p.path_to_id() + '["hinge"]'
+    var.name = "var"
+    var.targets[0].id_type = 'OBJECT'
+    var.targets[0].id = obj
+    var.targets[0].data_path = ex.ribcage_copy_p.path_to_id() + '["hinge"]'
 
     mod = fcurve.modifiers[0]
     mod.poly_order = 1
@@ -426,11 +426,11 @@
     fcurve.modifiers.remove(0) # grr dont need a modifier
 
     for i in range(spine_chain_len - 1):
-        tar = driver.targets.new()
-        tar.name = target_names[i]
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = rib_driver_path + ('["bend_%.2d"]' % (i + 1))
+        var = driver.variables.new()
+        var.name = target_names[i]
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = rib_driver_path + ('["bend_%.2d"]' % (i + 1))
 
     for i in range(1, spine_chain_len):
 
@@ -461,17 +461,17 @@
 
 
         # add target
-        tar = driver.targets.new()
-        tar.name = "bend_tot"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = rib_driver_path + ('["bend_tot"]')
+        var = driver.variables.new()
+        var.name = "bend_tot"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = rib_driver_path + ('["bend_tot"]')
 
-        tar = driver.targets.new()
-        tar.name = "bend"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = rib_driver_path + ('["%s"]' % prop_name)
+        var = driver.variables.new()
+        var.name = "bend"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = rib_driver_path + ('["%s"]' % prop_name)
 
 
 
@@ -509,12 +509,12 @@
 
         fcurve = con.driver_add("influence", 0)
         driver = fcurve.driver
-        tar = driver.targets.new()
+        var = driver.variables.new()
         driver.type = 'AVERAGE'
-        tar.name = "var"
-        tar.id_type = 'OBJECT'
-        tar.id = obj
-        tar.data_path = rib_driver_path + '["pivot_slide"]'
+        var.name = "var"
+        var.targets[0].id_type = 'OBJECT'
+        var.targets[0].id = obj
+        var.targets[0].data_path = rib_driver_path + '["pivot_slide"]'
 
         mod = fcurve.modifiers[0]
         mod.poly_order = 1

Modified: trunk/blender/release/scripts/modules/rigify_utils.py

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list