Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoshua Leung <aligorith@gmail.com>2010-01-05 00:15:45 +0300
committerJoshua Leung <aligorith@gmail.com>2010-01-05 00:15:45 +0300
commita9861e3381f4c2ac44fcc880aa1bd030a3ba8dae (patch)
tree72f8f0d8e7f4abb1833456bbaa8b27ac82a2e829 /release/scripts/modules/rigify
parentc79cf56b69ecf3f49c220ce6dea626caa48e089b (diff)
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.
Diffstat (limited to 'release/scripts/modules/rigify')
-rw-r--r--release/scripts/modules/rigify/arm_biped_generic.py10
-rw-r--r--release/scripts/modules/rigify/finger_curl.py20
-rw-r--r--release/scripts/modules/rigify/leg_biped_generic.py10
-rw-r--r--release/scripts/modules/rigify/neck_flex.py42
-rw-r--r--release/scripts/modules/rigify/palm_curl.py42
-rw-r--r--release/scripts/modules/rigify/spine_pivot_flex.py50
6 files changed, 87 insertions, 87 deletions
diff --git a/release/scripts/modules/rigify/arm_biped_generic.py b/release/scripts/modules/rigify/arm_biped_generic.py
index 092a047f0da..0974b1b8010 100644
--- a/release/scripts/modules/rigify/arm_biped_generic.py
+++ b/release/scripts/modules/rigify/arm_biped_generic.py
@@ -254,11 +254,11 @@ def fk(obj, definitions, base_names, options):
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
diff --git a/release/scripts/modules/rigify/finger_curl.py b/release/scripts/modules/rigify/finger_curl.py
index 7eb1588efd6..4c00f134e19 100644
--- a/release/scripts/modules/rigify/finger_curl.py
+++ b/release/scripts/modules/rigify/finger_curl.py
@@ -251,18 +251,18 @@ def main(obj, bone_definition, base_names, options):
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:
diff --git a/release/scripts/modules/rigify/leg_biped_generic.py b/release/scripts/modules/rigify/leg_biped_generic.py
index f2d59a96032..2bf53ddc1ce 100644
--- a/release/scripts/modules/rigify/leg_biped_generic.py
+++ b/release/scripts/modules/rigify/leg_biped_generic.py
@@ -336,12 +336,12 @@ def fk(obj, bone_definition, base_names, options):
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
diff --git a/release/scripts/modules/rigify/neck_flex.py b/release/scripts/modules/rigify/neck_flex.py
index 7b5b8c6bacb..a56c7dcb4e3 100644
--- a/release/scripts/modules/rigify/neck_flex.py
+++ b/release/scripts/modules/rigify/neck_flex.py
@@ -238,12 +238,12 @@ def main(obj, bone_definition, base_names, options):
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 @@ def main(obj, bone_definition, base_names, options):
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 @@ def main(obj, bone_definition, base_names, options):
# 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"]')
-
- 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_tot"
+ var.targets[0].id_type = 'OBJECT'
+ var.targets[0].id = obj
+ var.targets[0].data_path = head_driver_path + ('["bend_tot"]')
+
+ 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
diff --git a/release/scripts/modules/rigify/palm_curl.py b/release/scripts/modules/rigify/palm_curl.py
index 48931079816..548c311f823 100644
--- a/release/scripts/modules/rigify/palm_curl.py
+++ b/release/scripts/modules/rigify/palm_curl.py
@@ -169,22 +169,22 @@ def main(obj, bone_definition, base_names, options):
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 @@ def main(obj, bone_definition, base_names, options):
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]"
-
- 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 = "x"
+ var.targets[0].id_type = 'OBJECT'
+ var.targets[0].id = obj
+ var.targets[0].data_path = controller_path + ".rotation_euler[0]"
+
+ 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):
diff --git a/release/scripts/modules/rigify/spine_pivot_flex.py b/release/scripts/modules/rigify/spine_pivot_flex.py
index a8ba71d1fe6..c6a5fa67390 100644
--- a/release/scripts/modules/rigify/spine_pivot_flex.py
+++ b/release/scripts/modules/rigify/spine_pivot_flex.py
@@ -341,12 +341,12 @@ def main(obj, bone_definition, base_names, options):
# 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 @@ def main(obj, bone_definition, base_names, options):
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 @@ def main(obj, bone_definition, base_names, options):
# 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 @@ def main(obj, bone_definition, base_names, options):
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