[Bf-extensions-cvs] [f36789d8] master: Rigify 0.5 with legacy mode

Lucio Rossi noreply at git.blender.org
Sun May 14 18:44:08 CEST 2017


Commit: f36789d8bc728bc7ec3c9738f1ca76e8f017ce7a
Author: Lucio Rossi
Date:   Sun May 14 18:30:06 2017 +0200
Branches: master
https://developer.blender.org/rBAf36789d8bc728bc7ec3c9738f1ca76e8f017ce7a

Rigify 0.5 with legacy mode

===================================================================

M	rigify/CREDITS
M	rigify/README
M	rigify/__init__.py
M	rigify/generate.py
A	rigify/legacy/__init__.py
A	rigify/legacy/generate.py
A	rigify/legacy/metarig_menu.py
R100	rigify/rigs/biped/__init__.py	rigify/legacy/metarigs/__init__.py
A	rigify/legacy/metarigs/human.py
R100	rigify/metarigs/pitchipoy_human.py	rigify/legacy/metarigs/pitchipoy_human.py
A	rigify/legacy/rig_lists.py
R098	rigify/rig_ui_pitchipoy_template.py	rigify/legacy/rig_ui_pitchipoy_template.py
A	rigify/legacy/rig_ui_template.py
R100	rigify/rigs/pitchipoy/__init__.py	rigify/legacy/rigs/__init__.py
R100	rigify/rigs/pitchipoy/limbs/__init__.py	rigify/legacy/rigs/basic/__init__.py
R100	rigify/rigs/basic/copy.py	rigify/legacy/rigs/basic/copy.py
A	rigify/legacy/rigs/basic/copy_chain.py
A	rigify/legacy/rigs/biped/__init__.py
R100	rigify/rigs/biped/arm/__init__.py	rigify/legacy/rigs/biped/arm/__init__.py
R100	rigify/rigs/biped/arm/deform.py	rigify/legacy/rigs/biped/arm/deform.py
R100	rigify/rigs/biped/arm/fk.py	rigify/legacy/rigs/biped/arm/fk.py
R100	rigify/rigs/biped/arm/ik.py	rigify/legacy/rigs/biped/arm/ik.py
R100	rigify/rigs/biped/leg/__init__.py	rigify/legacy/rigs/biped/leg/__init__.py
R100	rigify/rigs/biped/leg/deform.py	rigify/legacy/rigs/biped/leg/deform.py
R100	rigify/rigs/biped/leg/fk.py	rigify/legacy/rigs/biped/leg/fk.py
R100	rigify/rigs/biped/leg/ik.py	rigify/legacy/rigs/biped/leg/ik.py
R100	rigify/rigs/biped/limb_common.py	rigify/legacy/rigs/biped/limb_common.py
R100	rigify/rigs/finger.py	rigify/legacy/rigs/finger.py
A	rigify/legacy/rigs/misc/__init__.py
A	rigify/legacy/rigs/misc/delta.py
R100	rigify/rigs/neck_short.py	rigify/legacy/rigs/neck_short.py
R100	rigify/rigs/palm.py	rigify/legacy/rigs/palm.py
A	rigify/legacy/rigs/pitchipoy/__init__.py
A	rigify/legacy/rigs/pitchipoy/limbs/__init__.py
R097	rigify/rigs/pitchipoy/limbs/arm.py	rigify/legacy/rigs/pitchipoy/limbs/arm.py
R094	rigify/rigs/pitchipoy/limbs/leg.py	rigify/legacy/rigs/pitchipoy/limbs/leg.py
R093	rigify/rigs/pitchipoy/limbs/limb_utils.py	rigify/legacy/rigs/pitchipoy/limbs/limb_utils.py
R098	rigify/rigs/pitchipoy/limbs/paw.py	rigify/legacy/rigs/pitchipoy/limbs/paw.py
R093	rigify/rigs/pitchipoy/limbs/super_limb.py	rigify/legacy/rigs/pitchipoy/limbs/super_limb.py
R098	rigify/rigs/pitchipoy/limbs/ui.py	rigify/legacy/rigs/pitchipoy/limbs/ui.py
R094	rigify/rigs/pitchipoy/simple_tentacle.py	rigify/legacy/rigs/pitchipoy/simple_tentacle.py
R089	rigify/rigs/pitchipoy/super_copy.py	rigify/legacy/rigs/pitchipoy/super_copy.py
R097	rigify/rigs/pitchipoy/super_face.py	rigify/legacy/rigs/pitchipoy/super_face.py
R094	rigify/rigs/pitchipoy/super_finger.py	rigify/legacy/rigs/pitchipoy/super_finger.py
R100	rigify/rigs/pitchipoy/super_palm.py	rigify/legacy/rigs/pitchipoy/super_palm.py
R092	rigify/rigs/pitchipoy/super_torso_turbo.py	rigify/legacy/rigs/pitchipoy/super_torso_turbo.py
R099	rigify/rigs/pitchipoy/super_widgets.py	rigify/legacy/rigs/pitchipoy/super_widgets.py
R092	rigify/rigs/pitchipoy/tentacle.py	rigify/legacy/rigs/pitchipoy/tentacle.py
R100	rigify/rigs/spine.py	rigify/legacy/rigs/spine.py
A	rigify/legacy/ui.py
A	rigify/legacy/utils.py
M	rigify/metarigs/human.py
M	rigify/rig_ui_template.py
A	rigify/rigs/basic/super_copy.py
A	rigify/rigs/experimental/__init__.py
A	rigify/rigs/experimental/super_chain.py
A	rigify/rigs/experimental/super_eye.py
A	rigify/rigs/faces/__init__.py
A	rigify/rigs/faces/super_face.py
A	rigify/rigs/limbs/__init__.py
R066	rigify/rigs/pitchipoy/limbs/super_arm.py	rigify/rigs/limbs/arm.py
R063	rigify/rigs/pitchipoy/limbs/super_leg.py	rigify/rigs/limbs/leg.py
A	rigify/rigs/limbs/limb_utils.py
R066	rigify/rigs/pitchipoy/limbs/super_front_paw.py	rigify/rigs/limbs/paw.py
A	rigify/rigs/limbs/rear_paw.py
A	rigify/rigs/limbs/simple_tentacle.py
A	rigify/rigs/limbs/super_finger.py
A	rigify/rigs/limbs/super_limb.py
A	rigify/rigs/limbs/super_palm.py
A	rigify/rigs/limbs/ui.py
D	rigify/rigs/pitchipoy/limbs/super_rear_paw.py
A	rigify/rigs/spines/__init__.py
A	rigify/rigs/spines/super_spine.py
A	rigify/rigs/widgets.py
M	rigify/ui.py
M	rigify/utils.py

===================================================================

diff --git a/rigify/CREDITS b/rigify/CREDITS
index 737abf60..38f6de46 100644
--- a/rigify/CREDITS
+++ b/rigify/CREDITS
@@ -20,3 +20,13 @@ IK/FK snapping financial support:
 - Leslie Chih
 - Isaac Ah-Loe
 - Casey "TheLorax" Jones
+
+### Rigify Version 0.5 ###
+Development:
+- Lucio Rossi
+
+Design:
+- Ivan Cappiello
+
+General financial support:
+- Mad Entertainment Animation
\ No newline at end of file
diff --git a/rigify/README b/rigify/README
index 7b12589b..f8cb7656 100644
--- a/rigify/README
+++ b/rigify/README
@@ -227,6 +227,12 @@ button labeled "Encode Sample to Python".  This button will generate the python
 code for create_sample() from the armature you are editing.  The generated code
 appears in a text block called "metarig_sample.py"
 
+IMPLEMENTATION RIGS
+-------------------
+Starting from version 0.5 you can create a Rig class as an implementation of a wrapper class.
+This happens for limb rigs for example, where super_limb is kind of a wrapper class for arm, leg and paws.
+To declare a class as an implementation just declare an IMPLEMENTATION constant in the module and set it to True.
+Implementation classes are shown in the metarig samples list and generate a sample if a proper create_sample function is implemented, but cannot be directly assigned as a rigify type.
 
 GENERATING A PYTHON UI
 ----------------------
diff --git a/rigify/__init__.py b/rigify/__init__.py
index 6e6f751c..638260e1 100644
--- a/rigify/__init__.py
+++ b/rigify/__init__.py
@@ -20,9 +20,9 @@
 
 bl_info = {
     "name": "Rigify",
-    "version": (0, 4),
-    "author": "Nathan Vegdahl",
-    "blender": (2, 66, 0),
+    "version": (0, 5),
+    "author": "Nathan Vegdahl, Lucio Rossi, Ivan Cappiello",
+    "blender": (2, 78, 0),
     "description": "Automatic rigging from building-block components",
     "location": "Armature properties, Bone properties, View3d tools panel, Armature Add menu",
     "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"
@@ -42,6 +42,120 @@ else:
     from . import utils, rig_lists, generate, ui, metarig_menu
 
 import bpy
+import sys
+import os
+from bpy.types import AddonPreferences
+from bpy.props import BoolProperty
+
+
+class RigifyPreferences(AddonPreferences):
+    # this must match the addon name, use '__package__'
+    # when defining this in a submodule of a python package.
+    bl_idname = __name__
+
+    def update_legacy(self, context):
+        if self.legacy_mode:
+
+            if 'ui' in globals() and 'legacy' in str(globals()['ui']):    # already in legacy mode. needed when rigify is reloaded
+                return
+            else:
+                rigify_dir = os.path.dirname(os.path.realpath(__file__))
+                if rigify_dir not in sys.path:
+                    sys.path.append(rigify_dir)
+
+                unregister()
+
+                globals().pop('utils')
+                globals().pop('rig_lists')
+                globals().pop('generate')
+                globals().pop('ui')
+                globals().pop('metarig_menu')
+
+                import legacy.utils
+                import legacy.rig_lists
+                import legacy.generate
+                import legacy.ui
+                import legacy.metarig_menu
+
+                print("ENTERING RIGIFY LEGACY\r\n")
+
+                globals()['utils'] = legacy.utils
+                globals()['rig_lists'] = legacy.rig_lists
+                globals()['generate'] = legacy.generate
+                globals()['ui'] = legacy.ui
+                globals()['metarig_menu'] = legacy.metarig_menu
+
+                register()
+
+        else:
+
+            rigify_dir = os.path.dirname(os.path.realpath(__file__))
+
+            if rigify_dir in sys.path:
+                id = sys.path.index(rigify_dir)
+                sys.path.pop(id)
+
+            unregister()
+
+            globals().pop('utils')
+            globals().pop('rig_lists')
+            globals().pop('generate')
+            globals().pop('ui')
+            globals().pop('metarig_menu')
+
+            from . import utils
+            from . import rig_lists
+            from . import generate
+            from . import ui
+            from . import metarig_menu
+
+            print("EXIT RIGIFY LEGACY\r\n")
+
+            globals()['utils'] = utils
+            globals()['rig_lists'] = rig_lists
+            globals()['generate'] = generate
+            globals()['ui'] = ui
+            globals()['metarig_menu'] = metarig_menu
+
+            register()
+
+    legacy_mode = BoolProperty(
+        name='Rigify Legacy Mode',
+        description='Select if you want to use Rigify in legacy mode',
+        default=False,
+        update=update_legacy
+    )
+
+    show_expanded = BoolProperty()
+
+    def draw(self, context):
+        layout = self.layout
+        column = layout.column()
+        box = column.box()
+
+        # first stage
+        expand = getattr(self, 'show_expanded')
+        icon = 'TRIA_DOWN' if expand else 'TRIA_RIGHT'
+        col = box.column()
+        row = col.row()
+        sub = row.row()
+        sub.context_pointer_set('addon_prefs', self)
+        sub.alignment = 'LEFT'
+        op = sub.operator('wm.context_toggle', text='', icon=icon,
+                          emboss=False)
+        op.data_path = 'addon_prefs.show_expanded'
+        sub.label('{}: {}'.format('Rigify', 'Enable Legacy Mode'))
+        sub = row.row()
+        sub.alignment = 'RIGHT'
+        sub.prop(self, 'legacy_mode')
+
+        if expand:
+            split = col.row().split(percentage=0.15)
+            split.label('Description:')
+            split.label(text='When enabled the add-on will run in legacy mode using the old 2.76b feature set.')
+
+        row = layout.row()
+        row.label("End of Rigify Preferences")
 
 
 class RigifyName(bpy.types.PropertyGroup):
@@ -66,6 +180,8 @@ def register():
     bpy.utils.register_class(RigifyName)
     bpy.utils.register_class(RigifyParameters)
     bpy.utils.register_class(RigifyArmatureLayer)
+    bpy.utils.register_class(RigifyPreferences)
+    bpy.types.Armature.rigify_layers = bpy.props.CollectionProperty(type=RigifyArmatureLayer)
 
     bpy.types.PoseBone.rigify_type = bpy.props.StringProperty(name="Rigify Type", description="Rig type for this bone")
     bpy.types.PoseBone.rigify_parameters = bpy.props.PointerProperty(type=RigifyParameters)
@@ -73,10 +189,17 @@ def register():
     bpy.types.Armature.rigify_layers = bpy.props.CollectionProperty(type=RigifyArmatureLayer)
 
     IDStore = bpy.types.WindowManager
-    IDStore.rigify_collection = bpy.props.EnumProperty(items=rig_lists.col_enum_list, default="All", name="Rigify Active Collection", description="The selected rig collection")
+    IDStore.rigify_collection = bpy.props.EnumProperty(items=rig_lists.col_enum_list, default="All",
+                                                       name="Rigify Active Collection",
+                                                       description="The selected rig collection")
+
     IDStore.rigify_types = bpy.props.CollectionProperty(type=RigifyName)
     IDStore.rigify_active_type = bpy.props.IntProperty(name="Rigify Active Type", description="The selected rig type")
 
+    if (ui and 'legacy' in str(ui)) or bpy.context.user_preferences.addons['rigify'].preferences.legacy_mode:
+        # update legacy on restart or reload
+        bpy.context.user_preferences.addons['rigify'].preferences.legacy_mode = True
+
     # Add rig parameters
     for rig in rig_lists.rig_list:
         r = utils.get_rig_type(rig)
@@ -98,6 +221,7 @@ def unregister():
     bpy.utils.unregister_class(RigifyName)
     bpy.utils.unregister_class(RigifyParameters)
     bpy.utils.unregister_class(RigifyArmatureLayer)
+    bpy.utils.unregister_class(RigifyPreferences)
 
     metarig_menu.unregister()
     ui.unregister()
diff --git a/rigify/generate.py b/rigify/generate.py
index e519c13b..3fe4e3b8 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -32,7 +32,6 @@ from .utils import create_root_widget
 from .utils import random_id
 from .utils import copy_attributes
 from .rig_ui_template import UI_SLIDERS, layers_ui, UI_REGISTER
-from .rig_ui_pitchipoy_template import UI_P_SLIDERS, layers_P_ui, UI_P_REGISTER
 
 
 RIG_MODULE = "rigs"
@@ -258,11 +257,24 @@ def generate_rig(context, metarig):
     obj.data.edit_bones[root_bone].roll = 0
     bpy.ops.object.mode_set(mode='OBJECT')
     obj.data.bones[root_bone].layers = ROOT_LAYER
+
     # Put the rig_name in the armature custom properties
     rna_idprop_ui_prop_get(obj.data, "rig_id", create=True)
     obj.data["rig_id"] = rig_id
 
     t.tick("Create root bone: ")
+
+    # Create Group widget
+    wgts_group_name = "WGTS"
+    if wgts_group_name not in scene.objects:
+        if wgts_group_name in bpy.data.objects:
+            bpy.data.objects[wgts_group_name].user_clear()
+            bpy.data.objects.remove(bpy.data.objects[wgts_group_name])
+        mesh = bpy.data.meshes.new(wgts_group_name)
+        wgts_obj = bpy.data.objects.new(wgts_group_name, mesh)
+        scene.objects.link(wgts_obj)
+        t.tick("Create main WGTS: ")
+
     #----------------------------------
     try:
         # Collect/initialize all the rigs.
@@ -302,10 +314,23 @@ def generate_rig(context, metarig):
 
     # Parent any free-floating bones to the root excluding bones with child of constraint.
     pbones = obj.pose.bones
+
+
+    ik_follow_drivers = []
+
+    if obj.animation_data:
+        for drv in obj.animation_data.drivers:
+            for var in drv.driver.variables:
+                if 'IK_follow' == var.name:
+                    ik_follow_drivers.append(drv.data_path)
+
     noparent_bones = []
     for bone in bones:
-        if 'IK_follow' in pbones[bone].keys():
-            noparent_bones += [bone]
+        # if 'IK_follow' in pbones[bone].keys():
+        #     noparent_bones += [bone]
+        for d in ik_follow_drivers:
+            if bone in d:
+                noparent_bones += [bone]
 
     bpy.ops.object.mode_set(mode='EDIT')
     for bone in bones:
@@ -396,35 +421,18 @@ def generate_rig(context, metarig):
         print( l.name )
         layer_layout += [(l.name, l.row)]
 
-
-    if i

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list