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:
Diffstat (limited to 'release/scripts/modules/rigify/stretch_twist.py')
-rw-r--r--release/scripts/modules/rigify/stretch_twist.py155
1 files changed, 155 insertions, 0 deletions
diff --git a/release/scripts/modules/rigify/stretch_twist.py b/release/scripts/modules/rigify/stretch_twist.py
index 66719d80d42..ac64d4369cd 100644
--- a/release/scripts/modules/rigify/stretch_twist.py
+++ b/release/scripts/modules/rigify/stretch_twist.py
@@ -1,3 +1,4 @@
+<<<<<<< .working
# ##### BEGIN GPL LICENSE BLOCK #####
#
# This program is free software; you can redistribute it and/or
@@ -150,3 +151,157 @@ def main(obj, bone_definition, base_names, options):
return tuple()
+=======
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+import bpy
+from rigify import RigifyError
+from rigify_utils import copy_bone_simple
+
+METARIG_NAMES = tuple()
+RIG_TYPE = "stretch_twist"
+
+# TODO
+#def metarig_template():
+# # generated by rigify.write_meta_rig
+# bpy.ops.object.mode_set(mode='EDIT')
+# obj = bpy.context.active_object
+# arm = obj.data
+# bone = arm.edit_bones.new('Bone')
+# bone.head[:] = 0.0000, 0.0000, 0.0000
+# bone.tail[:] = 0.0000, 0.0000, 1.0000
+# bone.roll = 0.0000
+# bone.use_connect = False
+#
+# bpy.ops.object.mode_set(mode='OBJECT')
+# pbone = obj.pose.bones['Bone']
+# pbone['type'] = 'copy'
+
+bool_map = {0:False, 1:True,
+ 0.0:False, 1.0:True,
+ "false":False, "true":True,
+ "False":False, "True":True,
+ "no":False, "yes":True,
+ "No":False, "Yes":True}
+
+def metarig_definition(obj, orig_bone_name):
+ return (orig_bone_name,)
+
+
+
+
+def main(obj, bone_definition, base_names, options):
+ """ A dual-bone stretchy bone setup. Each half follows the twist of the
+ bone on its side.
+ Deformation only (no controls).
+ """
+ # Verify required parameter
+ if "to" not in options:
+ raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0]))
+ if type(options["to"]) is not str:
+ raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0]))
+ if ("ORG-" + options["to"]) not in obj.data.bones:
+ raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0]))
+
+ preserve_volume = None
+ # Check optional parameter
+ if "preserve_volume" in options:
+ try:
+ preserve_volume = bool_map[options["preserve_volume"]]
+ except KeyError:
+ preserve_volume = False
+
+ eb = obj.data.edit_bones
+ bb = obj.data.bones
+ pb = obj.pose.bones
+
+ bpy.ops.object.mode_set(mode='EDIT')
+ arm = obj.data
+
+ mbone1 = bone_definition[0]
+ mbone2 = "ORG-" + options["to"]
+
+ bone_e = copy_bone_simple(obj.data, mbone1, "MCH-%s" % base_names[bone_definition[0]])
+ bone_e.use_connect = False
+ bone_e.parent = None
+ bone_e.head = (eb[mbone1].head + eb[mbone2].head) / 2
+ bone_e.tail = (bone_e.head[0], bone_e.head[1], bone_e.head[2]+0.1)
+ mid_bone = bone_e.name
+
+ bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]])
+ bone_e.use_connect = False
+ bone_e.parent = eb[mbone1]
+ bone_e.tail = eb[mid_bone].head
+ bone1 = bone_e.name
+
+ bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]])
+ bone_e.use_connect = False
+ bone_e.parent = eb[mbone2]
+ bone_e.tail = eb[mid_bone].head
+ bone2 = bone_e.name
+
+
+
+ bpy.ops.object.mode_set(mode='OBJECT')
+
+ # Constraints
+
+ # Mid bone
+ con = pb[mid_bone].constraints.new('COPY_LOCATION')
+ con.target = obj
+ con.subtarget = mbone1
+
+ con = pb[mid_bone].constraints.new('COPY_LOCATION')
+ con.target = obj
+ con.subtarget = mbone2
+ con.influence = 0.5
+
+ # Bone 1
+ con = pb[bone1].constraints.new('DAMPED_TRACK')
+ con.target = obj
+ con.subtarget = mid_bone
+
+ con = pb[bone1].constraints.new('STRETCH_TO')
+ con.target = obj
+ con.subtarget = mid_bone
+ con.rest_length = bb[bone1].length
+ if preserve_volume:
+ con.volume = 'VOLUME_XZX'
+ else:
+ con.volume = 'NO_VOLUME'
+
+ # Bone 2
+ con = pb[bone2].constraints.new('DAMPED_TRACK')
+ con.target = obj
+ con.subtarget = mid_bone
+
+ con = pb[bone2].constraints.new('STRETCH_TO')
+ con.target = obj
+ con.subtarget = mid_bone
+ con.rest_length = bb[bone2].length
+ if preserve_volume:
+ con.volume = 'VOLUME_XZX'
+ else:
+ con.volume = 'NO_VOLUME'
+
+ return tuple()
+
+>>>>>>> .merge-right.r31523