diff options
author | Nathan Vegdahl <cessen@cessen.com> | 2013-02-16 12:12:03 +0400 |
---|---|---|
committer | Nathan Vegdahl <cessen@cessen.com> | 2013-02-16 12:12:03 +0400 |
commit | fa8c52897eda889aa4864f31546a2394435bbd92 (patch) | |
tree | ce7c4ae14a452ff63032d705ae20d1df462dc17f /rigify | |
parent | 420260c2a713bd7729f31da1f95c3fbb064dba42 (diff) |
Rigify: removed "from rigfy import X" statements where possible.
This makes it much easier for e.g. someone to branch Rigify for
custom purposes, since there won't be weird name conflicts.
Also changed from using __import__() for dynamic imports to using
importlib.import_module(). This simplifies the code and should
be more robust.
Finally, misc pep8 cleanups.
Diffstat (limited to 'rigify')
-rw-r--r-- | rigify/__init__.py | 70 | ||||
-rw-r--r-- | rigify/generate.py | 16 | ||||
-rw-r--r-- | rigify/metarig_menu.py | 1 | ||||
-rw-r--r-- | rigify/rig_lists.py | 83 | ||||
-rw-r--r-- | rigify/rigs/basic/copy.py | 7 | ||||
-rw-r--r-- | rigify/rigs/basic/copy_chain.py | 11 | ||||
-rw-r--r-- | rigify/rigs/biped/arm/deform.py | 12 | ||||
-rw-r--r-- | rigify/rigs/biped/arm/fk.py | 13 | ||||
-rw-r--r-- | rigify/rigs/biped/arm/ik.py | 16 | ||||
-rw-r--r-- | rigify/rigs/biped/leg/deform.py | 12 | ||||
-rw-r--r-- | rigify/rigs/biped/leg/fk.py | 15 | ||||
-rw-r--r-- | rigify/rigs/biped/leg/ik.py | 16 | ||||
-rw-r--r-- | rigify/rigs/finger.py | 16 | ||||
-rw-r--r-- | rigify/rigs/misc/delta.py | 10 | ||||
-rw-r--r-- | rigify/rigs/neck_short.py | 12 | ||||
-rw-r--r-- | rigify/rigs/palm.py | 14 | ||||
-rw-r--r-- | rigify/rigs/spine.py | 10 | ||||
-rw-r--r-- | rigify/ui.py | 13 | ||||
-rw-r--r-- | rigify/utils.py | 27 |
19 files changed, 205 insertions, 169 deletions
diff --git a/rigify/__init__.py b/rigify/__init__.py index 1ee7d8d8..2520ffcc 100644 --- a/rigify/__init__.py +++ b/rigify/__init__.py @@ -38,73 +38,11 @@ if "bpy" in locals(): imp.reload(ui) imp.reload(utils) imp.reload(metarig_menu) + imp.reload(rig_lists) else: - from . import generate, ui, utils, metarig_menu + from . import utils, rig_lists, generate, ui, metarig_menu import bpy -import os - - -def get_rig_list(path): - """ Recursively searches for rig types, and returns a list. - """ - rigs = [] - MODULE_DIR = os.path.dirname(__file__) - RIG_DIR_ABS = os.path.join(MODULE_DIR, utils.RIG_DIR) - SEARCH_DIR_ABS = os.path.join(RIG_DIR_ABS, path) - files = os.listdir(SEARCH_DIR_ABS) - files.sort() - - for f in files: - is_dir = os.path.isdir(os.path.join(SEARCH_DIR_ABS, f)) # Whether the file is a directory - if f[0] in {".", "_"}: - pass - elif f.count(".") >= 2 or (is_dir and "." in f): - print("Warning: %r, filename contains a '.', skipping" % os.path.join(SEARCH_DIR_ABS, f)) - else: - if is_dir: - # Check directories - module_name = os.path.join(path, f).replace(os.sep, ".") - try: - rig = utils.get_rig_type(module_name) - except ImportError as e: - print("Rigify: " + str(e)) - else: - # Check if it's a rig itself - if not hasattr(rig, "Rig"): - # Check for sub-rigs - ls = get_rig_list(os.path.join(path, f, "")) # "" adds a final slash - rigs.extend(["%s.%s" % (f, l) for l in ls]) - else: - rigs += [f] - - elif f.endswith(".py"): - # Check straight-up python files - t = f[:-3] - module_name = os.path.join(path, t).replace(os.sep, ".") - try: - utils.get_rig_type(module_name).Rig - except (ImportError, AttributeError): - pass - else: - rigs += [t] - rigs.sort() - return rigs - - -rig_list = get_rig_list("") - - -collection_list = [] -for r in rig_list: - a = r.split(".") - if len(a) >= 2 and a[0] not in collection_list: - collection_list += [a[0]] - - -col_enum_list = [("All", "All", ""), ("None", "None", "")] -for c in collection_list: - col_enum_list += [(c, c, "")] class RigifyName(bpy.types.PropertyGroup): @@ -136,12 +74,12 @@ def register(): bpy.types.Armature.rigify_layers = bpy.props.CollectionProperty(type=RigifyArmatureLayer) IDStore = bpy.types.WindowManager - IDStore.rigify_collection = bpy.props.EnumProperty(items=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") # Add rig parameters - for rig in rig_list: + for rig in rig_lists.rig_list: r = utils.get_rig_type(rig).Rig try: r.add_parameters(RigifyParameters) diff --git a/rigify/generate.py b/rigify/generate.py index 89f89b71..69c8863b 100644 --- a/rigify/generate.py +++ b/rigify/generate.py @@ -24,14 +24,14 @@ import time import traceback import sys from rna_prop_ui import rna_idprop_ui_prop_get -from rigify.utils import MetarigError, new_bone, get_rig_type -from rigify.utils import ORG_PREFIX, MCH_PREFIX, DEF_PREFIX, WGT_PREFIX, ROOT_NAME, make_original_name -from rigify.utils import RIG_DIR -from rigify.utils import create_root_widget -from rigify.utils import random_id -from rigify.utils import copy_attributes -from rigify.rig_ui_template import UI_SLIDERS, layers_ui, UI_REGISTER -from rigify import rigs + +from .utils import MetarigError, new_bone, get_rig_type +from .utils import ORG_PREFIX, MCH_PREFIX, DEF_PREFIX, WGT_PREFIX, ROOT_NAME, make_original_name +from .utils import RIG_DIR +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 RIG_MODULE = "rigs" ORG_LAYER = [n == 31 for n in range(0, 32)] # Armature layer that original bones should be moved to. diff --git a/rigify/metarig_menu.py b/rigify/metarig_menu.py index 58826903..20225e10 100644 --- a/rigify/metarig_menu.py +++ b/rigify/metarig_menu.py @@ -22,6 +22,7 @@ import os from string import capwords import bpy + from . import utils diff --git a/rigify/rig_lists.py b/rigify/rig_lists.py new file mode 100644 index 00000000..c8c56310 --- /dev/null +++ b/rigify/rig_lists.py @@ -0,0 +1,83 @@ +#====================== 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 ======================== + +import os + +from . import utils + + +def get_rig_list(path): + """ Recursively searches for rig types, and returns a list. + """ + rigs = [] + MODULE_DIR = os.path.dirname(__file__) + RIG_DIR_ABS = os.path.join(MODULE_DIR, utils.RIG_DIR) + SEARCH_DIR_ABS = os.path.join(RIG_DIR_ABS, path) + files = os.listdir(SEARCH_DIR_ABS) + files.sort() + + for f in files: + is_dir = os.path.isdir(os.path.join(SEARCH_DIR_ABS, f)) # Whether the file is a directory + if f[0] in {".", "_"}: + pass + elif f.count(".") >= 2 or (is_dir and "." in f): + print("Warning: %r, filename contains a '.', skipping" % os.path.join(SEARCH_DIR_ABS, f)) + else: + if is_dir: + # Check directories + module_name = os.path.join(path, f).replace(os.sep, ".") + try: + rig = utils.get_rig_type(module_name) + except ImportError as e: + print("Rigify: " + str(e)) + else: + # Check if it's a rig itself + if not hasattr(rig, "Rig"): + # Check for sub-rigs + ls = get_rig_list(os.path.join(path, f, "")) # "" adds a final slash + rigs.extend(["%s.%s" % (f, l) for l in ls]) + else: + rigs += [f] + + elif f.endswith(".py"): + # Check straight-up python files + t = f[:-3] + module_name = os.path.join(path, t).replace(os.sep, ".") + try: + utils.get_rig_type(module_name).Rig + except (ImportError, AttributeError): + pass + else: + rigs += [t] + rigs.sort() + return rigs + + +def get_collection_list(rig_list): + collection_list = [] + for r in rig_list: + a = r.split(".") + if len(a) >= 2 and a[0] not in collection_list: + collection_list += [a[0]] + return collection_list + + +# Public variables +rig_list = get_rig_list("") +collection_list = get_collection_list(rig_list) +col_enum_list = [("All", "All", ""), ("None", "None", "")] + [(c, c, "") for c in collection_list] diff --git a/rigify/rigs/basic/copy.py b/rigify/rigs/basic/copy.py index be04830b..9deb0e11 100644 --- a/rigify/rigs/basic/copy.py +++ b/rigify/rigs/basic/copy.py @@ -19,9 +19,10 @@ # <pep8 compliant> import bpy -from rigify.utils import copy_bone -from rigify.utils import strip_org, make_deformer_name -from rigify.utils import create_bone_widget + +from ...utils import copy_bone +from ...utils import strip_org, make_deformer_name +from ...utils import create_bone_widget class Rig: diff --git a/rigify/rigs/basic/copy_chain.py b/rigify/rigs/basic/copy_chain.py index 4b4f0c85..a56e65c3 100644 --- a/rigify/rigs/basic/copy_chain.py +++ b/rigify/rigs/basic/copy_chain.py @@ -19,11 +19,12 @@ # <pep8 compliant> import bpy -from rigify.utils import MetarigError -from rigify.utils import copy_bone -from rigify.utils import connected_children_names -from rigify.utils import strip_org, make_deformer_name -from rigify.utils import create_bone_widget + +from ...utils import MetarigError +from ...utils import copy_bone +from ...utils import connected_children_names +from ...utils import strip_org, make_deformer_name +from ...utils import create_bone_widget class Rig: diff --git a/rigify/rigs/biped/arm/deform.py b/rigify/rigs/biped/arm/deform.py index 4ed2cc47..ad6d8634 100644 --- a/rigify/rigs/biped/arm/deform.py +++ b/rigify/rigs/biped/arm/deform.py @@ -18,13 +18,15 @@ # <pep8 compliant> -import bpy from math import acos + +import bpy from mathutils import Vector, Matrix -from rigify.utils import MetarigError -from rigify.utils import copy_bone, put_bone -from rigify.utils import connected_children_names -from rigify.utils import strip_org, make_mechanism_name, make_deformer_name + +from ....utils import MetarigError +from ....utils import copy_bone, put_bone +from ....utils import connected_children_names +from ....utils import strip_org, make_mechanism_name, make_deformer_name def align_roll(obj, bone1, bone2): diff --git a/rigify/rigs/biped/arm/fk.py b/rigify/rigs/biped/arm/fk.py index 77031227..e27e8541 100644 --- a/rigify/rigs/biped/arm/fk.py +++ b/rigify/rigs/biped/arm/fk.py @@ -19,14 +19,15 @@ # <pep8 compliant> import bpy -from rigify.utils import MetarigError -from rigify.utils import copy_bone -from rigify.utils import connected_children_names -from rigify.utils import strip_org, make_mechanism_name -from rigify.utils import get_layers -from rigify.utils import create_widget, create_limb_widget from rna_prop_ui import rna_idprop_ui_prop_get +from ....utils import MetarigError +from ....utils import copy_bone +from ....utils import connected_children_names +from ....utils import strip_org, make_mechanism_name +from ....utils import get_layers +from ....utils import create_widget, create_limb_widget + class Rig: """ An FK arm rig, with hinge switch. diff --git a/rigify/rigs/biped/arm/ik.py b/rigify/rigs/biped/arm/ik.py index 31383b54..50ae72a9 100644 --- a/rigify/rigs/biped/arm/ik.py +++ b/rigify/rigs/biped/arm/ik.py @@ -18,15 +18,17 @@ # <pep8 compliant> -import bpy -from mathutils import Vector from math import pi, acos -from rigify.utils import MetarigError -from rigify.utils import copy_bone -from rigify.utils import connected_children_names -from rigify.utils import strip_org, make_mechanism_name, insert_before_lr -from rigify.utils import create_widget, create_line_widget, create_sphere_widget + +import bpy from rna_prop_ui import rna_idprop_ui_prop_get +from mathutils import Vector + +from ....utils import MetarigError +from ....utils import copy_bone +from ....utils import connected_children_names +from ....utils import strip_org, make_mechanism_name, insert_before_lr +from ....utils import create_widget, create_line_widget, create_sphere_widget def angle_on_plane(plane, vec1, vec2): diff --git a/rigify/rigs/biped/leg/deform.py b/rigify/rigs/biped/leg/deform.py index 76f751f1..0d0bb2a7 100644 --- a/rigify/rigs/biped/leg/deform.py +++ b/rigify/rigs/biped/leg/deform.py @@ -18,13 +18,15 @@ # <pep8 compliant> -import bpy from math import acos + +import bpy from mathutils import Vector, Matrix -from rigify.utils import MetarigError -from rigify.utils import copy_bone, put_bone -from rigify.utils import connected_children_names, has_connected_children -from rigify.utils import strip_org, make_mechanism_name, make_deformer_name + +from ....utils import MetarigError +from ....utils import copy_bone, put_bone +from ....utils import connected_children_names, has_connected_children +from ....utils import strip_org, make_mechanism_name, make_deformer_name def align_roll(obj, bone1, bone2): diff --git a/rigify/rigs/biped/leg/fk.py b/rigify/rigs/biped/leg/fk.py index 3d776cb7..497c110d 100644 --- a/rigify/rigs/biped/leg/fk.py +++ b/rigify/rigs/biped/leg/fk.py @@ -19,14 +19,15 @@ # <pep8 compliant> import bpy -from mathutils import Vector -from rigify.utils import MetarigError -from rigify.utils import copy_bone -from rigify.utils import connected_children_names, has_connected_children -from rigify.utils import strip_org, make_mechanism_name -from rigify.utils import get_layers -from rigify.utils import create_widget, create_limb_widget from rna_prop_ui import rna_idprop_ui_prop_get +from mathutils import Vector + +from ....utils import MetarigError +from ....utils import copy_bone +from ....utils import connected_children_names, has_connected_children +from ....utils import strip_org, make_mechanism_name +from ....utils import get_layers +from ....utils import create_widget, create_limb_widget class Rig: diff --git a/rigify/rigs/biped/leg/ik.py b/rigify/rigs/biped/leg/ik.py index 7d01a602..98f4a3eb 100644 --- a/rigify/rigs/biped/leg/ik.py +++ b/rigify/rigs/biped/leg/ik.py @@ -18,15 +18,17 @@ # <pep8 compliant> -import bpy -from mathutils import Vector from math import pi, acos -from rigify.utils import MetarigError -from rigify.utils import copy_bone, flip_bone, put_bone -from rigify.utils import connected_children_names, has_connected_children -from rigify.utils import strip_org, make_mechanism_name, insert_before_lr -from rigify.utils import create_widget, create_line_widget, create_sphere_widget, create_circle_widget + +import bpy from rna_prop_ui import rna_idprop_ui_prop_get +from mathutils import Vector + +from ....utils import MetarigError +from ....utils import copy_bone, flip_bone, put_bone +from ....utils import connected_children_names, has_connected_children +from ....utils import strip_org, make_mechanism_name, insert_before_lr +from ....utils import create_widget, create_line_widget, create_sphere_widget, create_circle_widget def align_x_axis(obj, bone, vec): diff --git a/rigify/rigs/finger.py b/rigify/rigs/finger.py index 15e1bbac..ff2fc560 100644 --- a/rigify/rigs/finger.py +++ b/rigify/rigs/finger.py @@ -18,15 +18,17 @@ # <pep8 compliant> +import re + import bpy -from mathutils import Vector -from rigify.utils import MetarigError -from rigify.utils import copy_bone -from rigify.utils import connected_children_names -from rigify.utils import strip_org, make_mechanism_name, make_deformer_name -from rigify.utils import create_widget, create_limb_widget from rna_prop_ui import rna_idprop_ui_prop_get -import re +from mathutils import Vector + +from ..utils import MetarigError +from ..utils import copy_bone +from ..utils import connected_children_names +from ..utils import strip_org, make_mechanism_name, make_deformer_name +from ..utils import create_widget, create_limb_widget class Rig: diff --git a/rigify/rigs/misc/delta.py b/rigify/rigs/misc/delta.py index d13f7d4e..873515d8 100644 --- a/rigify/rigs/misc/delta.py +++ b/rigify/rigs/misc/delta.py @@ -18,11 +18,13 @@ # <pep8 compliant> -import bpy from math import acos -from rigify.utils import MetarigError -from rigify.utils import copy_bone -from rigify.utils import org_name, make_mechanism_name + +import bpy + +from ...utils import MetarigError +from ...utils import copy_bone +from ...utils import org_name, make_mechanism_name class Rig: diff --git a/rigify/rigs/neck_short.py b/rigify/rigs/neck_short.py index a94b3cef..f7814a0c 100644 --- a/rigify/rigs/neck_short.py +++ b/rigify/rigs/neck_short.py @@ -19,13 +19,15 @@ # <pep8 compliant> import bpy -from rigify.utils import MetarigError -from rigify.utils import copy_bone, new_bone, put_bone -from rigify.utils import connected_children_names -from rigify.utils import strip_org, make_mechanism_name, make_deformer_name -from rigify.utils import obj_to_bone, create_circle_widget from rna_prop_ui import rna_idprop_ui_prop_get +from ..utils import MetarigError +from ..utils import copy_bone, new_bone, put_bone +from ..utils import connected_children_names +from ..utils import strip_org, make_mechanism_name, make_deformer_name +from ..utils import obj_to_bone, create_circle_widget + + script1 = """ head_neck = ["%s", "%s"] """ diff --git a/rigify/rigs/palm.py b/rigify/rigs/palm.py index f055dffb..acef0529 100644 --- a/rigify/rigs/palm.py +++ b/rigify/rigs/palm.py @@ -18,13 +18,15 @@ # <pep8 compliant> -import bpy -from math import cos, pi -from rigify.utils import MetarigError -from rigify.utils import copy_bone -from rigify.utils import strip_org, deformer -from rigify.utils import create_widget import re +from math import cos, pi + +import bpy + +from ..utils import MetarigError +from ..utils import copy_bone +from ..utils import strip_org, deformer +from ..utils import create_widget def bone_siblings(obj, bone): diff --git a/rigify/rigs/spine.py b/rigify/rigs/spine.py index 56888c8a..332c6f43 100644 --- a/rigify/rigs/spine.py +++ b/rigify/rigs/spine.py @@ -26,13 +26,13 @@ from math import floor import bpy from mathutils import Vector -from rigify.utils import MetarigError -from rigify.utils import copy_bone, new_bone, flip_bone, put_bone -from rigify.utils import connected_children_names -from rigify.utils import strip_org, make_mechanism_name, make_deformer_name -from rigify.utils import obj_to_bone, create_circle_widget, create_compass_widget from rna_prop_ui import rna_idprop_ui_prop_get +from ..utils import MetarigError +from ..utils import copy_bone, new_bone, flip_bone, put_bone +from ..utils import connected_children_names +from ..utils import strip_org, make_mechanism_name, make_deformer_name +from ..utils import obj_to_bone, create_circle_widget, create_compass_widget script = """ main = "%s" diff --git a/rigify/ui.py b/rigify/ui.py index 946b1e70..40121cdc 100644 --- a/rigify/ui.py +++ b/rigify/ui.py @@ -18,13 +18,12 @@ # <pep8 compliant> -# test comment - import bpy from bpy.props import StringProperty -import rigify -from rigify.utils import get_rig_type -from rigify import generate + +from .utils import get_rig_type +from . import rig_lists +from . import generate class DATA_PT_rigify_buttons(bpy.types.Panel): @@ -59,7 +58,7 @@ class DATA_PT_rigify_buttons(bpy.types.Panel): for i in range(0, len(id_store.rigify_types)): id_store.rigify_types.remove(0) - for r in rigify.rig_list: + for r in rig_lists.rig_list: # collection = r.split('.')[0] # UNUSED if collection_name == "All": a = id_store.rigify_types.add() @@ -159,7 +158,7 @@ class BONE_PT_rigify_buttons(bpy.types.Panel): for i in range(0, len(id_store.rigify_types)): id_store.rigify_types.remove(0) - for r in rigify.rig_list: + for r in rig_lists.rig_list: # collection = r.split('.')[0] # UNUSED if collection_name == "All": a = id_store.rigify_types.add() diff --git a/rigify/utils.py b/rigify/utils.py index 3e23e3a4..de27b37c 100644 --- a/rigify/utils.py +++ b/rigify/utils.py @@ -20,6 +20,7 @@ import bpy import imp +import importlib import random import time from mathutils import Vector @@ -266,16 +267,16 @@ def create_widget(rig, bone_name, bone_transform_name=None): """ if bone_transform_name == None: bone_transform_name = bone_name - + obj_name = WGT_PREFIX + bone_name scene = bpy.context.scene - + # Check if it already exists in the scene if obj_name in scene.objects: # Move object to bone position, in case it changed obj = scene.objects[obj_name] obj_to_bone(obj, rig, bone_transform_name) - + return None else: # Delete object if it exists in blend data but not scene data. @@ -284,7 +285,7 @@ def create_widget(rig, bone_name, bone_transform_name=None): if obj_name in bpy.data.objects: bpy.data.objects[obj_name].user_clear() bpy.data.objects.remove(bpy.data.objects[obj_name]) - + # Create mesh object mesh = bpy.data.meshes.new(obj_name) obj = bpy.data.objects.new(obj_name, mesh) @@ -413,23 +414,17 @@ def copy_attributes(a, b): def get_rig_type(rig_type): """ Fetches a rig module by name, and returns it. """ - #print("%s.%s.%s" % (__package__,RIG_DIR,rig_type)) - name="%s.%s.%s" % (MODULE_NAME, RIG_DIR, rig_type) - submod = __import__(name) - for c in (name.split("."))[1:]: - submod = getattr(submod, c) + name = ".%s.%s" % (RIG_DIR, rig_type) + submod = importlib.import_module(name, package=MODULE_NAME) imp.reload(submod) return submod -def get_metarig_module(metarig): +def get_metarig_module(metarig_name): """ Fetches a rig module by name, and returns it. """ - #print("%s.%s.%s" % (__package__,METARIG_DIR,metarig)) - name="%s.%s.%s" % (MODULE_NAME, METARIG_DIR, metarig) - submod = __import__(name) - for c in (name.split("."))[1:]: - submod = getattr(submod, c) + name = ".%s.%s" % (METARIG_DIR, metarig_name) + submod = importlib.import_module(name, package=MODULE_NAME) imp.reload(submod) return submod @@ -500,7 +495,7 @@ def write_metarig(obj, layers=False, func_name="create"): generating the real rig with rigify. """ code = [] - + code.append("import bpy\n") code.append("def %s(obj):" % func_name) |