[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25189] trunk/blender/release/scripts/ modules/rigify: use the SUM driver type to avoid adding all values on each bone.
Campbell Barton
ideasman42 at gmail.com
Mon Dec 7 21:49:12 CET 2009
Revision: 25189
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25189
Author: campbellbarton
Date: 2009-12-07 21:49:12 +0100 (Mon, 07 Dec 2009)
Log Message:
-----------
use the SUM driver type to avoid adding all values on each bone.
also avoids hitting the 255 string limit if you want to add 100's of values. eg.
>>> b05/max(0.001, [globals().update({"LOCALS":locals(), "ADD":float.__add__, "reduce":__import__("functools").reduce}), 0.0][1], max((, [LOCALS["b%.2d" % (i+1)] for i in range(5)])))
Since this more simple expression reaches the limit fairly quick...
>>> b05/max(0.001,b01+b02+b03+b04+b05)
Modified Paths:
--------------
trunk/blender/release/scripts/modules/rigify/neck.py
trunk/blender/release/scripts/modules/rigify/spine.py
Modified: trunk/blender/release/scripts/modules/rigify/neck.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/neck.py 2009-12-07 20:39:57 UTC (rev 25188)
+++ trunk/blender/release/scripts/modules/rigify/neck.py 2009-12-07 20:49:12 UTC (rev 25189)
@@ -220,10 +220,21 @@
head_driver_path = mt.head_p.path_to_id()
- # b01/max(0.001,b01+b02+b03+b04+b05)
target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))]
- expression_suffix = "/max(0.001,%s)" % "+".join(target_names)
+
+ mt.head_p["bend_tot"] = 0.0
+ fcurve = mt.head_p.driver_add('["bend_tot"]', 0)
+ driver = fcurve.driver
+ driver.type = 'SUM'
+ 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.rna_path = head_driver_path + ('["bend_%.2d"]' % (i + 1))
+
for i, attr in enumerate(mt_chain.attr_names):
neck_p = getattr(mt_chain, attr + "_p")
@@ -252,16 +263,23 @@
fcurve = con.driver_add("influence", 0)
driver = fcurve.driver
driver.type = 'SCRIPTED'
- # b01/max(0.001,b01+b02+b03+b04+b05)
- driver.expression = target_names[i] + expression_suffix
+ driver.expression = "bend/bend_tot"
+
fcurve.modifiers.remove(0) # grr dont need a modifier
+
- for j in range(len(neck_chain)):
- tar = driver.targets.new()
- tar.name = target_names[j]
- tar.id_type = 'OBJECT'
- tar.id = obj
- tar.rna_path = head_driver_path + ('["bend_%.2d"]' % (j + 1))
+ # add target
+ tar = driver.targets.new()
+ tar.name = "bend_tot"
+ tar.id_type = 'OBJECT'
+ tar.id = obj
+ tar.rna_path = head_driver_path + ('["bend_tot"]')
+
+ tar = driver.targets.new()
+ tar.name = "bend"
+ tar.id_type = 'OBJECT'
+ tar.id = obj
+ tar.rna_path = head_driver_path + ('["%s"]' % prop_name)
# no blending the result of this
return None
Modified: trunk/blender/release/scripts/modules/rigify/spine.py
===================================================================
--- trunk/blender/release/scripts/modules/rigify/spine.py 2009-12-07 20:39:57 UTC (rev 25188)
+++ trunk/blender/release/scripts/modules/rigify/spine.py 2009-12-07 20:49:12 UTC (rev 25189)
@@ -364,12 +364,6 @@
prop["soft_min"] = 1.0 / spine_chain_len
prop["soft_max"] = 1.0
- for i in range(spine_chain_len - 1):
- prop_name = "bend_%.2d" % (i + 1)
- prop = rna_idprop_ui_prop_get(mt.ribcage_p, prop_name, create=True)
- mt.ribcage_p[prop_name] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
# Create a fake connected parent/child relationship with bone location constraints
# positioned at the tip.
@@ -387,15 +381,32 @@
# Constrain 'inbetween' bones
-
- # b01/max(0.001,b01+b02+b03+b04+b05)
target_names = [("b%.2d" % (i + 1)) for i in range(spine_chain_len - 1)]
- expression_suffix = "/max(0.001,%s)" % "+".join(target_names)
-
rib_driver_path = mt.ribcage_p.path_to_id()
+ mt.ribcage_p["bend_tot"] = 0.0
+ fcurve = mt.ribcage_p.driver_add('["bend_tot"]', 0)
+ driver = fcurve.driver
+ driver.type = 'SUM'
+ 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.rna_path = rib_driver_path + ('["bend_%.2d"]' % (i + 1))
+ print(rib_driver_path)
+
for i in range(1, spine_chain_len):
+ # Add bend prop
+ prop_name = "bend_%.2d" % i
+ prop = rna_idprop_ui_prop_get(mt.ribcage_p, prop_name, create=True)
+ mt.ribcage_p[prop_name] = 1.0
+ prop["soft_min"] = 0.0
+ prop["soft_max"] = 1.0
+
spine_p = getattr(ex_chain, ex_chain.attr_names[i] + "_p")
spine_p_parent = spine_p.parent # interlaced bone
@@ -410,16 +421,24 @@
fcurve = con.driver_add("influence", 0)
driver = fcurve.driver
driver.type = 'SCRIPTED'
- # b01/max(0.001,b01+b02+b03+b04+b05)
- driver.expression = target_names[i - 1] + expression_suffix
+ driver.expression = "bend/bend_tot"
+
fcurve.modifiers.remove(0) # grr dont need a modifier
+
- for j in range(spine_chain_len - 1):
- tar = driver.targets.new()
- tar.name = target_names[j]
- tar.id_type = 'OBJECT'
- tar.id = obj
- tar.rna_path = rib_driver_path + ('["bend_%.2d"]' % (j + 1))
+ # add target
+ tar = driver.targets.new()
+ tar.name = "bend_tot"
+ tar.id_type = 'OBJECT'
+ tar.id = obj
+ tar.rna_path = rib_driver_path + ('["bend_tot"]')
+
+ tar = driver.targets.new()
+ tar.name = "bend"
+ tar.id_type = 'OBJECT'
+ tar.id = obj
+ tar.rna_path = rib_driver_path + ('["%s"]' % prop_name)
+
# original bone drivers
More information about the Bf-blender-cvs
mailing list