[Bf-extensions-cvs] [d7cd2f6] master: Refactored Selection Sets to have an interface similar to Bone Groups.

Ines Almeida noreply at git.blender.org
Thu Mar 3 01:08:02 CET 2016


Commit: d7cd2f6dfe8c424a11bdd6f0a9060ad985c851c7
Author: Ines Almeida
Date:   Fri Feb 26 19:50:29 2016 +0000
Branches: master
https://developer.blender.org/rBAd7cd2f6dfe8c424a11bdd6f0a9060ad985c851c7

Refactored Selection Sets to have an interface similar to Bone Groups.

'Toggle' operator was converted into Select/Deselect, which adds and deletes from the selection, respectively.
Added Assign/Unassign to be able to edit a set.
Tweaked bl-info and properties descriptions and labels
Motionpath functions from the Gooseberry branch were removed

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

D	bone_selection_groups.py
A	bone_selection_sets.py

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

diff --git a/bone_selection_groups.py b/bone_selection_groups.py
deleted file mode 100644
index 1c00bb1..0000000
--- a/bone_selection_groups.py
+++ /dev/null
@@ -1,244 +0,0 @@
-# ***** 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 LICENCE BLOCK *****
-
-bl_info = {
-    "name": "Bone Selection Groups",
-    "author": "Antony Riakiotakis",
-    "version": (1, 0, 2),
-    "blender": (2, 75, 0),
-    "location": "Properties > Object Buttons",
-    "description": "Operator and storage for restoration of bone selection state.",
-    "category": "Animation",
-}
-
-import bpy
-from bpy.types import (
-    Operator,
-    Panel,
-    UIList,
-)
-
-from bpy.props import (
-    StringProperty,
-    BoolProperty,
-    IntProperty,
-    FloatProperty,
-    EnumProperty,
-    CollectionProperty,
-    BoolVectorProperty,
-    FloatVectorProperty,
-)
-
-
-class POSE_PT_selection_sets(Panel):
-    bl_label = "Selection Sets"
-    bl_space_type = 'PROPERTIES'
-    bl_region_type = 'WINDOW'
-    bl_context = "data"
-
-    @classmethod
-    def poll(cls, context):
-        return context.object.type == 'ARMATURE'
-
-    def draw(self, context):
-        layout = self.layout
-
-        armature = context.object
-
-        # Rig type list
-        row = layout.row()
-        row.template_list(
-            "POSE_UL_selection_set", "",
-            armature, "selection_sets",
-            armature, "active_selection_set")
-
-        col = row.column()
-        colsub = col.column(align=True)
-        colsub.operator("pose.selection_set_add", icon='ZOOMIN', text="")
-        colsub.operator("pose.selection_set_remove", icon='ZOOMOUT', text="")
-
-        layout.operator("pose.selection_set_toggle")
-
-
-class POSE_UL_selection_set(UIList):
-    def draw_item(self, context, layout, data, set, icon, active_data, active_propname, index):
-        layout.prop(set, "name", text="", emboss=False)
-
-
-class SelectionEntry(bpy.types.PropertyGroup):
-    name = StringProperty(name="Bone Name")
-
-
-class SelectionSet(bpy.types.PropertyGroup):
-    name = StringProperty(name="Set Name")
-    bone_ids = CollectionProperty(type=SelectionEntry)
-
-
-class PluginOperator(Operator):
-    @classmethod
-    def poll(self, context):
-        return (context.object and
-                context.object.type == 'ARMATURE' and
-                context.mode == 'POSE')
-
-
-class POSE_OT_selection_set_add(PluginOperator):
-    bl_idname = "pose.selection_set_add"
-    bl_label = "Add Selection Set"
-    bl_options = {'UNDO', 'REGISTER'}
-
-    def execute(self, context):
-        keep = False
-        armature = context.object
-        pose = armature.pose
-
-        selection_set = armature.selection_sets.add()
-        selection_set.name = "SelectionSet.%d" % len(armature.selection_sets)
-        armature.active_selection_set = len(armature.selection_sets) - 1
-        for bone in pose.bones:
-            if (bone.bone.select):
-                bone_id = selection_set.bone_ids.add()
-                bone_id.name = bone.name
-                keep = True
-
-        if (not keep):
-            armature.selection_sets.remove(armature.active_selection_set)
-            numsets = len(armature.selection_sets)
-            if (armature.active_selection_set > (numsets - 1) and numsets > 0):
-                armature.active_selection_set = len(armature.selection_sets) - 1
-            return {'CANCELLED'}
-
-        return {'FINISHED'}
-
-
-class POSE_OT_selection_set_remove(PluginOperator):
-    bl_idname = "pose.selection_set_remove"
-    bl_label = "Delete Selection Set"
-    bl_options = {'UNDO', 'REGISTER'}
-
-    def execute(self, context):
-        armature = context.object
-
-        armature.selection_sets.remove(armature.active_selection_set)
-        numsets = len(armature.selection_sets)
-        if (armature.active_selection_set > (numsets - 1) and numsets > 0):
-            armature.active_selection_set = len(armature.selection_sets) - 1
-        return {'FINISHED'}
-
-
-class POSE_OT_selection_set_toggle(PluginOperator):
-    bl_idname = "pose.selection_set_toggle"
-    bl_label = "Toggle Selection Set"
-    bl_options = {'UNDO', 'REGISTER'}
-
-    def execute(self, context):
-        armature = context.object
-        pose = armature.pose
-
-        selection_set = armature.selection_sets[armature.active_selection_set]
-        for bone in pose.bones:
-            bone.bone.select = False
-
-        for bone in selection_set.bone_ids:
-            pose.bones[bone.name].bone.select = True
-
-        return {'FINISHED'}
-
-
-class MotionPathsCopyStartFrame(Operator):
-    bl_idname = "anim.motionpaths_copy_scene_startframe"
-    bl_label = "Copy Scene Start Frame"
-    bl_options = {'REGISTER', 'UNDO'}
-
-    armature_paths = BoolProperty()
-
-    @classmethod
-    def poll(cls, context):
-        return (context.object)
-
-    def execute(self, context):
-        avs = None
-        motionpath = None
-        ob = context.object
-        scene = context.scene
-
-        if (self.armature_paths):
-            avs = ob.pose.animation_visualization
-        else:
-            avs = ob.animation_visualization
-
-        preview = scene.use_preview_range
-
-        if (avs):
-            motionpath = avs.motion_path
-
-        if (motionpath):
-            if (preview):
-                motionpath.frame_start = scene.frame_preview_start
-                motionpath.frame_end = scene.frame_preview_end
-            else:
-                motionpath.frame_start = scene.frame_start
-                motionpath.frame_end = scene.frame_end
-        else:
-            return {'CANCELLED'}
-
-        return {'FINISHED'}
-
-
-classes = (
-    POSE_PT_selection_sets,
-    POSE_UL_selection_set,
-    SelectionEntry,
-    SelectionSet,
-    POSE_OT_selection_set_add,
-    POSE_OT_selection_set_remove,
-    POSE_OT_selection_set_toggle,
-    MotionPathsCopyStartFrame
-)
-
-
-def copy_frames_armature(self, context):
-    layout = self.layout
-    layout.operator("anim.motionpaths_copy_scene_startframe").armature_paths = True
-
-
-def copy_frames_object(self, context):
-    layout = self.layout
-    layout.operator("anim.motionpaths_copy_scene_startframe").armature_paths = False
-
-
-def register():
-    for cls in classes:
-        bpy.utils.register_class(cls)
-
-    bpy.types.Object.selection_sets = CollectionProperty(type=SelectionSet)
-    bpy.types.Object.active_selection_set = IntProperty()
-    bpy.types.DATA_PT_motion_paths.append(copy_frames_armature)
-    bpy.types.OBJECT_PT_motion_paths.append(copy_frames_object)
-
-
-def unregister():
-    for cls in classes:
-        bpy.utils.unregister_class(cls)
-
-    del bpy.types.Object.selection_sets
-    del bpy.types.Object.active_selection_set
-
-
-if __name__ == "__main__":
-    register()
diff --git a/bone_selection_sets.py b/bone_selection_sets.py
new file mode 100644
index 0000000..8bd4841
--- /dev/null
+++ b/bone_selection_sets.py
@@ -0,0 +1,315 @@
+# ***** 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 LICENCE BLOCK *****
+
+bl_info = {
+    "name": "Bone Selection Sets",
+    "author": "Antony Riakiotakis, Inês Almeida",
+    "version": (2, 0, 0),
+    "blender": (2, 75, 0),
+    "location": "Properties > Object Data (Armature) > Selection Sets",
+    "description": "List of Bone sets for easy selection while animating",
+    "warning": "",
+    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
+                "Scripts/Animation/SelectionSets",
+    "category": "Animation",
+}
+
+import bpy
+from bpy.types import (
+    Operator,
+    Menu,
+    Panel,
+    UIList,
+    PropertyGroup,
+)
+
+from bpy.props import (
+    StringProperty,
+    BoolProperty,
+    IntProperty,
+    FloatProperty,
+    EnumProperty,
+    CollectionProperty,
+    BoolVectorProperty,
+    FloatVectorProperty,
+)
+
+# Data Structure ##############################################################
+
+# Note: bones are stored by name, this means that if the bone is renamed,
+# there can be problems. However, bone renaming is unlikely during animation
+class SelectionEntry(PropertyGroup):
+    name = StringProperty(name="Bone Name")
+
+
+class SelectionSet(PropertyGroup):
+    name = StringProperty(name="Set Name")
+    bone_ids = CollectionProperty(type=SelectionEntry)
+
+
+# UI Panel w/ UIList ##########################################################
+
+class POSE_MT_selection_sets_specials(Menu):
+    bl_label = "Selection Sets Specials"
+
+    def draw(self, context):
+        layout = self.layout
+
+        # TODO
+        #layout.operator("pose.selection_sets_sort", icon='SORTALPHA', text="Sort by Name").sort_type = 'NAME'
+
+
+class POSE_PT_selection_sets(Panel):
+    bl_label = "Selection Sets"
+    bl_space_type = 'PROPERTIE

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list