[Bf-extensions-cvs] [39f0c03] master: Cleanup of layer manager addon.

Bastien Montagne noreply at git.blender.org
Wed Aug 6 09:23:49 CEST 2014


Commit: 39f0c031b2872d295896d05cabd07ea70a23b748
Author: Bastien Montagne
Date:   Mon Aug 4 21:06:26 2014 +0200
Branches: master
https://developer.blender.org/rBAC39f0c031b2872d295896d05cabd07ea70a23b748

Cleanup of layer manager addon.

This ended up as nearly a full rewrite (not logic-wise, but style-wise mostly)... :/

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

M	ui_layer_manager.py

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

diff --git a/ui_layer_manager.py b/ui_layer_manager.py
index 6c26ab8..58e9dbe 100644
--- a/ui_layer_manager.py
+++ b/ui_layer_manager.py
@@ -21,897 +21,539 @@
 bl_info = {
     "name": "Layer Management",
     "author": "Alfonso Annarumma",
-    "version": (1, 5,1),
+    "version": (1, 5, 1),
     "blender": (2, 70, 0),
     "location": "View3D > Properties panel > Layer Management",
     "warning": "",
     "description": "Display and Edit Layer Name",
-    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
-                "Scripts/3D_interaction/layer_manager",
-    "tracker_url": "http://projects.blender.org/tracker/index.php?"
-                   "func=detail&aid=32472",
-    "category": "3D View"}
+    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/3D_interaction/layer_manager",
+    "category": "3D View",
+}
 
 import bpy
-from bpy.types import Menu, Panel, UIList
-from bpy.props import StringProperty, BoolProperty, IntProperty, CollectionProperty, BoolVectorProperty
+from bpy.types import Menu, Panel, UIList, PropertyGroup
+from bpy.props import StringProperty, BoolProperty, IntProperty, CollectionProperty, BoolVectorProperty, PointerProperty
+from bpy.app.handlers import persistent
 
-EDIT = ["EDIT_MESH", "EDIT_CURVE", "EDIT_SURFACE", "EDIT_METABALL", "EDIT_TEXT", "EDIT_ARMATURE"]
+EDIT_MODES = {'EDIT_MESH', 'EDIT_CURVE', 'EDIT_SURFACE', 'EDIT_METABALL', 'EDIT_TEXT', 'EDIT_ARMATURE'}
 
-class LayerGroups(bpy.types.PropertyGroup):
 
-    toggle = BoolProperty(name="", default=False)
-    wire = BoolProperty(name="", default=False)
-    
-    
+class NamedLayer(PropertyGroup):
+    name = StringProperty(name="Layer Name")
+    use_lock = BoolProperty(name="Lock Layer", default=False)
+    use_object_select = BoolProperty(name="Object Select", default=True)
+    use_wire = BoolProperty(name="Wire Layer", default=False)
 
-    lock = BoolProperty(name="", default=False)
 
-    layer_groups = BoolVectorProperty(name="Layer Groups", default = ([False]*20), size=20, subtype='LAYER')
+class NamedLayers(PropertyGroup):
+    layers = CollectionProperty(type=NamedLayer)
+    use_hide_empty_layers = BoolProperty(name="Hide Empty Layer", default=False)
+    use_extra_options = BoolProperty(name="Show Extra Options", default=True)
+    use_layer_indices = BoolProperty(name="Show Layer Indices", default=False)
+    use_classic = BoolProperty(name="Classic", default=False, description="Use a classic layer selection visibility")
 
-    # A list of identifiers (colon-separated strings) which property’s controls should be displayed
-    # in a template_list.
-    # Note that the order is respected.
-    #template_list_controls = StringProperty(default="toggle", options={"HIDDEN"})
+    use_init = BoolProperty(default=True, options={'HIDDEN'})
 
-bpy.utils.register_class(LayerGroups)
 
-bpy.types.Scene.layergroups = CollectionProperty(type=LayerGroups)
-# Unused, but this is needed for the TemplateList to work…
-bpy.types.Scene.layergroups_index = IntProperty(default=-1)
+# Stupid, but only solution currently is to use a handler to init that layers collection...
+ at persistent
+def check_init_data(scene):
+    namedlayers = scene.namedlayers
+    if namedlayers.use_init:
+        while namedlayers.layers:
+            namedlayers.layers.remove(0)
+        for i in range(20):
+            layer = namedlayers.layers.add()
+            layer.name = "Layer%.2d" % i
+        namedlayers.use_init = False
 
-class RemoveLayerGroup(bpy.types.Operator):
-    '''Tooltip'''
-    bl_idname = "object.layergroup_remove"
-    bl_label = "Remove select Layer Group"
 
-    index_group = bpy.props.IntProperty()
+class LayerGroup(PropertyGroup):
+    use_toggle = BoolProperty(name="", default=False)
+    use_wire = BoolProperty(name="", default=False)
+    use_lock = BoolProperty(name="", default=False)
 
-    @classmethod
-    def poll(cls, context):
-        return context.scene is not None
-
-    def execute(self, context):
-        scene = context.scene
-
-        index_group = self.index_group
+    layers = BoolVectorProperty(name="Layers", default=([False] * 20), size=20, subtype='LAYER')
 
-        scene.layergroups.remove(index_group)
 
-        if index_group > 0:
-            scene.layergroups_index = index_group - 1
+class SCENE_OT_namedlayer_group_add(bpy.types.Operator):
+    """Add and select a new layer group"""
+    bl_idname = "scene.namedlayer_group_add"
+    bl_label = "Add Layer Group"
 
-        return {'FINISHED'}
-
-class AddLayerGroup(bpy.types.Operator):
-    '''Tooltip'''
-    bl_idname = "object.layergroup_add"
-    bl_label = "Add select Layer group"
-
-    index = bpy.props.IntProperty()
-    layer = layer = BoolVectorProperty(name="Layer", default = ([False]*20), size=20)
+    layers = BoolVectorProperty(name="Layers", default=([False] * 20), size=20)
 
     @classmethod
     def poll(cls, context):
-        return context.scene is not None
+        return bool(context.scene)
 
     def execute(self, context):
-
         scene = context.scene
         layergroups = scene.layergroups
+        layers = self.layers
 
-        index = self.index
-        layer = self.layer
-
-        item = layergroups.add()
-        index_number= str(index)
-
-        if len(index_number)==2:
-            index_number = "0"+index_number
-            if len(index_number)==3:
-                index_number = index_number
-        else:
-            index_number = "00"+index_number
-        item.name= 'LayerGroup.'+index_number
-        #item.use=True
-        scene.layergroups_index = index
-        scene.layergroups[index].layer_groups = layer
+        group_idx = len(layergroups)
+        layer_group = layergroups.add()
+        layer_group.name = "LayerGroup.%.3d" % group_idx
+        layer_group.layers = layers
+        scene.layergroups_index = group_idx
 
         return {'FINISHED'}
 
-class LayerToggle(bpy.types.Operator):
-    '''Visualize this Layer, Shift-Click to select multiple layers'''
-    bl_idname = "object.layertoggle"
-    bl_label = "Visualize this layer"
 
-    #prop definition
-    #layer number
-    layerN = IntProperty()
-    spacecheck = BoolProperty()
-    index_group = IntProperty()
+class SCENE_OT_namedlayer_group_remove(bpy.types.Operator):
+    """Remove selected layer group"""
+    bl_idname = "scene.namedlayer_group_remove"
+    bl_label = "Remove Layer Group"
 
-    @classmethod
+    group_idx = bpy.props.IntProperty()
 
+    @classmethod
     def poll(cls, context):
-
-        return context.scene
+        return bool(context.scene)
 
     def execute(self, context):
-
-        spacecheck = self.spacecheck
         scene = context.scene
+        group_idx = self.group_idx
 
-        layerN = self.layerN
-
-        if spacecheck:
+        scene.layergroups.remove(group_idx)
+        if scene.layergroups_index > len(scene.layergroups) - 1:
+            scene.layergroups_index = len(scene.layergroups) - 1
 
-            space = context.area.spaces.active
-        else:
-            space = context.scene
+        return {'FINISHED'}
 
-        if layerN == -1:
-            index = self.index_group
-            groups = scene.layergroups[index].layer_groups
-            layergroups = scene.layergroups[index]
 
-            layers = space.layers
-            union = [False]*20
+class SCENE_OT_namedlayer_toggle_visibility(bpy.types.Operator):
+    """Show or hide given layer (shift to extend)"""
+    bl_idname = "scene.namedlayer_toggle_visibility"
+    bl_label = "Show/Hide Layer"
 
-            if not layergroups.toggle:
-                for i in range(0,20):
+    layer_idx = IntProperty()
+    group_idx = IntProperty()
+    use_spacecheck = BoolProperty()
+    extend = BoolProperty(options={'SKIP_SAVE'})
 
-                    union[i] = groups[i] or layers[i]
+    @classmethod
+    def poll(cls, context):
+        return context.scene and (context.area.spaces.active.type == 'VIEW_3D')
 
-                space.layers = union
-                layergroups.toggle = True
+    def execute(self, context):
+        scene = context.scene
+        layer_cont = context.area.spaces.active if self.use_spacecheck else context.scene
+        layer_idx = self.layer_idx
+
+        if layer_idx == -1:
+            group_idx = self.group_idx
+            layergroups = scene.layergroups[group_idx]
+            group_layers = layergroups.layers
+            layers = layer_cont.layers
+
+            if layergroups.use_toggle:
+                layer_cont.layers = [not group_layer and layer for group_layer, layer in zip(group_layers, layers)]
+                layergroups.use_toggle = False
             else:
-                for i in range(0,20):
-
-                    union[i] =  not groups[i]  and layers[i]
-
-                space.layers=union
-                layergroups.toggle=False
-
+                layer_cont.layers = [group_layer or layer for group_layer, layer in zip(group_layers, layers)]
+                layergroups.use_toggle = True
         else:
-
-            if self.shift:
-
-                if space.layers[layerN]:
-                    toggle = False
-                else:
-
-                    toggle = True
-                space.layers[layerN] = toggle
-
+            if self.extend:
+                layer_cont.layers[layer_idx] = not layer_cont.layers[layer_idx]
             else:
-
-                layer = [False]*20
-                layer[layerN] = True
-                space.layers = layer
-
-                if space.layers[layerN]:
-                    toggle = False
-
+                layers = [False] * 20
+                layers[layer_idx] = True
+                layer_cont.layers = layers
         return {'FINISHED'}
-    def invoke(self, context, event):
-        self.shift = event.shift
 
+    def invoke(self, context, event):
+        self.extend = event.shift
         return self.execute(context)
 
-class MergeSelected(bpy.types.Operator):
-    '''Move Selected Objects in this Layer Shift-Click to select multiple layers'''
-    bl_idname = "object.mergeselected"
-    bl_label = "Merge Selected object in this layer"
+
+class SCENE_OT_namedlayer_move_to_layer(bpy.types.Operator):
+    "

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list