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

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/rigify
diff options
context:
space:
mode:
authorDemeter Dzadik <Mets>2020-11-07 17:32:29 +0300
committerAlexander Gavrilov <angavrilov@gmail.com>2020-11-24 17:23:54 +0300
commit46590bb7800eea5aa1826f6e9305d7e0320829be (patch)
tree23e19892343abcc9ab1ffcf5f1b5a4e072c997bd /rigify
parent3bbcfa7c2d5ca564804c30f0b19c219e00dc4892 (diff)
Rigify: Fix T78463: better support unguligrade animals (horse) setup.
Add support for 5 bone chains to the limbs.paw rig. Implement a new limbs.rear_paw rig, which provides a three bone IK mechanism designed to keep the first and third bones nearly parallel by default (based on a YouTube video by @Pieriko as suggested by @icappiello). Implement a limbs.front_paw rig with automation that aims to keep the angle between second and third bones mostly stable by default (has influence option), as suitable for front paws. The horse and wolf metarigs are updated to use these new rig types, with the horse rig further overhauled by @icappiello. Maniphest Tasks: T78463 Differential Revision: https://developer.blender.org/D8496
Diffstat (limited to 'rigify')
-rw-r--r--rigify/base_generate.py4
-rw-r--r--rigify/base_rig.py7
-rw-r--r--rigify/generate.py7
-rw-r--r--rigify/metarigs/Animals/horse.py820
-rw-r--r--rigify/metarigs/Animals/wolf.py770
-rw-r--r--rigify/rig_ui_template.py39
-rw-r--r--rigify/rigs/limbs/arm.py5
-rw-r--r--rigify/rigs/limbs/front_paw.py288
-rw-r--r--rigify/rigs/limbs/leg.py5
-rw-r--r--rigify/rigs/limbs/limb_rigs.py155
-rw-r--r--rigify/rigs/limbs/paw.py136
-rw-r--r--rigify/rigs/limbs/rear_paw.py472
-rw-r--r--rigify/utils/bones.py6
13 files changed, 1584 insertions, 1130 deletions
diff --git a/rigify/base_generate.py b/rigify/base_generate.py
index 22a35eae..ce04b8fc 100644
--- a/rigify/base_generate.py
+++ b/rigify/base_generate.py
@@ -359,6 +359,10 @@ class BaseGenerator:
self.__run_object_stage('configure_bones')
+ def invoke_preapply_bones(self):
+ self.__run_object_stage('preapply_bones')
+
+
def invoke_apply_bones(self):
self.__run_edit_stage('apply_bones')
diff --git a/rigify/base_rig.py b/rigify/base_rig.py
index 056c2785..d878143b 100644
--- a/rigify/base_rig.py
+++ b/rigify/base_rig.py
@@ -119,6 +119,13 @@ class GenerateCallbackHost(BaseStagedClass, define_stages=True):
"""
pass
+ def preapply_bones(self):
+ """
+ Read bone matrices for applying to edit mode.
+ Called in Object mode. May not do Edit mode operations.
+ """
+ pass
+
def apply_bones(self):
"""
Can be used to apply some constraints to rest pose, and for final parenting.
diff --git a/rigify/generate.py b/rigify/generate.py
index a4e97f96..9c861d97 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -429,6 +429,13 @@ class Generator(base_generate.BaseGenerator):
t.tick("Configure bones: ")
#------------------------------------------
+ bpy.ops.object.mode_set(mode='OBJECT')
+
+ self.invoke_preapply_bones()
+
+ t.tick("Preapply bones: ")
+
+ #------------------------------------------
bpy.ops.object.mode_set(mode='EDIT')
self.invoke_apply_bones()
diff --git a/rigify/metarigs/Animals/horse.py b/rigify/metarigs/Animals/horse.py
index eafb9b02..1cdd4feb 100644
--- a/rigify/metarigs/Animals/horse.py
+++ b/rigify/metarigs/Animals/horse.py
@@ -165,432 +165,432 @@ def create(obj):
bones = {}
- bone = arm.edit_bones.new('spine.005')
- bone.head = -0.0000, 0.9228, 1.4526
- bone.tail = -0.0000, 0.6989, 1.4910
- bone.roll = -0.0000
+ bone = arm.edit_bones.new('spine.001')
+ bone.head = 0.0000, 0.8059, 1.3950
+ bone.tail = 0.0000, 0.3939, 1.3950
+ bone.roll = 0.0000
bone.use_connect = False
- bones['spine.005'] = bone.name
- bone = arm.edit_bones.new('spine.004')
- bone.head = -0.0000, 0.9228, 1.4526
- bone.tail = -0.0000, 1.0291, 1.4191
- bone.roll = -0.0000
+ bones['spine.001'] = bone.name
+ bone = arm.edit_bones.new('tail.001')
+ bone.head = -0.0000, 0.8970, 1.4526
+ bone.tail = 0.0000, 1.0033, 1.4420
+ bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.005']]
- bones['spine.004'] = bone.name
- bone = arm.edit_bones.new('spine.006')
- bone.head = -0.0000, 0.6989, 1.4910
- bone.tail = 0.0000, 0.3824, 1.3801
- bone.roll = -0.0000
+ bone.parent = arm.edit_bones[bones['spine.001']]
+ bones['tail.001'] = bone.name
+ bone = arm.edit_bones.new('spine.002')
+ bone.head = 0.0000, 0.3939, 1.3950
+ bone.tail = -0.0000, 0.2088, 1.3270
+ bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.005']]
- bones['spine.006'] = bone.name
- bone = arm.edit_bones.new('spine.003')
- bone.head = -0.0000, 1.0291, 1.4191
+ bone.parent = arm.edit_bones[bones['spine.001']]
+ bones['spine.002'] = bone.name
+ bone = arm.edit_bones.new('tail.002')
+ bone.head = 0.0000, 1.0033, 1.4420
bone.tail = -0.0000, 1.1423, 1.3128
bone.roll = -0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.004']]
- bones['spine.003'] = bone.name
- bone = arm.edit_bones.new('spine.007')
- bone.head = 0.0000, 0.3824, 1.3801
- bone.tail = 0.0000, 0.1316, 1.3086
+ bone.parent = arm.edit_bones[bones['tail.001']]
+ bones['tail.002'] = bone.name
+ bone = arm.edit_bones.new('spine.003')
+ bone.head = -0.0000, 0.2088, 1.3270
+ bone.tail = -0.0000, 0.0294, 1.2857
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.006']]
- bones['spine.007'] = bone.name
+ bone.parent = arm.edit_bones[bones['spine.002']]
+ bones['spine.003'] = bone.name
bone = arm.edit_bones.new('pelvis.L')
- bone.head = 0.0503, 0.6868, 1.3205
+ bone.head = -0.0000, 0.8059, 1.3950
bone.tail = 0.1803, 0.4418, 1.5783
- bone.roll = 0.7837
+ bone.roll = 0.6304
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.006']]
+ bone.parent = arm.edit_bones[bones['spine.002']]
bones['pelvis.L'] = bone.name
- bone = arm.edit_bones.new('thigh.L')
- bone.head = 0.1922, 0.7048, 1.4330
- bone.tail = 0.1933, 0.5712, 1.0272
- bone.roll = 3.1380
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.006']]
- bones['thigh.L'] = bone.name
bone = arm.edit_bones.new('pelvis.R')
- bone.head = -0.0503, 0.6868, 1.3205
+ bone.head = 0.0000, 0.8059, 1.3950
bone.tail = -0.1803, 0.4418, 1.5783
- bone.roll = -0.7837
+ bone.roll = -0.6304
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.006']]
+ bone.parent = arm.edit_bones[bones['spine.002']]
bones['pelvis.R'] = bone.name
- bone = arm.edit_bones.new('thigh.R')
- bone.head = -0.1922, 0.7048, 1.4330
- bone.tail = -0.1933, 0.5712, 1.0272
- bone.roll = -3.1380
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.006']]
- bones['thigh.R'] = bone.name
- bone = arm.edit_bones.new('pelvis')
- bone.head = 0.0000, 0.6845, 1.3200
- bone.tail = -0.0000, 0.4276, 1.0452
+ bone = arm.edit_bones.new('hip')
+ bone.head = -0.0000, 0.8059, 1.3950
+ bone.tail = -0.0000, 0.4636, 1.0212
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.006']]
- bones['pelvis'] = bone.name
- bone = arm.edit_bones.new('spine.002')
+ bone.parent = arm.edit_bones[bones['spine.002']]
+ bones['hip'] = bone.name
+ bone = arm.edit_bones.new('tail.003')
bone.head = -0.0000, 1.1423, 1.3128
bone.tail = -0.0000, 1.3779, 1.1589
bone.roll = -0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.003']]
- bones['spine.002'] = bone.name
- bone = arm.edit_bones.new('spine.008')
- bone.head = 0.0000, 0.1316, 1.3086
- bone.tail = 0.0000, -0.1712, 1.2964
+ bone.parent = arm.edit_bones[bones['tail.002']]
+ bones['tail.003'] = bone.name
+ bone = arm.edit_bones.new('spine.004')
+ bone.head = -0.0000, 0.0294, 1.2857
+ bone.tail = -0.0000, -0.1769, 1.2735
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.007']]
- bones['spine.008'] = bone.name
- bone = arm.edit_bones.new('shin.L')
- bone.head = 0.1933, 0.5712, 1.0272
- bone.tail = 0.1933, 0.7355, 0.6045
- bone.roll = -3.1416
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['thigh.L']]
- bones['shin.L'] = bone.name
- bone = arm.edit_bones.new('shin.R')
- bone.head = -0.1933, 0.5712, 1.0272
- bone.tail = -0.1933, 0.7355, 0.6045
- bone.roll = 3.1416
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['thigh.R']]
- bones['shin.R'] = bone.name
- bone = arm.edit_bones.new('spine.001')
+ bone.parent = arm.edit_bones[bones['spine.003']]
+ bones['spine.004'] = bone.name
+ bone = arm.edit_bones.new('abdomen')
+ bone.head = -0.0000, 0.1503, 1.2207
+ bone.tail = -0.0000, 0.2042, 0.9012
+ bone.roll = 0.0000
+ bone.use_connect = False
+ bone.parent = arm.edit_bones[bones['spine.003']]
+ bones['abdomen'] = bone.name
+ bone = arm.edit_bones.new('thigh.L')
+ bone.head = 0.1922, 0.6243, 1.4090
+ bone.tail = 0.1933, 0.5569, 1.0335
+ bone.roll = 3.1378
+ bone.use_connect = False
+ bone.parent = arm.edit_bones[bones['pelvis.L']]
+ bones['thigh.L'] = bone.name
+ bone = arm.edit_bones.new('thigh.R')
+ bone.head = -0.1922, 0.6243, 1.4090
+ bone.tail = -0.1933, 0.5569, 1.0335
+ bone.roll = -3.1378
+ bone.use_connect = False
+ bone.parent = arm.edit_bones[bones['pelvis.R']]
+ bones['thigh.R'] = bone.name
+ bone = arm.edit_bones.new('tail.004')
bone.head = -0.0000, 1.3779, 1.1589
bone.tail = -0.0000, 1.5754, 1.1088
bone.roll = -0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.002']]
- bones['spine.001'] = bone.name
- bone = arm.edit_bones.new('spine.009')
- bone.head = 0.0000, -0.1712, 1.2964
- bone.tail = 0.0000, -0.4908, 1.3031
+ bone.parent = arm.edit_bones[bones['tail.003']]
+ bones['tail.004'] = bone.name
+ bone = arm.edit_bones.new('spine.005')
+ bone.head = -0.0000, -0.1769, 1.2735
+ bone.tail = -0.0000, -0.3674, 1.2808
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.008']]
- bones['spine.009'] = bone.name
- bone = arm.edit_bones.new('belly')
- bone.head = -0.0000, 0.1503, 1.2207
- bone.tail = -0.0000, 0.1802, 0.9332
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.008']]
- bones['belly'] = bone.name
- bone = arm.edit_bones.new('foot.L')
- bone.head = 0.1933, 0.7355, 0.6045
- bone.tail = 0.1933, 0.6771, 0.1732
+ bone.parent = arm.edit_bones[bones['spine.004']]
+ bones['spine.005'] = bone.name
+ bone = arm.edit_bones.new('lower_leg.L')
+ bone.head = 0.1933, 0.5569, 1.0335
+ bone.tail = 0.1933, 0.7635, 0.6074
bone.roll = -3.1416
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['shin.L']]
- bones['foot.L'] = bone.name
- bone = arm.edit_bones.new('foot.R')
- bone.head = -0.1933, 0.7355, 0.6045
- bone.tail = -0.1933, 0.6771, 0.1732
+ bone.parent = arm.edit_bones[bones['thigh.L']]
+ bones['lower_leg.L'] = bone.name
+ bone = arm.edit_bones.new('lower_leg.R')
+ bone.head = -0.1933, 0.5569, 1.0335
+ bone.tail = -0.1933, 0.7635, 0.6074
bone.roll = 3.1416
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['shin.R']]
- bones['foot.R'] = bone.name
- bone = arm.edit_bones.new('spine')
+ bone.parent = arm.edit_bones[bones['thigh.R']]
+ bones['lower_leg.R'] = bone.name
+ bone = arm.edit_bones.new('tail.005')
bone.head = -0.0000, 1.5754, 1.1088
bone.tail = -0.0000, 1.7610, 1.1153
bone.roll = -0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.001']]
- bones['spine'] = bone.name
- bone = arm.edit_bones.new('spine.010')
- bone.head = 0.0000, -0.4908, 1.3031
- bone.tail = 0.0000, -0.7593, 1.3786
+ bone.parent = arm.edit_bones[bones['tail.004']]
+ bones['tail.005'] = bone.name
+ bone = arm.edit_bones.new('spine.006')
+ bone.head = -0.0000, -0.3674, 1.2808
+ bone.tail = 0.0000, -0.7593, 1.3826
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.009']]
- bones['spine.010'] = bone.name
+ bone.parent = arm.edit_bones[bones['spine.005']]
+ bones['spine.006'] = bone.name
bone = arm.edit_bones.new('shoulder.L')
bone.head = 0.0936, -0.5035, 1.5783
- bone.tail = 0.1868, -0.6452, 1.0858
- bone.roll = -0.2398
+ bone.tail = 0.1868, -0.6945, 1.1976
+ bone.roll = -0.3119
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.009']]
+ bone.parent = arm.edit_bones[bones['spine.005']]
bones['shoulder.L'] = bone.name
bone = arm.edit_bones.new('breast.L')
bone.head = 0.0905, -0.5541, 1.0931
- bone.tail = 0.0905, -0.8316, 0.9879
+ bone.tail = 0.0905, -0.8436, 0.9400
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.009']]
+ bone.parent = arm.edit_bones[bones['spine.005']]
bones['breast.L'] = bone.name
bone = arm.edit_bones.new('shoulder.R')
bone.head = -0.0936, -0.5035, 1.5783
- bone.tail = -0.1868, -0.6452, 1.0858
- bone.roll = 0.2398
+ bone.tail = -0.1868, -0.6945, 1.1976
+ bone.roll = 0.3119
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.009']]
+ bone.parent = arm.edit_bones[bones['spine.005']]
bones['shoulder.R'] = bone.name
bone = arm.edit_bones.new('breast.R')
bone.head = -0.0905, -0.5541, 1.0931
- bone.tail = -0.0905, -0.8316, 0.9879
+ bone.tail = -0.0905, -0.8436, 0.9400
bone.roll = -0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.009']]
+ bone.parent = arm.edit_bones[bones['spine.005']]
bones['breast.R'] = bone.name
bone = arm.edit_bones.new('chest')
bone.head = -0.0000, -0.2180, 1.2173
- bone.tail = -0.0000, -0.2239, 0.8383
+ bone.tail = -0.0000, -0.2239, 0.8063
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.009']]
+ bone.parent = arm.edit_bones[bones['spine.005']]
bones['chest'] = bone.name
- bone = arm.edit_bones.new('r_toe.L')
- bone.head = 0.1933, 0.6771, 0.1732
- bone.tail = 0.1933, 0.5818, 0.0198
- bone.roll = 3.1416
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['foot.L']]
- bones['r_toe.L'] = bone.name
- bone = arm.edit_bones.new('r_toe.R')
- bone.head = -0.1933, 0.6771, 0.1732
- bone.tail = -0.1933, 0.5818, 0.0198
+ bone = arm.edit_bones.new('hind_foot.L')
+ bone.head = 0.1933, 0.7635, 0.6074
+ bone.tail = 0.1933, 0.6900, 0.2011
bone.roll = -3.1416
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['foot.R']]
- bones['r_toe.R'] = bone.name
- bone = arm.edit_bones.new('spine.011')
- bone.head = 0.0000, -0.7593, 1.3786
+ bone.parent = arm.edit_bones[bones['lower_leg.L']]
+ bones['hind_foot.L'] = bone.name
+ bone = arm.edit_bones.new('hind_foot.R')
+ bone.head = -0.1933, 0.7635, 0.6074
+ bone.tail = -0.1933, 0.6900, 0.2011
+ bone.roll = 3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['lower_leg.R']]
+ bones['hind_foot.R'] = bone.name
+ bone = arm.edit_bones.new('neck.001')
+ bone.head = 0.0000, -0.7593, 1.3826
bone.tail = 0.0000, -0.9004, 1.5475
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.010']]
- bones['spine.011'] = bone.name
- bone = arm.edit_bones.new('hair_base.05')
+ bone.parent = arm.edit_bones[bones['spine.006']]
+ bones['neck.001'] = bone.name
+ bone = arm.edit_bones.new('mane_base.05')
bone.head = -0.0000, -0.6120, 1.6888
bone.tail = -0.0000, -0.5782, 1.7371
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.010']]
- bones['hair_base.05'] = bone.name
+ bone.parent = arm.edit_bones[bones['spine.006']]
+ bones['mane_base.05'] = bone.name
bone = arm.edit_bones.new('upper_arm.L')
- bone.head = 0.1639, -0.5751, 0.9953
- bone.tail = 0.1639, -0.5538, 0.5130
+ bone.head = 0.1639, -0.6896, 1.1597
+ bone.tail = 0.1639, -0.5323, 0.8412
bone.roll = -3.1416
bone.use_connect = False
bone.parent = arm.edit_bones[bones['shoulder.L']]
bones['upper_arm.L'] = bone.name
bone = arm.edit_bones.new('upper_arm.R')
- bone.head = -0.1639, -0.5751, 0.9953
- bone.tail = -0.1639, -0.5538, 0.5130
+ bone.head = -0.1639, -0.6896, 1.1597
+ bone.tail = -0.1639, -0.5323, 0.8412
bone.roll = 3.1416
bone.use_connect = False
bone.parent = arm.edit_bones[bones['shoulder.R']]
bones['upper_arm.R'] = bone.name
- bone = arm.edit_bones.new('spine.012')
+ bone = arm.edit_bones.new('r_toe.L')
+ bone.head = 0.1933, 0.6900, 0.2011
+ bone.tail = 0.1933, 0.6341, 0.1052
+ bone.roll = 3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['hind_foot.L']]
+ bones['r_toe.L'] = bone.name
+ bone = arm.edit_bones.new('r_toe.R')
+ bone.head = -0.1933, 0.6900, 0.2011
+ bone.tail = -0.1933, 0.6341, 0.1052
+ bone.roll = -3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['hind_foot.R']]
+ bones['r_toe.R'] = bone.name
+ bone = arm.edit_bones.new('neck.002')
bone.head = 0.0000, -0.9004, 1.5475
bone.tail = 0.0000, -1.0348, 1.7032
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.011']]
- bones['spine.012'] = bone.name
- bone = arm.edit_bones.new('hair_base.04')
+ bone.parent = arm.edit_bones[bones['neck.001']]
+ bones['neck.002'] = bone.name
+ bone = arm.edit_bones.new('mane_base.04')
bone.head = 0.0000, -0.7885, 1.7610
bone.tail = -0.0000, -0.7366, 1.8394
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.011']]
- bones['hair_base.04'] = bone.name
- bone = arm.edit_bones.new('hair_top.05')
+ bone.parent = arm.edit_bones[bones['neck.001']]
+ bones['mane_base.04'] = bone.name
+ bone = arm.edit_bones.new('mane_top.05')
bone.head = -0.0000, -0.5782, 1.7371
bone.tail = -0.0000, -0.5444, 1.7855
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hair_base.05']]
- bones['hair_top.05'] = bone.name
+ bone.parent = arm.edit_bones[bones['mane_base.05']]
+ bones['mane_top.05'] = bone.name
bone = arm.edit_bones.new('forearm.L')
- bone.head = 0.1639, -0.5538, 0.5130
- bone.tail = 0.1639, -0.5133, 0.1885
+ bone.head = 0.1639, -0.5323, 0.8412
+ bone.tail = 0.1639, -0.5386, 0.4807
bone.roll = -3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['upper_arm.L']]
bones['forearm.L'] = bone.name
bone = arm.edit_bones.new('forearm.R')
- bone.head = -0.1639, -0.5538, 0.5130
- bone.tail = -0.1639, -0.5133, 0.1885
+ bone.head = -0.1639, -0.5323, 0.8412
+ bone.tail = -0.1639, -0.5386, 0.4807
bone.roll = 3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['upper_arm.R']]
bones['forearm.R'] = bone.name
- bone = arm.edit_bones.new('spine.014')
+ bone = arm.edit_bones.new('r_hoof.L')
+ bone.head = 0.1933, 0.6341, 0.1052
+ bone.tail = 0.1933, 0.5916, 0.0007
+ bone.roll = -3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['r_toe.L']]
+ bones['r_hoof.L'] = bone.name
+ bone = arm.edit_bones.new('r_hoof.R')
+ bone.head = -0.1933, 0.6341, 0.1052
+ bone.tail = -0.1933, 0.5916, 0.0007
+ bone.roll = 3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['r_toe.R']]
+ bones['r_hoof.R'] = bone.name
+ bone = arm.edit_bones.new('neck.003')
bone.head = 0.0000, -1.0348, 1.7032
bone.tail = 0.0000, -1.1618, 1.7694
bone.roll = -0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.012']]
- bones['spine.014'] = bone.name
- bone = arm.edit_bones.new('hair_base.03')
+ bone.parent = arm.edit_bones[bones['neck.002']]
+ bones['neck.003'] = bone.name
+ bone = arm.edit_bones.new('mane_base.03')
bone.head = 0.0000, -0.9627, 1.8513
bone.tail = 0.0000, -0.9211, 1.9357
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.012']]
- bones['hair_base.03'] = bone.name
- bone = arm.edit_bones.new('hair_top.04')
+ bone.parent = arm.edit_bones[bones['neck.002']]
+ bones['mane_base.03'] = bone.name
+ bone = arm.edit_bones.new('mane_top.04')
bone.head = -0.0000, -0.7366, 1.8394
bone.tail = -0.0000, -0.6847, 1.9178
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hair_base.04']]
- bones['hair_top.04'] = bone.name
- bone = arm.edit_bones.new('hand.L')
- bone.head = 0.1639, -0.5133, 0.1885
- bone.tail = 0.1639, -0.5844, 0.0665
+ bone.parent = arm.edit_bones[bones['mane_base.04']]
+ bones['mane_top.04'] = bone.name
+ bone = arm.edit_bones.new('forefoot.L')
+ bone.head = 0.1639, -0.5386, 0.4807
+ bone.tail = 0.1639, -0.5158, 0.2212
bone.roll = -3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['forearm.L']]
- bones['hand.L'] = bone.name
- bone = arm.edit_bones.new('hand.R')
- bone.head = -0.1639, -0.5133, 0.1885
- bone.tail = -0.1639, -0.5844, 0.0665
+ bones['forefoot.L'] = bone.name
+ bone = arm.edit_bones.new('forefoot.R')
+ bone.head = -0.1639, -0.5386, 0.4807
+ bone.tail = -0.1639, -0.5158, 0.2212
bone.roll = 3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['forearm.R']]
- bones['hand.R'] = bone.name
- bone = arm.edit_bones.new('spine.015')
+ bones['forefoot.R'] = bone.name
+ bone = arm.edit_bones.new('neck.004')
bone.head = 0.0000, -1.1618, 1.7694
bone.tail = -0.0000, -1.2836, 1.7841
bone.roll = -0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.014']]
- bones['spine.015'] = bone.name
- bone = arm.edit_bones.new('hair_base.02')
+ bone.parent = arm.edit_bones[bones['neck.003']]
+ bones['neck.004'] = bone.name
+ bone = arm.edit_bones.new('mane_base.02')
bone.head = 0.0000, -1.1437, 1.9124
bone.tail = 0.0000, -1.1217, 2.0038
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.014']]
- bones['hair_base.02'] = bone.name
- bone = arm.edit_bones.new('hair_top.03')
+ bone.parent = arm.edit_bones[bones['neck.003']]
+ bones['mane_base.02'] = bone.name
+ bone = arm.edit_bones.new('mane_top.03')
bone.head = 0.0000, -0.9211, 1.9357
bone.tail = -0.0000, -0.8795, 2.0200
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hair_base.03']]
- bones['hair_top.03'] = bone.name
+ bone.parent = arm.edit_bones[bones['mane_base.03']]
+ bones['mane_top.03'] = bone.name
bone = arm.edit_bones.new('f_toe.L')
- bone.head = 0.1639, -0.5844, 0.0665
- bone.tail = 0.1639, -0.6564, 0.0185
+ bone.head = 0.1639, -0.5158, 0.2212
+ bone.tail = 0.1639, -0.5722, 0.0941
bone.roll = 3.1416
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hand.L']]
+ bone.parent = arm.edit_bones[bones['forefoot.L']]
bones['f_toe.L'] = bone.name
bone = arm.edit_bones.new('f_toe.R')
- bone.head = -0.1639, -0.5844, 0.0665
- bone.tail = -0.1639, -0.6564, 0.0185
+ bone.head = -0.1639, -0.5158, 0.2212
+ bone.tail = -0.1639, -0.5722, 0.0941
bone.roll = -3.1416
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hand.R']]
+ bone.parent = arm.edit_bones[bones['forefoot.R']]
bones['f_toe.R'] = bone.name
- bone = arm.edit_bones.new('spine.016')
+ bone = arm.edit_bones.new('head')
bone.head = -0.0000, -1.2836, 1.7841
- bone.tail = 0.0000, -1.5974, 1.9308
+ bone.tail = -0.0000, -1.6414, 1.7070
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['spine.015']]
- bones['spine.016'] = bone.name
- bone = arm.edit_bones.new('hair_base.01')
+ bone.parent = arm.edit_bones[bones['neck.004']]
+ bones['head'] = bone.name
+ bone = arm.edit_bones.new('mane_base.01')
bone.head = 0.0000, -1.3074, 1.9345
bone.tail = 0.0000, -1.3182, 2.0279
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.015']]
- bones['hair_base.01'] = bone.name
- bone = arm.edit_bones.new('hair_base.06')
+ bone.parent = arm.edit_bones[bones['neck.004']]
+ bones['mane_base.01'] = bone.name
+ bone = arm.edit_bones.new('mane_base.06')
bone.head = 0.0000, -1.4117, 1.9184
bone.tail = 0.0000, -1.4566, 1.9477
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.015']]
- bones['hair_base.06'] = bone.name
- bone = arm.edit_bones.new('hair_top.02')
+ bone.parent = arm.edit_bones[bones['neck.004']]
+ bones['mane_base.06'] = bone.name
+ bone = arm.edit_bones.new('mane_top.02')
bone.head = 0.0000, -1.1217, 2.0038
bone.tail = 0.0000, -1.0996, 2.0953
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hair_base.02']]
- bones['hair_top.02'] = bone.name
+ bone.parent = arm.edit_bones[bones['mane_base.02']]
+ bones['mane_top.02'] = bone.name
+ bone = arm.edit_bones.new('f_hoof.L')
+ bone.head = 0.1639, -0.5722, 0.0941
+ bone.tail = 0.1639, -0.6384, 0.0007
+ bone.roll = -3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['f_toe.L']]
+ bones['f_hoof.L'] = bone.name
+ bone = arm.edit_bones.new('f_hoof.R')
+ bone.head = -0.1639, -0.5722, 0.0941
+ bone.tail = -0.1639, -0.6384, 0.0007
+ bone.roll = 3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['f_toe.R']]
+ bones['f_hoof.R'] = bone.name
bone = arm.edit_bones.new('skull')
bone.head = -0.0000, -1.3014, 1.8284
bone.tail = 0.0000, -1.6749, 1.3100
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
+ bone.parent = arm.edit_bones[bones['head']]
bones['skull'] = bone.name
bone = arm.edit_bones.new('ear.L')
bone.head = 0.0664, -1.3623, 1.8612
bone.tail = 0.1056, -1.4118, 1.9537
bone.roll = 0.6751
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
+ bone.parent = arm.edit_bones[bones['head']]
bones['ear.L'] = bone.name
- bone = arm.edit_bones.new('eye.L')
- bone.head = 0.0988, -1.4596, 1.7351
- bone.tail = 0.1990, -1.4668, 1.7420
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
- bones['eye.L'] = bone.name
- bone = arm.edit_bones.new('nose.L')
- bone.head = 0.0450, -1.6240, 1.4228
- bone.tail = 0.1039, -1.6613, 1.4269
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
- bones['nose.L'] = bone.name
- bone = arm.edit_bones.new('eye.R')
- bone.head = -0.0988, -1.4596, 1.7351
- bone.tail = -0.1990, -1.4668, 1.7420
- bone.roll = -0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
- bones['eye.R'] = bone.name
- bone = arm.edit_bones.new('nose.R')
- bone.head = -0.0450, -1.6240, 1.4228
- bone.tail = -0.1039, -1.6613, 1.4269
- bone.roll = -0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
- bones['nose.R'] = bone.name
bone = arm.edit_bones.new('ear.R')
bone.head = -0.0664, -1.3623, 1.8612
bone.tail = -0.1056, -1.4118, 1.9537
bone.roll = -0.6751
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
+ bone.parent = arm.edit_bones[bones['head']]
bones['ear.R'] = bone.name
bone = arm.edit_bones.new('jaw')
bone.head = 0.0000, -1.3507, 1.5819
bone.tail = 0.0000, -1.4799, 1.4569
bone.roll = 0.0000
bone.use_connect = False
- bone.parent = arm.edit_bones[bones['spine.016']]
+ bone.parent = arm.edit_bones[bones['head']]
bones['jaw'] = bone.name
- bone = arm.edit_bones.new('hair_top.01')
+ bone = arm.edit_bones.new('mane_top.01')
bone.head = 0.0000, -1.3182, 2.0279
bone.tail = 0.0000, -1.3290, 2.1213
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hair_base.01']]
- bones['hair_top.01'] = bone.name
- bone = arm.edit_bones.new('hair_top.06')
+ bone.parent = arm.edit_bones[bones['mane_base.01']]
+ bones['mane_top.01'] = bone.name
+ bone = arm.edit_bones.new('mane_top.06')
bone.head = 0.0000, -1.4566, 1.9477
bone.tail = -0.0000, -1.5014, 1.9770
bone.roll = 0.0000
bone.use_connect = True
- bone.parent = arm.edit_bones[bones['hair_base.06']]
- bones['hair_top.06'] = bone.name
+ bone.parent = arm.edit_bones[bones['mane_base.06']]
+ bones['mane_top.06'] = bone.name
bone = arm.edit_bones.new('skull.L')
bone.head = 0.0000, -1.3014, 1.8284
bone.tail = 0.1564, -1.4143, 1.5755
@@ -612,6 +612,34 @@ def create(obj):
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.L']]
bones['ear.L.001'] = bone.name
+ bone = arm.edit_bones.new('eye.L')
+ bone.head = 0.0988, -1.4596, 1.7351
+ bone.tail = 0.1990, -1.4668, 1.7420
+ bone.roll = 0.0000
+ bone.use_connect = False
+ bone.parent = arm.edit_bones[bones['ear.L']]
+ bones['eye.L'] = bone.name
+ bone = arm.edit_bones.new('nose.L')
+ bone.head = 0.0450, -1.6240, 1.4228
+ bone.tail = 0.1039, -1.6613, 1.4269
+ bone.roll = 0.0000
+ bone.use_connect = False
+ bone.parent = arm.edit_bones[bones['ear.L']]
+ bones['nose.L'] = bone.name
+ bone = arm.edit_bones.new('eye.R')
+ bone.head = -0.0988, -1.4596, 1.7351
+ bone.tail = -0.1990, -1.4668, 1.7420
+ bone.roll = -0.0000
+ bone.use_connect = False
+ bone.parent = arm.edit_bones[bones['ear.L']]
+ bones['eye.R'] = bone.name
+ bone = arm.edit_bones.new('nose.R')
+ bone.head = -0.0450, -1.6240, 1.4228
+ bone.tail = -0.1039, -1.6613, 1.4269
+ bone.roll = -0.0000
+ bone.use_connect = False
+ bone.parent = arm.edit_bones[bones['ear.L']]
+ bones['nose.R'] = bone.name
bone = arm.edit_bones.new('ear.R.001')
bone.head = -0.1056, -1.4118, 1.9537
bone.tail = -0.1448, -1.4613, 2.0462
@@ -628,16 +656,16 @@ def create(obj):
bones['jaw.001'] = bone.name
bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones[bones['spine.005']]
+ pbone = obj.pose.bones[bones['spine.001']]
pbone.rigify_type = 'spines.basic_spine'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
try:
- pbone.rigify_parameters.pivot_pos = 3
+ pbone.rigify_parameters.pivot_pos = 2
except AttributeError:
pass
try:
@@ -648,7 +676,7 @@ def create(obj):
pbone.rigify_parameters.fk_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
except AttributeError:
pass
- pbone = obj.pose.bones[bones['spine.004']]
+ pbone = obj.pose.bones[bones['tail.001']]
pbone.rigify_type = 'spines.basic_tail'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -661,14 +689,14 @@ def create(obj):
except AttributeError:
pass
try:
- pbone.rigify_parameters.connect_chain = True
+ pbone.rigify_parameters.connect_chain = False
except AttributeError:
pass
try:
pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
except AttributeError:
pass
- pbone = obj.pose.bones[bones['spine.006']]
+ pbone = obj.pose.bones[bones['spine.002']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -676,7 +704,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.003']]
+ pbone = obj.pose.bones[bones['tail.002']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -684,7 +712,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.007']]
+ pbone = obj.pose.bones[bones['spine.003']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -708,30 +736,6 @@ def create(obj):
pbone.rigify_parameters.make_control = False
except AttributeError:
pass
- pbone = obj.pose.bones[bones['thigh.L']]
- pbone.rigify_type = 'limbs.super_limb'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- try:
- pbone.rigify_parameters.limb_type = "paw"
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.segments = 2
- except AttributeError:
- pass
pbone = obj.pose.bones[bones['pelvis.R']]
pbone.rigify_type = 'basic.super_copy'
pbone.lock_location = (False, False, False)
@@ -748,71 +752,103 @@ def create(obj):
pbone.rigify_parameters.make_control = False
except AttributeError:
pass
- pbone = obj.pose.bones[bones['thigh.R']]
- pbone.rigify_type = 'limbs.super_limb'
+ pbone = obj.pose.bones[bones['hip']]
+ pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- try:
- pbone.rigify_parameters.limb_type = "paw"
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, True, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.segments = 2
- except AttributeError:
- pass
- pbone = obj.pose.bones[bones['pelvis']]
- pbone.rigify_type = 'basic.super_copy'
+ pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['tail.003']]
+ pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.002']]
+ pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['spine.004']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.008']]
+ pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['abdomen']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['shin.L']]
- pbone.rigify_type = ''
+ pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['thigh.L']]
+ pbone.rigify_type = 'limbs.rear_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['shin.R']]
- pbone.rigify_type = ''
+ try:
+ pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.segments = 2
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.bbones = 10
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.fk_layers_extra = True
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.tweak_layers_extra = True
+ except AttributeError:
+ pass
+ pbone = obj.pose.bones[bones['thigh.R']]
+ pbone.rigify_type = 'limbs.rear_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.001']]
+ try:
+ pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.segments = 2
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.bbones = 10
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.fk_layers_extra = True
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.tweak_layers_extra = True
+ except AttributeError:
+ pass
+ pbone = obj.pose.bones[bones['tail.004']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -820,7 +856,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.009']]
+ pbone = obj.pose.bones[bones['spine.005']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -828,15 +864,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['belly']]
- pbone.rigify_type = 'basic.super_copy'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['foot.L']]
+ pbone = obj.pose.bones[bones['lower_leg.L']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -844,7 +872,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['foot.R']]
+ pbone = obj.pose.bones[bones['lower_leg.R']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -852,7 +880,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine']]
+ pbone = obj.pose.bones[bones['tail.005']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -860,7 +888,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.010']]
+ pbone = obj.pose.bones[bones['spine.006']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -916,7 +944,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['r_toe.L']]
+ pbone = obj.pose.bones[bones['hind_foot.L']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -924,7 +952,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['r_toe.R']]
+ pbone = obj.pose.bones[bones['hind_foot.R']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -932,7 +960,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.011']]
+ pbone = obj.pose.bones[bones['neck.001']]
pbone.rigify_type = 'spines.super_head'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -948,7 +976,7 @@ def create(obj):
pbone.rigify_parameters.tweak_layers = [False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
except AttributeError:
pass
- pbone = obj.pose.bones[bones['hair_base.05']]
+ pbone = obj.pose.bones[bones['mane_base.05']]
pbone.rigify_type = 'limbs.super_finger'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -965,7 +993,7 @@ def create(obj):
except AttributeError:
pass
pbone = obj.pose.bones[bones['upper_arm.L']]
- pbone.rigify_type = 'limbs.super_limb'
+ pbone.rigify_type = 'limbs.front_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
@@ -984,8 +1012,12 @@ def create(obj):
pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
except AttributeError:
pass
+ try:
+ pbone.rigify_parameters.front_paw_heel_influence = 0.6000000238418579
+ except AttributeError:
+ pass
pbone = obj.pose.bones[bones['upper_arm.R']]
- pbone.rigify_type = 'limbs.super_limb'
+ pbone.rigify_type = 'limbs.front_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
@@ -1004,7 +1036,27 @@ def create(obj):
pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
except AttributeError:
pass
- pbone = obj.pose.bones[bones['spine.012']]
+ try:
+ pbone.rigify_parameters.front_paw_heel_influence = 0.6000000238418579
+ except AttributeError:
+ pass
+ pbone = obj.pose.bones[bones['r_toe.L']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['r_toe.R']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['neck.002']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1012,7 +1064,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['hair_base.04']]
+ pbone = obj.pose.bones[bones['mane_base.04']]
pbone.rigify_type = 'limbs.super_finger'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1028,7 +1080,7 @@ def create(obj):
pbone.rigify_parameters.primary_rotation_axis = "Z"
except AttributeError:
pass
- pbone = obj.pose.bones[bones['hair_top.05']]
+ pbone = obj.pose.bones[bones['mane_top.05']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1052,7 +1104,23 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.014']]
+ pbone = obj.pose.bones[bones['r_hoof.L']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['r_hoof.R']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['neck.003']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1060,7 +1128,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['hair_base.03']]
+ pbone = obj.pose.bones[bones['mane_base.03']]
pbone.rigify_type = 'limbs.super_finger'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1076,7 +1144,7 @@ def create(obj):
pbone.rigify_parameters.primary_rotation_axis = "Z"
except AttributeError:
pass
- pbone = obj.pose.bones[bones['hair_top.04']]
+ pbone = obj.pose.bones[bones['mane_top.04']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1084,7 +1152,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['hand.L']]
+ pbone = obj.pose.bones[bones['forefoot.L']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1092,7 +1160,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['hand.R']]
+ pbone = obj.pose.bones[bones['forefoot.R']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1100,7 +1168,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.015']]
+ pbone = obj.pose.bones[bones['neck.004']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1108,7 +1176,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['hair_base.02']]
+ pbone = obj.pose.bones[bones['mane_base.02']]
pbone.rigify_type = 'limbs.super_finger'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1124,7 +1192,7 @@ def create(obj):
pbone.rigify_parameters.primary_rotation_axis = "Z"
except AttributeError:
pass
- pbone = obj.pose.bones[bones['hair_top.03']]
+ pbone = obj.pose.bones[bones['mane_top.03']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1148,7 +1216,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['spine.016']]
+ pbone = obj.pose.bones[bones['head']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1156,7 +1224,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['hair_base.01']]
+ pbone = obj.pose.bones[bones['mane_base.01']]
pbone.rigify_type = 'limbs.super_finger'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1172,7 +1240,7 @@ def create(obj):
pbone.rigify_parameters.primary_rotation_axis = "Z"
except AttributeError:
pass
- pbone = obj.pose.bones[bones['hair_base.06']]
+ pbone = obj.pose.bones[bones['mane_base.06']]
pbone.rigify_type = 'limbs.super_finger'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1188,7 +1256,7 @@ def create(obj):
pbone.rigify_parameters.primary_rotation_axis = "Z"
except AttributeError:
pass
- pbone = obj.pose.bones[bones['hair_top.02']]
+ pbone = obj.pose.bones[bones['mane_top.02']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1196,6 +1264,22 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['f_hoof.L']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['f_hoof.R']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
pbone = obj.pose.bones[bones['skull']]
pbone.rigify_type = 'basic.super_copy'
pbone.lock_location = (False, False, False)
@@ -1224,38 +1308,6 @@ def create(obj):
pbone.rigify_parameters.copy_rotation_axes = [True, False, True]
except AttributeError:
pass
- pbone = obj.pose.bones[bones['eye.L']]
- pbone.rigify_type = 'basic.super_copy'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['nose.L']]
- pbone.rigify_type = 'basic.super_copy'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['eye.R']]
- pbone.rigify_type = 'basic.super_copy'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['nose.R']]
- pbone.rigify_type = 'basic.super_copy'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
pbone = obj.pose.bones[bones['ear.R']]
pbone.rigify_type = 'limbs.simple_tentacle'
pbone.lock_location = (False, False, False)
@@ -1288,7 +1340,7 @@ def create(obj):
pbone.rigify_parameters.copy_rotation_axes = [False, False, False]
except AttributeError:
pass
- pbone = obj.pose.bones[bones['hair_top.01']]
+ pbone = obj.pose.bones[bones['mane_top.01']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1296,7 +1348,7 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False]
- pbone = obj.pose.bones[bones['hair_top.06']]
+ pbone = obj.pose.bones[bones['mane_top.06']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
@@ -1344,6 +1396,38 @@ def create(obj):
pbone.lock_scale = (False, False, False)
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['eye.L']]
+ pbone.rigify_type = 'basic.super_copy'
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['nose.L']]
+ pbone.rigify_type = 'basic.super_copy'
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['eye.R']]
+ pbone.rigify_type = 'basic.super_copy'
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ pbone = obj.pose.bones[bones['nose.R']]
+ pbone.rigify_type = 'basic.super_copy'
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone.bone.layers = [True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
pbone = obj.pose.bones[bones['ear.R.001']]
pbone.rigify_type = ''
pbone.lock_location = (False, False, False)
diff --git a/rigify/metarigs/Animals/wolf.py b/rigify/metarigs/Animals/wolf.py
index f6150c54..775f2973 100644
--- a/rigify/metarigs/Animals/wolf.py
+++ b/rigify/metarigs/Animals/wolf.py
@@ -166,1330 +166,1330 @@ def create(obj):
bones = {}
bone = arm.edit_bones.new('spine.004')
- bone.head[:] = 0.0000, 0.4418, 0.7954
- bone.tail[:] = 0.0000, 0.3546, 0.8059
+ bone.head = 0.0000, 0.4085, 0.7928
+ bone.tail = 0.0000, 0.2416, 0.7928
bone.roll = 0.0000
bone.use_connect = False
bones['spine.004'] = bone.name
bone = arm.edit_bones.new('spine.003')
- bone.head[:] = 0.0000, 0.4418, 0.7954
- bone.tail[:] = 0.0000, 0.5547, 0.7568
+ bone.head = 0.0000, 0.4085, 0.7928
+ bone.tail = 0.0000, 0.5555, 0.7567
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.004']]
bones['spine.003'] = bone.name
bone = arm.edit_bones.new('spine.005')
- bone.head[:] = 0.0000, 0.3546, 0.8059
- bone.tail[:] = 0.0000, 0.1803, 0.7782
+ bone.head = 0.0000, 0.2416, 0.7928
+ bone.tail = 0.0000, 0.1202, 0.7773
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.004']]
bones['spine.005'] = bone.name
bone = arm.edit_bones.new('spine.002')
- bone.head[:] = 0.0000, 0.5547, 0.7568
- bone.tail[:] = 0.0000, 0.7755, 0.7418
+ bone.head = 0.0000, 0.5555, 0.7567
+ bone.tail = 0.0000, 0.7816, 0.7412
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.003']]
bones['spine.002'] = bone.name
bone = arm.edit_bones.new('spine.006')
- bone.head[:] = 0.0000, 0.1803, 0.7782
- bone.tail[:] = 0.0000, 0.0319, 0.7731
+ bone.head = 0.0000, 0.1202, 0.7773
+ bone.tail = 0.0000, 0.0096, 0.7773
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.005']]
bones['spine.006'] = bone.name
bone = arm.edit_bones.new('pelvis.L')
- bone.head[:] = 0.0000, 0.3757, 0.6043
- bone.tail[:] = 0.0751, 0.2755, 0.8544
+ bone.head = 0.0000, 0.3757, 0.6043
+ bone.tail = 0.0751, 0.2755, 0.8544
bone.roll = -1.5841
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.005']]
bones['pelvis.L'] = bone.name
bone = arm.edit_bones.new('pelvis.R')
- bone.head[:] = -0.0000, 0.3757, 0.6043
- bone.tail[:] = -0.0751, 0.2755, 0.8544
+ bone.head = -0.0000, 0.3757, 0.6043
+ bone.tail = -0.0751, 0.2755, 0.8544
bone.roll = 1.5841
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.005']]
bones['pelvis.R'] = bone.name
bone = arm.edit_bones.new('thigh.L')
- bone.head[:] = 0.1249, 0.3419, 0.7379
- bone.tail[:] = 0.1249, 0.2712, 0.4731
+ bone.head = 0.1249, 0.3419, 0.7379
+ bone.tail = 0.1249, 0.2712, 0.4731
bone.roll = -0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.005']]
bones['thigh.L'] = bone.name
bone = arm.edit_bones.new('thigh.R')
- bone.head[:] = -0.1249, 0.3419, 0.7379
- bone.tail[:] = -0.1249, 0.2712, 0.4731
+ bone.head = -0.1249, 0.3419, 0.7379
+ bone.tail = -0.1249, 0.2712, 0.4731
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.005']]
bones['thigh.R'] = bone.name
bone = arm.edit_bones.new('spine.001')
- bone.head[:] = 0.0000, 0.7755, 0.7418
- bone.tail[:] = 0.0000, 0.9624, 0.7412
+ bone.head = 0.0000, 0.7816, 0.7412
+ bone.tail = 0.0000, 0.9624, 0.7412
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.002']]
bones['spine.001'] = bone.name
bone = arm.edit_bones.new('spine.007')
- bone.head[:] = 0.0000, 0.0319, 0.7731
- bone.tail[:] = 0.0000, -0.0980, 0.7945
+ bone.head = 0.0000, 0.0096, 0.7773
+ bone.tail = 0.0000, -0.0980, 0.7945
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.006']]
bones['spine.007'] = bone.name
bone = arm.edit_bones.new('shin.L')
- bone.head[:] = 0.1249, 0.2712, 0.4731
- bone.tail[:] = 0.1114, 0.4766, 0.2473
+ bone.head = 0.1249, 0.2712, 0.4731
+ bone.tail = 0.1114, 0.4766, 0.2473
bone.roll = 0.0195
bone.use_connect = True
bone.parent = arm.edit_bones[bones['thigh.L']]
bones['shin.L'] = bone.name
bone = arm.edit_bones.new('shin.R')
- bone.head[:] = -0.1249, 0.2712, 0.4731
- bone.tail[:] = -0.1114, 0.4766, 0.2473
+ bone.head = -0.1249, 0.2712, 0.4731
+ bone.tail = -0.1114, 0.4766, 0.2473
bone.roll = -0.0195
bone.use_connect = True
bone.parent = arm.edit_bones[bones['thigh.R']]
bones['shin.R'] = bone.name
bone = arm.edit_bones.new('spine')
- bone.head[:] = 0.0000, 0.9624, 0.7412
- bone.tail[:] = 0.0000, 1.1044, 0.7633
+ bone.head = 0.0000, 0.9624, 0.7412
+ bone.tail = 0.0000, 1.1044, 0.7633
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.001']]
bones['spine'] = bone.name
bone = arm.edit_bones.new('spine.008')
- bone.head[:] = 0.0000, -0.0980, 0.7945
- bone.tail[:] = 0.0000, -0.3618, 0.8375
+ bone.head = 0.0000, -0.0980, 0.7945
+ bone.tail = 0.0000, -0.3618, 0.8375
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.007']]
bones['spine.008'] = bone.name
bone = arm.edit_bones.new('foot.L')
- bone.head[:] = 0.1114, 0.4766, 0.2473
- bone.tail[:] = 0.1088, 0.4138, 0.0411
+ bone.head = 0.1114, 0.4766, 0.2473
+ bone.tail = 0.1088, 0.4138, 0.0411
bone.roll = 0.0165
bone.use_connect = True
bone.parent = arm.edit_bones[bones['shin.L']]
bones['foot.L'] = bone.name
bone = arm.edit_bones.new('foot.R')
- bone.head[:] = -0.1114, 0.4766, 0.2473
- bone.tail[:] = -0.1088, 0.4138, 0.0411
+ bone.head = -0.1114, 0.4766, 0.2473
+ bone.tail = -0.1088, 0.4138, 0.0411
bone.roll = -0.0165
bone.use_connect = True
bone.parent = arm.edit_bones[bones['shin.R']]
bones['foot.R'] = bone.name
bone = arm.edit_bones.new('spine.009')
- bone.head[:] = 0.0000, -0.3618, 0.8375
- bone.tail[:] = 0.0000, -0.4253, 0.8585
+ bone.head = 0.0000, -0.3618, 0.8375
+ bone.tail = 0.0000, -0.4253, 0.8585
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.008']]
bones['spine.009'] = bone.name
bone = arm.edit_bones.new('shoulder.L')
- bone.head[:] = 0.0596, -0.2578, 0.8876
- bone.tail[:] = 0.1249, -0.3418, 0.7153
+ bone.head = 0.0596, -0.2578, 0.8876
+ bone.tail = 0.1249, -0.3418, 0.7153
bone.roll = -0.3526
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.008']]
bones['shoulder.L'] = bone.name
bone = arm.edit_bones.new('shoulder.R')
- bone.head[:] = -0.0596, -0.2578, 0.8876
- bone.tail[:] = -0.1249, -0.3418, 0.7153
+ bone.head = -0.0596, -0.2578, 0.8876
+ bone.tail = -0.1249, -0.3418, 0.7153
bone.roll = 0.3526
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.008']]
bones['shoulder.R'] = bone.name
bone = arm.edit_bones.new('breast.L')
- bone.head[:] = 0.0340, -0.1694, 0.6676
- bone.tail[:] = 0.0340, -0.3139, 0.5296
+ bone.head = 0.0340, -0.1694, 0.6676
+ bone.tail = 0.0340, -0.3139, 0.5296
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.008']]
bones['breast.L'] = bone.name
bone = arm.edit_bones.new('breast.R')
- bone.head[:] = -0.0340, -0.1694, 0.6676
- bone.tail[:] = -0.0340, -0.3139, 0.5296
+ bone.head = -0.0340, -0.1694, 0.6676
+ bone.tail = -0.0340, -0.3139, 0.5296
bone.roll = -0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.008']]
bones['breast.R'] = bone.name
bone = arm.edit_bones.new('toe.L')
- bone.head[:] = 0.1088, 0.4138, 0.0411
- bone.tail[:] = 0.1088, 0.3213, 0.0000
+ bone.head = 0.1088, 0.4138, 0.0411
+ bone.tail = 0.1088, 0.3213, 0.0000
bone.roll = 3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['foot.L']]
bones['toe.L'] = bone.name
bone = arm.edit_bones.new('toe.R')
- bone.head[:] = -0.1088, 0.4138, 0.0411
- bone.tail[:] = -0.1088, 0.3213, 0.0000
+ bone.head = -0.1088, 0.4138, 0.0411
+ bone.tail = -0.1088, 0.3213, 0.0000
bone.roll = -3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['foot.R']]
bones['toe.R'] = bone.name
bone = arm.edit_bones.new('spine.010')
- bone.head[:] = 0.0000, -0.4253, 0.8585
- bone.tail[:] = 0.0000, -0.4888, 0.8796
+ bone.head = 0.0000, -0.4253, 0.8585
+ bone.tail = 0.0000, -0.4888, 0.8796
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.009']]
bones['spine.010'] = bone.name
bone = arm.edit_bones.new('front_thigh.L')
- bone.head[:] = 0.1249, -0.3161, 0.6902
- bone.tail[:] = 0.1249, -0.2245, 0.4418
+ bone.head = 0.1249, -0.3161, 0.6902
+ bone.tail = 0.1249, -0.2245, 0.4418
bone.roll = -0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['shoulder.L']]
bones['front_thigh.L'] = bone.name
bone = arm.edit_bones.new('front_thigh.R')
- bone.head[:] = -0.1249, -0.3161, 0.6902
- bone.tail[:] = -0.1249, -0.2245, 0.4418
+ bone.head = -0.1249, -0.3161, 0.6902
+ bone.tail = -0.1249, -0.2245, 0.4418
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['shoulder.R']]
bones['front_thigh.R'] = bone.name
bone = arm.edit_bones.new('r_palm.04.L')
- bone.head[:] = 0.1140, 0.4168, 0.0282
- bone.tail[:] = 0.1337, 0.3749, 0.0253
+ bone.head = 0.1140, 0.4168, 0.0282
+ bone.tail = 0.1337, 0.3749, 0.0253
bone.roll = -2.8623
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.L']]
bones['r_palm.04.L'] = bone.name
bone = arm.edit_bones.new('r_palm.03.L')
- bone.head[:] = 0.1053, 0.4151, 0.0282
- bone.tail[:] = 0.1150, 0.3664, 0.0377
+ bone.head = 0.1053, 0.4151, 0.0282
+ bone.tail = 0.1150, 0.3664, 0.0377
bone.roll = 1.5833
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.L']]
bones['r_palm.03.L'] = bone.name
bone = arm.edit_bones.new('r_palm.02.L')
- bone.head[:] = 0.0964, 0.4152, 0.0282
- bone.tail[:] = 0.0894, 0.3664, 0.0377
+ bone.head = 0.0964, 0.4152, 0.0282
+ bone.tail = 0.0894, 0.3664, 0.0377
bone.roll = -1.2317
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.L']]
bones['r_palm.02.L'] = bone.name
bone = arm.edit_bones.new('r_palm.01.L')
- bone.head[:] = 0.0845, 0.4178, 0.0282
- bone.tail[:] = 0.0702, 0.3781, 0.0253
+ bone.head = 0.0845, 0.4178, 0.0282
+ bone.tail = 0.0702, 0.3781, 0.0253
bone.roll = 2.8333
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.L']]
bones['r_palm.01.L'] = bone.name
bone = arm.edit_bones.new('r_palm.04.R')
- bone.head[:] = -0.1140, 0.4168, 0.0282
- bone.tail[:] = -0.1337, 0.3749, 0.0253
+ bone.head = -0.1140, 0.4168, 0.0282
+ bone.tail = -0.1337, 0.3749, 0.0253
bone.roll = 2.8623
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.R']]
bones['r_palm.04.R'] = bone.name
bone = arm.edit_bones.new('r_palm.03.R')
- bone.head[:] = -0.1053, 0.4151, 0.0282
- bone.tail[:] = -0.1150, 0.3664, 0.0377
+ bone.head = -0.1053, 0.4151, 0.0282
+ bone.tail = -0.1150, 0.3664, 0.0377
bone.roll = -1.5833
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.R']]
bones['r_palm.03.R'] = bone.name
bone = arm.edit_bones.new('r_palm.02.R')
- bone.head[:] = -0.0964, 0.4152, 0.0282
- bone.tail[:] = -0.0894, 0.3664, 0.0377
+ bone.head = -0.0964, 0.4152, 0.0282
+ bone.tail = -0.0894, 0.3664, 0.0377
bone.roll = 1.2317
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.R']]
bones['r_palm.02.R'] = bone.name
bone = arm.edit_bones.new('r_palm.01.R')
- bone.head[:] = -0.0845, 0.4178, 0.0282
- bone.tail[:] = -0.0702, 0.3781, 0.0253
+ bone.head = -0.0845, 0.4178, 0.0282
+ bone.tail = -0.0702, 0.3781, 0.0253
bone.roll = -2.8333
bone.use_connect = False
bone.parent = arm.edit_bones[bones['toe.R']]
bones['r_palm.01.R'] = bone.name
bone = arm.edit_bones.new('spine.011')
- bone.head[:] = 0.0000, -0.4888, 0.8796
- bone.tail[:] = 0.0000, -0.6590, 0.9809
+ bone.head = 0.0000, -0.4888, 0.8796
+ bone.tail = 0.0000, -0.6590, 0.9809
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['spine.010']]
bones['spine.011'] = bone.name
bone = arm.edit_bones.new('front_shin.L')
- bone.head[:] = 0.1249, -0.2245, 0.4418
- bone.tail[:] = 0.1114, -0.2147, 0.1698
+ bone.head = 0.1249, -0.2245, 0.4418
+ bone.tail = 0.1114, -0.2147, 0.1698
bone.roll = 0.0098
bone.use_connect = True
bone.parent = arm.edit_bones[bones['front_thigh.L']]
bones['front_shin.L'] = bone.name
bone = arm.edit_bones.new('front_shin.R')
- bone.head[:] = -0.1249, -0.2245, 0.4418
- bone.tail[:] = -0.1114, -0.2147, 0.1698
+ bone.head = -0.1249, -0.2245, 0.4418
+ bone.tail = -0.1114, -0.2147, 0.1698
bone.roll = -0.0098
bone.use_connect = True
bone.parent = arm.edit_bones[bones['front_thigh.R']]
bones['front_shin.R'] = bone.name
bone = arm.edit_bones.new('r_pinky.01.L')
- bone.head[:] = 0.1337, 0.3749, 0.0253
- bone.tail[:] = 0.1388, 0.3551, 0.0222
+ bone.head = 0.1337, 0.3749, 0.0253
+ bone.tail = 0.1388, 0.3551, 0.0222
bone.roll = -2.0928
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.04.L']]
bones['r_pinky.01.L'] = bone.name
bone = arm.edit_bones.new('r_ring.01.L')
- bone.head[:] = 0.1150, 0.3664, 0.0377
- bone.tail[:] = 0.1166, 0.3467, 0.0317
+ bone.head = 0.1150, 0.3664, 0.0377
+ bone.tail = 0.1166, 0.3467, 0.0317
bone.roll = -0.5451
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.03.L']]
bones['r_ring.01.L'] = bone.name
bone = arm.edit_bones.new('r_middle.01.L')
- bone.head[:] = 0.0894, 0.3664, 0.0377
- bone.tail[:] = 0.0866, 0.3467, 0.0317
+ bone.head = 0.0894, 0.3664, 0.0377
+ bone.tail = 0.0866, 0.3467, 0.0317
bone.roll = 0.9401
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.02.L']]
bones['r_middle.01.L'] = bone.name
bone = arm.edit_bones.new('r_index.01.L')
- bone.head[:] = 0.0702, 0.3781, 0.0253
- bone.tail[:] = 0.0660, 0.3581, 0.0222
+ bone.head = 0.0702, 0.3781, 0.0253
+ bone.tail = 0.0660, 0.3581, 0.0222
bone.roll = 1.9945
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.01.L']]
bones['r_index.01.L'] = bone.name
bone = arm.edit_bones.new('r_pinky.01.R')
- bone.head[:] = -0.1337, 0.3749, 0.0253
- bone.tail[:] = -0.1388, 0.3551, 0.0222
+ bone.head = -0.1337, 0.3749, 0.0253
+ bone.tail = -0.1388, 0.3551, 0.0222
bone.roll = 2.0928
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.04.R']]
bones['r_pinky.01.R'] = bone.name
bone = arm.edit_bones.new('r_ring.01.R')
- bone.head[:] = -0.1150, 0.3664, 0.0377
- bone.tail[:] = -0.1166, 0.3467, 0.0317
+ bone.head = -0.1150, 0.3664, 0.0377
+ bone.tail = -0.1166, 0.3467, 0.0317
bone.roll = 0.5451
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.03.R']]
bones['r_ring.01.R'] = bone.name
bone = arm.edit_bones.new('r_middle.01.R')
- bone.head[:] = -0.0894, 0.3664, 0.0377
- bone.tail[:] = -0.0866, 0.3467, 0.0317
+ bone.head = -0.0894, 0.3664, 0.0377
+ bone.tail = -0.0866, 0.3467, 0.0317
bone.roll = -0.9401
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.02.R']]
bones['r_middle.01.R'] = bone.name
bone = arm.edit_bones.new('r_index.01.R')
- bone.head[:] = -0.0702, 0.3781, 0.0253
- bone.tail[:] = -0.0660, 0.3581, 0.0222
+ bone.head = -0.0702, 0.3781, 0.0253
+ bone.tail = -0.0660, 0.3581, 0.0222
bone.roll = -1.9945
bone.use_connect = False
bone.parent = arm.edit_bones[bones['r_palm.01.R']]
bones['r_index.01.R'] = bone.name
bone = arm.edit_bones.new('face')
- bone.head[:] = -0.0000, -0.6484, 0.8273
- bone.tail[:] = -0.0000, -0.6484, 0.8890
+ bone.head = -0.0000, -0.6484, 0.8273
+ bone.tail = -0.0000, -0.6484, 0.8890
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['spine.011']]
bones['face'] = bone.name
bone = arm.edit_bones.new('front_foot.L')
- bone.head[:] = 0.1114, -0.2147, 0.1698
- bone.tail[:] = 0.1088, -0.2462, 0.0411
+ bone.head = 0.1114, -0.2147, 0.1698
+ bone.tail = 0.1088, -0.2462, 0.0411
bone.roll = 0.0272
bone.use_connect = True
bone.parent = arm.edit_bones[bones['front_shin.L']]
bones['front_foot.L'] = bone.name
bone = arm.edit_bones.new('front_foot.R')
- bone.head[:] = -0.1114, -0.2147, 0.1698
- bone.tail[:] = -0.1088, -0.2462, 0.0411
+ bone.head = -0.1114, -0.2147, 0.1698
+ bone.tail = -0.1088, -0.2462, 0.0411
bone.roll = -0.0272
bone.use_connect = True
bone.parent = arm.edit_bones[bones['front_shin.R']]
bones['front_foot.R'] = bone.name
bone = arm.edit_bones.new('r_pinky.02.L')
- bone.head[:] = 0.1388, 0.3551, 0.0222
- bone.tail[:] = 0.1431, 0.3382, 0.0170
+ bone.head = 0.1388, 0.3551, 0.0222
+ bone.tail = 0.1431, 0.3382, 0.0170
bone.roll = -1.4292
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_pinky.01.L']]
bones['r_pinky.02.L'] = bone.name
bone = arm.edit_bones.new('r_ring.02.L')
- bone.head[:] = 0.1166, 0.3467, 0.0317
- bone.tail[:] = 0.1188, 0.3297, 0.0224
+ bone.head = 0.1166, 0.3467, 0.0317
+ bone.tail = 0.1188, 0.3297, 0.0224
bone.roll = -0.5100
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_ring.01.L']]
bones['r_ring.02.L'] = bone.name
bone = arm.edit_bones.new('r_middle.02.L')
- bone.head[:] = 0.0866, 0.3467, 0.0317
- bone.tail[:] = 0.0851, 0.3297, 0.0224
+ bone.head = 0.0866, 0.3467, 0.0317
+ bone.tail = 0.0851, 0.3297, 0.0224
bone.roll = 0.4076
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_middle.01.L']]
bones['r_middle.02.L'] = bone.name
bone = arm.edit_bones.new('r_index.02.L')
- bone.head[:] = 0.0660, 0.3581, 0.0222
- bone.tail[:] = 0.0623, 0.3410, 0.0170
+ bone.head = 0.0660, 0.3581, 0.0222
+ bone.tail = 0.0623, 0.3410, 0.0170
bone.roll = 1.3847
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_index.01.L']]
bones['r_index.02.L'] = bone.name
bone = arm.edit_bones.new('r_pinky.02.R')
- bone.head[:] = -0.1388, 0.3551, 0.0222
- bone.tail[:] = -0.1431, 0.3382, 0.0170
+ bone.head = -0.1388, 0.3551, 0.0222
+ bone.tail = -0.1431, 0.3382, 0.0170
bone.roll = 1.4292
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_pinky.01.R']]
bones['r_pinky.02.R'] = bone.name
bone = arm.edit_bones.new('r_ring.02.R')
- bone.head[:] = -0.1166, 0.3467, 0.0317
- bone.tail[:] = -0.1188, 0.3297, 0.0224
+ bone.head = -0.1166, 0.3467, 0.0317
+ bone.tail = -0.1188, 0.3297, 0.0224
bone.roll = 0.5100
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_ring.01.R']]
bones['r_ring.02.R'] = bone.name
bone = arm.edit_bones.new('r_middle.02.R')
- bone.head[:] = -0.0866, 0.3467, 0.0317
- bone.tail[:] = -0.0851, 0.3297, 0.0224
+ bone.head = -0.0866, 0.3467, 0.0317
+ bone.tail = -0.0851, 0.3297, 0.0224
bone.roll = -0.4076
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_middle.01.R']]
bones['r_middle.02.R'] = bone.name
bone = arm.edit_bones.new('r_index.02.R')
- bone.head[:] = -0.0660, 0.3581, 0.0222
- bone.tail[:] = -0.0623, 0.3410, 0.0170
+ bone.head = -0.0660, 0.3581, 0.0222
+ bone.tail = -0.0623, 0.3410, 0.0170
bone.roll = -1.3847
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_index.01.R']]
bones['r_index.02.R'] = bone.name
bone = arm.edit_bones.new('nose')
- bone.head[:] = 0.0000, -0.7082, 0.9031
- bone.tail[:] = 0.0000, -0.7989, 0.8595
+ bone.head = 0.0000, -0.7082, 0.9031
+ bone.tail = 0.0000, -0.7989, 0.8595
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['nose'] = bone.name
bone = arm.edit_bones.new('lip.T.L')
- bone.head[:] = 0.0000, -0.8212, 0.7930
- bone.tail[:] = 0.0353, -0.7614, 0.7866
+ bone.head = 0.0000, -0.8212, 0.7930
+ bone.tail = 0.0353, -0.7614, 0.7866
bone.roll = 0.0551
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['lip.T.L'] = bone.name
bone = arm.edit_bones.new('lip.B.L')
- bone.head[:] = 0.0000, -0.7962, 0.7788
- bone.tail[:] = 0.0258, -0.7624, 0.7742
+ bone.head = 0.0000, -0.7962, 0.7788
+ bone.tail = 0.0258, -0.7624, 0.7742
bone.roll = 0.0255
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['lip.B.L'] = bone.name
bone = arm.edit_bones.new('jaw')
- bone.head[:] = 0.0000, -0.6191, 0.7820
- bone.tail[:] = 0.0000, -0.6960, 0.7733
+ bone.head = 0.0000, -0.6191, 0.7820
+ bone.tail = 0.0000, -0.6960, 0.7733
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['jaw'] = bone.name
bone = arm.edit_bones.new('ear.L')
- bone.head[:] = 0.0949, -0.5457, 0.9545
- bone.tail[:] = 0.0524, -0.5459, 0.9899
+ bone.head = 0.0949, -0.5457, 0.9545
+ bone.tail = 0.0524, -0.5459, 0.9899
bone.roll = -1.1774
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['ear.L'] = bone.name
bone = arm.edit_bones.new('ear.R')
- bone.head[:] = -0.0949, -0.5457, 0.9545
- bone.tail[:] = -0.0524, -0.5459, 0.9899
+ bone.head = -0.0949, -0.5457, 0.9545
+ bone.tail = -0.0524, -0.5459, 0.9899
bone.roll = 1.1774
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['ear.R'] = bone.name
bone = arm.edit_bones.new('lip.T.R')
- bone.head[:] = 0.0000, -0.8212, 0.7930
- bone.tail[:] = -0.0353, -0.7614, 0.7866
+ bone.head = 0.0000, -0.8212, 0.7930
+ bone.tail = -0.0353, -0.7614, 0.7866
bone.roll = -0.0551
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['lip.T.R'] = bone.name
bone = arm.edit_bones.new('lip.B.R')
- bone.head[:] = 0.0000, -0.7962, 0.7788
- bone.tail[:] = -0.0258, -0.7624, 0.7742
+ bone.head = 0.0000, -0.7962, 0.7788
+ bone.tail = -0.0258, -0.7624, 0.7742
bone.roll = -0.0255
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['lip.B.R'] = bone.name
bone = arm.edit_bones.new('brow.B.L')
- bone.head[:] = 0.0745, -0.6532, 0.9192
- bone.tail[:] = 0.0659, -0.6703, 0.9324
+ bone.head = 0.0745, -0.6532, 0.9192
+ bone.tail = 0.0659, -0.6703, 0.9324
bone.roll = 0.7673
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['brow.B.L'] = bone.name
bone = arm.edit_bones.new('lid.T.L')
- bone.head[:] = 0.0621, -0.6644, 0.9197
- bone.tail[:] = 0.0588, -0.6755, 0.9223
+ bone.head = 0.0621, -0.6644, 0.9197
+ bone.tail = 0.0588, -0.6755, 0.9223
bone.roll = 0.0733
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['lid.T.L'] = bone.name
bone = arm.edit_bones.new('brow.B.R')
- bone.head[:] = -0.0745, -0.6532, 0.9192
- bone.tail[:] = -0.0659, -0.6703, 0.9324
+ bone.head = -0.0745, -0.6532, 0.9192
+ bone.tail = -0.0659, -0.6703, 0.9324
bone.roll = -0.7673
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['brow.B.R'] = bone.name
bone = arm.edit_bones.new('lid.T.R')
- bone.head[:] = -0.0621, -0.6644, 0.9197
- bone.tail[:] = -0.0588, -0.6755, 0.9223
+ bone.head = -0.0621, -0.6644, 0.9197
+ bone.tail = -0.0588, -0.6755, 0.9223
bone.roll = -0.0733
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['lid.T.R'] = bone.name
bone = arm.edit_bones.new('forehead.L')
- bone.head[:] = 0.0208, -0.6604, 0.9808
- bone.tail[:] = 0.0160, -0.7017, 0.9527
+ bone.head = 0.0208, -0.6604, 0.9808
+ bone.tail = 0.0160, -0.7017, 0.9527
bone.roll = 1.9432
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['forehead.L'] = bone.name
bone = arm.edit_bones.new('forehead.R')
- bone.head[:] = -0.0208, -0.6604, 0.9808
- bone.tail[:] = -0.0160, -0.7017, 0.9527
+ bone.head = -0.0208, -0.6604, 0.9808
+ bone.tail = -0.0160, -0.7017, 0.9527
bone.roll = -1.9432
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['forehead.R'] = bone.name
bone = arm.edit_bones.new('eye.L')
- bone.head[:] = 0.0388, -0.6496, 0.9149
- bone.tail[:] = 0.0388, -0.7010, 0.9149
+ bone.head = 0.0388, -0.6496, 0.9149
+ bone.tail = 0.0388, -0.7010, 0.9149
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['eye.L'] = bone.name
bone = arm.edit_bones.new('eye.R')
- bone.head[:] = -0.0388, -0.6496, 0.9149
- bone.tail[:] = -0.0388, -0.7010, 0.9149
+ bone.head = -0.0388, -0.6496, 0.9149
+ bone.tail = -0.0388, -0.7010, 0.9149
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['eye.R'] = bone.name
bone = arm.edit_bones.new('cheek.T.L')
- bone.head[:] = 0.0906, -0.6428, 0.9032
- bone.tail[:] = 0.0660, -0.6881, 0.8704
+ bone.head = 0.0906, -0.6428, 0.9032
+ bone.tail = 0.0660, -0.6881, 0.8704
bone.roll = -0.0634
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['cheek.T.L'] = bone.name
bone = arm.edit_bones.new('cheek.T.R')
- bone.head[:] = -0.0906, -0.6428, 0.9032
- bone.tail[:] = -0.0660, -0.6881, 0.8704
+ bone.head = -0.0906, -0.6428, 0.9032
+ bone.tail = -0.0660, -0.6881, 0.8704
bone.roll = 0.0634
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['cheek.T.R'] = bone.name
bone = arm.edit_bones.new('teeth.T')
- bone.head[:] = 0.0004, -0.7594, 0.8194
- bone.tail[:] = 0.0004, -0.7302, 0.8292
+ bone.head = 0.0004, -0.7594, 0.8194
+ bone.tail = 0.0004, -0.7302, 0.8292
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['teeth.T'] = bone.name
bone = arm.edit_bones.new('teeth.B')
- bone.head[:] = 0.0004, -0.7504, 0.7968
- bone.tail[:] = 0.0004, -0.7204, 0.8041
+ bone.head = 0.0004, -0.7504, 0.7968
+ bone.tail = 0.0004, -0.7204, 0.8041
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['teeth.B'] = bone.name
bone = arm.edit_bones.new('tongue')
- bone.head[:] = 0.0004, -0.7646, 0.7930
- bone.tail[:] = 0.0004, -0.7476, 0.7967
+ bone.head = 0.0004, -0.7646, 0.7930
+ bone.tail = 0.0004, -0.7476, 0.7967
bone.roll = 0.0000
bone.use_connect = False
bone.parent = arm.edit_bones[bones['face']]
bones['tongue'] = bone.name
bone = arm.edit_bones.new('front_toe.L')
- bone.head[:] = 0.1088, -0.2462, 0.0411
- bone.tail[:] = 0.1088, -0.3259, 0.0000
+ bone.head = 0.1088, -0.2462, 0.0411
+ bone.tail = 0.1088, -0.3259, 0.0000
bone.roll = 3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['front_foot.L']]
bones['front_toe.L'] = bone.name
bone = arm.edit_bones.new('front_toe.R')
- bone.head[:] = -0.1088, -0.2462, 0.0411
- bone.tail[:] = -0.1088, -0.3259, 0.0000
+ bone.head = -0.1088, -0.2462, 0.0411
+ bone.tail = -0.1088, -0.3259, 0.0000
bone.roll = -3.1416
bone.use_connect = True
bone.parent = arm.edit_bones[bones['front_foot.R']]
bones['front_toe.R'] = bone.name
bone = arm.edit_bones.new('r_pinky.03.L')
- bone.head[:] = 0.1431, 0.3382, 0.0170
- bone.tail[:] = 0.1455, 0.3175, 0.0129
+ bone.head = 0.1431, 0.3382, 0.0170
+ bone.tail = 0.1455, 0.3175, 0.0129
bone.roll = -1.0952
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_pinky.02.L']]
bones['r_pinky.03.L'] = bone.name
bone = arm.edit_bones.new('r_ring.03.L')
- bone.head[:] = 0.1188, 0.3297, 0.0224
- bone.tail[:] = 0.1239, 0.2905, 0.0129
+ bone.head = 0.1188, 0.3297, 0.0224
+ bone.tail = 0.1239, 0.2905, 0.0129
bone.roll = -0.9905
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_ring.02.L']]
bones['r_ring.03.L'] = bone.name
bone = arm.edit_bones.new('r_middle.03.L')
- bone.head[:] = 0.0851, 0.3297, 0.0224
- bone.tail[:] = 0.0813, 0.2904, 0.0129
+ bone.head = 0.0851, 0.3297, 0.0224
+ bone.tail = 0.0813, 0.2904, 0.0129
bone.roll = 0.8084
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_middle.02.L']]
bones['r_middle.03.L'] = bone.name
bone = arm.edit_bones.new('r_index.03.L')
- bone.head[:] = 0.0623, 0.3410, 0.0170
- bone.tail[:] = 0.0552, 0.3214, 0.0129
+ bone.head = 0.0623, 0.3410, 0.0170
+ bone.tail = 0.0552, 0.3214, 0.0129
bone.roll = 2.2048
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_index.02.L']]
bones['r_index.03.L'] = bone.name
bone = arm.edit_bones.new('r_pinky.03.R')
- bone.head[:] = -0.1431, 0.3382, 0.0170
- bone.tail[:] = -0.1455, 0.3175, 0.0129
+ bone.head = -0.1431, 0.3382, 0.0170
+ bone.tail = -0.1455, 0.3175, 0.0129
bone.roll = 1.0952
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_pinky.02.R']]
bones['r_pinky.03.R'] = bone.name
bone = arm.edit_bones.new('r_ring.03.R')
- bone.head[:] = -0.1188, 0.3297, 0.0224
- bone.tail[:] = -0.1239, 0.2905, 0.0129
+ bone.head = -0.1188, 0.3297, 0.0224
+ bone.tail = -0.1239, 0.2905, 0.0129
bone.roll = 0.9905
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_ring.02.R']]
bones['r_ring.03.R'] = bone.name
bone = arm.edit_bones.new('r_middle.03.R')
- bone.head[:] = -0.0851, 0.3297, 0.0224
- bone.tail[:] = -0.0813, 0.2904, 0.0129
+ bone.head = -0.0851, 0.3297, 0.0224
+ bone.tail = -0.0813, 0.2904, 0.0129
bone.roll = -0.8084
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_middle.02.R']]
bones['r_middle.03.R'] = bone.name
bone = arm.edit_bones.new('r_index.03.R')
- bone.head[:] = -0.0623, 0.3410, 0.0170
- bone.tail[:] = -0.0552, 0.3214, 0.0129
+ bone.head = -0.0623, 0.3410, 0.0170
+ bone.tail = -0.0552, 0.3214, 0.0129
bone.roll = -2.2048
bone.use_connect = True
bone.parent = arm.edit_bones[bones['r_index.02.R']]
bones['r_index.03.R'] = bone.name
bone = arm.edit_bones.new('nose.001')
- bone.head[:] = 0.0000, -0.7989, 0.8595
- bone.tail[:] = 0.0000, -0.8391, 0.8371
+ bone.head = 0.0000, -0.7989, 0.8595
+ bone.tail = 0.0000, -0.8391, 0.8371
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['nose']]
bones['nose.001'] = bone.name
bone = arm.edit_bones.new('lip.T.L.001')
- bone.head[:] = 0.0353, -0.7614, 0.7866
- bone.tail[:] = 0.0482, -0.6927, 0.7995
+ bone.head = 0.0353, -0.7614, 0.7866
+ bone.tail = 0.0482, -0.6927, 0.7995
bone.roll = 0.1558
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lip.T.L']]
bones['lip.T.L.001'] = bone.name
bone = arm.edit_bones.new('lip.B.L.001')
- bone.head[:] = 0.0258, -0.7624, 0.7742
- bone.tail[:] = 0.0482, -0.6927, 0.7995
+ bone.head = 0.0258, -0.7624, 0.7742
+ bone.tail = 0.0482, -0.6927, 0.7995
bone.roll = 0.4650
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lip.B.L']]
bones['lip.B.L.001'] = bone.name
bone = arm.edit_bones.new('chin')
- bone.head[:] = 0.0000, -0.6960, 0.7733
- bone.tail[:] = 0.0000, -0.7687, 0.7625
+ bone.head = 0.0000, -0.6960, 0.7733
+ bone.tail = 0.0000, -0.7687, 0.7625
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['jaw']]
bones['chin'] = bone.name
bone = arm.edit_bones.new('ear.L.001')
- bone.head[:] = 0.0524, -0.5459, 0.9899
- bone.tail[:] = 0.0727, -0.5682, 1.0212
+ bone.head = 0.0524, -0.5459, 0.9899
+ bone.tail = 0.0727, -0.5682, 1.0212
bone.roll = 0.2280
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.L']]
bones['ear.L.001'] = bone.name
bone = arm.edit_bones.new('ear.R.001')
- bone.head[:] = -0.0524, -0.5459, 0.9899
- bone.tail[:] = -0.0727, -0.5682, 1.0212
+ bone.head = -0.0524, -0.5459, 0.9899
+ bone.tail = -0.0727, -0.5682, 1.0212
bone.roll = -0.2280
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.R']]
bones['ear.R.001'] = bone.name
bone = arm.edit_bones.new('lip.T.R.001')
- bone.head[:] = -0.0353, -0.7614, 0.7866
- bone.tail[:] = -0.0482, -0.6927, 0.7995
+ bone.head = -0.0353, -0.7614, 0.7866
+ bone.tail = -0.0482, -0.6927, 0.7995
bone.roll = -0.1558
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lip.T.R']]
bones['lip.T.R.001'] = bone.name
bone = arm.edit_bones.new('lip.B.R.001')
- bone.head[:] = -0.0258, -0.7624, 0.7742
- bone.tail[:] = -0.0482, -0.6927, 0.7995
+ bone.head = -0.0258, -0.7624, 0.7742
+ bone.tail = -0.0482, -0.6927, 0.7995
bone.roll = -0.4650
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lip.B.R']]
bones['lip.B.R.001'] = bone.name
bone = arm.edit_bones.new('brow.B.L.001')
- bone.head[:] = 0.0659, -0.6703, 0.9324
- bone.tail[:] = 0.0507, -0.6764, 0.9344
+ bone.head = 0.0659, -0.6703, 0.9324
+ bone.tail = 0.0507, -0.6764, 0.9344
bone.roll = 0.0953
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.B.L']]
bones['brow.B.L.001'] = bone.name
bone = arm.edit_bones.new('lid.T.L.001')
- bone.head[:] = 0.0588, -0.6755, 0.9223
- bone.tail[:] = 0.0503, -0.6779, 0.9257
+ bone.head = 0.0588, -0.6755, 0.9223
+ bone.tail = 0.0503, -0.6779, 0.9257
bone.roll = 0.4801
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.L']]
bones['lid.T.L.001'] = bone.name
bone = arm.edit_bones.new('brow.B.R.001')
- bone.head[:] = -0.0659, -0.6703, 0.9324
- bone.tail[:] = -0.0507, -0.6764, 0.9344
+ bone.head = -0.0659, -0.6703, 0.9324
+ bone.tail = -0.0507, -0.6764, 0.9344
bone.roll = -0.0953
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.B.R']]
bones['brow.B.R.001'] = bone.name
bone = arm.edit_bones.new('lid.T.R.001')
- bone.head[:] = -0.0588, -0.6755, 0.9223
- bone.tail[:] = -0.0503, -0.6779, 0.9257
+ bone.head = -0.0588, -0.6755, 0.9223
+ bone.tail = -0.0503, -0.6779, 0.9257
bone.roll = -0.4801
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.R']]
bones['lid.T.R.001'] = bone.name
bone = arm.edit_bones.new('forehead.L.001')
- bone.head[:] = 0.0418, -0.6520, 0.9749
- bone.tail[:] = 0.0510, -0.6773, 0.9561
+ bone.head = 0.0418, -0.6520, 0.9749
+ bone.tail = 0.0510, -0.6773, 0.9561
bone.roll = 0.5278
bone.use_connect = False
bone.parent = arm.edit_bones[bones['forehead.L']]
bones['forehead.L.001'] = bone.name
bone = arm.edit_bones.new('forehead.R.001')
- bone.head[:] = -0.0418, -0.6520, 0.9749
- bone.tail[:] = -0.0510, -0.6773, 0.9561
+ bone.head = -0.0418, -0.6520, 0.9749
+ bone.tail = -0.0510, -0.6773, 0.9561
bone.roll = -0.5278
bone.use_connect = False
bone.parent = arm.edit_bones[bones['forehead.R']]
bones['forehead.R.001'] = bone.name
bone = arm.edit_bones.new('cheek.T.L.001')
- bone.head[:] = 0.0660, -0.6881, 0.8704
- bone.tail[:] = 0.0389, -0.7093, 0.8768
+ bone.head = 0.0660, -0.6881, 0.8704
+ bone.tail = 0.0389, -0.7093, 0.8768
bone.roll = -0.5772
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.T.L']]
bones['cheek.T.L.001'] = bone.name
bone = arm.edit_bones.new('cheek.T.R.001')
- bone.head[:] = -0.0660, -0.6881, 0.8704
- bone.tail[:] = -0.0389, -0.7093, 0.8768
+ bone.head = -0.0660, -0.6881, 0.8704
+ bone.tail = -0.0389, -0.7093, 0.8768
bone.roll = 0.5772
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.T.R']]
bones['cheek.T.R.001'] = bone.name
bone = arm.edit_bones.new('tongue.001')
- bone.head[:] = 0.0004, -0.7476, 0.7967
- bone.tail[:] = 0.0004, -0.7246, 0.8052
+ bone.head = 0.0004, -0.7476, 0.7967
+ bone.tail = 0.0004, -0.7246, 0.8052
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['tongue']]
bones['tongue.001'] = bone.name
bone = arm.edit_bones.new('f_palm.04.L')
- bone.head[:] = 0.1229, -0.2329, 0.0282
- bone.tail[:] = 0.1426, -0.2749, 0.0253
+ bone.head = 0.1229, -0.2329, 0.0282
+ bone.tail = 0.1426, -0.2749, 0.0253
bone.roll = -2.8623
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.L']]
bones['f_palm.04.L'] = bone.name
bone = arm.edit_bones.new('f_palm.03.L')
- bone.head[:] = 0.1142, -0.2346, 0.0282
- bone.tail[:] = 0.1239, -0.2833, 0.0377
+ bone.head = 0.1142, -0.2346, 0.0282
+ bone.tail = 0.1239, -0.2833, 0.0377
bone.roll = 1.5833
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.L']]
bones['f_palm.03.L'] = bone.name
bone = arm.edit_bones.new('f_palm.02.L')
- bone.head[:] = 0.1053, -0.2345, 0.0282
- bone.tail[:] = 0.0983, -0.2834, 0.0377
+ bone.head = 0.1053, -0.2345, 0.0282
+ bone.tail = 0.0983, -0.2834, 0.0377
bone.roll = -1.2317
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.L']]
bones['f_palm.02.L'] = bone.name
bone = arm.edit_bones.new('f_palm.01.L')
- bone.head[:] = 0.0934, -0.2319, 0.0282
- bone.tail[:] = 0.0791, -0.2716, 0.0253
+ bone.head = 0.0934, -0.2319, 0.0282
+ bone.tail = 0.0791, -0.2716, 0.0253
bone.roll = 2.8333
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.L']]
bones['f_palm.01.L'] = bone.name
bone = arm.edit_bones.new('f_palm.04.R')
- bone.head[:] = -0.1229, -0.2329, 0.0282
- bone.tail[:] = -0.1426, -0.2749, 0.0253
+ bone.head = -0.1229, -0.2329, 0.0282
+ bone.tail = -0.1426, -0.2749, 0.0253
bone.roll = 2.8623
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.R']]
bones['f_palm.04.R'] = bone.name
bone = arm.edit_bones.new('f_palm.03.R')
- bone.head[:] = -0.1142, -0.2346, 0.0282
- bone.tail[:] = -0.1239, -0.2833, 0.0377
+ bone.head = -0.1142, -0.2346, 0.0282
+ bone.tail = -0.1239, -0.2833, 0.0377
bone.roll = -1.5833
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.R']]
bones['f_palm.03.R'] = bone.name
bone = arm.edit_bones.new('f_palm.02.R')
- bone.head[:] = -0.1053, -0.2345, 0.0282
- bone.tail[:] = -0.0983, -0.2834, 0.0377
+ bone.head = -0.1053, -0.2345, 0.0282
+ bone.tail = -0.0983, -0.2834, 0.0377
bone.roll = 1.2317
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.R']]
bones['f_palm.02.R'] = bone.name
bone = arm.edit_bones.new('f_palm.01.R')
- bone.head[:] = -0.0934, -0.2319, 0.0282
- bone.tail[:] = -0.0791, -0.2716, 0.0253
+ bone.head = -0.0934, -0.2319, 0.0282
+ bone.tail = -0.0791, -0.2716, 0.0253
bone.roll = -2.8333
bone.use_connect = False
bone.parent = arm.edit_bones[bones['front_toe.R']]
bones['f_palm.01.R'] = bone.name
bone = arm.edit_bones.new('nose.002')
- bone.head[:] = 0.0000, -0.8391, 0.8371
- bone.tail[:] = 0.0000, -0.8452, 0.8281
+ bone.head = 0.0000, -0.8391, 0.8371
+ bone.tail = 0.0000, -0.8452, 0.8281
bone.roll = -0.0162
bone.use_connect = True
bone.parent = arm.edit_bones[bones['nose.001']]
bones['nose.002'] = bone.name
bone = arm.edit_bones.new('chin.001')
- bone.head[:] = 0.0000, -0.7687, 0.7625
- bone.tail[:] = 0.0000, -0.7926, 0.7756
+ bone.head = 0.0000, -0.7687, 0.7625
+ bone.tail = 0.0000, -0.7926, 0.7756
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['chin']]
bones['chin.001'] = bone.name
bone = arm.edit_bones.new('ear.L.002')
- bone.head[:] = 0.0727, -0.5682, 1.0212
- bone.tail[:] = 0.1158, -0.5606, 1.0358
+ bone.head = 0.0727, -0.5682, 1.0212
+ bone.tail = 0.1158, -0.5606, 1.0358
bone.roll = -1.9007
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.L.001']]
bones['ear.L.002'] = bone.name
bone = arm.edit_bones.new('ear.R.002')
- bone.head[:] = -0.0727, -0.5682, 1.0212
- bone.tail[:] = -0.1158, -0.5606, 1.0358
+ bone.head = -0.0727, -0.5682, 1.0212
+ bone.tail = -0.1158, -0.5606, 1.0358
bone.roll = 1.9007
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.R.001']]
bones['ear.R.002'] = bone.name
bone = arm.edit_bones.new('brow.B.L.002')
- bone.head[:] = 0.0507, -0.6764, 0.9344
- bone.tail[:] = 0.0362, -0.6871, 0.9343
+ bone.head = 0.0507, -0.6764, 0.9344
+ bone.tail = 0.0362, -0.6871, 0.9343
bone.roll = 0.2604
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.B.L.001']]
bones['brow.B.L.002'] = bone.name
bone = arm.edit_bones.new('lid.T.L.002')
- bone.head[:] = 0.0503, -0.6779, 0.9257
- bone.tail[:] = 0.0361, -0.6798, 0.9241
+ bone.head = 0.0503, -0.6779, 0.9257
+ bone.tail = 0.0361, -0.6798, 0.9241
bone.roll = 0.0945
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.L.001']]
bones['lid.T.L.002'] = bone.name
bone = arm.edit_bones.new('brow.B.R.002')
- bone.head[:] = -0.0507, -0.6764, 0.9344
- bone.tail[:] = -0.0362, -0.6871, 0.9343
+ bone.head = -0.0507, -0.6764, 0.9344
+ bone.tail = -0.0362, -0.6871, 0.9343
bone.roll = -0.2604
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.B.R.001']]
bones['brow.B.R.002'] = bone.name
bone = arm.edit_bones.new('lid.T.R.002')
- bone.head[:] = -0.0503, -0.6779, 0.9257
- bone.tail[:] = -0.0361, -0.6798, 0.9241
+ bone.head = -0.0503, -0.6779, 0.9257
+ bone.tail = -0.0361, -0.6798, 0.9241
bone.roll = -0.0945
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.R.001']]
bones['lid.T.R.002'] = bone.name
bone = arm.edit_bones.new('forehead.L.002')
- bone.head[:] = 0.0581, -0.6362, 0.9723
- bone.tail[:] = 0.0774, -0.6567, 0.9438
+ bone.head = 0.0581, -0.6362, 0.9723
+ bone.tail = 0.0774, -0.6567, 0.9438
bone.roll = -0.3374
bone.use_connect = False
bone.parent = arm.edit_bones[bones['forehead.L.001']]
bones['forehead.L.002'] = bone.name
bone = arm.edit_bones.new('forehead.R.002')
- bone.head[:] = -0.0581, -0.6362, 0.9723
- bone.tail[:] = -0.0774, -0.6567, 0.9438
+ bone.head = -0.0581, -0.6362, 0.9723
+ bone.tail = -0.0774, -0.6567, 0.9438
bone.roll = 0.3374
bone.use_connect = False
bone.parent = arm.edit_bones[bones['forehead.R.001']]
bones['forehead.R.002'] = bone.name
bone = arm.edit_bones.new('nose.L')
- bone.head[:] = 0.0389, -0.7093, 0.8768
- bone.tail[:] = 0.0360, -0.7993, 0.8371
+ bone.head = 0.0389, -0.7093, 0.8768
+ bone.tail = 0.0360, -0.7993, 0.8371
bone.roll = -2.8274
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.T.L.001']]
bones['nose.L'] = bone.name
bone = arm.edit_bones.new('nose.R')
- bone.head[:] = -0.0389, -0.7093, 0.8768
- bone.tail[:] = -0.0360, -0.7993, 0.8371
+ bone.head = -0.0389, -0.7093, 0.8768
+ bone.tail = -0.0360, -0.7993, 0.8371
bone.roll = 2.8274
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.T.R.001']]
bones['nose.R'] = bone.name
bone = arm.edit_bones.new('tongue.002')
- bone.head[:] = 0.0004, -0.7246, 0.8052
- bone.tail[:] = 0.0004, -0.6900, 0.8003
+ bone.head = 0.0004, -0.7246, 0.8052
+ bone.tail = 0.0004, -0.6900, 0.8003
bone.roll = 0.0000
bone.use_connect = True
bone.parent = arm.edit_bones[bones['tongue.001']]
bones['tongue.002'] = bone.name
bone = arm.edit_bones.new('f_pinky.01.L')
- bone.head[:] = 0.1426, -0.2749, 0.0253
- bone.tail[:] = 0.1477, -0.2946, 0.0222
+ bone.head = 0.1426, -0.2749, 0.0253
+ bone.tail = 0.1477, -0.2946, 0.0222
bone.roll = -2.0928
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.04.L']]
bones['f_pinky.01.L'] = bone.name
bone = arm.edit_bones.new('f_ring.01.L')
- bone.head[:] = 0.1239, -0.2833, 0.0377
- bone.tail[:] = 0.1255, -0.3031, 0.0317
+ bone.head = 0.1239, -0.2833, 0.0377
+ bone.tail = 0.1255, -0.3031, 0.0317
bone.roll = -0.5451
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.03.L']]
bones['f_ring.01.L'] = bone.name
bone = arm.edit_bones.new('f_middle.01.L')
- bone.head[:] = 0.0983, -0.2834, 0.0377
- bone.tail[:] = 0.0955, -0.3030, 0.0317
+ bone.head = 0.0983, -0.2834, 0.0377
+ bone.tail = 0.0955, -0.3030, 0.0317
bone.roll = 0.9401
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.02.L']]
bones['f_middle.01.L'] = bone.name
bone = arm.edit_bones.new('f_index.01.L')
- bone.head[:] = 0.0791, -0.2716, 0.0253
- bone.tail[:] = 0.0749, -0.2916, 0.0222
+ bone.head = 0.0791, -0.2716, 0.0253
+ bone.tail = 0.0749, -0.2916, 0.0222
bone.roll = 1.9945
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.01.L']]
bones['f_index.01.L'] = bone.name
bone = arm.edit_bones.new('f_pinky.01.R')
- bone.head[:] = -0.1426, -0.2749, 0.0253
- bone.tail[:] = -0.1477, -0.2946, 0.0222
+ bone.head = -0.1426, -0.2749, 0.0253
+ bone.tail = -0.1477, -0.2946, 0.0222
bone.roll = 2.0928
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.04.R']]
bones['f_pinky.01.R'] = bone.name
bone = arm.edit_bones.new('f_ring.01.R')
- bone.head[:] = -0.1239, -0.2833, 0.0377
- bone.tail[:] = -0.1255, -0.3031, 0.0317
+ bone.head = -0.1239, -0.2833, 0.0377
+ bone.tail = -0.1255, -0.3031, 0.0317
bone.roll = 0.5451
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.03.R']]
bones['f_ring.01.R'] = bone.name
bone = arm.edit_bones.new('f_middle.01.R')
- bone.head[:] = -0.0983, -0.2834, 0.0377
- bone.tail[:] = -0.0955, -0.3030, 0.0317
+ bone.head = -0.0983, -0.2834, 0.0377
+ bone.tail = -0.0955, -0.3030, 0.0317
bone.roll = -0.9401
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.02.R']]
bones['f_middle.01.R'] = bone.name
bone = arm.edit_bones.new('f_index.01.R')
- bone.head[:] = -0.0791, -0.2716, 0.0253
- bone.tail[:] = -0.0749, -0.2916, 0.0222
+ bone.head = -0.0791, -0.2716, 0.0253
+ bone.tail = -0.0749, -0.2916, 0.0222
bone.roll = -1.9945
bone.use_connect = False
bone.parent = arm.edit_bones[bones['f_palm.01.R']]
bones['f_index.01.R'] = bone.name
bone = arm.edit_bones.new('nose.003')
- bone.head[:] = 0.0000, -0.8452, 0.8281
- bone.tail[:] = 0.0000, -0.8349, 0.8089
+ bone.head = 0.0000, -0.8452, 0.8281
+ bone.tail = 0.0000, -0.8349, 0.8089
bone.roll = -0.0248
bone.use_connect = True
bone.parent = arm.edit_bones[bones['nose.002']]
bones['nose.003'] = bone.name
bone = arm.edit_bones.new('ear.L.003')
- bone.head[:] = 0.1158, -0.5606, 1.0358
- bone.tail[:] = 0.1130, -0.5379, 0.9935
+ bone.head = 0.1158, -0.5606, 1.0358
+ bone.tail = 0.1130, -0.5379, 0.9935
bone.roll = 2.4141
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.L.002']]
bones['ear.L.003'] = bone.name
bone = arm.edit_bones.new('ear.R.003')
- bone.head[:] = -0.1158, -0.5606, 1.0358
- bone.tail[:] = -0.1130, -0.5379, 0.9935
+ bone.head = -0.1158, -0.5606, 1.0358
+ bone.tail = -0.1130, -0.5379, 0.9935
bone.roll = -2.4141
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.R.002']]
bones['ear.R.003'] = bone.name
bone = arm.edit_bones.new('brow.B.L.003')
- bone.head[:] = 0.0362, -0.6871, 0.9343
- bone.tail[:] = 0.0269, -0.6936, 0.9293
+ bone.head = 0.0362, -0.6871, 0.9343
+ bone.tail = 0.0269, -0.6936, 0.9293
bone.roll = 0.2912
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.B.L.002']]
bones['brow.B.L.003'] = bone.name
bone = arm.edit_bones.new('lid.T.L.003')
- bone.head[:] = 0.0361, -0.6798, 0.9241
- bone.tail[:] = 0.0281, -0.6756, 0.9088
+ bone.head = 0.0361, -0.6798, 0.9241
+ bone.tail = 0.0281, -0.6756, 0.9088
bone.roll = -0.3539
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.L.002']]
bones['lid.T.L.003'] = bone.name
bone = arm.edit_bones.new('brow.B.R.003')
- bone.head[:] = -0.0362, -0.6871, 0.9343
- bone.tail[:] = -0.0269, -0.6936, 0.9293
+ bone.head = -0.0362, -0.6871, 0.9343
+ bone.tail = -0.0269, -0.6936, 0.9293
bone.roll = -0.2912
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.B.R.002']]
bones['brow.B.R.003'] = bone.name
bone = arm.edit_bones.new('lid.T.R.003')
- bone.head[:] = -0.0361, -0.6798, 0.9241
- bone.tail[:] = -0.0281, -0.6756, 0.9088
+ bone.head = -0.0361, -0.6798, 0.9241
+ bone.tail = -0.0281, -0.6756, 0.9088
bone.roll = 0.3539
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.R.002']]
bones['lid.T.R.003'] = bone.name
bone = arm.edit_bones.new('temple.L')
- bone.head[:] = 0.0590, -0.5870, 0.9758
- bone.tail[:] = 0.0931, -0.5866, 0.8642
+ bone.head = 0.0590, -0.5870, 0.9758
+ bone.tail = 0.0931, -0.5866, 0.8642
bone.roll = -0.4594
bone.use_connect = False
bone.parent = arm.edit_bones[bones['forehead.L.002']]
bones['temple.L'] = bone.name
bone = arm.edit_bones.new('temple.R')
- bone.head[:] = -0.0590, -0.5870, 0.9758
- bone.tail[:] = -0.0931, -0.5866, 0.8642
+ bone.head = -0.0590, -0.5870, 0.9758
+ bone.tail = -0.0931, -0.5866, 0.8642
bone.roll = 0.4594
bone.use_connect = False
bone.parent = arm.edit_bones[bones['forehead.R.002']]
bones['temple.R'] = bone.name
bone = arm.edit_bones.new('nose.L.001')
- bone.head[:] = 0.0360, -0.7993, 0.8371
- bone.tail[:] = 0.0000, -0.8391, 0.8371
+ bone.head = 0.0360, -0.7993, 0.8371
+ bone.tail = 0.0000, -0.8391, 0.8371
bone.roll = 2.9287
bone.use_connect = True
bone.parent = arm.edit_bones[bones['nose.L']]
bones['nose.L.001'] = bone.name
bone = arm.edit_bones.new('nose.R.001')
- bone.head[:] = -0.0360, -0.7993, 0.8371
- bone.tail[:] = 0.0000, -0.8391, 0.8371
+ bone.head = -0.0360, -0.7993, 0.8371
+ bone.tail = 0.0000, -0.8391, 0.8371
bone.roll = -2.9287
bone.use_connect = True
bone.parent = arm.edit_bones[bones['nose.R']]
bones['nose.R.001'] = bone.name
bone = arm.edit_bones.new('f_pinky.02.L')
- bone.head[:] = 0.1477, -0.2946, 0.0222
- bone.tail[:] = 0.1520, -0.3116, 0.0170
+ bone.head = 0.1477, -0.2946, 0.0222
+ bone.tail = 0.1520, -0.3116, 0.0170
bone.roll = -1.4292
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_pinky.01.L']]
bones['f_pinky.02.L'] = bone.name
bone = arm.edit_bones.new('f_ring.02.L')
- bone.head[:] = 0.1255, -0.3031, 0.0317
- bone.tail[:] = 0.1278, -0.3200, 0.0224
+ bone.head = 0.1255, -0.3031, 0.0317
+ bone.tail = 0.1278, -0.3200, 0.0224
bone.roll = -0.5100
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_ring.01.L']]
bones['f_ring.02.L'] = bone.name
bone = arm.edit_bones.new('f_middle.02.L')
- bone.head[:] = 0.0955, -0.3030, 0.0317
- bone.tail[:] = 0.0940, -0.3200, 0.0224
+ bone.head = 0.0955, -0.3030, 0.0317
+ bone.tail = 0.0940, -0.3200, 0.0224
bone.roll = 0.4076
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_middle.01.L']]
bones['f_middle.02.L'] = bone.name
bone = arm.edit_bones.new('f_index.02.L')
- bone.head[:] = 0.0749, -0.2916, 0.0222
- bone.tail[:] = 0.0712, -0.3087, 0.0170
+ bone.head = 0.0749, -0.2916, 0.0222
+ bone.tail = 0.0712, -0.3087, 0.0170
bone.roll = 1.3847
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_index.01.L']]
bones['f_index.02.L'] = bone.name
bone = arm.edit_bones.new('f_pinky.02.R')
- bone.head[:] = -0.1477, -0.2946, 0.0222
- bone.tail[:] = -0.1520, -0.3116, 0.0170
+ bone.head = -0.1477, -0.2946, 0.0222
+ bone.tail = -0.1520, -0.3116, 0.0170
bone.roll = 1.4292
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_pinky.01.R']]
bones['f_pinky.02.R'] = bone.name
bone = arm.edit_bones.new('f_ring.02.R')
- bone.head[:] = -0.1255, -0.3031, 0.0317
- bone.tail[:] = -0.1278, -0.3200, 0.0224
+ bone.head = -0.1255, -0.3031, 0.0317
+ bone.tail = -0.1278, -0.3200, 0.0224
bone.roll = 0.5100
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_ring.01.R']]
bones['f_ring.02.R'] = bone.name
bone = arm.edit_bones.new('f_middle.02.R')
- bone.head[:] = -0.0955, -0.3030, 0.0317
- bone.tail[:] = -0.0940, -0.3200, 0.0224
+ bone.head = -0.0955, -0.3030, 0.0317
+ bone.tail = -0.0940, -0.3200, 0.0224
bone.roll = -0.4076
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_middle.01.R']]
bones['f_middle.02.R'] = bone.name
bone = arm.edit_bones.new('f_index.02.R')
- bone.head[:] = -0.0749, -0.2916, 0.0222
- bone.tail[:] = -0.0712, -0.3087, 0.0170
+ bone.head = -0.0749, -0.2916, 0.0222
+ bone.tail = -0.0712, -0.3087, 0.0170
bone.roll = -1.3847
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_index.01.R']]
bones['f_index.02.R'] = bone.name
bone = arm.edit_bones.new('nose.004')
- bone.head[:] = 0.0000, -0.8349, 0.8089
- bone.tail[:] = 0.0000, -0.8159, 0.7913
+ bone.head = 0.0000, -0.8349, 0.8089
+ bone.tail = 0.0000, -0.8159, 0.7913
bone.roll = 0.0082
bone.use_connect = True
bone.parent = arm.edit_bones[bones['nose.003']]
bones['nose.004'] = bone.name
bone = arm.edit_bones.new('ear.L.004')
- bone.head[:] = 0.1130, -0.5379, 0.9935
- bone.tail[:] = 0.0949, -0.5457, 0.9545
+ bone.head = 0.1130, -0.5379, 0.9935
+ bone.tail = 0.0949, -0.5457, 0.9545
bone.roll = -2.3814
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.L.003']]
bones['ear.L.004'] = bone.name
bone = arm.edit_bones.new('ear.R.004')
- bone.head[:] = -0.1130, -0.5379, 0.9935
- bone.tail[:] = -0.0949, -0.5457, 0.9545
+ bone.head = -0.1130, -0.5379, 0.9935
+ bone.tail = -0.0949, -0.5457, 0.9545
bone.roll = 2.3814
bone.use_connect = True
bone.parent = arm.edit_bones[bones['ear.R.003']]
bones['ear.R.004'] = bone.name
bone = arm.edit_bones.new('lid.B.L')
- bone.head[:] = 0.0281, -0.6756, 0.9088
- bone.tail[:] = 0.0382, -0.6786, 0.9040
+ bone.head = 0.0281, -0.6756, 0.9088
+ bone.tail = 0.0382, -0.6786, 0.9040
bone.roll = 0.2941
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.L.003']]
bones['lid.B.L'] = bone.name
bone = arm.edit_bones.new('lid.B.R')
- bone.head[:] = -0.0281, -0.6756, 0.9088
- bone.tail[:] = -0.0382, -0.6786, 0.9040
+ bone.head = -0.0281, -0.6756, 0.9088
+ bone.tail = -0.0382, -0.6786, 0.9040
bone.roll = -0.2941
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.T.R.003']]
bones['lid.B.R'] = bone.name
bone = arm.edit_bones.new('jaw.L')
- bone.head[:] = 0.0931, -0.5866, 0.8642
- bone.tail[:] = 0.0694, -0.6211, 0.8005
+ bone.head = 0.0931, -0.5866, 0.8642
+ bone.tail = 0.0694, -0.6211, 0.8005
bone.roll = 0.0983
bone.use_connect = True
bone.parent = arm.edit_bones[bones['temple.L']]
bones['jaw.L'] = bone.name
bone = arm.edit_bones.new('jaw.R')
- bone.head[:] = -0.0931, -0.5866, 0.8642
- bone.tail[:] = -0.0694, -0.6211, 0.8005
+ bone.head = -0.0931, -0.5866, 0.8642
+ bone.tail = -0.0694, -0.6211, 0.8005
bone.roll = -0.0983
bone.use_connect = True
bone.parent = arm.edit_bones[bones['temple.R']]
bones['jaw.R'] = bone.name
bone = arm.edit_bones.new('f_pinky.03.L')
- bone.head[:] = 0.1520, -0.3116, 0.0170
- bone.tail[:] = 0.1544, -0.3323, 0.0129
+ bone.head = 0.1520, -0.3116, 0.0170
+ bone.tail = 0.1544, -0.3323, 0.0129
bone.roll = -1.0952
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_pinky.02.L']]
bones['f_pinky.03.L'] = bone.name
bone = arm.edit_bones.new('f_ring.03.L')
- bone.head[:] = 0.1278, -0.3200, 0.0224
- bone.tail[:] = 0.1328, -0.3592, 0.0129
+ bone.head = 0.1278, -0.3200, 0.0224
+ bone.tail = 0.1328, -0.3592, 0.0129
bone.roll = -0.9905
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_ring.02.L']]
bones['f_ring.03.L'] = bone.name
bone = arm.edit_bones.new('f_middle.03.L')
- bone.head[:] = 0.0940, -0.3200, 0.0224
- bone.tail[:] = 0.0902, -0.3593, 0.0129
+ bone.head = 0.0940, -0.3200, 0.0224
+ bone.tail = 0.0902, -0.3593, 0.0129
bone.roll = 0.8084
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_middle.02.L']]
bones['f_middle.03.L'] = bone.name
bone = arm.edit_bones.new('f_index.03.L')
- bone.head[:] = 0.0712, -0.3087, 0.0170
- bone.tail[:] = 0.0641, -0.3283, 0.0129
+ bone.head = 0.0712, -0.3087, 0.0170
+ bone.tail = 0.0641, -0.3283, 0.0129
bone.roll = 2.2048
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_index.02.L']]
bones['f_index.03.L'] = bone.name
bone = arm.edit_bones.new('f_pinky.03.R')
- bone.head[:] = -0.1520, -0.3116, 0.0170
- bone.tail[:] = -0.1544, -0.3323, 0.0129
+ bone.head = -0.1520, -0.3116, 0.0170
+ bone.tail = -0.1544, -0.3323, 0.0129
bone.roll = 1.0952
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_pinky.02.R']]
bones['f_pinky.03.R'] = bone.name
bone = arm.edit_bones.new('f_ring.03.R')
- bone.head[:] = -0.1278, -0.3200, 0.0224
- bone.tail[:] = -0.1328, -0.3592, 0.0129
+ bone.head = -0.1278, -0.3200, 0.0224
+ bone.tail = -0.1328, -0.3592, 0.0129
bone.roll = 0.9905
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_ring.02.R']]
bones['f_ring.03.R'] = bone.name
bone = arm.edit_bones.new('f_middle.03.R')
- bone.head[:] = -0.0940, -0.3200, 0.0224
- bone.tail[:] = -0.0902, -0.3593, 0.0129
+ bone.head = -0.0940, -0.3200, 0.0224
+ bone.tail = -0.0902, -0.3593, 0.0129
bone.roll = -0.8084
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_middle.02.R']]
bones['f_middle.03.R'] = bone.name
bone = arm.edit_bones.new('f_index.03.R')
- bone.head[:] = -0.0712, -0.3087, 0.0170
- bone.tail[:] = -0.0641, -0.3283, 0.0129
+ bone.head = -0.0712, -0.3087, 0.0170
+ bone.tail = -0.0641, -0.3283, 0.0129
bone.roll = -2.2048
bone.use_connect = True
bone.parent = arm.edit_bones[bones['f_index.02.R']]
bones['f_index.03.R'] = bone.name
bone = arm.edit_bones.new('lid.B.L.001')
- bone.head[:] = 0.0382, -0.6786, 0.9040
- bone.tail[:] = 0.0476, -0.6772, 0.9036
+ bone.head = 0.0382, -0.6786, 0.9040
+ bone.tail = 0.0476, -0.6772, 0.9036
bone.roll = 0.0266
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.B.L']]
bones['lid.B.L.001'] = bone.name
bone = arm.edit_bones.new('lid.B.R.001')
- bone.head[:] = -0.0382, -0.6786, 0.9040
- bone.tail[:] = -0.0476, -0.6772, 0.9036
+ bone.head = -0.0382, -0.6786, 0.9040
+ bone.tail = -0.0476, -0.6772, 0.9036
bone.roll = -0.0266
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.B.R']]
bones['lid.B.R.001'] = bone.name
bone = arm.edit_bones.new('jaw.L.001')
- bone.head[:] = 0.0694, -0.6211, 0.8005
- bone.tail[:] = 0.0481, -0.6715, 0.7849
+ bone.head = 0.0694, -0.6211, 0.8005
+ bone.tail = 0.0481, -0.6715, 0.7849
bone.roll = 0.2993
bone.use_connect = True
bone.parent = arm.edit_bones[bones['jaw.L']]
bones['jaw.L.001'] = bone.name
bone = arm.edit_bones.new('jaw.R.001')
- bone.head[:] = -0.0694, -0.6211, 0.8005
- bone.tail[:] = -0.0481, -0.6715, 0.7849
+ bone.head = -0.0694, -0.6211, 0.8005
+ bone.tail = -0.0481, -0.6715, 0.7849
bone.roll = -0.2993
bone.use_connect = True
bone.parent = arm.edit_bones[bones['jaw.R']]
bones['jaw.R.001'] = bone.name
bone = arm.edit_bones.new('lid.B.L.002')
- bone.head[:] = 0.0476, -0.6772, 0.9036
- bone.tail[:] = 0.0570, -0.6724, 0.9082
+ bone.head = 0.0476, -0.6772, 0.9036
+ bone.tail = 0.0570, -0.6724, 0.9082
bone.roll = -0.1195
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.B.L.001']]
bones['lid.B.L.002'] = bone.name
bone = arm.edit_bones.new('lid.B.R.002')
- bone.head[:] = -0.0476, -0.6772, 0.9036
- bone.tail[:] = -0.0570, -0.6724, 0.9082
+ bone.head = -0.0476, -0.6772, 0.9036
+ bone.tail = -0.0570, -0.6724, 0.9082
bone.roll = 0.1195
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.B.R.001']]
bones['lid.B.R.002'] = bone.name
bone = arm.edit_bones.new('chin.L')
- bone.head[:] = 0.0481, -0.6715, 0.7849
- bone.tail[:] = 0.0482, -0.6927, 0.7995
+ bone.head = 0.0481, -0.6715, 0.7849
+ bone.tail = 0.0482, -0.6927, 0.7995
bone.roll = 3.1083
bone.use_connect = True
bone.parent = arm.edit_bones[bones['jaw.L.001']]
bones['chin.L'] = bone.name
bone = arm.edit_bones.new('chin.R')
- bone.head[:] = -0.0481, -0.6715, 0.7849
- bone.tail[:] = -0.0482, -0.6927, 0.7995
+ bone.head = -0.0481, -0.6715, 0.7849
+ bone.tail = -0.0482, -0.6927, 0.7995
bone.roll = -3.1083
bone.use_connect = True
bone.parent = arm.edit_bones[bones['jaw.R.001']]
bones['chin.R'] = bone.name
bone = arm.edit_bones.new('lid.B.L.003')
- bone.head[:] = 0.0570, -0.6724, 0.9082
- bone.tail[:] = 0.0621, -0.6644, 0.9197
+ bone.head = 0.0570, -0.6724, 0.9082
+ bone.tail = 0.0621, -0.6644, 0.9197
bone.roll = -0.1171
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.B.L.002']]
bones['lid.B.L.003'] = bone.name
bone = arm.edit_bones.new('lid.B.R.003')
- bone.head[:] = -0.0570, -0.6724, 0.9082
- bone.tail[:] = -0.0621, -0.6644, 0.9197
+ bone.head = -0.0570, -0.6724, 0.9082
+ bone.tail = -0.0621, -0.6644, 0.9197
bone.roll = 0.1171
bone.use_connect = True
bone.parent = arm.edit_bones[bones['lid.B.R.002']]
bones['lid.B.R.003'] = bone.name
bone = arm.edit_bones.new('cheek.B.L')
- bone.head[:] = 0.0482, -0.6927, 0.7995
- bone.tail[:] = 0.0707, -0.6771, 0.8294
+ bone.head = 0.0482, -0.6927, 0.7995
+ bone.tail = 0.0707, -0.6771, 0.8294
bone.roll = -0.1207
bone.use_connect = True
bone.parent = arm.edit_bones[bones['chin.L']]
bones['cheek.B.L'] = bone.name
bone = arm.edit_bones.new('cheek.B.R')
- bone.head[:] = -0.0482, -0.6927, 0.7995
- bone.tail[:] = -0.0707, -0.6771, 0.8294
+ bone.head = -0.0482, -0.6927, 0.7995
+ bone.tail = -0.0707, -0.6771, 0.8294
bone.roll = 0.1207
bone.use_connect = True
bone.parent = arm.edit_bones[bones['chin.R']]
bones['cheek.B.R'] = bone.name
bone = arm.edit_bones.new('cheek.B.L.001')
- bone.head[:] = 0.0707, -0.6771, 0.8294
- bone.tail[:] = 0.0906, -0.6428, 0.9032
+ bone.head = 0.0707, -0.6771, 0.8294
+ bone.tail = 0.0906, -0.6428, 0.9032
bone.roll = 0.0640
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.B.L']]
bones['cheek.B.L.001'] = bone.name
bone = arm.edit_bones.new('cheek.B.R.001')
- bone.head[:] = -0.0707, -0.6771, 0.8294
- bone.tail[:] = -0.0906, -0.6428, 0.9032
+ bone.head = -0.0707, -0.6771, 0.8294
+ bone.tail = -0.0906, -0.6428, 0.9032
bone.roll = -0.0640
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.B.R']]
bones['cheek.B.R.001'] = bone.name
bone = arm.edit_bones.new('brow.T.L')
- bone.head[:] = 0.0906, -0.6428, 0.9032
- bone.tail[:] = 0.0774, -0.6567, 0.9438
+ bone.head = 0.0906, -0.6428, 0.9032
+ bone.tail = 0.0774, -0.6567, 0.9438
bone.roll = 0.1270
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.B.L.001']]
bones['brow.T.L'] = bone.name
bone = arm.edit_bones.new('brow.T.R')
- bone.head[:] = -0.0906, -0.6428, 0.9032
- bone.tail[:] = -0.0774, -0.6567, 0.9438
+ bone.head = -0.0906, -0.6428, 0.9032
+ bone.tail = -0.0774, -0.6567, 0.9438
bone.roll = -0.1270
bone.use_connect = True
bone.parent = arm.edit_bones[bones['cheek.B.R.001']]
bones['brow.T.R'] = bone.name
bone = arm.edit_bones.new('brow.T.L.001')
- bone.head[:] = 0.0774, -0.6567, 0.9438
- bone.tail[:] = 0.0510, -0.6773, 0.9561
+ bone.head = 0.0774, -0.6567, 0.9438
+ bone.tail = 0.0510, -0.6773, 0.9561
bone.roll = -2.7274
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.T.L']]
bones['brow.T.L.001'] = bone.name
bone = arm.edit_bones.new('brow.T.R.001')
- bone.head[:] = -0.0774, -0.6567, 0.9438
- bone.tail[:] = -0.0510, -0.6773, 0.9561
+ bone.head = -0.0774, -0.6567, 0.9438
+ bone.tail = -0.0510, -0.6773, 0.9561
bone.roll = 2.7274
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.T.R']]
bones['brow.T.R.001'] = bone.name
bone = arm.edit_bones.new('brow.T.L.002')
- bone.head[:] = 0.0510, -0.6773, 0.9561
- bone.tail[:] = 0.0160, -0.7017, 0.9527
+ bone.head = 0.0510, -0.6773, 0.9561
+ bone.tail = 0.0160, -0.7017, 0.9527
bone.roll = 0.4172
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.T.L.001']]
bones['brow.T.L.002'] = bone.name
bone = arm.edit_bones.new('brow.T.R.002')
- bone.head[:] = -0.0510, -0.6773, 0.9561
- bone.tail[:] = -0.0160, -0.7017, 0.9527
+ bone.head = -0.0510, -0.6773, 0.9561
+ bone.tail = -0.0160, -0.7017, 0.9527
bone.roll = -0.4172
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.T.R.001']]
bones['brow.T.R.002'] = bone.name
bone = arm.edit_bones.new('brow.T.L.003')
- bone.head[:] = 0.0160, -0.7017, 0.9527
- bone.tail[:] = 0.0000, -0.7082, 0.9031
+ bone.head = 0.0160, -0.7017, 0.9527
+ bone.tail = 0.0000, -0.7082, 0.9031
bone.roll = -0.6706
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.T.L.002']]
bones['brow.T.L.003'] = bone.name
bone = arm.edit_bones.new('brow.T.R.003')
- bone.head[:] = -0.0160, -0.7017, 0.9527
- bone.tail[:] = 0.0000, -0.7082, 0.9031
+ bone.head = -0.0160, -0.7017, 0.9527
+ bone.tail = 0.0000, -0.7082, 0.9031
bone.roll = 0.6706
bone.use_connect = True
bone.parent = arm.edit_bones[bones['brow.T.R.002']]
@@ -1505,7 +1505,7 @@ def create(obj):
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
try:
- pbone.rigify_parameters.pivot_pos = 4
+ pbone.rigify_parameters.pivot_pos = 2
except AttributeError:
pass
try:
@@ -1597,7 +1597,7 @@ def create(obj):
except AttributeError:
pass
pbone = obj.pose.bones[bones['thigh.L']]
- pbone.rigify_type = 'limbs.super_limb'
+ pbone.rigify_type = 'limbs.rear_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
@@ -1617,7 +1617,7 @@ def create(obj):
except AttributeError:
pass
pbone = obj.pose.bones[bones['thigh.R']]
- pbone.rigify_type = 'limbs.super_limb'
+ pbone.rigify_type = 'limbs.rear_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
@@ -1789,7 +1789,7 @@ def create(obj):
pbone.rotation_mode = 'QUATERNION'
pbone.bone.layers = [False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
pbone = obj.pose.bones[bones['front_thigh.L']]
- pbone.rigify_type = 'limbs.super_limb'
+ pbone.rigify_type = 'limbs.front_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
@@ -1809,7 +1809,7 @@ def create(obj):
except AttributeError:
pass
pbone = obj.pose.bones[bones['front_thigh.R']]
- pbone.rigify_type = 'limbs.super_limb'
+ pbone.rigify_type = 'limbs.front_paw'
pbone.lock_location = (False, False, False)
pbone.lock_rotation = (False, False, False)
pbone.lock_rotation_w = False
diff --git a/rigify/rig_ui_template.py b/rigify/rig_ui_template.py
index 642b5110..c83dd02b 100644
--- a/rigify/rig_ui_template.py
+++ b/rigify/rig_ui_template.py
@@ -125,6 +125,11 @@ def get_pose_matrix_in_other_space(mat, pose_bone):
return pose_bone.id_data.convert_space(matrix=mat, pose_bone=pose_bone, from_space='POSE', to_space='LOCAL')
+def convert_pose_matrix_via_rest_delta(mat, from_bone, to_bone):
+ """Convert pose of one bone to another bone, preserving the rest pose difference between them."""
+ return mat @ from_bone.bone.matrix_local.inverted() @ to_bone.bone.matrix_local
+
+
def get_local_pose_matrix(pose_bone):
""" Returns the local transform matrix of the given pose bone.
"""
@@ -193,39 +198,41 @@ def match_pose_scale(pose_bone, target_bone):
## IK/FK snapping functions ##
##############################
-def correct_rotation(view_layer, bone_ik, target_matrix):
+def correct_rotation(view_layer, bone_ik, target_matrix, *, ctrl_ik=None):
""" Corrects the ik rotation in ik2fk snapping functions
"""
axis = target_matrix.to_3x3().col[1].normalized()
+ ctrl_ik = ctrl_ik or bone_ik
def distance(angle):
# Rotate the bone and return the actual angle between bones
- bone_ik.rotation_euler[1] = angle
+ ctrl_ik.rotation_euler[1] = angle
view_layer.update()
return -(bone_ik.vector.normalized().dot(axis))
- if bone_ik.rotation_mode in {'QUATERNION', 'AXIS_ANGLE'}:
- bone_ik.rotation_mode = 'ZXY'
+ if ctrl_ik.rotation_mode in {'QUATERNION', 'AXIS_ANGLE'}:
+ ctrl_ik.rotation_mode = 'ZXY'
- start_angle = bone_ik.rotation_euler[1]
+ start_angle = ctrl_ik.rotation_euler[1]
alfarange = find_min_range(distance, start_angle)
alfamin = ternarySearch(distance, alfarange[0], alfarange[1], pi / 180)
- bone_ik.rotation_euler[1] = alfamin
+ ctrl_ik.rotation_euler[1] = alfamin
view_layer.update()
-def correct_scale(view_layer, bone_ik, target_matrix):
+def correct_scale(view_layer, bone_ik, target_matrix, *, ctrl_ik=None):
""" Correct the scale of the base IK bone. """
input_scale = target_matrix.to_scale()
+ ctrl_ik = ctrl_ik or bone_ik
for i in range(3):
cur_scale = bone_ik.matrix.to_scale()
- bone_ik.scale = [
+ ctrl_ik.scale = [
v * i / c for v, i, c in zip(bone_ik.scale, input_scale, cur_scale)
]
@@ -456,8 +463,8 @@ def fk2ik_leg(obj, fk, ik):
view_layer.update()
# Foot position
- mat = mfoot.bone.matrix_local.inverted() @ foot.bone.matrix_local
- footmat = get_pose_matrix_in_other_space(mfooti.matrix, foot) @ mat
+ footmat = get_pose_matrix_in_other_space(mfooti.matrix, foot)
+ footmat = convert_pose_matrix_via_rest_delta(footmat, mfoot, foot)
set_pose_rotation(foot, footmat)
set_pose_scale(foot, footmat)
view_layer.update()
@@ -475,8 +482,8 @@ def fk2ik_leg(obj, fk, ik):
view_layer.update()
# Foot position
- mat = mfoot.bone.matrix_local.inverted() @ foot.bone.matrix_local
- footmat = get_pose_matrix_in_other_space(mfooti.matrix, foot) @ mat
+ footmat = get_pose_matrix_in_other_space(mfooti.matrix, foot)
+ footmat = convert_pose_matrix_via_rest_delta(footmat, mfoot, foot)
set_pose_rotation(foot, footmat)
set_pose_scale(foot, footmat)
view_layer.update()
@@ -516,8 +523,8 @@ def ik2fk_leg(obj, fk, ik):
view_layer.update()
# Foot position
- mat = mfooti.bone.matrix_local.inverted() @ footi.bone.matrix_local
- footmat = get_pose_matrix_in_other_space(foot.matrix, footi) @ mat
+ footmat = get_pose_matrix_in_other_space(foot.matrix, footi)
+ footmat = convert_pose_matrix_via_rest_delta(footmat, mfooti, footi)
set_pose_translation(footi, footmat)
set_pose_rotation(footi, footmat)
set_pose_scale(footi, footmat)
@@ -544,8 +551,8 @@ def ik2fk_leg(obj, fk, ik):
view_layer.update()
# Foot position
- mat = mfooti.bone.matrix_local.inverted() @ footi.bone.matrix_local
- footmat = get_pose_matrix_in_other_space(mfoot.matrix, footi) @ mat
+ footmat = get_pose_matrix_in_other_space(mfoot.matrix, footi)
+ footmat = convert_pose_matrix_via_rest_delta(footmat, mfooti, footi)
set_pose_translation(footi, footmat)
set_pose_rotation(footi, footmat)
set_pose_scale(footi, footmat)
diff --git a/rigify/rigs/limbs/arm.py b/rigify/rigs/limbs/arm.py
index e554465a..e276407e 100644
--- a/rigify/rigs/limbs/arm.py
+++ b/rigify/rigs/limbs/arm.py
@@ -37,10 +37,9 @@ from .limb_rigs import BaseLimbRig
class Rig(BaseLimbRig):
"""Human arm rig."""
- def initialize(self):
- if len(self.bones.org.main) != 3:
- self.raise_error("Input to rig type must be a chain of 3 bones.")
+ min_valid_orgs = max_valid_orgs = 3
+ def initialize(self):
super().initialize()
self.make_wrist_pivot = self.params.make_ik_wrist_pivot
diff --git a/rigify/rigs/limbs/front_paw.py b/rigify/rigs/limbs/front_paw.py
new file mode 100644
index 00000000..f89ca6c4
--- /dev/null
+++ b/rigify/rigs/limbs/front_paw.py
@@ -0,0 +1,288 @@
+#====================== 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 ...utils.bones import align_bone_roll, put_bone, copy_bone_position, flip_bone
+from ...utils.naming import make_derived_name
+from ...utils.misc import map_list
+
+from itertools import count
+
+from ...base_rig import stage
+
+from .limb_rigs import BaseLimbRig
+from .paw import Rig as pawRig
+
+
+class Rig(pawRig):
+ """Front paw rig with special IK automation."""
+
+ ####################################################
+ # EXTRA BONES
+ #
+ # mch:
+ # ik2_chain[2]
+ # Second IK system (pre-driving heel)
+ # heel_track
+ # Bone tracking IK2 to rotate heel
+ # heel_parent
+ # Parent of the heel control
+ #
+ ####################################################
+
+ ####################################################
+ # IK controls
+
+ def get_middle_ik_controls(self):
+ return [self.bones.ctrl.heel]
+
+ def get_ik_fk_position_chains(self):
+ ik_chain, fk_chain = super().get_ik_fk_position_chains()
+ if not self.use_heel2:
+ return [*ik_chain, ik_chain[-1]], [*fk_chain, fk_chain[-1]]
+ return ik_chain, fk_chain
+
+ def get_extra_ik_controls(self):
+ extra = [self.bones.ctrl.heel2] if self.use_heel2 else []
+ return BaseLimbRig.get_extra_ik_controls(self) + extra
+
+ def get_ik_pole_parents(self):
+ return [(self.get_ik2_target_bone(), self.bones.ctrl.ik)]
+
+
+ ####################################################
+ # Second IK system (pre-driving heel)
+
+ use_mch_ik_base = True
+
+ def get_ik2_target_bone(self):
+ return self.bones.mch.ik2_target if self.use_heel2 else self.bones.mch.toe_socket
+
+ @stage.generate_bones
+ def make_ik2_mch_chain(self):
+ orgs = self.bones.org.main
+ chain = map_list(self.make_ik2_mch_bone, count(0), orgs[0:2])
+ self.bones.mch.ik2_chain = chain
+
+ if self.use_heel2:
+ self.bones.mch.ik2_target = self.make_ik2_mch_target_bone(orgs)
+
+ # Connect the chain end to the target
+ self.get_bone(chain[1]).tail = self.get_bone(orgs[2]).tail
+ align_bone_roll(self.obj, chain[1], orgs[1])
+
+ def make_ik2_mch_target_bone(self, orgs):
+ return self.copy_bone(orgs[3], make_derived_name(orgs[0], 'mch', '_ik2_target'), scale=1/2)
+
+ def make_ik2_mch_bone(self, i, org):
+ return self.copy_bone(org, make_derived_name(org, 'mch', '_ik2'))
+
+ @stage.parent_bones
+ def parent_ik2_mch_chain(self):
+ mch = self.bones.mch
+ if self.use_heel2:
+ self.set_bone_parent(mch.ik2_target, self.bones.ctrl.heel2)
+ self.set_bone_parent(mch.ik2_chain[0], self.bones.ctrl.ik_base, inherit_scale='AVERAGE')
+ self.parent_bone_chain(mch.ik2_chain, use_connect=True)
+
+ @stage.configure_bones
+ def configure_ik2_mch_chain(self):
+ for i, mch in enumerate(self.bones.mch.ik2_chain):
+ self.configure_ik2_mch_bone(i, mch)
+
+ def configure_ik2_mch_bone(self, i, mch):
+ bone = self.get_bone(mch)
+ bone.ik_stretch = 0.1
+ if i == 1:
+ bone.lock_ik_x = bone.lock_ik_y = bone.lock_ik_z = True
+ setattr(bone, 'lock_ik_' + self.main_axis, False)
+
+ @stage.rig_bones
+ def rig_ik2_mch_chain(self):
+ target_bone = self.get_ik2_target_bone()
+ self.rig_ik_mch_end_bone(self.bones.mch.ik2_chain[-1], target_bone, self.bones.ctrl.ik_pole)
+
+
+ ####################################################
+ # Heel tracking from IK2
+
+ @stage.generate_bones
+ def make_heel_track_bones(self):
+ orgs = self.bones.org.main
+ mch = self.bones.mch
+ mch.heel_track = self.copy_bone(orgs[2], make_derived_name(orgs[2], 'mch', '_track'))
+ mch.heel_parent = self.copy_bone(orgs[2], make_derived_name(orgs[2], 'mch', '_parent'))
+
+ # This two bone setup is used to move the damped track singularity out
+ # of the way to a forbidden zone of the rig, and thus avoid flipping.
+ # The bones are aligned to the center of the valid transformation zone.
+ self.align_ik_control_bone(mch.heel_track)
+ put_bone(self.obj, mch.heel_track, self.get_bone(orgs[2]).tail, scale=1/3)
+ copy_bone_position(self.obj, mch.heel_track, mch.heel_parent, scale=3/4)
+
+ @stage.parent_bones
+ def parent_heel_control_bone(self):
+ self.set_bone_parent(self.bones.ctrl.heel, self.bones.mch.heel_parent)
+
+ @stage.parent_bones
+ def parent_heel_track_bones(self):
+ # Parenting heel_parent deferred to apply_bones.
+ self.set_bone_parent(self.bones.mch.heel_track, self.get_ik2_target_bone())
+
+ @stage.configure_bones
+ def prerig_heel_track_bones(self):
+ # Assign the constraint before the apply stage.
+ self.make_constraint(
+ self.bones.mch.heel_track, 'DAMPED_TRACK', self.bones.mch.ik2_chain[1],
+ influence=self.params.front_paw_heel_influence
+ )
+
+ @stage.preapply_bones
+ def preapply_heel_track_bones(self):
+ # Assign local transform negating the effect of the constraint at rest.
+ track_bone = self.get_bone(self.bones.mch.heel_track)
+ bone = self.get_bone(self.bones.mch.heel_parent)
+ bone.matrix_basis = track_bone.matrix.inverted() @ bone.matrix
+
+ @stage.apply_bones
+ def apply_heel_track_bones(self):
+ # Complete the parent chain.
+ self.set_bone_parent(self.bones.mch.heel_parent, self.bones.mch.heel_track)
+
+
+ ####################################################
+ # Settings
+
+ @classmethod
+ def add_parameters(self, params):
+ super().add_parameters(params)
+
+ params.front_paw_heel_influence = bpy.props.FloatProperty(
+ name = 'Heel IK Influence',
+ default = 0.8,
+ min = 0,
+ max = 1,
+ description = 'Influence of the secondary IK on the heel control rotation'
+ )
+
+ @classmethod
+ def parameters_ui(self, layout, params):
+ r = layout.row()
+ r.prop(params, "front_paw_heel_influence", slider=True)
+
+ super().parameters_ui(layout, params)
+
+
+def create_sample(obj):
+ # generated by rigify.utils.write_metarig
+ bpy.ops.object.mode_set(mode='EDIT')
+ arm = obj.data
+
+ bones = {}
+
+ bone = arm.edit_bones.new('front_thigh.L')
+ bone.head = 0.0000, 0.0000, 0.6902
+ bone.tail = 0.0000, 0.0916, 0.4418
+ bone.roll = 0.0000
+ bone.use_connect = False
+ bones['front_thigh.L'] = bone.name
+ bone = arm.edit_bones.new('front_shin.L')
+ bone.head = 0.0000, 0.0916, 0.4418
+ bone.tail = 0.0000, 0.1014, 0.1698
+ bone.roll = 0.0000
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['front_thigh.L']]
+ bones['front_shin.L'] = bone.name
+ bone = arm.edit_bones.new('front_foot.L')
+ bone.head = 0.0000, 0.1014, 0.1698
+ bone.tail = 0.0000, 0.0699, 0.0411
+ bone.roll = 0.0000
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['front_shin.L']]
+ bones['front_foot.L'] = bone.name
+ bone = arm.edit_bones.new('front_toe.L')
+ bone.head = 0.0000, 0.0699, 0.0411
+ bone.tail = 0.0000, -0.0540, 0.0000
+ bone.roll = 3.1416
+ bone.use_connect = True
+ bone.parent = arm.edit_bones[bones['front_foot.L']]
+ bones['front_toe.L'] = bone.name
+
+ bpy.ops.object.mode_set(mode='OBJECT')
+ pbone = obj.pose.bones[bones['front_thigh.L']]
+ pbone.rigify_type = 'limbs.front_paw'
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ try:
+ pbone.rigify_parameters.limb_type = "paw"
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ except AttributeError:
+ pass
+ try:
+ pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
+ except AttributeError:
+ pass
+ pbone = obj.pose.bones[bones['front_shin.L']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone = obj.pose.bones[bones['front_foot.L']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ pbone = obj.pose.bones[bones['front_toe.L']]
+ pbone.rigify_type = ''
+ pbone.lock_location = (False, False, False)
+ pbone.lock_rotation = (False, False, False)
+ pbone.lock_rotation_w = False
+ pbone.lock_scale = (False, False, False)
+ pbone.rotation_mode = 'QUATERNION'
+ try:
+ pbone.rigify_parameters.limb_type = "paw"
+ except AttributeError:
+ pass
+
+ bpy.ops.object.mode_set(mode='EDIT')
+ for bone in arm.edit_bones:
+ bone.select = False
+ bone.select_head = False
+ bone.select_tail = False
+ for b in bones:
+ bone = arm.edit_bones[bones[b]]
+ bone.select = True
+ bone.select_head = True
+ bone.select_tail = True
+ bone.bbone_x = bone.bbone_z = bone.length * 0.05
+ arm.edit_bones.active = bone
+
+ return bones
diff --git a/rigify/rigs/limbs/leg.py b/rigify/rigs/limbs/leg.py
index 2be7ff35..d1b82c15 100644
--- a/rigify/rigs/limbs/leg.py
+++ b/rigify/rigs/limbs/leg.py
@@ -44,6 +44,8 @@ ALL_TRUE = (True, True, True)
class Rig(BaseLimbRig):
"""Human leg rig."""
+ min_valid_orgs = max_valid_orgs = 4
+
def find_org_bones(self, bone):
bones = super().find_org_bones(bone)
@@ -57,9 +59,6 @@ class Rig(BaseLimbRig):
return bones
def initialize(self):
- if len(self.bones.org.main) != 4:
- self.raise_error("Input to rig type must be a chain of 4 bones.")
-
super().initialize()
self.pivot_type = self.params.foot_pivot_type
diff --git a/rigify/rigs/limbs/limb_rigs.py b/rigify/rigs/limbs/limb_rigs.py
index 2e3fbc90..1c57a597 100644
--- a/rigify/rigs/limbs/limb_rigs.py
+++ b/rigify/rigs/limbs/limb_rigs.py
@@ -50,6 +50,8 @@ class BaseLimbRig(BaseRig):
"""Common base for limb rigs."""
segmented_orgs = 2 # Number of org bones to segment
+ min_valid_orgs = None
+ max_valid_orgs = None
def find_org_bones(self, bone):
return BoneDict(
@@ -59,8 +61,11 @@ class BaseLimbRig(BaseRig):
def initialize(self):
orgs = self.bones.org.main
- if len(orgs) < self.segmented_orgs + 1:
- self.raise_error("Input to rig type must be a chain of at least 3 bones.")
+ min_length = max(self.segmented_orgs + 1, self.min_valid_orgs or 0)
+ if len(orgs) < min_length:
+ self.raise_error("Input to rig type must be a chain of at least {} bones.", min_length)
+ if self.max_valid_orgs and len(orgs) > self.max_valid_orgs:
+ self.raise_error("Input to rig type must be a chain of at most {} bones.", self.max_valid_orgs)
self.segments = self.params.segments
self.bbone_segments = self.params.bbones
@@ -161,6 +166,8 @@ class BaseLimbRig(BaseRig):
# IK stretch switch implementation.
# ik_target
# Corrected target position.
+ # ik_base
+ # Optionally the base of the ik chain (otherwise ctrl.ik_base)
# ik_end
# End of the IK chain: [ik_base, ik_end]
# deform[]:
@@ -242,8 +249,10 @@ class BaseLimbRig(BaseRig):
def make_fk_control_chain(self):
self.bones.ctrl.fk = map_list(self.make_fk_control_bone, count(0), self.bones.org.main)
+ fk_name_suffix_cutoff = 2
+
def get_fk_name(self, i, org, kind):
- return make_derived_name(org, kind, '_fk' if i <= 2 else '')
+ return make_derived_name(org, kind, '_fk' if i <= self.fk_name_suffix_cutoff else '')
def make_fk_control_bone(self, i, org):
return self.copy_bone(org, self.get_fk_name(i, org, 'ctrl'))
@@ -296,7 +305,7 @@ class BaseLimbRig(BaseRig):
self.bones.mch.fk = map_list(self.make_fk_parent_bone, count(0), self.bones.org.main)
def make_fk_parent_bone(self, i, org):
- if 2 <= i <= 3:
+ if i >= 2:
return self.copy_bone(org, self.get_fk_name(i, org, 'mch'), parent=True, scale=1/4)
@stage.parent_bones
@@ -307,7 +316,7 @@ class BaseLimbRig(BaseRig):
self.parent_fk_parent_bone(*args)
def parent_fk_parent_bone(self, i, parent_mch, prev_ctrl, org, prev_org):
- if i == 2:
+ if i >= 2:
self.set_bone_parent(parent_mch, prev_ctrl, use_connect=True, inherit_scale='NONE')
@stage.rig_bones
@@ -316,7 +325,7 @@ class BaseLimbRig(BaseRig):
self.rig_fk_parent_bone(*args)
def rig_fk_parent_bone(self, i, parent_mch, org):
- if i == 2:
+ if i >= 2:
self.make_constraint(parent_mch, 'COPY_SCALE', 'root', use_make_uniform=True)
@@ -329,10 +338,19 @@ class BaseLimbRig(BaseRig):
else:
return []
- def get_all_ik_controls(self):
+ def get_middle_ik_controls(self):
+ return []
+
+ def get_ik_fk_position_chains(self):
+ ik_chain = self.get_ik_output_chain()
+ return ik_chain, self.bones.ctrl.fk[0:len(ik_chain)]
+
+ def get_ik_control_chain(self):
ctrl = self.bones.ctrl
- controls = [ctrl.ik_base, ctrl.ik_pole, ctrl.ik]
- return controls + self.get_extra_ik_controls()
+ return [ctrl.ik_base, ctrl.ik_pole, *self.get_middle_ik_controls(), ctrl.ik]
+
+ def get_all_ik_controls(self):
+ return self.get_ik_control_chain() + self.get_extra_ik_controls()
@stage.generate_bones
def make_ik_controls(self):
@@ -371,6 +389,9 @@ class BaseLimbRig(BaseRig):
else:
return self.bones.ctrl.ik
+ def get_ik_pole_parents(self):
+ return [(self.bones.mch.ik_target, self.bones.ctrl.ik)]
+
def register_switch_parents(self, pbuilder):
if self.rig_parent_bone:
pbuilder.register_parent(self, self.rig_parent_bone)
@@ -385,7 +406,6 @@ class BaseLimbRig(BaseRig):
master = lambda: self.bones.ctrl.master
pcontrols = lambda: [ ctrl.master ] + self.get_all_ik_controls()
- pole_parents = lambda: [(self.bones.mch.ik_target, ctrl.ik)]
self.register_switch_parents(pbuilder)
@@ -395,7 +415,7 @@ class BaseLimbRig(BaseRig):
)
pbuilder.build_child(
- self, ctrl.ik_pole, prop_bone=master, extra_parents=pole_parents,
+ self, ctrl.ik_pole, prop_bone=master, extra_parents=self.get_ik_pole_parents,
prop_id='pole_parent', prop_name='Pole Parent', controls=pcontrols,
no_fix_rotation=True, no_fix_scale=True,
)
@@ -409,7 +429,6 @@ class BaseLimbRig(BaseRig):
base = self.get_bone(self.bones.ctrl.ik_base)
base.rotation_mode = 'ZXY'
base.lock_rotation = True, False, True
- base.ik_stretch = 0.1
@stage.rig_bones
def rig_ik_controls(self):
@@ -421,6 +440,9 @@ class BaseLimbRig(BaseRig):
set_bone_widget_transform(self.obj, ctrl.ik, self.get_ik_control_output())
+ if self.use_mch_ik_base:
+ set_bone_widget_transform(self.obj, ctrl.ik_base, self.bones.mch.ik_base, target_size=True)
+
self.make_ik_base_widget(ctrl.ik_base)
self.make_ik_pole_widget(ctrl.ik_pole)
self.make_ik_ctrl_widget(ctrl.ik)
@@ -475,19 +497,31 @@ class BaseLimbRig(BaseRig):
ik_input_head_tail = 0.0
+ use_mch_ik_base = False
+
def get_ik_input_bone(self):
return self.get_ik_control_output()
+ def get_ik_chain_base(self):
+ return self.bones.mch.ik_base if self.use_mch_ik_base else self.bones.ctrl.ik_base
+
def get_ik_output_chain(self):
- return [self.bones.ctrl.ik_base, self.bones.mch.ik_end, self.bones.mch.ik_target]
+ return [self.get_ik_chain_base(), self.bones.mch.ik_end, self.bones.mch.ik_target]
@stage.generate_bones
def make_ik_mch_chain(self):
orgs = self.bones.org.main
+
+ if self.use_mch_ik_base:
+ self.bones.mch.ik_base = self.make_ik_mch_base_bone(orgs)
+
self.bones.mch.ik_stretch = self.make_ik_mch_stretch_bone(orgs)
self.bones.mch.ik_target = self.make_ik_mch_target_bone(orgs)
self.bones.mch.ik_end = self.copy_bone(orgs[1], make_derived_name(orgs[1], 'mch', '_ik'))
+ def make_ik_mch_base_bone(self, orgs):
+ return self.copy_bone(orgs[0], make_derived_name(orgs[0], 'mch', '_ik'))
+
def make_ik_mch_stretch_bone(self, orgs):
name = self.copy_bone(orgs[0], make_derived_name(orgs[0], 'mch', '_ik_stretch'))
self.get_bone(name).tail = self.get_bone(orgs[2]).head
@@ -498,12 +532,24 @@ class BaseLimbRig(BaseRig):
@stage.parent_bones
def parent_ik_mch_chain(self):
+ if self.use_mch_ik_base:
+ self.set_bone_parent(self.bones.mch.ik_base, self.bones.ctrl.ik_base, inherit_scale='AVERAGE')
self.set_bone_parent(self.bones.mch.ik_stretch, self.bones.mch.follow)
self.set_bone_parent(self.bones.mch.ik_target, self.get_ik_input_bone())
- self.set_bone_parent(self.bones.mch.ik_end, self.bones.ctrl.ik_base)
+ self.set_bone_parent(self.bones.mch.ik_end, self.get_ik_chain_base())
@stage.configure_bones
def configure_ik_mch_chain(self):
+ bone = self.get_bone(self.get_ik_chain_base())
+ bone.ik_stretch = 0.1
+
+ bone = self.get_bone(self.bones.mch.ik_end)
+ bone.ik_stretch = 0.1
+ bone.lock_ik_x = bone.lock_ik_y = bone.lock_ik_z = True
+ setattr(bone, 'lock_ik_' + self.main_axis, False)
+
+ @stage.configure_bones
+ def configure_ik_mch_panel(self):
ctrl = self.bones.ctrl
panel = self.script.panel_with_selected_check(self, ctrl.flatten())
@@ -526,32 +572,34 @@ class BaseLimbRig(BaseRig):
def add_global_buttons(self, panel, rig_name):
ctrl = self.bones.ctrl
ik_chain = self.get_ik_output_chain()
+ fk_chain = ctrl.fk[0:len(ik_chain)]
add_generic_snap_fk_to_ik(
panel,
- fk_bones=self.bones.ctrl.fk[0:len(ik_chain)],
- ik_bones=ik_chain,
+ fk_bones=fk_chain, ik_bones=ik_chain,
ik_ctrl_bones=self.get_all_ik_controls(),
rig_name=rig_name
)
+ ik_chain, fk_chain = self.get_ik_fk_position_chains()
+
add_limb_snap_ik_to_fk(
panel,
master=ctrl.master,
- fk_bones=self.bones.ctrl.fk, ik_bones=ik_chain,
- ik_ctrl_bones=[ctrl.ik_base, ctrl.ik, ctrl.ik_pole],
+ fk_bones=fk_chain, ik_bones=ik_chain,
+ ik_ctrl_bones=self.get_ik_control_chain(),
ik_extra_ctrls=self.get_extra_ik_controls(),
rig_name=rig_name
)
def add_ik_only_buttons(self, panel, rig_name):
ctrl = self.bones.ctrl
- ik_chain = self.get_ik_output_chain()
+ ik_chain, fk_chain = self.get_ik_fk_position_chains()
add_limb_toggle_pole(
panel, master=ctrl.master,
ik_bones=ik_chain,
- ik_ctrl_bones=[ctrl.ik_base, ctrl.ik, ctrl.ik_pole],
+ ik_ctrl_bones=self.get_ik_control_chain(),
ik_extra_ctrls=self.get_extra_ik_controls(),
)
@@ -560,35 +608,35 @@ class BaseLimbRig(BaseRig):
mch = self.bones.mch
input_bone = self.get_ik_input_bone()
- self.rig_ik_mch_stretch_bone(mch.ik_stretch, input_bone)
- self.rig_ik_mch_target_bone(mch.ik_target, mch.ik_stretch, input_bone)
+ self.rig_ik_mch_stretch_bones(mch.ik_target, mch.ik_stretch, input_bone, self.ik_input_head_tail, 2)
self.rig_ik_mch_end_bone(mch.ik_end, mch.ik_target, self.bones.ctrl.ik_pole)
- def rig_ik_mch_stretch_bone(self, mch_stretch, input_bone):
- self.make_constraint(mch_stretch, 'STRETCH_TO', input_bone, head_tail=self.ik_input_head_tail, keep_axis='SWING_Y')
+ def rig_ik_mch_stretch_bones(self, mch_target, mch_stretch, input_bone, head_tail, org_count, bias=1.035):
+ # Compute increase in length to fully straighten
+ orgs = self.bones.org.main[0:org_count]
+ len_cur = (self.get_bone(orgs[-1]).tail - self.get_bone(orgs[0]).head).length
+ len_full = sum(self.get_bone(org).length for org in orgs)
+ len_scale = len_full / len_cur
+
+ # Limited stretch on the stretch bone
+ self.make_constraint(mch_stretch, 'STRETCH_TO', input_bone, head_tail=head_tail, keep_axis='SWING_Y')
- con = self.make_constraint(mch_stretch, 'LIMIT_SCALE', min_y=0.0, max_y=1.05, owner_space='LOCAL')
+ con = self.make_constraint(mch_stretch, 'LIMIT_SCALE', min_y=0.0, max_y=len_scale*bias, owner_space='LOCAL')
self.make_driver(con, "influence", variables=[(self.prop_bone, 'IK_Stretch')], polynomial=[1.0, -1.0])
- def rig_ik_mch_target_bone(self, mch_target, mch_stretch, input_bone):
+ # Snap the target to the end of the stretch bone
self.make_constraint(mch_target, 'COPY_LOCATION', mch_stretch, head_tail=1.0)
- def rig_ik_mch_end_bone(self, mch_ik, mch_target, ctrl_pole):
- bone = self.get_bone(mch_ik)
- bone.ik_stretch = 0.1
-
- bone.lock_ik_x = bone.lock_ik_y = bone.lock_ik_z = True
- setattr(bone, 'lock_ik_' + self.main_axis, False)
-
+ def rig_ik_mch_end_bone(self, mch_ik, mch_target, ctrl_pole, chain=2):
con = self.make_constraint(
- mch_ik, 'IK', mch_target, chain_count=2,
+ mch_ik, 'IK', mch_target, chain_count=chain,
)
self.make_driver(con, "mute", variables=[(self.prop_bone, 'pole_vector')], polynomial=[0.0, 1.0])
con_pole = self.make_constraint(
- mch_ik, 'IK', mch_target, chain_count=2,
+ mch_ik, 'IK', mch_target, chain_count=chain,
pole_target=self.obj, pole_subtarget=ctrl_pole, pole_angle=self.pole_angle,
)
@@ -901,26 +949,32 @@ class RigifyLimbIk2FkBase:
if use_pole:
match_pole_target(
context.view_layer,
- ik_bones[0], ik_bones[1], ctrl_bones[2], matrices[0],
+ ik_bones[0], ik_bones[1], ctrl_bones[1], matrices[0],
(ik_bones[0].length + ik_bones[1].length)
)
else:
- correct_rotation(context.view_layer, ctrl_bones[0], matrices[0])
+ correct_rotation(context.view_layer, ik_bones[0], matrices[0], ctrl_ik=ctrl_bones[0])
+
+ def assign_middle_controls(self, context, obj, matrices, ik_bones, ctrl_bones, *, lock=False, keyflags=None):
+ for mat, ik, ctrl in reversed(list(zip(matrices[2:-1], ik_bones[2:-1], ctrl_bones[2:-1]))):
+ ctrl.bone.use_inherit_rotation = not lock
+ ctrl.bone.inherit_scale = 'NONE' if lock else 'FULL'
+ context.view_layer.update()
+ mat = convert_pose_matrix_via_rest_delta(mat, ik, ctrl)
+ set_transform_from_matrix(obj, ctrl.name, mat, keyflags=keyflags)
def apply_frame_state(self, context, obj, matrices):
ik_bones = [ obj.pose.bones[k] for k in self.ik_bone_list ]
ctrl_bones = [ obj.pose.bones[k] for k in self.ctrl_bone_list ]
- use_pole = len(ctrl_bones) > 2 and self.get_use_pole(obj)
+ use_pole = self.get_use_pole(obj)
# Set the end control position
- tgt_matrix = ik_bones[2].bone.matrix_local
- ctrl_matrix = ctrl_bones[1].bone.matrix_local
- endmat = matrices[2] @ tgt_matrix.inverted() @ ctrl_matrix
+ endmat = convert_pose_matrix_via_rest_delta(matrices[-1], ik_bones[-1], ctrl_bones[-1])
set_transform_from_matrix(
- obj, self.ctrl_bone_list[1], endmat, keyflags=self.keyflags
+ obj, self.ctrl_bone_list[-1], endmat, keyflags=self.keyflags
)
# Remove foot heel transform, if present
@@ -937,15 +991,22 @@ class RigifyLimbIk2FkBase:
no_scale=True, no_rot=use_pole,
)
+ # Lock middle control transforms (first pass)
+ self.assign_middle_controls(context, obj, matrices, ik_bones, ctrl_bones, lock=True)
+
+ # Adjust the base bone state
self.compute_base_rotation(context, ik_bones, ctrl_bones, matrices, use_pole)
- correct_scale(context.view_layer, ctrl_bones[0], matrices[0])
+ correct_scale(context.view_layer, ik_bones[0], matrices[0], ctrl_ik=ctrl_bones[0])
+
+ # Assign middle control transforms (final pass)
+ self.assign_middle_controls(context, obj, matrices, ik_bones, ctrl_bones, keyflags=self.keyflags)
# Keyframe controls
if self.keyflags is not None:
if use_pole:
keyframe_transform_properties(
- obj, self.ctrl_bone_list[2], self.keyflags,
+ obj, self.ctrl_bone_list[1], self.keyflags,
no_rot=True, no_scale=True,
)
@@ -1015,11 +1076,17 @@ class RigifyLimbTogglePoleBase(RigifyLimbIk2FkBase):
keyflags=self.keyflags_switch
)
+ # Lock middle control transforms
+ self.assign_middle_controls(context, obj, matrices, ik_bones, ctrl_bones, lock=True)
+
# Reset the base bone rotation
set_pose_rotation(ctrl_bones[0], Matrix.Identity(4))
self.compute_base_rotation(context, ik_bones, ctrl_bones, matrices, self.use_pole)
+ # Assign middle control transforms (final pass)
+ self.assign_middle_controls(context, obj, matrices, ik_bones, ctrl_bones, keyflags=self.keyflags)
+
# Keyframe controls
if self.keyflags is not None:
if self.use_pole:
diff --git a/rigify/rigs/limbs/paw.py b/rigify/rigs/limbs/paw.py
index 4f6acaa8..7f9fcfe5 100644
--- a/rigify/rigs/limbs/paw.py
+++ b/rigify/rigs/limbs/paw.py
@@ -23,6 +23,7 @@ import bpy
from ...utils.bones import compute_chain_x_axis, align_bone_x_axis, align_bone_z_axis
from ...utils.bones import align_bone_to_axis, flip_bone
from ...utils.naming import make_derived_name
+from ...utils.widgets_basic import create_circle_widget, create_limb_widget
from ..widgets import create_foot_widget, create_ballsocket_widget
@@ -32,13 +33,19 @@ from .limb_rigs import BaseLimbRig
class Rig(BaseLimbRig):
- """Paw rig."""
+ """Paw rig with an optional second heel control."""
segmented_orgs = 3
+ min_valid_orgs = 4
+ max_valid_orgs = 5
+ toe_bone_index = 3
def initialize(self):
- if len(self.bones.org.main) != 4:
- self.raise_error("Input to rig type must be a chain of 4 bones.")
+ self.use_heel2 = len(self.bones.org.main) > 4
+
+ if self.use_heel2:
+ self.toe_bone_index = 4
+ self.fk_name_suffix_cutoff = 3
super().initialize()
@@ -61,6 +68,20 @@ class Rig(BaseLimbRig):
align_bone_z_axis(self.obj, orgs[2], foot_x)
align_bone_z_axis(self.obj, orgs[3], -foot_x)
+ ####################################################
+ # Utilities
+
+ def align_ik_control_bone(self, name):
+ if self.params.rotation_axis == 'automatic' or self.params.auto_align_extremity:
+ align_bone_to_axis(self.obj, name, 'y', flip=True)
+
+ else:
+ flip_bone(self.obj, name)
+
+ bone = self.get_bone(name)
+ bone.tail[2] = bone.head[2]
+ bone.roll = 0
+
####################################################
# EXTRA BONES
@@ -68,32 +89,35 @@ class Rig(BaseLimbRig):
# ctrl:
# heel:
# Foot heel control
+ # heel2 (optional):
+ # Second foot heel control
# mch:
# toe_socket:
# IK toe orientation bone.
+ # ik_heel2 (optional):
+ # Final position of heel2 in the IK output.
#
####################################################
####################################################
# IK controls
+ def get_middle_ik_controls(self):
+ return [self.bones.ctrl.heel] if self.use_heel2 else []
+
def get_extra_ik_controls(self):
- return super().get_extra_ik_controls() + [self.bones.ctrl.heel]
+ extra = [self.bones.ctrl.heel2] if self.use_heel2 else [self.bones.ctrl.heel]
+ return super().get_extra_ik_controls() + extra
def make_ik_control_bone(self, orgs):
- name = self.copy_bone(orgs[3], make_derived_name(orgs[2], 'ctrl', '_ik'))
+ return self.make_paw_ik_control_bone(orgs[-2], orgs[-1], orgs[2])
- if self.params.rotation_axis == 'automatic' or self.params.auto_align_extremity:
- align_bone_to_axis(self.obj, name, 'y', flip=True)
+ def make_paw_ik_control_bone(self, org_one, org_two, org_name):
+ name = self.copy_bone(org_two, make_derived_name(org_name, 'ctrl', '_ik'))
- else:
- flip_bone(self.obj, name)
+ self.align_ik_control_bone(name)
- bone = self.get_bone(name)
- bone.tail[2] = bone.head[2]
- bone.roll = 0
-
- vec = self.get_bone(orgs[3]).tail - self.get_bone(orgs[2]).head
+ vec = self.get_bone(org_two).tail - self.get_bone(org_one).head
self.get_bone(name).length = self.vector_without_z(vec).length
return name
@@ -120,13 +144,15 @@ class Rig(BaseLimbRig):
@stage.parent_bones
def parent_heel_control_bone(self):
- self.set_bone_parent(self.bones.ctrl.heel, self.get_ik_control_output())
+ if self.use_heel2:
+ self.set_bone_parent(self.bones.ctrl.heel, self.bones.ctrl.heel2)
+ else:
+ self.set_bone_parent(self.bones.ctrl.heel, self.get_ik_control_output())
@stage.configure_bones
def configure_heel_control_bone(self):
bone = self.get_bone(self.bones.ctrl.heel)
bone.lock_location = True, True, True
- bone.lock_scale = True, True, True
@stage.generate_widgets
def generate_heel_control_widget(self):
@@ -134,23 +160,67 @@ class Rig(BaseLimbRig):
####################################################
+ # Second Heel control
+
+ @stage.generate_bones
+ def make_heel2_control_bone(self):
+ if self.use_heel2:
+ org = self.bones.org.main[3]
+ name = self.copy_bone(org, make_derived_name(org, 'ctrl', '_ik'))
+ self.bones.ctrl.heel2 = name
+
+ flip_bone(self.obj, name)
+
+ @stage.parent_bones
+ def parent_heel2_control_bone(self):
+ if self.use_heel2:
+ self.set_bone_parent(self.bones.ctrl.heel2, self.get_ik_control_output())
+
+ @stage.configure_bones
+ def configure_heel2_control_bone(self):
+ if self.use_heel2:
+ bone = self.get_bone(self.bones.ctrl.heel2)
+ bone.lock_location = True, True, True
+
+ @stage.generate_widgets
+ def generate_heel2_control_widget(self):
+ if self.use_heel2:
+ create_ballsocket_widget(self.obj, self.bones.ctrl.heel2)
+
+
+ ####################################################
+ # FK control chain
+
+ def make_fk_control_widget(self, i, ctrl):
+ if i < self.toe_bone_index - 1:
+ create_limb_widget(self.obj, ctrl)
+ elif i == self.toe_bone_index - 1:
+ create_circle_widget(self.obj, ctrl, radius=0.4, head_tail=0.0)
+ else:
+ create_circle_widget(self.obj, ctrl, radius=0.4, head_tail=0.5)
+
+
+ ####################################################
# FK parents MCH chain
@stage.generate_bones
def make_toe_socket_bone(self):
- org = self.bones.org.main[3]
+ org = self.bones.org.main[self.toe_bone_index]
self.bones.mch.toe_socket = self.copy_bone(org, make_derived_name(org, 'mch', '_ik_socket'))
+ @stage.parent_bones
+ def parent_toe_socket_bone(self):
+ self.set_bone_parent(self.bones.mch.toe_socket, self.get_ik_control_output())
+
def parent_fk_parent_bone(self, i, parent_mch, prev_ctrl, org, prev_org):
- if i == 3:
+ if i == self.toe_bone_index:
self.set_bone_parent(parent_mch, prev_org, use_connect=True)
- self.set_bone_parent(self.bones.mch.toe_socket, self.get_ik_control_output())
else:
super().parent_fk_parent_bone(i, parent_mch, prev_ctrl, org, prev_org)
def rig_fk_parent_bone(self, i, parent_mch, org):
- if i == 3:
+ if i == self.toe_bone_index:
con = self.make_constraint(parent_mch, 'COPY_TRANSFORMS', self.bones.mch.toe_socket)
self.make_driver(con, 'influence', variables=[(self.prop_bone, 'IK_FK')], polynomial=[1.0, -1.0])
@@ -175,6 +245,30 @@ class Rig(BaseLimbRig):
####################################################
+ # IK heel2 output
+
+ def get_ik_output_chain(self):
+ tail = [self.bones.mch.ik_heel2] if self.use_heel2 else []
+ return super().get_ik_output_chain() + tail
+
+ @stage.generate_bones
+ def make_ik_heel2_bone(self):
+ if self.use_heel2:
+ orgs = self.bones.org.main
+ self.bones.mch.ik_heel2 = self.copy_bone(orgs[3], make_derived_name(orgs[3], 'mch', '_ik_out'))
+
+ @stage.parent_bones
+ def parent_ik_heel2_bone(self):
+ if self.use_heel2:
+ self.set_bone_parent(self.bones.mch.ik_heel2, self.bones.ctrl.heel2)
+
+ @stage.rig_bones
+ def rig_ik_heel2_bone(self):
+ if self.use_heel2:
+ self.make_constraint(self.bones.mch.ik_heel2, 'COPY_LOCATION', self.bones.mch.ik_target, head_tail=1)
+
+
+ ####################################################
# Deform chain
def rig_deform_bone(self, i, deform, entry, next_entry, tweak, next_tweak):
@@ -284,3 +378,5 @@ def create_sample(obj):
bone.select_head = True
bone.select_tail = True
arm.edit_bones.active = bone
+
+ return bones
diff --git a/rigify/rigs/limbs/rear_paw.py b/rigify/rigs/limbs/rear_paw.py
index 2d6894e1..5c1bf5c8 100644
--- a/rigify/rigs/limbs/rear_paw.py
+++ b/rigify/rigs/limbs/rear_paw.py
@@ -1,300 +1,194 @@
+#====================== 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 .paw import Rig as pawRig
+from ...utils.bones import align_bone_roll
+from ...utils.naming import make_derived_name
+from ...utils.misc import map_list
+
+from itertools import count
+from ...base_rig import stage
-IMPLEMENTATION = True # Include and set True if Rig is just an implementation for a wrapper class
- # add_parameters and parameters_ui are unused for implementation classes
+from .limb_rigs import BaseLimbRig
+from .paw import Rig as pawRig, create_sample as create_paw_sample
class Rig(pawRig):
- pass
+ """Rear paw rig with special IK automation."""
+
+ ####################################################
+ # EXTRA BONES
+ #
+ # mch:
+ # ik2_stretch, ik2_target
+ # Three bone IK stretch limit
+ # ik2_chain[2]
+ # Second IK system (pre-driving thigh and ik3)
+ # ik3_chain[2]
+ # Third IK system (pre-driving heel)
+ #
+ ####################################################
+
+ ####################################################
+ # IK controls
+
+ def get_middle_ik_controls(self):
+ return [self.bones.ctrl.heel]
+
+ def get_ik_fk_position_chains(self):
+ ik_chain, fk_chain = super().get_ik_fk_position_chains()
+ if not self.use_heel2:
+ return [*ik_chain, ik_chain[-1]], [*fk_chain, fk_chain[-1]]
+ return ik_chain, fk_chain
+
+ def get_extra_ik_controls(self):
+ extra = [self.bones.ctrl.heel2] if self.use_heel2 else []
+ return BaseLimbRig.get_extra_ik_controls(self) + extra
+
+ def get_ik_pole_parents(self):
+ return [(self.bones.mch.ik2_target, self.bones.ctrl.ik)]
+
+
+ ####################################################
+ # Heel control
+
+ @stage.parent_bones
+ def parent_heel_control_bone(self):
+ self.set_bone_parent(self.bones.ctrl.heel, self.bones.mch.ik3_chain[-1])
+
+
+ ####################################################
+ # Second IK system (pre-driving thigh)
+
+ use_mch_ik_base = True
+
+ def get_ik2_input_bone(self):
+ return self.bones.ctrl.heel2 if self.use_heel2 else self.bones.mch.toe_socket
+
+ @stage.generate_bones
+ def make_ik2_mch_stretch(self):
+ orgs = self.bones.org.main
+
+ self.bones.mch.ik2_stretch = self.make_ik2_mch_stretch_bone(orgs)
+ self.bones.mch.ik2_target = self.make_ik2_mch_target_bone(orgs)
+
+ def make_ik2_mch_stretch_bone(self, orgs):
+ name = self.copy_bone(orgs[0], make_derived_name(orgs[0], 'mch', '_ik2_stretch'))
+ self.get_bone(name).tail = self.get_bone(orgs[3]).head
+ return name
+
+ def make_ik2_mch_target_bone(self, orgs):
+ return self.copy_bone(orgs[3], make_derived_name(orgs[0], 'mch', '_ik2_target'), scale=1/2)
+
+ @stage.generate_bones
+ def make_ik2_mch_chain(self):
+ orgs = self.bones.org.main
+ chain = map_list(self.make_ik2_mch_bone, count(0), orgs[0:2])
+ self.bones.mch.ik2_chain = chain
+
+ org_bones = map_list(self.get_bone, orgs)
+ chain_bones = map_list(self.get_bone, chain)
+
+ # Extend the base IK control (used in the ik2 chain) with the projected length of org2
+ chain_bones[0].length += org_bones[2].vector.dot(chain_bones[0].vector.normalized())
+ chain_bones[1].head = chain_bones[0].tail
+ chain_bones[1].tail = org_bones[2].tail
+ align_bone_roll(self.obj, chain[1], orgs[1])
+
+ def make_ik2_mch_bone(self, i, org):
+ return self.copy_bone(org, make_derived_name(org, 'mch', '_ik2'))
+
+ @stage.parent_bones
+ def parent_ik2_mch_chain(self):
+ mch = self.bones.mch
+ self.set_bone_parent(mch.ik2_stretch, mch.follow)
+ self.set_bone_parent(mch.ik2_target, self.get_ik2_input_bone())
+ self.set_bone_parent(mch.ik2_chain[0], self.bones.ctrl.ik_base, inherit_scale='AVERAGE')
+ self.parent_bone_chain(mch.ik2_chain, use_connect=True)
+
+ @stage.configure_bones
+ def configure_ik2_mch_chain(self):
+ for i, mch in enumerate(self.bones.mch.ik2_chain):
+ self.configure_ik2_mch_bone(i, mch)
+
+ def configure_ik2_mch_bone(self, i, mch):
+ bone = self.get_bone(mch)
+ bone.ik_stretch = 0.1
+ if i == 1:
+ bone.lock_ik_x = bone.lock_ik_y = bone.lock_ik_z = True
+ setattr(bone, 'lock_ik_' + self.main_axis, False)
+
+ @stage.rig_bones
+ def rig_ik2_mch_chain(self):
+ mch = self.bones.mch
+ input_bone = self.get_ik2_input_bone()
+ head_tail = 1 if self.use_heel2 else 0
+
+ self.rig_ik_mch_stretch_bones(mch.ik2_target, mch.ik2_stretch, input_bone, head_tail, 3)
+ self.rig_ik_mch_end_bone(mch.ik2_chain[-1], mch.ik2_target, self.bones.ctrl.ik_pole)
+
+
+ ####################################################
+ # Third IK system (pre-driving heel control)
+
+ @stage.generate_bones
+ def make_ik3_mch_chain(self):
+ self.bones.mch.ik3_chain = map_list(self.make_ik3_mch_bone, count(0), self.bones.org.main[1:3])
+
+ def make_ik3_mch_bone(self, i, org):
+ return self.copy_bone(org, make_derived_name(org, 'mch', '_ik3'))
+
+ @stage.parent_bones
+ def parent_ik3_mch_chain(self):
+ mch = self.bones.mch
+
+ self.set_bone_parent(mch.ik3_chain[0], mch.ik2_chain[0])
+ self.parent_bone_chain(mch.ik3_chain, use_connect=True)
+
+ @stage.configure_bones
+ def configure_ik3_mch_chain(self):
+ for i, mch in enumerate(self.bones.mch.ik3_chain):
+ self.configure_ik3_mch_bone(i, mch)
+
+ def configure_ik3_mch_bone(self, i, mch):
+ bone = self.get_bone(mch)
+ bone.ik_stretch = 0.1
+ if i == 0:
+ bone.lock_ik_x = bone.lock_ik_y = bone.lock_ik_z = True
+ setattr(bone, 'lock_ik_' + self.main_axis, False)
+
+ @stage.rig_bones
+ def rig_ik3_mch_chain(self):
+ mch = self.bones.mch
+ # Mostly cancel ik2 scaling.
+ self.make_constraint(
+ mch.ik3_chain[0], 'COPY_SCALE', self.bones.ctrl.ik_base,
+ use_make_uniform=True, influence=0.75,
+ )
+ self.make_constraint(mch.ik3_chain[-1], 'IK', mch.ik2_target, chain_count=2)
def create_sample(obj):
- # generated by rigify.utils.write_metarig
- bpy.ops.object.mode_set(mode='EDIT')
- arm = obj.data
-
- bones = {}
-
- bone = arm.edit_bones.new('thigh.L')
- bone.head[:] = 0.0291, 0.1181, 0.2460
- bone.tail[:] = 0.0293, 0.1107, 0.1682
- bone.roll = 3.1383
- bone.use_connect = False
- bones['thigh.L'] = bone.name
- bone = arm.edit_bones.new('shin.L')
- bone.head[:] = 0.0293, 0.1107, 0.1682
- bone.tail[:] = 0.0293, 0.1684, 0.1073
- bone.roll = 3.1416
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['thigh.L']]
- bones['shin.L'] = bone.name
- bone = arm.edit_bones.new('foot.L')
- bone.head[:] = 0.0293, 0.1684, 0.1073
- bone.tail[:] = 0.0293, 0.1530, 0.0167
- bone.roll = 3.1416
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['shin.L']]
- bones['foot.L'] = bone.name
- bone = arm.edit_bones.new('r_toe.L')
- bone.head[:] = 0.0293, 0.1530, 0.0167
- bone.tail[:] = 0.0293, 0.1224, 0.0167
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['foot.L']]
- bones['r_toe.L'] = bone.name
- bone = arm.edit_bones.new('r_palm.001.L')
- bone.head[:] = 0.0220, 0.1457, 0.0123
- bone.tail[:] = 0.0215, 0.1401, 0.0123
- bone.roll = 0.0014
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_toe.L']]
- bones['r_palm.001.L'] = bone.name
- bone = arm.edit_bones.new('r_palm.002.L')
- bone.head[:] = 0.0297, 0.1458, 0.0123
- bone.tail[:] = 0.0311, 0.1393, 0.0123
- bone.roll = -0.0005
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_toe.L']]
- bones['r_palm.002.L'] = bone.name
- bone = arm.edit_bones.new('r_palm.003.L')
- bone.head[:] = 0.0363, 0.1473, 0.0123
- bone.tail[:] = 0.0376, 0.1407, 0.0123
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_toe.L']]
- bones['r_palm.003.L'] = bone.name
- bone = arm.edit_bones.new('r_palm.004.L')
- bone.head[:] = 0.0449, 0.1501, 0.0123
- bone.tail[:] = 0.0466, 0.1479, 0.0123
- bone.roll = -0.0004
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_toe.L']]
- bones['r_palm.004.L'] = bone.name
- bone = arm.edit_bones.new('r_index.001.L')
- bone.head[:] = 0.0215, 0.1367, 0.0087
- bone.tail[:] = 0.0217, 0.1325, 0.0070
- bone.roll = -0.3427
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_palm.001.L']]
- bones['r_index.001.L'] = bone.name
- bone = arm.edit_bones.new('r_middle.001.L')
- bone.head[:] = 0.0311, 0.1358, 0.0117
- bone.tail[:] = 0.0324, 0.1297, 0.0092
- bone.roll = -1.0029
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_palm.002.L']]
- bones['r_middle.001.L'] = bone.name
- bone = arm.edit_bones.new('r_ring.001.L')
- bone.head[:] = 0.0376, 0.1372, 0.0117
- bone.tail[:] = 0.0389, 0.1311, 0.0092
- bone.roll = -1.0029
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_palm.003.L']]
- bones['r_ring.001.L'] = bone.name
- bone = arm.edit_bones.new('r_pinky.001.L')
- bone.head[:] = 0.0466, 0.1444, 0.0083
- bone.tail[:] = 0.0476, 0.1412, 0.0074
- bone.roll = -1.7551
- bone.use_connect = False
- bone.parent = arm.edit_bones[bones['r_palm.004.L']]
- bones['r_pinky.001.L'] = bone.name
- bone = arm.edit_bones.new('r_index.002.L')
- bone.head[:] = 0.0217, 0.1325, 0.0070
- bone.tail[:] = 0.0221, 0.1271, 0.0038
- bone.roll = -0.2465
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['r_index.001.L']]
- bones['r_index.002.L'] = bone.name
- bone = arm.edit_bones.new('r_middle.002.L')
- bone.head[:] = 0.0324, 0.1297, 0.0092
- bone.tail[:] = 0.0343, 0.1210, 0.0039
- bone.roll = -0.7479
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['r_middle.001.L']]
- bones['r_middle.002.L'] = bone.name
- bone = arm.edit_bones.new('r_ring.002.L')
- bone.head[:] = 0.0389, 0.1311, 0.0092
- bone.tail[:] = 0.0407, 0.1229, 0.0042
- bone.roll = -0.7479
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['r_ring.001.L']]
- bones['r_ring.002.L'] = bone.name
- bone = arm.edit_bones.new('r_pinky.002.L')
- bone.head[:] = 0.0476, 0.1412, 0.0074
- bone.tail[:] = 0.0494, 0.1351, 0.0032
- bone.roll = -0.8965
- bone.use_connect = True
- bone.parent = arm.edit_bones[bones['r_pinky.001.L']]
- bones['r_pinky.002.L'] = bone.name
-
- bpy.ops.object.mode_set(mode='OBJECT')
+ bones = create_paw_sample(obj)
pbone = obj.pose.bones[bones['thigh.L']]
- pbone.rigify_type = 'limbs.paw'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- try:
- pbone.rigify_parameters.limb_type = "paw"
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.fk_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- try:
- pbone.rigify_parameters.segments = 2
- except AttributeError:
- pass
- pbone = obj.pose.bones[bones['shin.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['foot.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_toe.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_palm.001.L']]
- pbone.rigify_type = 'limbs.super_palm'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_palm.002.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_palm.003.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_palm.004.L']]
- pbone.rigify_type = 'limbs.super_palm'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_index.001.L']]
- pbone.rigify_type = 'limbs.simple_tentacle'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- try:
- pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- pbone = obj.pose.bones[bones['r_middle.001.L']]
- pbone.rigify_type = 'limbs.simple_tentacle'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- try:
- pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- pbone = obj.pose.bones[bones['r_ring.001.L']]
- pbone.rigify_type = 'limbs.simple_tentacle'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- try:
- pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- pbone = obj.pose.bones[bones['r_pinky.001.L']]
- pbone.rigify_type = 'limbs.simple_tentacle'
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- try:
- pbone.rigify_parameters.tweak_layers = [False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]
- except AttributeError:
- pass
- pbone = obj.pose.bones[bones['r_index.002.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_middle.002.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_ring.002.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
- pbone = obj.pose.bones[bones['r_pinky.002.L']]
- pbone.rigify_type = ''
- pbone.lock_location = (False, False, False)
- pbone.lock_rotation = (False, False, False)
- pbone.lock_rotation_w = False
- pbone.lock_scale = (False, False, False)
- pbone.rotation_mode = 'QUATERNION'
-
- bpy.ops.object.mode_set(mode='EDIT')
- for bone in arm.edit_bones:
- bone.select = False
- bone.select_head = False
- bone.select_tail = False
- for b in bones:
- bone = arm.edit_bones[bones[b]]
- bone.select = True
- bone.select_head = True
- bone.select_tail = True
- arm.edit_bones.active = bone
-
- for eb in arm.edit_bones:
- if ('thigh' in eb.name) or ('shin' in eb.name) or ('foot' in eb.name) or ('toe' in eb.name):
- eb.layers = (False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)
- else:
- eb.layers = (False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)
- arm.layers = (False, False, False, False, False, True, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)
-
-
-if __name__ == "__main__":
- create_sample(bpy.context.active_object)
+ pbone.rigify_type = 'limbs.rear_paw'
+ return bones
diff --git a/rigify/utils/bones.py b/rigify/utils/bones.py
index f0341a8f..f0e5e388 100644
--- a/rigify/utils/bones.py
+++ b/rigify/utils/bones.py
@@ -659,13 +659,15 @@ def align_bone_to_axis(obj, bone_name, axis, *, length=None, roll=0, flip=False)
bone_e.roll = roll
-def set_bone_widget_transform(obj, bone_name, transform_bone, use_size=True, scale=1.0):
+def set_bone_widget_transform(obj, bone_name, transform_bone, use_size=True, scale=1.0, target_size=False):
assert obj.mode != 'EDIT'
bone = obj.pose.bones[bone_name]
if transform_bone and transform_bone != bone_name:
- bone.custom_shape_transform = obj.pose.bones[transform_bone]
+ bone.custom_shape_transform = bone2 = obj.pose.bones[transform_bone]
+ if use_size and target_size:
+ scale *= bone2.length / bone.length
else:
bone.custom_shape_transform = None