[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