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
diff options
context:
space:
mode:
authorLucio Rossi <lucio.rossi75@gmail.com>2017-06-02 20:09:56 +0300
committerLucio Rossi <lucio.rossi75@gmail.com>2017-06-02 20:10:53 +0300
commit120645a7ffb6a4ce3593180395eaf43c7a7144a0 (patch)
treef8bea507a81d313cf0aff15e3d588aeae2fd4fb9
parent45ec026d602e95a17a843624b8872b57749382ea (diff)
Rigify 0.5: basic and animals metarigs. metarig custom multi-menu. minor wgt reposition and shapes
-rw-r--r--rigify/metarig_menu.py105
-rw-r--r--rigify/rigs/limbs/paw.py6
-rw-r--r--rigify/rigs/spines/super_spine.py55
-rw-r--r--rigify/utils.py156
4 files changed, 271 insertions, 51 deletions
diff --git a/rigify/metarig_menu.py b/rigify/metarig_menu.py
index 4bdf2701..0c917c40 100644
--- a/rigify/metarig_menu.py
+++ b/rigify/metarig_menu.py
@@ -26,11 +26,23 @@ import bpy
from . import utils
-def get_metarig_list(path):
+class ArmatureSubMenu(bpy.types.Menu):
+ # bl_idname = 'ARMATURE_MT_armature_class'
+
+ def draw(self, context):
+ layout = self.layout
+ layout.label(self.bl_label)
+ for op, name in self.operators:
+ text = capwords(name.replace("_", " ")) + " (Meta-Rig)"
+ layout.operator(op, icon='OUTLINER_OB_ARMATURE', text=text)
+
+
+def get_metarig_list(path, depth=0):
""" Searches for metarig modules, and returns a list of the
imported modules.
"""
metarigs = []
+ metarigs_dict = dict()
MODULE_DIR = os.path.dirname(__file__)
METARIG_DIR_ABS = os.path.join(MODULE_DIR, utils.METARIG_DIR)
SEARCH_DIR_ABS = os.path.join(METARIG_DIR_ABS, path)
@@ -39,8 +51,12 @@ def get_metarig_list(path):
for f in files:
# Is it a directory?
- if os.path.isdir(os.path.join(SEARCH_DIR_ABS, f)):
- continue
+ complete_path = os.path.join(SEARCH_DIR_ABS, f)
+ if os.path.isdir(complete_path) and depth == 0:
+ if f[0] != '_':
+ metarigs_dict[f] = get_metarig_list(f, depth=1)
+ else:
+ continue
elif not f.endswith(".py"):
continue
elif f == "__init__.py":
@@ -48,10 +64,18 @@ def get_metarig_list(path):
else:
module_name = f[:-3]
try:
- metarigs += [utils.get_metarig_module(module_name)]
+ if depth == 1:
+ metarigs += [utils.get_metarig_module(module_name, utils.METARIG_DIR + '.' + path)]
+ else:
+ metarigs += [utils.get_metarig_module(module_name, utils.METARIG_DIR)]
except (ImportError):
pass
- return metarigs
+
+ if depth == 1:
+ return metarigs
+
+ metarigs_dict[utils.METARIG_DIR] = metarigs
+ return metarigs_dict
def make_metarig_add_execute(m):
@@ -85,41 +109,72 @@ def make_metarig_menu_func(bl_idname, text):
return metarig_menu
+def make_submenu_func(bl_idname, text):
+ def metarig_menu(self, context):
+ self.layout.menu(bl_idname, icon='OUTLINER_OB_ARMATURE', text=text)
+ return metarig_menu
+
+
# Get the metarig modules
-metarigs = get_metarig_list("")
+metarigs_dict = get_metarig_list("")
+print(metarigs_dict)
+armature_submenus = []
# Create metarig add Operators
-metarig_ops = []
-for m in metarigs:
- name = m.__name__.rsplit('.', 1)[1]
+metarig_ops = {}
+for metarig_class in metarigs_dict:
+ metarig_ops[metarig_class] = []
+ for m in metarigs_dict[metarig_class]:
+ name = m.__name__.rsplit('.', 1)[1]
- # Dynamically construct an Operator
- T = type("Add_" + name + "_Metarig", (bpy.types.Operator,), {})
- T.bl_idname = "object.armature_" + name + "_metarig_add"
- T.bl_label = "Add " + name.replace("_", " ").capitalize() + " (metarig)"
- T.bl_options = {'REGISTER', 'UNDO'}
- T.execute = make_metarig_add_execute(m)
+ # Dynamically construct an Operator
+ T = type("Add_" + name + "_Metarig", (bpy.types.Operator,), {})
+ T.bl_idname = "object.armature_" + name + "_metarig_add"
+ T.bl_label = "Add " + name.replace("_", " ").capitalize() + " (metarig)"
+ T.bl_options = {'REGISTER', 'UNDO'}
+ T.execute = make_metarig_add_execute(m)
- metarig_ops.append((T, name))
+ metarig_ops[metarig_class].append((T, name))
-# Create menu functions
menu_funcs = []
-for mop, name in metarig_ops:
- text = capwords(name.replace("_", " ")) + " (Meta-Rig)"
- menu_funcs += [make_metarig_menu_func(mop.bl_idname, text)]
-
+for metarig_class in metarigs_dict:
+ # Create menu functions
+ if metarig_class != utils.METARIG_DIR:
+ armature_submenus.append(type('Class_' + metarig_class + '_submenu', (ArmatureSubMenu,), {}))
+ armature_submenus[-1].bl_label = metarig_class + ' (submenu)'
+ armature_submenus[-1].bl_idname = 'ARMATURE_MT_%s_class' % metarig_class
+ armature_submenus[-1].operators = []
+ menu_funcs += [make_submenu_func(armature_submenus[-1].bl_idname, metarig_class)]
+
+ for mop, name in metarig_ops[metarig_class]:
+ print(metarig_class)
+ print(metarig_ops[metarig_class])
+ if metarig_class != utils.METARIG_DIR:
+ arm_sub = next((e for e in armature_submenus if e.bl_label == metarig_class + ' (submenu)'), '')
+ arm_sub.operators.append((mop.bl_idname, name,))
+ else:
+ text = capwords(name.replace("_", " ")) + " (Meta-Rig)"
+ menu_funcs += [make_metarig_menu_func(mop.bl_idname, text)]
def register():
- for mop, name in metarig_ops:
- bpy.utils.register_class(mop)
+ for cl in metarig_ops:
+ for mop, name in metarig_ops[cl]:
+ bpy.utils.register_class(mop)
+
+ for arm_sub in armature_submenus:
+ bpy.utils.register_class(arm_sub)
for mf in menu_funcs:
bpy.types.INFO_MT_armature_add.append(mf)
def unregister():
- for mop, name in metarig_ops:
- bpy.utils.unregister_class(mop)
+ for cl in metarig_ops:
+ for mop, name in metarig_ops[cl]:
+ bpy.utils.unregister_class(mop)
+
+ for arm_sub in armature_submenus:
+ bpy.utils.unregister_class(arm_sub)
for mf in menu_funcs:
bpy.types.INFO_MT_armature_add.remove(mf)
diff --git a/rigify/rigs/limbs/paw.py b/rigify/rigs/limbs/paw.py
index 8c79503e..720dea1c 100644
--- a/rigify/rigs/limbs/paw.py
+++ b/rigify/rigs/limbs/paw.py
@@ -421,9 +421,9 @@ class Rig:
eb[ mch_str ].tail = eb[ org_bones[-2] ].head
# Parenting
- eb[ ctrl ].parent = eb[ parent ]
- eb[ mch_str ].parent = eb[ parent ]
- eb[ mch_ik ].parent = eb[ ctrl ]
+ eb[ctrl].parent = eb[parent]
+ eb[mch_str].parent = eb[parent]
+ eb[mch_ik].parent = eb[ctrl]
# Make standard pole target bone
pole_name = get_bone_name(org_bones[0], 'ctrl', 'ik_target')
diff --git a/rigify/rigs/spines/super_spine.py b/rigify/rigs/spines/super_spine.py
index a79a3e89..0ec9e1c9 100644
--- a/rigify/rigs/spines/super_spine.py
+++ b/rigify/rigs/spines/super_spine.py
@@ -1,8 +1,8 @@
import bpy
from mathutils import Vector
-from ...utils import copy_bone, flip_bone, put_bone, org, align_bone_y_axis, align_bone_x_axis, align_bone_z_axis
+from ...utils import copy_bone, flip_bone, put_bone, org, align_bone_y_axis, align_bone_x_axis
from ...utils import strip_org, make_deformer_name, connected_children_names
-from ...utils import create_circle_widget, create_sphere_widget, create_widget
+from ...utils import create_circle_widget, create_sphere_widget, create_neck_bend_widget, create_neck_tweak_widget
from ..widgets import create_ballsocket_widget
from ...utils import MetarigError, make_mechanism_name, create_cube_widget
from rna_prop_ui import rna_idprop_ui_prop_get
@@ -811,7 +811,6 @@ class Rig:
self.obj.data.bones[bone].bbone_segments = 8
self.obj.data.bones[bones['def'][0]].bbone_in = 0.0
- # self.obj.data.bones[bones['def'][-2]].bbone_out = 0.0
self.obj.data.bones[bones['def'][-2]].bbone_out = 1.0
# Locks
@@ -862,11 +861,17 @@ class Rig:
else:
radius = 1.0
+ # place chest on neck-base for very long necks
+ if bone == bones['chest']['ctrl'] and len(bones['neck']['original_names']) > 3:
+ head_tail = 0.0
+ else:
+ head_tail = 0.75
+
create_circle_widget(
self.obj,
bone,
radius=radius,
- head_tail=0.75,
+ head_tail=head_tail,
with_line=False,
bone_transform_name=None
)
@@ -881,8 +886,7 @@ class Rig:
self.obj,
bones['neck']['ctrl_neck'],
radius=radius,
- head_tail=0.75,
- with_line=False,
+ head_tail=0.5,
bone_transform_name=None
)
@@ -892,22 +896,26 @@ class Rig:
radius = 0.5
else:
radius = 1/(2*len(bones['neck']['mch']))
- create_circle_widget(
+ create_neck_bend_widget(
self.obj,
bones['neck']['neck_bend'],
radius=radius,
head_tail=0.0,
- with_line=False,
bone_transform_name=None
)
# Head widget
+ # place wgt @ middle of head bone for long necks
+ if len(bones['neck']['original_names']) > 3:
+ head_tail = 0.5
+ else:
+ head_tail = 1.0
if self.use_head:
create_circle_widget(
self.obj,
bones['neck']['ctrl'],
radius = 0.5,
- head_tail = 1.0,
+ head_tail = head_tail,
with_line = False,
bone_transform_name = None
)
@@ -926,6 +934,11 @@ class Rig:
# Assigning widgets to tweak bones and layers
for bone in tweaks:
+
+ if bones['neck']['tweak'] and bone == bones['neck']['tweak'][0] \
+ and len(bones['neck']['original_names']) > 3:
+ create_neck_tweak_widget(self.obj, bone, size=1.0, bone_transform_name=None)
+ continue
create_sphere_widget(self.obj, bone, bone_transform_name=None)
if self.tweak_layers:
@@ -1013,10 +1026,10 @@ def add_parameters(params):
)
params.pivot_pos = bpy.props.IntProperty(
- name = 'pivot_position',
- default = 3,
- min = 0,
- description = 'Position of the torso control and pivot point'
+ name='pivot_position',
+ default=2,
+ min=0,
+ description='Position of the torso control and pivot point'
)
params.copy_rotation_axes = bpy.props.BoolVectorProperty(
@@ -1026,10 +1039,10 @@ def add_parameters(params):
)
params.tail_pos = bpy.props.IntProperty(
- name = 'tail_position',
- default = 0,
- min = 2,
- description = 'Where the tail starts'
+ name='tail_position',
+ default=2,
+ min=2,
+ description='Where the tail starts'
)
params.use_tail = bpy.props.BoolProperty(
@@ -1045,10 +1058,10 @@ def add_parameters(params):
)
# Setting up extra layers for the FK and tweak
- params.tweak_extra_layers = bpy.props.BoolProperty(
- name = "tweak_extra_layers",
- default = True,
- description = ""
+ params.tweak_extra_layers = bpy.props.BoolProperty(
+ name="tweak_extra_layers",
+ default=True,
+ description=""
)
params.tweak_layers = bpy.props.BoolVectorProperty(
diff --git a/rigify/utils.py b/rigify/utils.py
index 285adeff..32f845b8 100644
--- a/rigify/utils.py
+++ b/rigify/utils.py
@@ -25,6 +25,7 @@ import math
import random
import time
import re
+import os
from mathutils import Vector, Matrix
from rna_prop_ui import rna_idprop_ui_prop_get
@@ -566,6 +567,156 @@ def create_root_widget(rig, bone_name, bone_transform_name=None):
mesh.update()
+def create_neck_bend_widget(rig, bone_name, radius=1.0, head_tail=0.0, bone_transform_name=None):
+ obj = create_widget(rig, bone_name, bone_transform_name)
+ size = 2.0
+ if obj != None:
+ v = [(-0.08855080604553223 * size, 0.7388765811920166 * size, -0.3940150737762451 * size),
+ (0.08855044841766357 * size, 0.7388765811920166 * size, -0.3940150737762451 * size),
+ (0.17710095643997192 * size, 0.5611097812652588 * size, -0.6478927135467529 * size),
+ (-4.0892032870942785e-07 * size, 0.4087378978729248 * size, -0.865501880645752 * size),
+ (-0.17710143327713013 * size, 0.5611097812652588 * size, -0.6478922367095947 * size),
+ (0.08855026960372925 * size, 0.5611097812652588 * size, -0.6478924751281738 * size),
+ (-0.08855092525482178 * size, 0.5611097812652588 * size, -0.6478927135467529 * size),
+ (-0.6478927135467529 * size, 0.5611097812652588 * size, 0.08855098485946655 * size),
+ (-0.6478927135467529 * size, 0.5611097812652588 * size, -0.08855020999908447 * size),
+ (-0.6478924751281738 * size, 0.5611097812652588 * size, 0.17710155248641968 * size),
+ (-0.865501880645752 * size, 0.4087378978729248 * size, 4.6876743908796925e-07 * size),
+ (-0.647892951965332 * size, 0.5611097812652588 * size, -0.17710083723068237 * size),
+ (-0.39401543140411377 * size, 0.7388765811920166 * size, -0.08855029940605164 * size),
+ (-0.39401543140411377 * size, 0.7388765811920166 * size, 0.08855095505714417 * size),
+ (0.6478927135467529 * size, 0.5611097812652588 * size, -0.08855059742927551 * size),
+ (0.6478927135467529 * size, 0.5611097812652588 * size, 0.08855065703392029 * size),
+ (0.6478924751281738 * size, 0.5611097812652588 * size, -0.17710113525390625 * size),
+ (0.865501880645752 * size, 0.4087378978729248 * size, -3.264514703005261e-08 * size),
+ (0.647892951965332 * size, 0.5611097812652588 * size, 0.1771012544631958 * size),
+ (0.08855065703392029 * size, 0.7388765811920166 * size, 0.3940155506134033 * size),
+ (-0.08855056762695312 * size, 0.7388765811920166 * size, 0.3940155506134033 * size),
+ (-0.17710107564926147 * size, 0.5611097812652588 * size, 0.647892951965332 * size),
+ (2.244429140318971e-07 * size, 0.4087378978729248 * size, 0.865502119064331 * size),
+ (0.17710131406784058 * size, 0.5611097812652588 * size, 0.6478927135467529 * size),
+ (-0.08855044841766357 * size, 0.5611097812652588 * size, 0.647892951965332 * size),
+ (0.08855074644088745 * size, 0.5611097812652588 * size, 0.647892951965332 * size),
+ (0.3940153121948242 * size, 0.7388765811920166 * size, 0.08855071663856506 * size),
+ (0.39401519298553467 * size, 0.7388765811920166 * size, -0.08855047821998596 * size),
+ (-8.416645869147032e-08 * size, 0.8255770206451416 * size, -0.2656517028808594 * size),
+ (-0.06875583529472351 * size, 0.8255770206451416 * size, -0.2565997838973999 * size),
+ (-0.13282597064971924 * size, 0.8255770206451416 * size, -0.2300611138343811 * size),
+ (-0.18784427642822266 * size, 0.8255770206451416 * size, -0.18784409761428833 * size),
+ (-0.2300613522529602 * size, 0.8255770206451416 * size, -0.1328257918357849 * size),
+ (-0.256600022315979 * size, 0.8255770206451416 * size, -0.06875564157962799 * size),
+ (-0.2656519412994385 * size, 0.8255770206451416 * size, 9.328307726264029e-08 * size),
+ (-0.25660014152526855 * size, 0.8255770206451416 * size, 0.06875583529472351 * size),
+ (-0.2300613522529602 * size, 0.8255770206451416 * size, 0.13282597064971924 * size),
+ (-0.18784433603286743 * size, 0.8255770206451416 * size, 0.18784421682357788 * size),
+ (-0.1328260898590088 * size, 0.8255770206451416 * size, 0.23006129264831543 * size),
+ (-0.06875592470169067 * size, 0.8255770206451416 * size, 0.256600022315979 * size),
+ (-1.8761508613351907e-07 * size, 0.8255770206451416 * size, 0.2656519412994385 * size),
+ (0.06875556707382202 * size, 0.8255770206451416 * size, 0.2566000819206238 * size),
+ (0.13282573223114014 * size, 0.8255770206451416 * size, 0.23006141185760498 * size),
+ (0.18784403800964355 * size, 0.8255770206451416 * size, 0.1878443956375122 * size),
+ (0.23006105422973633 * size, 0.8255770206451416 * size, 0.1328260898590088 * size),
+ (0.25659990310668945 * size, 0.8255770206451416 * size, 0.06875596940517426 * size),
+ (0.2656517028808594 * size, 0.8255770206451416 * size, 2.3684407324253698e-07 * size),
+ (0.25659990310668945 * size, 0.8255770206451416 * size, -0.06875550746917725 * size),
+ (0.23006117343902588 * size, 0.8255770206451416 * size, -0.13282567262649536 * size),
+ (0.18784427642822266 * size, 0.8255770206451416 * size, -0.18784397840499878 * size),
+ (0.13282597064971924 * size, 0.8255770206451416 * size, -0.23006099462509155 * size),
+ (0.0687558501958847 * size, 0.8255770206451416 * size, -0.2565997838973999 * size), ]
+ edges = [(1, 0), (3, 2), (5, 2), (4, 3), (6, 4), (1, 5), (0, 6), (13, 7), (12, 8), (7, 9), (9, 10), (8, 11),
+ (27, 14), (26, 15), (14, 16), (16, 17), (15, 18), (17, 18), (10, 11), (12, 13), (20, 19), (22, 21),
+ (24, 21), (23, 22), (29, 28), (30, 29), (31, 30), (32, 31), (33, 32), (34, 33), (35, 34), (36, 35),
+ (37, 36), (38, 37), (39, 38), (40, 39), (41, 40), (42, 41), (43, 42), (44, 43), (45, 44), (46, 45),
+ (47, 46), (48, 47), (49, 48), (50, 49), (51, 50), (28, 51), (26, 27), (25, 23), (20, 24),
+ (19, 25), ]
+
+ verts = [(a[0] * radius, head_tail, a[2] * radius) for a in v]
+ mesh = obj.data
+ mesh.from_pydata(verts, edges, [])
+ mesh.update()
+
+
+def create_neck_tweak_widget(rig, bone_name, size=1.0, bone_transform_name=None):
+ obj = create_widget(rig, bone_name, bone_transform_name)
+
+ if obj != None:
+ verts = [(0.3535533845424652 * size, 0.3535533845424652 * size, 0.0 * size),
+ (0.4619397521018982 * size, 0.19134171307086945 * size, 0.0 * size),
+ (0.5 * size, -2.1855694143368964e-08 * size, 0.0 * size),
+ (0.4619397521018982 * size, -0.19134175777435303 * size, 0.0 * size),
+ (0.3535533845424652 * size, -0.3535533845424652 * size, 0.0 * size),
+ (0.19134174287319183 * size, -0.4619397521018982 * size, 0.0 * size),
+ (7.549790126404332e-08 * size, -0.5 * size, 0.0 * size),
+ (-0.1913416087627411 * size, -0.46193981170654297 * size, 0.0 * size),
+ (-0.35355329513549805 * size, -0.35355350375175476 * size, 0.0 * size),
+ (-0.4619397521018982 * size, -0.19134178757667542 * size, 0.0 * size),
+ (-0.5 * size, 5.962440319251527e-09 * size, 0.0 * size),
+ (-0.4619397222995758 * size, 0.1913418024778366 * size, 0.0 * size),
+ (-0.35355326533317566 * size, 0.35355350375175476 * size, 0.0 * size),
+ (-0.19134148955345154 * size, 0.46193987131118774 * size, 0.0 * size),
+ (3.2584136988589307e-07 * size, 0.5 * size, 0.0 * size),
+ (0.1913420855998993 * size, 0.46193960309028625 * size, 0.0 * size),
+ (7.450580596923828e-08 * size, 0.46193960309028625 * size, 0.19134199619293213 * size),
+ (5.9254205098113744e-08 * size, 0.5 * size, 2.323586443253589e-07 * size),
+ (4.470348358154297e-08 * size, 0.46193987131118774 * size, -0.1913415789604187 * size),
+ (2.9802322387695312e-08 * size, 0.35355350375175476 * size, -0.3535533547401428 * size),
+ (2.9802322387695312e-08 * size, 0.19134178757667542 * size, -0.46193981170654297 * size),
+ (5.960464477539063e-08 * size, -1.1151834122813398e-08 * size, -0.5000000596046448 * size),
+ (5.960464477539063e-08 * size, -0.1913418024778366 * size, -0.46193984150886536 * size),
+ (5.960464477539063e-08 * size, -0.35355350375175476 * size, -0.3535533845424652 * size),
+ (7.450580596923828e-08 * size, -0.46193981170654297 * size, -0.19134166836738586 * size),
+ (9.348272556053416e-08 * size, -0.5 * size, 1.624372103492533e-08 * size),
+ (1.043081283569336e-07 * size, -0.4619397521018982 * size, 0.19134168326854706 * size),
+ (1.1920928955078125e-07 * size, -0.3535533845424652 * size, 0.35355329513549805 * size),
+ (1.1920928955078125e-07 * size, -0.19134174287319183 * size, 0.46193966269493103 * size),
+ (1.1920928955078125e-07 * size, -4.7414250303745575e-09 * size, 0.49999991059303284 * size),
+ (1.1920928955078125e-07 * size, 0.19134172797203064 * size, 0.46193966269493103 * size),
+ (8.940696716308594e-08 * size, 0.3535533845424652 * size, 0.35355329513549805 * size),
+ (0.3535534739494324 * size, 0.0 * size, 0.35355329513549805 * size),
+ (0.1913418173789978 * size, -2.9802322387695312e-08 * size, 0.46193966269493103 * size),
+ (8.303572940349113e-08 * size, -5.005858838558197e-08 * size, 0.49999991059303284 * size),
+ (-0.19134165346622467 * size, -5.960464477539063e-08 * size, 0.46193966269493103 * size),
+ (-0.35355329513549805 * size, -8.940696716308594e-08 * size, 0.35355329513549805 * size),
+ (-0.46193963289260864 * size, -5.960464477539063e-08 * size, 0.19134168326854706 * size),
+ (-0.49999991059303284 * size, -5.960464477539063e-08 * size, 1.624372103492533e-08 * size),
+ (-0.4619397521018982 * size, -2.9802322387695312e-08 * size, -0.19134166836738586 * size),
+ (-0.3535534143447876 * size, -2.9802322387695312e-08 * size, -0.3535533845424652 * size),
+ (-0.19134171307086945 * size, 0.0 * size, -0.46193984150886536 * size),
+ (7.662531942287387e-08 * size, 9.546055501630235e-09 * size, -0.5000000596046448 * size),
+ (0.19134187698364258 * size, 5.960464477539063e-08 * size, -0.46193981170654297 * size),
+ (0.3535535931587219 * size, 5.960464477539063e-08 * size, -0.3535533547401428 * size),
+ (0.4619399905204773 * size, 5.960464477539063e-08 * size, -0.1913415789604187 * size),
+ (0.5000000596046448 * size, 5.960464477539063e-08 * size, 2.323586443253589e-07 * size),
+ (0.4619396924972534 * size, 2.9802322387695312e-08 * size, 0.19134199619293213 * size),
+ (1.563460111618042 * size, 2.778762819843905e-08 * size, 1.5634593963623047 * size),
+ (0.8461387157440186 * size, -1.0400220418205208e-07 * size, 2.0427582263946533 * size),
+ (7.321979467178608e-08 * size, -1.9357810288056498e-07 * size, 2.2110657691955566 * size),
+ (-0.8461385369300842 * size, -2.3579201524626114e-07 * size, 2.0427582263946533 * size),
+ (-1.5634597539901733 * size, -3.67581861837607e-07 * size, 1.5634593963623047 * size),
+ (-2.0427584648132324 * size, -2.3579204366797057e-07 * size, 0.8461383581161499 * size),
+ (-2.211066246032715 * size, -2.3579204366797057e-07 * size, 9.972505665700737e-08 * size),
+ (-2.0427589416503906 * size, -1.0400223260376151e-07 * size, -0.8461381196975708 * size),
+ (-1.5634604692459106 * size, -1.040022183929068e-07 * size, -1.563459873199463 * size),
+ (-0.8461387753486633 * size, 2.77876033294433e-08 * size, -2.042759418487549 * size),
+ (4.4872678017782164e-08 * size, 7.00015263532805e-08 * size, -2.211066484451294 * size),
+ (0.8461388349533081 * size, 2.913672290105751e-07 * size, -2.0427591800689697 * size),
+ (1.5634608268737793 * size, 2.9136725743228453e-07 * size, -1.563459873199463 * size),
+ (2.042759895324707 * size, 2.9136725743228453e-07 * size, -0.8461377024650574 * size),
+ (2.211066722869873 * size, 2.9136725743228453e-07 * size, 1.0554133496043505e-06 * size),
+ (2.0427587032318115 * size, 1.5957746768435754e-07 * size, 0.8461397886276245 * size), ]
+ edges = [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10), (10, 11),
+ (11, 12), (12, 13), (13, 14), (14, 15), (0, 15), (16, 31), (16, 17), (17, 18), (18, 19), (19, 20),
+ (20, 21), (21, 22), (22, 23), (23, 24), (24, 25), (25, 26), (26, 27), (27, 28), (28, 29), (29, 30),
+ (30, 31), (32, 33), (33, 34), (34, 35), (35, 36), (36, 37), (37, 38), (38, 39), (39, 40), (40, 41),
+ (41, 42), (42, 43), (43, 44), (44, 45), (45, 46), (46, 47), (32, 47), (48, 49), (49, 50), (50, 51),
+ (51, 52), (52, 53), (53, 54), (54, 55), (55, 56), (56, 57), (57, 58), (58, 59), (59, 60), (60, 61),
+ (61, 62), (62, 63), (48, 63), (21, 58), (10, 54), (29, 50), (2, 62), ]
+
+ mesh = obj.data
+ mesh.from_pydata(verts, edges, [])
+ mesh.update()
+
+
#=============================================
# Math
#=============================================
@@ -733,10 +884,11 @@ def get_rig_type(rig_type):
return submod
-def get_metarig_module(metarig_name):
+def get_metarig_module(metarig_name, path=METARIG_DIR):
""" Fetches a rig module by name, and returns it.
"""
- name = ".%s.%s" % (METARIG_DIR, metarig_name)
+
+ name = ".%s.%s" % (path, metarig_name)
submod = importlib.import_module(name, package=MODULE_NAME)
imp.reload(submod)
return submod