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:
authorCampbell Barton <ideasman42@gmail.com>2009-12-07 23:49:12 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-07 23:49:12 +0300
commitce49719a0c9baf75576929f956e1224fcd46afc7 (patch)
tree89aac7dbd05abff24e19096f332349d9496ab90a /release
parentf350cde18c2103d6a78e4d5d14f9b57cbaab1a1e (diff)
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)
Diffstat (limited to 'release')
-rw-r--r--release/scripts/modules/rigify/neck.py38
-rw-r--r--release/scripts/modules/rigify/spine.py55
2 files changed, 65 insertions, 28 deletions
diff --git a/release/scripts/modules/rigify/neck.py b/release/scripts/modules/rigify/neck.py
index 06e2e1077b2..6963bfbfb8d 100644
--- a/release/scripts/modules/rigify/neck.py
+++ b/release/scripts/modules/rigify/neck.py
@@ -220,10 +220,21 @@ def main(obj, bone_definition, base_names):
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 @@ def main(obj, bone_definition, base_names):
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
diff --git a/release/scripts/modules/rigify/spine.py b/release/scripts/modules/rigify/spine.py
index 39ba4baee61..23af154520a 100644
--- a/release/scripts/modules/rigify/spine.py
+++ b/release/scripts/modules/rigify/spine.py
@@ -364,12 +364,6 @@ def main(obj, bone_definition, base_names):
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 @@ def main(obj, bone_definition, base_names):
# 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 @@ def main(obj, bone_definition, base_names):
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