Skip to content
Snippets Groups Projects
rig_ui_template.py 3.09 KiB
Newer Older
  • Learn to ignore specific revisions
  • #====================== 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 ========================
    
    UI_SLIDERS = """
    import bpy
    
    rig_id = "%s"
    
    
    class RigUI(bpy.types.Panel):
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'UI'
        bl_label = "Rig Main Properties"
        bl_idname = rig_id + "_PT_rig_ui"
    
        @classmethod
        def poll(self, context):
            if context.mode != 'POSE':
                return False
            try:
                return (context.active_object.data.get("rig_id") == rig_id)
            except (AttributeError, KeyError, TypeError):
                return False
    
        def draw(self, context):
            layout = self.layout
            pose_bones = context.active_object.pose.bones
            try:
                selected_bones = [bone.name for bone in context.selected_pose_bones]
                selected_bones += [context.active_pose_bone.name]
            except (AttributeError, TypeError):
                return
    
            def is_selected(names):
                # Returns whether any of the named bones are selected.
                if type(names) == list:
                    for name in names:
                        if name in selected_bones:
                            return True
                elif names in selected_bones:
                    return True
                return False
    
    
    """
    
    
    def layers_ui(layers):
        """ Turn a list of booleans into a layer UI.
        """
    
        code = """
    class RigLayers(bpy.types.Panel):
        bl_space_type = 'VIEW_3D'
        bl_region_type = 'UI'
        bl_label = "Rig Layers"
        bl_idname = rig_id + "_PT_rig_layers"
    
        @classmethod
        def poll(self, context):
            try:
                return (context.active_object.data.get("rig_id") == rig_id)
            except (AttributeError, KeyError, TypeError):
                return False
    
        def draw(self, context):
            layout = self.layout
            col = layout.column()
    """
        i = 0
        for layer in layers:
            if layer:
                code += "\n        row = col.row()\n"
                if i == 28:
                    code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='Root')\n" % (str(i))
                else:
                    code += "        row.prop(context.active_object.data, 'layers', index=%s, toggle=True, text='%s')\n" % (str(i), str(i + 1))
            i += 1
    
        return code
    
    
    
    UI_REGISTER = """
    
    def register():
        bpy.utils.register_class(RigUI)
        bpy.utils.register_class(RigLayers)
    
    register()
    """