Newer
Older
Alfonso Annarumma
committed
# ##### 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 #####
# <pep8 compliant>
#
bl_info = {
"name": "Layer Management",
"author": "Alfonso Annarumma",
anfeo
committed
"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/"
anfeo
committed
"tracker_url": "http://projects.blender.org/tracker/index.php?"
"func=detail&aid=32472",
Sebastian Nell
committed
Alfonso Annarumma
committed
import bpy
anfeo
committed
from bpy.types import Menu, Panel, UIList
Alfonso Annarumma
committed
from bpy.props import StringProperty, BoolProperty, IntProperty, CollectionProperty, BoolVectorProperty
anfeo
committed
EDIT = ["EDIT_MESH", "EDIT_CURVE", "EDIT_SURFACE", "EDIT_METABALL", "EDIT_TEXT", "EDIT_ARMATURE"]
Alfonso Annarumma
committed
class LayerGroups(bpy.types.PropertyGroup):
Sebastian Nell
committed
toggle = BoolProperty(name="", default=False)
wire = BoolProperty(name="", default=False)
Sebastian Nell
committed
lock = BoolProperty(name="", default=False)
anfeo
committed
layer_groups = BoolVectorProperty(name="Layer Groups", default = ([False]*20), size=20, subtype='LAYER')
Sebastian Nell
committed
Alfonso Annarumma
committed
# 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"})
Sebastian Nell
committed
anfeo
committed
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)
Alfonso Annarumma
committed
class RemoveLayerGroup(bpy.types.Operator):
'''Tooltip'''
bl_idname = "object.layergroup_remove"
bl_label = "Remove select Layer Group"
Sebastian Nell
committed
anfeo
committed
index_group = bpy.props.IntProperty()
Sebastian Nell
committed
Alfonso Annarumma
committed
@classmethod
def poll(cls, context):
return context.scene is not None
def execute(self, context):
scene = context.scene
Sebastian Nell
committed
index_group = self.index_group
Alfonso Annarumma
committed
scene.layergroups.remove(index_group)
Sebastian Nell
committed
if index_group > 0:
scene.layergroups_index = index_group - 1
Alfonso Annarumma
committed
return {'FINISHED'}
class AddLayerGroup(bpy.types.Operator):
'''Tooltip'''
bl_idname = "object.layergroup_add"
bl_label = "Add select Layer group"
Sebastian Nell
committed
anfeo
committed
index = bpy.props.IntProperty()
layer = layer = BoolVectorProperty(name="Layer", default = ([False]*20), size=20)
Sebastian Nell
committed
Alfonso Annarumma
committed
@classmethod
def poll(cls, context):
return context.scene is not None
def execute(self, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
scene = context.scene
layergroups = scene.layergroups
Sebastian Nell
committed
Alfonso Annarumma
committed
index = self.index
layer = self.layer
Sebastian Nell
committed
Alfonso Annarumma
committed
item = layergroups.add()
anfeo
committed
index_number= str(index)
anfeo
committed
if len(index_number)==2:
index_number = "0"+index_number
if len(index_number)==3:
Alfonso Annarumma
committed
index_number = index_number
else:
anfeo
committed
index_number = "00"+index_number
item.name= 'LayerGroup.'+index_number
Alfonso Annarumma
committed
#item.use=True
Sebastian Nell
committed
scene.layergroups_index = index
Alfonso Annarumma
committed
scene.layergroups[index].layer_groups = layer
Sebastian Nell
committed
Alfonso Annarumma
committed
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"
Sebastian Nell
committed
Alfonso Annarumma
committed
#prop definition
#layer number
layerN = IntProperty()
spacecheck = BoolProperty()
index_group = IntProperty()
Alfonso Annarumma
committed
@classmethod
Sebastian Nell
committed
Alfonso Annarumma
committed
def poll(cls, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
return context.scene
Alfonso Annarumma
committed
def execute(self, context):
Alfonso Annarumma
committed
spacecheck = self.spacecheck
scene = context.scene
Sebastian Nell
committed
Alfonso Annarumma
committed
layerN = self.layerN
Alfonso Annarumma
committed
if spacecheck:
Sebastian Nell
committed
Alfonso Annarumma
committed
space = context.area.spaces.active
else:
space = context.scene
if layerN == -1:
Alfonso Annarumma
committed
index = self.index_group
groups = scene.layergroups[index].layer_groups
layergroups = scene.layergroups[index]
Sebastian Nell
committed
Alfonso Annarumma
committed
layers = space.layers
union = [False]*20
Sebastian Nell
committed
Alfonso Annarumma
committed
if not layergroups.toggle:
anfeo
committed
for i in range(0,20):
Sebastian Nell
committed
union[i] = groups[i] or layers[i]
space.layers = union
layergroups.toggle = True
Alfonso Annarumma
committed
else:
anfeo
committed
for i in range(0,20):
Sebastian Nell
committed
union[i] = not groups[i] and layers[i]
anfeo
committed
space.layers=union
layergroups.toggle=False
Sebastian Nell
committed
Alfonso Annarumma
committed
else:
Sebastian Nell
committed
Alfonso Annarumma
committed
if self.shift:
Sebastian Nell
committed
Alfonso Annarumma
committed
if space.layers[layerN]:
toggle = False
else:
toggle = True
space.layers[layerN] = toggle
Sebastian Nell
committed
Alfonso Annarumma
committed
else:
anfeo
committed
layer = [False]*20
layer[layerN] = True
space.layers = layer
Alfonso Annarumma
committed
if space.layers[layerN]:
Sebastian Nell
committed
toggle = False
Alfonso Annarumma
committed
return {'FINISHED'}
def invoke(self, context, event):
self.shift = event.shift
Sebastian Nell
committed
Alfonso Annarumma
committed
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"
Sebastian Nell
committed
Alfonso Annarumma
committed
#prop definition
#layer number
layerN = IntProperty()
Alfonso Annarumma
committed
@classmethod
Sebastian Nell
committed
Alfonso Annarumma
committed
def poll(cls, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
return context.scene
Alfonso Annarumma
committed
def execute(self, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
layerN = self.layerN
Sebastian Nell
committed
scene = context.scene
Sebastian Nell
committed
#cyecle all object in the layer
Sebastian Nell
committed
Alfonso Annarumma
committed
if obj.select:
visible = False
Sebastian Nell
committed
anfeo
committed
for i in range(0,20):
visible = True
Sebastian Nell
committed
Sebastian Nell
committed
anfeo
committed
toggle= True
obj.layers[layerN]=toggle
Sebastian Nell
committed
anfeo
committed
layer = [False]*20
layer[layerN] = True
obj.layers = layer
Sebastian Nell
committed
toggle = False
Alfonso Annarumma
committed
return {'FINISHED'}
Sebastian Nell
committed
Alfonso Annarumma
committed
def invoke(self, context, event):
self.shift = event.shift
Sebastian Nell
committed
Alfonso Annarumma
committed
return self.execute(context)
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
class MakeWireLayer(bpy.types.Operator):
'''Make Wire All Objects on this Layer'''
bl_idname = "object.wirelayer"
bl_label = "Make Wire Draw the object on this layer"
#prop definition
#layer number
layerN = IntProperty()
#lock status
wire = BoolProperty()
index_group = IntProperty()
@classmethod
def poll(cls, context):
return context.scene
def execute(self, context):
scene = context.scene
layerN = self.layerN
wire = self.wire
view_3d = context.area.spaces.active
#check if layer have some thing
if view_3d.layers_used[layerN] or layerN == -1:
if wire:
display = 'WIRE'
else:
display = 'TEXTURED'
#cyecle all object in the layer
for obj in context.scene.objects:
if layerN == -1:
index = self.index_group
groups = scene.layergroups[index].layer_groups
layers = obj.layers
layergroup = [False]*20
for i in range (0,20):
layergroup[i] = layers[i] and groups[i]
if True in layergroup:
obj.draw_type = display
scene.layergroups[index].wire = not wire
else:
if obj.layers[layerN]:
obj.draw_type = display
scene.WireLayer[layerN] = not wire
return {'FINISHED'}
Alfonso Annarumma
committed
class LockSelected(bpy.types.Operator):
Alfonso Annarumma
committed
bl_idname = "object.lockselected"
bl_label = "Hide Select of Selected"
Sebastian Nell
committed
Alfonso Annarumma
committed
#prop definition
#layer number
layerN = IntProperty()
Sebastian Nell
committed
Alfonso Annarumma
committed
#lock status
lock = BoolProperty()
index_group = IntProperty()
Sebastian Nell
committed
Alfonso Annarumma
committed
@classmethod
Sebastian Nell
committed
Alfonso Annarumma
committed
def poll(cls, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
return context.scene
Alfonso Annarumma
committed
def execute(self, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
scene = context.scene
layerN = self.layerN
lock = self.lock
Sebastian Nell
committed
Alfonso Annarumma
committed
view_3d = context.area.spaces.active
Sebastian Nell
committed
Alfonso Annarumma
committed
#check if layer have some thing
if view_3d.layers_used[layerN] or layerN == -1:
Sebastian Nell
committed
#cyecle all object in the layer
Alfonso Annarumma
committed
for obj in context.scene.objects:
Sebastian Nell
committed
if layerN == -1:
Sebastian Nell
committed
Alfonso Annarumma
committed
index = self.index_group
groups = scene.layergroups[index].layer_groups
layers = obj.layers
Sebastian Nell
committed
layergroup = [False]*20
anfeo
committed
for i in range (0,20):
layergroup[i] = layers[i] and groups[i]
Sebastian Nell
committed
Alfonso Annarumma
committed
if True in layergroup:
obj.hide_select = not lock
obj.select = False
scene.layergroups[index].lock = not lock
Alfonso Annarumma
committed
else:
if obj.layers[layerN]:
obj.hide_select = not lock
obj.select = False
scene.LockLayer[layerN] = not lock
Alfonso Annarumma
committed
return {'FINISHED'}
class SelectObjectsLayer(bpy.types.Operator):
anfeo
committed
'''Select All the Objects on this Layer - Hold SHIFT for multy selection - Hold CTRL to make active the last selected object'''
Alfonso Annarumma
committed
bl_idname = "object.selectobjectslayer"
bl_label = "Select objects in Layer"
Sebastian Nell
committed
CoDEmanX
committed
select_obj = BoolProperty()
layerN = IntProperty()
Alfonso Annarumma
committed
@classmethod
def poll(cls, context):
return context.scene
def execute(self, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
view_3d = context.area.spaces.active
select_obj = self.select_obj
Alfonso Annarumma
committed
layerN = self.layerN
scene = context.scene
CoDEmanX
committed
i = 0
s = 0
Sebastian Nell
committed
#check if layer have some thing
Alfonso Annarumma
committed
if view_3d.layers_used[layerN]:
anfeo
committed
Sebastian Nell
committed
Alfonso Annarumma
committed
for obj in context.scene.objects:
Alfonso Annarumma
committed
if obj.layers[layerN]:
CoDEmanX
committed
i += 1
anfeo
committed
if self.ctrl:
context.scene.objects.active = obj
Alfonso Annarumma
committed
if obj.layers[layerN] and obj.select:
CoDEmanX
committed
s += 1
anfeo
committed
#context.scene.objects.active = obj
CoDEmanX
committed
if s == i:
Alfonso Annarumma
committed
for obj in context.scene.objects:
anfeo
committed
#context.scene.objects.active = obj
Sebastian Nell
committed
Alfonso Annarumma
committed
if obj.layers[layerN]:
CoDEmanX
committed
obj.select = False
anfeo
committed
Alfonso Annarumma
committed
else:
shift = self.shift
anfeo
committed
bpy.ops.object.select_by_layer(extend=shift, layers=layerN+1)
Alfonso Annarumma
committed
return {'FINISHED'}
anfeo
committed
def invoke(self, context, event):
self.shift = event.shift
self.ctrl = event.ctrl
return self.execute(context)
CoDEmanX
committed
Alfonso Annarumma
committed
class AllLayersSelect(bpy.types.Operator):
'''Active all Layer in scene'''
bl_idname = "scene.layersselect"
bl_label = "Select All Layer"
Sebastian Nell
committed
vis = BoolProperty()
Alfonso Annarumma
committed
@classmethod
def poll(cls, context):
return context.scene
def execute(self, context):
Sebastian Nell
committed
Alfonso Annarumma
committed
scene = context.scene
vis = self.vis
#store the active layer
active = scene.active_layer
Sebastian Nell
committed
Alfonso Annarumma
committed
view_3d = context.area.spaces.active
#check for lock camera and layer is active
if view_3d.lock_camera_and_layers is True:
anfeo
committed
space= scene
Alfonso Annarumma
committed
else:
space = view_3d
Alfonso Annarumma
committed
if not vis:
anfeo
committed
for i in range (0,20):
Sebastian Nell
committed
Alfonso Annarumma
committed
#keep selection of active layer
if active == i:
anfeo
committed
space.layers[i]= True
Sebastian Nell
committed
Alfonso Annarumma
committed
#deselect the other...
Sebastian Nell
committed
else:
anfeo
committed
space.layers[i]= False
Alfonso Annarumma
committed
else:
anfeo
committed
for i in range (0,20):
Alfonso Annarumma
committed
#select all layer
anfeo
committed
space.layers[i]=True
Sebastian Nell
committed
#after the cycle, deselect and select the previus active layer
anfeo
committed
space.layers[active]=False
space.layers[active]=True
Alfonso Annarumma
committed
return {'FINISHED'}
class LayerName(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
anfeo
committed
bl_region_type = "TOOLS"
Alfonso Annarumma
committed
bl_label = "Layer Management"
anfeo
committed
bl_idname = "_PT_rig_layers"
Alfonso Annarumma
committed
bl_options = {'DEFAULT_CLOSED'}
anfeo
committed
bl_category = "Layer"
Alfonso Annarumma
committed
# layer name prop definition
bpy.types.Scene.LayerName1 = StringProperty(name="Layer Name", default='layer1')
bpy.types.Scene.LayerName2 = StringProperty(name="Layer Name", default='layer2')
bpy.types.Scene.LayerName3 = StringProperty(name="Layer Name", default='layer3')
bpy.types.Scene.LayerName4 = StringProperty(name="Layer Name", default='layer4')
bpy.types.Scene.LayerName5 = StringProperty(name="Layer Name", default='layer5')
bpy.types.Scene.LayerName6 = StringProperty(name="Layer Name", default='layer6')
bpy.types.Scene.LayerName7 = StringProperty(name="Layer Name", default='layer7')
bpy.types.Scene.LayerName8 = StringProperty(name="Layer Name", default='layer8')
bpy.types.Scene.LayerName9 = StringProperty(name="Layer Name", default='layer9')
bpy.types.Scene.LayerName10 = StringProperty(name="Layer Name", default='layer10')
bpy.types.Scene.LayerName11 = StringProperty(name="Layer Name", default='layer11')
bpy.types.Scene.LayerName12 = StringProperty(name="Layer Name", default='layer12')
bpy.types.Scene.LayerName13 = StringProperty(name="Layer Name", default='layer13')
bpy.types.Scene.LayerName14 = StringProperty(name="Layer Name", default='layer14')
bpy.types.Scene.LayerName15 = StringProperty(name="Layer Name", default='layer15')
bpy.types.Scene.LayerName16 = StringProperty(name="Layer Name", default='layer16')
bpy.types.Scene.LayerName17 = StringProperty(name="Layer Name", default='layer17')
bpy.types.Scene.LayerName18 = StringProperty(name="Layer Name", default='layer18')
bpy.types.Scene.LayerName19 = StringProperty(name="Layer Name", default='layer19')
bpy.types.Scene.LayerName20 = StringProperty(name="Layer Name", default='layer20')
Sebastian Nell
committed
Alfonso Annarumma
committed
#prop for hide empty
bpy.types.Scene.LayerVisibility = BoolProperty(name="Hide empty Layer", default=False)
Sebastian Nell
committed
Alfonso Annarumma
committed
#prop for extra option
bpy.types.Scene.ExtraOptions = BoolProperty(name="Show extra options", default=True)
Sebastian Nell
committed
Alfonso Annarumma
committed
#lock layer status
bpy.types.Scene.LockLayer = BoolVectorProperty(name="Lock Layer", default = ([False]*20), size=20)
Alfonso Annarumma
committed
#prop for show index
bpy.types.Scene.LayerIndex = BoolProperty(name="Show Index", default=False)
Sebastian Nell
committed
Alfonso Annarumma
committed
#prop for show classic
bpy.types.Scene.Classic = BoolProperty(name="Classic", default=False,description="Use a classic layer selection visibility")
Alfonso Annarumma
committed
#Select object Status
bpy.types.Scene.ObjectSelect = BoolVectorProperty(name="Object Select", default = ([True]*20), size=20)
#wire set up
bpy.types.Scene.WireLayer = BoolVectorProperty(name="Wire Layer", default = ([True]*20), size=20)
Sebastian Nell
committed
Alfonso Annarumma
committed
#toggle for merge
anfeo
committed
#bpy.types.Scene.MergeToggle = bpy.props.BoolVectorProperty(name="Merge Toggle", default = (False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False,False), size=20)
Alfonso Annarumma
committed
@classmethod
def poll(self, context):
try:
return (context.mode not in EDIT)
except (AttributeError, KeyError, TypeError):
return False
def draw(self, context):
Alfonso Annarumma
committed
scene = context.scene
Alfonso Annarumma
committed
view_3d = context.area.spaces.active
#check for lock camera and layer is active
if view_3d.lock_camera_and_layers is True:
space = scene
spacecheck = False
Sebastian Nell
committed
Alfonso Annarumma
committed
else:
space = view_3d
spacecheck = True
Sebastian Nell
committed
Alfonso Annarumma
committed
#row = layout.row(align=True)
vis = False
allIcon = 'RESTRICT_VIEW_OFF'
allText = "Isolate active"
Alfonso Annarumma
committed
#check if there is a layer off
for layer in space.layers:
Sebastian Nell
committed
Alfonso Annarumma
committed
if not layer:
vis = True
allIcon = 'RESTRICT_VIEW_ON'
allText = "All Visible"
Alfonso Annarumma
committed
layout = self.layout
column = layout.column()
row = column.row()
col2 = row.column()
Sebastian Nell
committed
#lock camera and layers button
Alfonso Annarumma
committed
col2.prop(view_3d, "lock_camera_and_layers", text="")
Sebastian Nell
committed
Alfonso Annarumma
committed
#select all
Sebastian Nell
committed
Alfonso Annarumma
committed
allView = col2.operator("scene.layersselect", emboss=False, icon=allIcon, text="")
allView.vis = vis
Sebastian Nell
committed
col = row.column()
col.alignment = 'RIGHT'
Alfonso Annarumma
committed
#classic
col.prop(scene, "Classic", text="Classic")
Sebastian Nell
committed
Alfonso Annarumma
committed
#show extra option checkbox
Sebastian Nell
committed
col.alignment = 'RIGHT'
Alfonso Annarumma
committed
col.prop(scene, "ExtraOptions", text="Options")
col1 = row.column()
Sebastian Nell
committed
#show index
Alfonso Annarumma
committed
col1.prop(scene, "LayerIndex", text="Index")
Sebastian Nell
committed
Alfonso Annarumma
committed
# hide empty
Alfonso Annarumma
committed
if context.object:
col1.alignment = 'RIGHT'
Sebastian Nell
committed
col1.prop(scene, "LayerVisibility", toggle=False, text="Hide Empty")
Alfonso Annarumma
committed
Alfonso Annarumma
committed
#list the layer
anfeo
committed
for i in range(0,20):
Alfonso Annarumma
committed
Sebastian Nell
committed
#inizializing the icon
anfeo
committed
#lockIcon='UNLOCKED'
iconUsed = 'RADIOBUT_OFF'
iconAc = 'NONE'
iconLayer = 'NONE'
Alfonso Annarumma
committed
#selectIcon ='RESTRICT_SELECT_OFF'
#inizializing the bool value
noitem = False
Sebastian Nell
committed
active = False
Sebastian Nell
committed
layer = 20
Alfonso Annarumma
committed
scene = context.scene
Sebastian Nell
committed
Alfonso Annarumma
committed
extra = scene.ExtraOptions
Sebastian Nell
committed
Alfonso Annarumma
committed
layer_used = view_3d.layers_used[i]
Sebastian Nell
committed
Alfonso Annarumma
committed
#check the hide empty value
if scene.LayerVisibility:
Sebastian Nell
committed
#find the empty layer
Alfonso Annarumma
committed
if layer_used:
#print (i)
layer = i
Sebastian Nell
committed
'Add an object to see the layer'
Alfonso Annarumma
committed
else:
layer = i
Alfonso Annarumma
committed
#the layer number
#set icon for wire layer
wire = scene.WireLayer[i]
wireIcon = 'POTATO'
if not wire:
wireIcon = 'WIRE'
else:
wireIcon = 'POTATO'
Alfonso Annarumma
committed
#set icon for lock layer
lock = scene.LockLayer[i]
Sebastian Nell
committed
Alfonso Annarumma
committed
if lock:
lockIcon = 'LOCKED'
Alfonso Annarumma
committed
else:
lockIcon = 'UNLOCKED'
Alfonso Annarumma
committed
#check if there are Selected obj in the layer
Sebastian Nell
committed
#check if layer have some thing
Alfonso Annarumma
committed
if layer_used:
Sebastian Nell
committed
iconUsed = 'LAYER_USED'
Sebastian Nell
committed
Alfonso Annarumma
committed
active_object = context.object
Sebastian Nell
committed
Alfonso Annarumma
committed
if active_object:
Sebastian Nell
committed
Alfonso Annarumma
committed
if context.object.layers[i]:
Sebastian Nell
committed
active = True
Alfonso Annarumma
committed
else:
scene.ObjectSelect[i] = True
Alfonso Annarumma
committed
if layer == i:
Sebastian Nell
committed
#check for active layer and set the icon
Alfonso Annarumma
committed
if view_3d.lock_camera_and_layers:
Sebastian Nell
committed
if scene.active_layer == layer:
Alfonso Annarumma
committed
iconAc = 'FILE_TICK'
noitem = True
Sebastian Nell
committed
Alfonso Annarumma
committed
if active:
iconUsed = 'LAYER_ACTIVE'
Sebastian Nell
committed
#set icon for layer view
Alfonso Annarumma
committed
if view_3d.layers[layer]:
viewIcon = 'RESTRICT_VIEW_OFF'
noitem = True
else:
viewIcon = 'RESTRICT_VIEW_ON'
noitem = False
row2 = column.row(align=True)
Alfonso Annarumma
committed
# if space==scene:
Sebastian Nell
committed
#
Alfonso Annarumma
committed
# colb1= row2.column()
Sebastian Nell
committed
# #layer visibility operator
Alfonso Annarumma
committed
# tog = colb1.operator("view3d.layers", text="",icon=viewIcon, emboss=False)
# tog.nr=layer+1
# tog.toggle=True
# viewemboss = True
Sebastian Nell
committed
iconLayer = viewIcon
Alfonso Annarumma
committed
# layer index
if scene.LayerIndex:
Sebastian Nell
committed
anfeo
committed
col6 = row2.column()
col6.scale_x = 0.14
Alfonso Annarumma
committed
col6.label(text=str(i+1)+".")
Sebastian Nell
committed
# visualization
Alfonso Annarumma
committed
classic = scene.Classic
if not classic:
Sebastian Nell
committed
colb2 = row2.column()
Alfonso Annarumma
committed
colb2.prop(space, "layers", index=layer, emboss=True, icon=iconLayer, toggle=True, text="")
Sebastian Nell
committed
else:
anfeo
committed
colb6 = row2.column()
Alfonso Annarumma
committed
used = colb6.operator("object.layertoggle", text="", icon= iconLayer, emboss=True)
used.layerN = i
anfeo
committed
used.spacecheck=spacecheck
Alfonso Annarumma
committed
#text prop
anfeo
committed
s = "LayerName"+str(i+1)
colb3 = row2.column()
colb3.prop(scene, s, text="",icon=iconAc)
Alfonso Annarumma
committed
if extra:
Alfonso Annarumma
committed
#Select by type operator
anfeo
committed
colb4 = row2.column()
select = colb4.operator("object.selectobjectslayer", icon='RESTRICT_SELECT_OFF',text="", emboss=True )
Sebastian Nell
committed
select.layerN = i
Alfonso Annarumma
committed
#select.select_obj= selobj
Sebastian Nell
committed
#lock operator
anfeo
committed
colb5 = row2.column()
lk = colb5.operator("object.lockselected", text="", emboss=True, icon=lockIcon)
Sebastian Nell
committed
Alfonso Annarumma
committed
lk.layerN = i
lk.lock = lock
Alfonso Annarumma
committed
# #occuped layer
# colb6.label(text="", icon=iconUsed)
Alfonso Annarumma
committed
#merge layer
anfeo
committed
colb7 = row2.column()
merge = colb7.operator("object.mergeselected", text="", emboss=True, icon=iconUsed)
merge.layerN = i
#wire view:
colb8 = row2.column()
wirecol = colb8.operator("object.wirelayer", text="", emboss=True, icon=wireIcon)
wirecol.layerN = i
wirecol.wire = wire
Alfonso Annarumma
committed
if not scene.LayerVisibility:
if i == 4 or i == 9 or i == 14 or i == 19:
anfeo
committed
row3 = column.row()
Alfonso Annarumma
committed
row3.separator()
if len(scene.objects) == 0:
Alfonso Annarumma
committed
layout.label(text='No objects in scene')
Sebastian Nell
committed
anfeo
committed
class UI_UL_layergroups(UIList):
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
# assert(isinstance(item, bpy.types.VertexGroup)
lgroup = item
scene = context.scene
view_3d = context.area.spaces.active
#check for lock camera and layer is active
if view_3d.lock_camera_and_layers is True:
space = scene
anfeo
committed
spacecheck = False
else:
space = view_3d
anfeo
committed
spacecheck = True
#######################
if self.layout_type in {'DEFAULT', 'COMPACT'}:
layout.prop(lgroup, "name", text="", emboss=False)
#set icon for view
anfeo
committed
if lgroup.toggle:
iconLayer = 'RESTRICT_VIEW_OFF'
else:
iconLayer = 'RESTRICT_VIEW_ON'
#set icon for lock
anfeo
committed
if lgroup.lock:
iconLock = 'LOCKED'
anfeo
committed
else:
iconLock = 'UNLOCKED'
anfeo
committed
#set icon for wire layer
anfeo
committed
wireIcon = 'POTATO'
if not lgroup.wire:
wireIcon = 'WIRE'
else:
wireIcon = 'POTATO'
#lock operato
anfeo
committed
lk = layout.operator("object.lockselected", text="", emboss=False, icon= iconLock)
lk.index_group = index
lk.lock = lgroup.lock
lk.layerN = -1
anfeo
committed
#viwe operator
anfeo
committed
view = layout.operator("object.layertoggle", text="", emboss=False, icon= iconLayer)
view.index_group = index
view.layerN = -1
view.spacecheck = spacecheck
#wire operator
wirecol = layout.operator("object.wirelayer", text="", emboss=False, icon= wireIcon)
wirecol.index_group = index
wirecol.wire = lgroup.wire
wirecol.layerN = -1
anfeo
committed
elif self.layout_type in {'GRID'}:
layout.alignment = 'CENTER'
anfeo
committed
class LayerGroupsUI(bpy.types.Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = "TOOLS"
bl_category = "Layer"
bl_label = "Layer Groups"
bl_idname = "_PT_layer_group"
bl_options = {'DEFAULT_CLOSED'}
@classmethod
def poll(self, context):
try:
return (context.mode not in EDIT)
except (AttributeError, KeyError, TypeError):
return False
def draw(self, context):
scene = context.scene
anfeo
committed
anfeo
committed
index_group = scene.layergroups_index
items = len(scene.layergroups)
anfeo
committed
viewIcon = 'RESTRICT_VIEW_OFF'
layout = self.layout
row = layout.row()
row.template_list("UI_UL_layergroups", "", context.scene, "layergroups", context.scene, "layergroups_index", rows=items)
col = row.column(align =True)
anfeo
committed
add = col.operator("object.layergroup_add", icon='ZOOMIN', text="")
add.index = items
add.layer = scene.layers
anfeo
committed
remove = col.operator("object.layergroup_remove", icon='ZOOMOUT', text="")
remove.index_group = index_group
anfeo
committed
if items > 0:
layout.prop(scene.layergroups[index_group], "layer_groups", text="", toggle=True)
layout.prop(scene.layergroups[index_group], "name", text="Name:")
Sebastian Nell
committed
Alfonso Annarumma
committed
def register():
CoDEmanX
committed
anfeo
committed
bpy.utils.register_module(__name__)
'''bpy.utils.register_class(LayerGroupsUI)
bpy.utils.register_class(UI_UL_layergroups)
bpy.utils.register_class(LayerName)
bpy.utils.register_class(AllLayersSelect)
bpy.utils.register_class(SelectObjectsLayer)
bpy.utils.register_class(MakeWireLayer)
bpy.utils.register_class(LockSelected)
bpy.utils.register_class(MergeSelected)
bpy.utils.register_class(LayerToggle)
bpy.utils.register_class(AddLayerGroup)
bpy.utils.register_class(RemoveLayerGroup)
bpy.utils.register_class(LayerGroup)'''
anfeo
committed
def unregister():
anfeo
committed
bpy.utils.unregister_module(__name__)
'''bpy.utils.unregister_class(LayerGroupsUI)
bpy.utils.unregister_class(UI_UL_layergroups)
bpy.utils.unregister_class(LayerName)
bpy.utils.unregister_class(AllLayersSelect)
bpy.utils.unregister_class(SelectObjectsLayer)
bpy.utils.unregister_class(MakeWireLayer)
bpy.utils.unregister_class(LockSelected)
bpy.utils.unregister_class(MergeSelected)
bpy.utils.unregister_class(LayerToggle)
bpy.utils.unregister_class(AddLayerGroup)
bpy.utils.unregister_class(RemoveLayerGroup)
bpy.utils.unregister_class(LayerGroup)'''
Alfonso Annarumma
committed
if __name__ == "__main__":
register()