* root bone override fixed
authorCampbell Barton <ideasman42@gmail.com>
Thu, 10 Dec 2009 23:24:31 +0000 (23:24 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 10 Dec 2009 23:24:31 +0000 (23:24 +0000)
* delta was disabled
* simple copy metarig type
* proper exception when a type isnt found

release/scripts/modules/rigify/__init__.py
release/scripts/modules/rigify/copy.py [new file with mode: 0644]
release/scripts/modules/rigify/delta.py
release/scripts/modules/rigify/leg_biped_generic.py

index f4922f800406be5ad2801963eb01b503dfc03f76..5d1ec2e1e5a6340f9a1dd1749ec797513dbc8efc 100644 (file)
@@ -23,6 +23,7 @@ from Mathutils import Vector
 
 # TODO, have these in a more general module
 from rna_prop_ui import rna_idprop_ui_prop_get
+SPECIAL_TYPES = "root",
 
 class RigifyError(Exception):
     """Exception raised for errors in the metarig.
@@ -43,7 +44,11 @@ def submodule_func_from_type(bone_type):
     submod_name, func_name = type_pair
 
     # from rigify import leg
-    submod = __import__(name="%s.%s" % (__package__, submod_name), fromlist=[submod_name])
+    try:
+        submod = __import__(name="%s.%s" % (__package__, submod_name), fromlist=[submod_name])
+    except ImportError:
+        raise RigifyError("python module for type '%s' not found" % submod_name)
+        
     reload(submod)
     return submod, getattr(submod, func_name)
     
@@ -61,6 +66,9 @@ def validate_rig(context, obj):
             bone_type_list = []
 
         for bone_type in bone_type_list:
+            if bone_type.split(".")[0] in SPECIAL_TYPES:
+                continue
+
             submod, type_func = submodule_func_from_type(bone_type)
             reload(submod)
             submod.metarig_definition(obj, bone_name)
@@ -78,7 +86,7 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
     reload(rigify_utils)
     
     # Not needed but catches any errors before duplicating
-    validate_rig(context, obj_orig)
+    validate_rig(context, obj_orig)
 
     global_undo = context.user_preferences.edit.global_undo
     context.user_preferences.edit.global_undo = False
@@ -246,7 +254,7 @@ def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
                     root_ebone_tmp = root_ebone
                 
                 ebone.connected = False
-                ebone.parent = root_ebone
+                ebone.parent = root_ebone_tmp
 
         bpy.ops.object.mode_set(mode='OBJECT')
         
diff --git a/release/scripts/modules/rigify/copy.py b/release/scripts/modules/rigify/copy.py
new file mode 100644 (file)
index 0000000..2be5669
--- /dev/null
@@ -0,0 +1,53 @@
+# ##### 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., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+import bpy
+from rigify_utils import copy_bone_simple, get_side_name, bone_class_instance
+from rna_prop_ui import rna_idprop_ui_prop_get
+
+METARIG_NAMES = ("cpy",)
+
+def metarig_template():
+    pass
+
+def metarig_definition(obj, orig_bone_name):
+    return [orig_bone_name]
+
+
+def main(obj, bone_definition, base_names):
+    arm = obj.data
+    mt = bone_class_instance(obj, METARIG_NAMES)
+    mt.cpy = bone_definition[0]
+    mt.update()
+    cp = mt.copy(to_fmt="%s_cpy")
+    bpy.ops.object.mode_set(mode='OBJECT')
+    
+    cp.update()
+    mt.update()
+    
+    con = cp.cpy_p.constraints.new('COPY_ROTATION')
+    con.target = obj
+    con.subtarget = mt.cpy
+    
+    con = cp.cpy_p.constraints.new('COPY_LOCATION')
+    con.target = obj
+    con.subtarget = mt.cpy
+
+    return [mt.cpy]
index 4f1e56b7bb14acf98294ee0999312435f2a4a5ad..261e2b22479ce1b5b931d342d5e45447c05fe5a1 100644 (file)
@@ -79,7 +79,6 @@ def main(obj, bone_definition, base_names):
     '''
     Use this bone to define a delta thats applied to its child in pose mode.
     '''
-    return
     mode_orig = obj.mode
     bpy.ops.object.mode_set(mode='OBJECT')
 
index af103a0826580b953a960142b6512d915ddbc57d..65fde79da6e9d3a0475093ce099583e0caa58f3f 100644 (file)
@@ -146,8 +146,8 @@ def ik(obj, bone_definition, base_names):
     # XXX - end dupe
 
 
-    # Make a new chain, ORG are the original bones renamed.
-    ik_chain = mt_chain.copy(to_fmt="MCH-%s")
+    # Make a new chain
+    ik_chain = mt_chain.copy(to_fmt="MCH-%s", base_names=base_names)
 
     # simple rename
     ik_chain.rename("thigh", ik_chain.thigh + "_ik")