1360 lines
43 KiB
Plaintext
1360 lines
43 KiB
Plaintext
|
# space_view_3d_display_tools.py Copyright (C) 2012, Jordi Vall-llovera
|
||
|
#
|
||
|
# Multiple display tools for fast navigate/interact with the viewport
|
||
|
#
|
||
|
# ***** 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": "Display Tools",
|
||
|
"author": "Jordi Vall-llovera Medina",
|
||
|
"version": (1, 2, 6),
|
||
|
"blender": (2, 6, 4),
|
||
|
"location": "Toolshelf",
|
||
|
"description": "Display tools for fast navigate/interact with the viewport",
|
||
|
"warning": "",
|
||
|
"wiki_url": "http://jordiart3d.blogspot.com.es/",
|
||
|
"tracker_url": "",
|
||
|
"category": "3D View"}
|
||
|
|
||
|
"""
|
||
|
Additional links:
|
||
|
Author Site: http://jordiart3d.blogspot.com.es/
|
||
|
"""
|
||
|
|
||
|
import bpy
|
||
|
|
||
|
from bpy.props import IntProperty, BoolProperty, FloatProperty, EnumProperty
|
||
|
|
||
|
# init delay variables
|
||
|
bpy.types.Scene.Delay = bpy.props.BoolProperty(
|
||
|
default = False,
|
||
|
description = "Activate delay return to normal viewport mode")
|
||
|
|
||
|
bpy.types.Scene.DelayTime = bpy.props.IntProperty(
|
||
|
default = 30,
|
||
|
min = 1,
|
||
|
max = 500,
|
||
|
soft_min = 10,
|
||
|
soft_max = 250,
|
||
|
description = "Delay time to return to normal viewport\
|
||
|
mode after move your mouse cursor")
|
||
|
|
||
|
bpy.types.Scene.DelayTimeGlobal = bpy.props.IntProperty(
|
||
|
default = 30,
|
||
|
min = 1,
|
||
|
max = 500,
|
||
|
soft_min = 10,
|
||
|
soft_max = 250,
|
||
|
description = "Delay time to return to normal viewport\
|
||
|
mode after move your mouse cursor")
|
||
|
|
||
|
#init variable for fast navigate
|
||
|
bpy.types.Scene.EditActive = bpy.props.BoolProperty(
|
||
|
default = True,
|
||
|
description = "Activate for fast navigate in edit mode too")
|
||
|
|
||
|
#Fast Navigate toggle function
|
||
|
def trigger_fast_navigate(trigger):
|
||
|
scene = bpy.context.scene
|
||
|
scene.FastNavigateStop = False
|
||
|
|
||
|
if trigger == True:
|
||
|
trigger = False
|
||
|
else:
|
||
|
trigger = True
|
||
|
|
||
|
#Control how to display particles during fast navigate
|
||
|
def display_particles(mode):
|
||
|
scene = bpy.context.scene
|
||
|
|
||
|
if mode == True:
|
||
|
for particles in bpy.data.particles:
|
||
|
if particles.type == 'EMITTER':
|
||
|
particles.draw_method = 'DOT'
|
||
|
particles.draw_percentage = 100
|
||
|
else:
|
||
|
particles.draw_method = 'RENDER'
|
||
|
particles.draw_percentage = 100
|
||
|
else:
|
||
|
for particles in bpy.data.particles:
|
||
|
if particles.type == 'EMITTER':
|
||
|
particles.draw_method = 'DOT'
|
||
|
particles.draw_percentage = scene.ParticlesPercentageDisplay
|
||
|
else:
|
||
|
particles.draw_method = 'RENDER'
|
||
|
particles.draw_percentage = scene.ParticlesPercentageDisplay
|
||
|
|
||
|
#Do repetitive fast navigate related stuff
|
||
|
def fast_navigate_stuff(self, context, event):
|
||
|
scene = bpy.context.scene
|
||
|
view = context.space_data
|
||
|
|
||
|
if bpy.context.area.type != 'VIEW_3D':
|
||
|
return self.cancel(context)
|
||
|
|
||
|
if event.type == 'ESC' or event.type == 'RET' or event.type == 'SPACE':
|
||
|
return self.cancel(context)
|
||
|
|
||
|
if scene.FastNavigateStop == True:
|
||
|
return self.cancel(context)
|
||
|
|
||
|
#fast navigate while orbit/panning
|
||
|
if event.type == 'MIDDLEMOUSE':
|
||
|
if scene.Delay == True:
|
||
|
if scene.DelayTime < scene.DelayTimeGlobal:
|
||
|
scene.DelayTime += 1
|
||
|
view.viewport_shade = scene.FastMode
|
||
|
self.mode = False
|
||
|
|
||
|
#fast navigate while transform operations
|
||
|
if event.type == 'G' or event.type == 'R' or event.type == 'S':
|
||
|
if scene.Delay == True:
|
||
|
if scene.DelayTime < scene.DelayTimeGlobal:
|
||
|
scene.DelayTime += 1
|
||
|
view.viewport_shade = scene.FastMode
|
||
|
self.mode = False
|
||
|
|
||
|
#fast navigate while menu popups or duplicates
|
||
|
if event.type == 'W' or event.type == 'D' or event.type == 'L'\
|
||
|
or event.type == 'U' or event.type == 'I' or event.type == 'M'\
|
||
|
or event.type == 'A' or event.type == 'B':
|
||
|
if scene.Delay == True:
|
||
|
if scene.DelayTime < scene.DelayTimeGlobal:
|
||
|
scene.DelayTime += 1
|
||
|
view.viewport_shade = scene.FastMode
|
||
|
self.mode = False
|
||
|
|
||
|
#fast navigate while numpad navigation
|
||
|
if event.type == 'NUMPAD_PERIOD' or event.type == 'NUMPAD_1'\
|
||
|
or event.type == 'NUMPAD_2' or event.type == 'NUMPAD_3'\
|
||
|
or event.type == 'NUMPAD_4' or event.type == 'NUMPAD_5'\
|
||
|
or event.type == 'NUMPAD_6' or event.type == 'NUMPAD_7'\
|
||
|
or event.type == 'NUMPAD_8' or event.type == 'NUMPAD_9':
|
||
|
if scene.Delay == True:
|
||
|
if scene.DelayTime < scene.DelayTimeGlobal:
|
||
|
scene.DelayTime += 1
|
||
|
view.viewport_shade = scene.FastMode
|
||
|
self.mode = False
|
||
|
|
||
|
#fast navigate while zooming with mousewheel too
|
||
|
if event.type == 'WHEELUPMOUSE' or event.type == 'WHEELDOWNMOUSE':
|
||
|
scene.DelayTime = scene.DelayTimeGlobal
|
||
|
view.viewport_shade = scene.FastMode
|
||
|
self.mode = False
|
||
|
|
||
|
if event.type == 'MOUSEMOVE':
|
||
|
if scene.Delay == True:
|
||
|
if scene.DelayTime == 0:
|
||
|
scene.DelayTime = scene.DelayTimeGlobal
|
||
|
view.viewport_shade = scene.OriginalMode
|
||
|
self.mode = True
|
||
|
else:
|
||
|
view.viewport_shade = scene.OriginalMode
|
||
|
self.mode = True
|
||
|
|
||
|
if scene.Delay == True:
|
||
|
scene.DelayTime -= 1
|
||
|
if scene.DelayTime == 0:
|
||
|
scene.DelayTime = scene.DelayTimeGlobal
|
||
|
view.viewport_shade = scene.OriginalMode
|
||
|
self.mode = True
|
||
|
|
||
|
if scene.ShowParticles == False:
|
||
|
for particles in bpy.data.particles:
|
||
|
if particles.type == 'EMITTER':
|
||
|
particles.draw_method = 'NONE'
|
||
|
else:
|
||
|
particles.draw_method = 'NONE'
|
||
|
else:
|
||
|
display_particles(self.mode)
|
||
|
|
||
|
#Fast Navigate operator
|
||
|
class FastNavigate(bpy.types.Operator):
|
||
|
"""Operator that runs Fast navigate in modal mode"""
|
||
|
bl_idname = "view3d.fast_navigate_operator"
|
||
|
bl_label = "Fast Navigate"
|
||
|
trigger = BoolProperty(default = False)
|
||
|
mode = BoolProperty(default = False)
|
||
|
scene = bpy.context.scene
|
||
|
scene.DelayTime = scene.DelayTimeGlobal
|
||
|
|
||
|
def modal(self, context, event):
|
||
|
scene = bpy.context.scene
|
||
|
view = context.space_data
|
||
|
|
||
|
if scene.EditActive == True:
|
||
|
fast_navigate_stuff(self, context ,event)
|
||
|
return {'PASS_THROUGH'}
|
||
|
else:
|
||
|
obj = context.active_object
|
||
|
if obj:
|
||
|
if obj.mode != 'EDIT':
|
||
|
fast_navigate_stuff(self, context ,event)
|
||
|
return {'PASS_THROUGH'}
|
||
|
else:
|
||
|
return {'PASS_THROUGH'}
|
||
|
else:
|
||
|
fast_navigate_stuff(self, context ,event)
|
||
|
return {'PASS_THROUGH'}
|
||
|
|
||
|
def execute(self, context):
|
||
|
context.window_manager.modal_handler_add(self)
|
||
|
trigger_fast_navigate(self.trigger)
|
||
|
return {'RUNNING_MODAL'}
|
||
|
|
||
|
def cancel(self, context):
|
||
|
scene = context.scene
|
||
|
for particles in bpy.data.particles:
|
||
|
particles.draw_percentage = scene.InitialParticles
|
||
|
return {'CANCELLED'}
|
||
|
|
||
|
#Fast Navigate Stop
|
||
|
def fast_navigate_stop(context):
|
||
|
scene = bpy.context.scene
|
||
|
scene.FastNavigateStop = True
|
||
|
|
||
|
#Fast Navigate Stop Operator
|
||
|
class FastNavigateStop(bpy.types.Operator):
|
||
|
'''Stop Fast Navigate Operator'''
|
||
|
bl_idname = "view3d.fast_navigate_stop"
|
||
|
bl_label = "Stop"
|
||
|
FastNavigateStop = IntProperty(name = "FastNavigateStop",
|
||
|
description = "Stop fast navigate mode",
|
||
|
default = 0)
|
||
|
|
||
|
def execute(self,context):
|
||
|
fast_navigate_stop(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Drawtype textured
|
||
|
def draw_textured(context):
|
||
|
view = context.space_data
|
||
|
view.viewport_shade = 'TEXTURED'
|
||
|
bpy.context.scene.game_settings.material_mode = 'GLSL'
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.draw_type = 'TEXTURED'
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.draw_type = 'TEXTURED'
|
||
|
|
||
|
class DisplayTextured(bpy.types.Operator):
|
||
|
'''Display objects in textured mode'''
|
||
|
bl_idname = "view3d.display_textured"
|
||
|
bl_label = "Textured"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
draw_textured(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Drawtype solid
|
||
|
def draw_solid(context):
|
||
|
view = context.space_data
|
||
|
view.viewport_shade = 'TEXTURED'
|
||
|
bpy.context.scene.game_settings.material_mode = 'GLSL'
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.draw_type = 'SOLID'
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.draw_type = 'SOLID'
|
||
|
|
||
|
class DisplaySolid(bpy.types.Operator):
|
||
|
'''Display objects in solid mode'''
|
||
|
bl_idname = "view3d.display_solid"
|
||
|
bl_label = "Solid"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
draw_solid(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Drawtype wire
|
||
|
def draw_wire(context):
|
||
|
view = context.space_data
|
||
|
view.viewport_shade = 'TEXTURED'
|
||
|
bpy.context.scene.game_settings.material_mode = 'GLSL'
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.draw_type = 'WIRE'
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.draw_type = 'WIRE'
|
||
|
|
||
|
class DisplayWire(bpy.types.Operator):
|
||
|
'''Display objects in wireframe mode'''
|
||
|
bl_idname = "view3d.display_wire"
|
||
|
bl_label = "Wire"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
draw_wire(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Drawtype bounds
|
||
|
def draw_bounds(context):
|
||
|
view = context.space_data
|
||
|
view.viewport_shade = 'TEXTURED'
|
||
|
bpy.context.scene.game_settings.material_mode = 'GLSL'
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.draw_type = 'BOUNDS'
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.draw_type = 'BOUNDS'
|
||
|
|
||
|
class DisplayBounds(bpy.types.Operator):
|
||
|
'''Display objects in bounds mode'''
|
||
|
bl_idname = "view3d.display_bounds"
|
||
|
bl_label = "Bounds"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
draw_bounds(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Shade smooth
|
||
|
def shade_smooth(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
bpy.ops.object.select_all(action = 'TOGGLE')
|
||
|
bpy.ops.object.shade_smooth()
|
||
|
bpy.ops.object.select_all(action = 'TOGGLE')
|
||
|
else:
|
||
|
obj = context.active_object
|
||
|
if obj.mode == 'OBJECT':
|
||
|
for obj in selection:
|
||
|
bpy.ops.object.shade_smooth()
|
||
|
else:
|
||
|
bpy.ops.mesh.faces_shade_smooth()
|
||
|
|
||
|
class DisplayShadeSmooth(bpy.types.Operator):
|
||
|
'''Display shade smooth meshes'''
|
||
|
bl_idname = "view3d.display_shade_smooth"
|
||
|
bl_label = "Smooth"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
shade_smooth(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Shade flat
|
||
|
def shade_flat(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
bpy.ops.object.select_all(action = 'TOGGLE')
|
||
|
bpy.ops.object.shade_flat()
|
||
|
bpy.ops.object.select_all(action = 'TOGGLE')
|
||
|
else:
|
||
|
obj = context.active_object
|
||
|
if obj.mode == 'OBJECT':
|
||
|
for obj in selection:
|
||
|
bpy.ops.object.shade_flat()
|
||
|
else:
|
||
|
bpy.ops.mesh.faces_shade_flat()
|
||
|
|
||
|
class DisplayShadeFlat(bpy.types.Operator):
|
||
|
'''Display shade flat meshes'''
|
||
|
bl_idname = "view3d.display_shade_flat"
|
||
|
bl_label = "Flat"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
shade_flat(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Shadeless on
|
||
|
def shadeless_on(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.materials:
|
||
|
obj.use_shadeless = True
|
||
|
else:
|
||
|
for sel in selection:
|
||
|
if sel.type == 'MESH':
|
||
|
materials = sel.data.materials
|
||
|
for mat in materials:
|
||
|
mat.use_shadeless = True
|
||
|
|
||
|
class DisplayShadelessOn(bpy.types.Operator):
|
||
|
'''Display shadeless material'''
|
||
|
bl_idname = "view3d.display_shadeless_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
shadeless_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Shadeless off
|
||
|
def shadeless_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.materials:
|
||
|
obj.use_shadeless = False
|
||
|
else:
|
||
|
for sel in selection:
|
||
|
if sel.type == 'MESH':
|
||
|
materials = sel.data.materials
|
||
|
for mat in materials:
|
||
|
mat.use_shadeless = False
|
||
|
|
||
|
class DisplayShadelessOff(bpy.types.Operator):
|
||
|
'''Display shaded material'''
|
||
|
bl_idname = "view3d.display_shadeless_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
shadeless_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Wireframe on
|
||
|
def wire_on(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.show_wire = True
|
||
|
|
||
|
for mesh in bpy.data.meshes:
|
||
|
mesh.show_all_edges = True
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.show_wire = True
|
||
|
|
||
|
for sel in selection:
|
||
|
if sel.type == 'MESH':
|
||
|
mesh = sel.data
|
||
|
mesh.show_all_edges = True
|
||
|
|
||
|
class DisplayWireframeOn(bpy.types.Operator):
|
||
|
'''Display wireframe overlay on'''
|
||
|
bl_idname = "view3d.display_wire_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
wire_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Wireframe off
|
||
|
def wire_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.show_wire = False
|
||
|
|
||
|
for mesh in bpy.data.meshes:
|
||
|
mesh.show_all_edges = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.show_wire = False
|
||
|
|
||
|
for sel in selection:
|
||
|
if sel.type == 'MESH':
|
||
|
mesh = sel.data
|
||
|
mesh.show_all_edges = False
|
||
|
|
||
|
class DisplayWireframeOff(bpy.types.Operator):
|
||
|
'''Display wireframe overlay off'''
|
||
|
bl_idname = "view3d.display_wire_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
wire_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Bounds on
|
||
|
def bounds_on(context):
|
||
|
scene = context.scene
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.show_bounds = True
|
||
|
obj.draw_bounds_type = scene.BoundingMode
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.show_bounds = True
|
||
|
obj.draw_bounds_type = scene.BoundingMode
|
||
|
|
||
|
class DisplayBoundsOn(bpy.types.Operator):
|
||
|
'''Display Bounding box overlay on'''
|
||
|
bl_idname = "view3d.display_bounds_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
bounds_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Wireframe off
|
||
|
def bounds_off(context):
|
||
|
scene = context.scene
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.show_bounds = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.show_bounds = False
|
||
|
|
||
|
class DisplayBoundsOff(bpy.types.Operator):
|
||
|
'''Display Bounding box overlay off'''
|
||
|
bl_idname = "view3d.display_bounds_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
bounds_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Double Sided on
|
||
|
def double_sided_on(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for mesh in bpy.data.meshes:
|
||
|
mesh.show_double_sided = True
|
||
|
else:
|
||
|
for sel in selection:
|
||
|
if sel.type == 'MESH':
|
||
|
mesh = sel.data
|
||
|
mesh.show_double_sided = True
|
||
|
|
||
|
class DisplayDoubleSidedOn(bpy.types.Operator):
|
||
|
'''Turn on face double shaded mode'''
|
||
|
bl_idname = "view3d.display_double_sided_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
double_sided_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Double Sided off
|
||
|
def double_sided_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for mesh in bpy.data.meshes:
|
||
|
mesh.show_double_sided = False
|
||
|
else:
|
||
|
for sel in selection:
|
||
|
if sel.type == 'MESH':
|
||
|
mesh = sel.data
|
||
|
mesh.show_double_sided = False
|
||
|
|
||
|
class DisplayDoubleSidedOff(bpy.types.Operator):
|
||
|
'''Turn off face double sided shade mode'''
|
||
|
bl_idname = "view3d.display_double_sided_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
double_sided_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#XRay on
|
||
|
def x_ray_on(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.show_x_ray = True
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.show_x_ray = True
|
||
|
|
||
|
class DisplayXRayOn(bpy.types.Operator):
|
||
|
'''X-Ray display on'''
|
||
|
bl_idname = "view3d.display_x_ray_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
x_ray_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#XRay off
|
||
|
def x_ray_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
obj.show_x_ray = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
obj.show_x_ray = False
|
||
|
|
||
|
class DisplayXRayOff(bpy.types.Operator):
|
||
|
'''X-Ray display off'''
|
||
|
bl_idname = "view3d.display_x_ray_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
x_ray_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Init properties for scene
|
||
|
bpy.types.Scene.FastNavigateStop = bpy.props.BoolProperty(
|
||
|
name = "Fast Navigate Stop",
|
||
|
description = "Stop fast navigate mode",
|
||
|
default = False)
|
||
|
|
||
|
bpy.types.Scene.OriginalMode = bpy.props.EnumProperty(
|
||
|
items = [('TEXTURED', 'Texture', 'Texture display mode'),
|
||
|
('SOLID', 'Solid', 'Solid display mode')],
|
||
|
name = "Normal",
|
||
|
default = 'SOLID')
|
||
|
|
||
|
bpy.types.Scene.BoundingMode = bpy.props.EnumProperty(
|
||
|
items = [('BOX', 'Box', 'Box shape'),
|
||
|
('SPHERE', 'Sphere', 'Sphere shape'),
|
||
|
('CYLINDER', 'Cylinder', 'Cylinder shape'),
|
||
|
('CONE', 'Cone', 'Cone shape')],
|
||
|
name = "BB Mode")
|
||
|
|
||
|
bpy.types.Scene.FastMode = bpy.props.EnumProperty(
|
||
|
items = [('WIREFRAME', 'Wireframe', 'Wireframe display'),
|
||
|
('BOUNDBOX', 'Bounding Box', 'Bounding Box display')],
|
||
|
name = "Fast")
|
||
|
|
||
|
bpy.types.Scene.ShowParticles = bpy.props.BoolProperty(
|
||
|
name = "Show Particles",
|
||
|
description = "Show or hide particles on fast navigate mode",
|
||
|
default = True)
|
||
|
|
||
|
bpy.types.Scene.ParticlesPercentageDisplay = bpy.props.IntProperty(
|
||
|
name = "Display",
|
||
|
description = "Display only a percentage of particles",
|
||
|
default = 25,
|
||
|
min = 0,
|
||
|
max = 100,
|
||
|
soft_min = 0,
|
||
|
soft_max = 100,
|
||
|
subtype = 'FACTOR')
|
||
|
|
||
|
bpy.types.Scene.InitialParticles = bpy.props.IntProperty(
|
||
|
name = "Count for initial particle setting before enter fast navigate",
|
||
|
description = "Display a percentage value of particles",
|
||
|
default = 100,
|
||
|
min = 0,
|
||
|
max = 100,
|
||
|
soft_min = 0,
|
||
|
soft_max = 100)
|
||
|
|
||
|
#Set Render Settings
|
||
|
def set_render_settings(conext):
|
||
|
scene = bpy.context.scene
|
||
|
render = bpy.context.scene.render
|
||
|
view = bpy.context.space_data
|
||
|
render.simplify_subdivision = 0
|
||
|
render.simplify_shadow_samples = 0
|
||
|
render.simplify_child_particles = 0
|
||
|
render.simplify_ao_sss = 0
|
||
|
|
||
|
class DisplaySimplify(bpy.types.Operator):
|
||
|
'''Display scene simplified'''
|
||
|
bl_idname = "view3d.display_simplify"
|
||
|
bl_label = "Reset"
|
||
|
|
||
|
Mode = EnumProperty(
|
||
|
items = [('WIREFRAME', 'Wireframe', ''),
|
||
|
('BOUNDBOX', 'Bounding Box', '')],
|
||
|
name = "Mode")
|
||
|
|
||
|
ShowParticles = BoolProperty(
|
||
|
name = "ShowParticles",
|
||
|
description = "Show or hide particles on fast navigate mode",
|
||
|
default = True)
|
||
|
|
||
|
ParticlesPercentageDisplay = IntProperty(
|
||
|
name = "Display",
|
||
|
description = "Display a percentage value of particles",
|
||
|
default = 25,
|
||
|
min = 0,
|
||
|
max = 100,
|
||
|
soft_min = 0,
|
||
|
soft_max = 100,
|
||
|
subtype = 'FACTOR')
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
set_render_settings(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Render on
|
||
|
def modifiers_render_on(context):
|
||
|
scene = bpy.context.scene
|
||
|
bpy.types.Scene.Symplify = IntProperty(
|
||
|
name = "Integer",description = "Enter an integer")
|
||
|
scene['Simplify'] = 1
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_render = True
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_render = True
|
||
|
|
||
|
class DisplayModifiersRenderOn(bpy.types.Operator):
|
||
|
'''Display modifiers in render'''
|
||
|
bl_idname = "view3d.display_modifiers_render_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_render_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Render off
|
||
|
def modifiers_render_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_render = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_render = False
|
||
|
|
||
|
class DisplayModifiersRenderOff(bpy.types.Operator):
|
||
|
'''Hide modifiers in render'''
|
||
|
bl_idname = "view3d.display_modifiers_render_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_render_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Viewport on
|
||
|
def modifiers_viewport_on(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_viewport = True
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_viewport = True
|
||
|
|
||
|
class DisplayModifiersViewportOn(bpy.types.Operator):
|
||
|
'''Display modifiers in viewport'''
|
||
|
bl_idname = "view3d.display_modifiers_viewport_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_viewport_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Viewport off
|
||
|
def modifiers_viewport_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_viewport = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_viewport = False
|
||
|
|
||
|
class DisplayModifiersViewportOff(bpy.types.Operator):
|
||
|
'''Hide modifiers in viewport'''
|
||
|
bl_idname = "view3d.display_modifiers_viewport_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_viewport_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Edit on
|
||
|
def modifiers_edit_on(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_in_editmode = True
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_in_editmode = True
|
||
|
|
||
|
class DisplayModifiersEditOn(bpy.types.Operator):
|
||
|
'''Display modifiers during edit mode'''
|
||
|
bl_idname = "view3d.display_modifiers_edit_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_edit_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Edit off
|
||
|
def modifiers_edit_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_in_editmode = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_in_editmode = False
|
||
|
|
||
|
class DisplayModifiersEditOff(bpy.types.Operator):
|
||
|
'''Hide modifiers during edit mode'''
|
||
|
bl_idname = "view3d.display_modifiers_edit_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_edit_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Cage on
|
||
|
def modifiers_cage_on(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_on_cage = True
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_on_cage = True
|
||
|
|
||
|
class DisplayModifiersCageOn(bpy.types.Operator):
|
||
|
'''Display modifiers editing cage during edit mode'''
|
||
|
bl_idname = "view3d.display_modifiers_cage_on"
|
||
|
bl_label = "On"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_cage_on(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Cage off
|
||
|
def modifiers_cage_off(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_on_cage = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_on_cage = False
|
||
|
|
||
|
class DisplayModifiersCageOff(bpy.types.Operator):
|
||
|
'''Hide modifiers editing cage during edit mode'''
|
||
|
bl_idname = "view3d.display_modifiers_cage_off"
|
||
|
bl_label = "Off"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_cage_off(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Expand
|
||
|
def modifiers_expand(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_expanded = True
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_expanded = True
|
||
|
|
||
|
class DisplayModifiersExpand(bpy.types.Operator):
|
||
|
'''Expand all modifiers on modifier stack'''
|
||
|
bl_idname = "view3d.display_modifiers_expand"
|
||
|
bl_label = "Expand"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_expand(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Display Modifiers Collapse
|
||
|
def modifiers_collapse(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_expanded = False
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
mod.show_expanded = False
|
||
|
|
||
|
class DisplayModifiersCollapse(bpy.types.Operator):
|
||
|
'''Collapse all modifiers on modifier stack'''
|
||
|
bl_idname = "view3d.display_modifiers_collapse"
|
||
|
bl_label = "Collapse"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_collapse(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Apply modifiers
|
||
|
def modifiers_apply(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
bpy.ops.object.select_all(action = 'TOGGLE')
|
||
|
bpy.ops.object.convert(target = 'MESH', keep_original = False)
|
||
|
bpy.ops.object.select_all(action = 'TOGGLE')
|
||
|
else:
|
||
|
for mesh in selection:
|
||
|
if mesh.type == "MESH":
|
||
|
bpy.ops.object.convert(target='MESH', keep_original = False)
|
||
|
|
||
|
class DisplayModifiersApply(bpy.types.Operator):
|
||
|
'''Apply modifiers'''
|
||
|
bl_idname = "view3d.display_modifiers_apply"
|
||
|
bl_label = "Apply All"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_apply(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Delete modifiers
|
||
|
def modifiers_delete(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
for obj in bpy.data.objects:
|
||
|
for mod in obj.modifiers:
|
||
|
bpy.context.scene.objects.active = obj
|
||
|
bpy.ops.object.modifier_remove(modifier = mod.name)
|
||
|
else:
|
||
|
for obj in selection:
|
||
|
for mod in obj.modifiers:
|
||
|
bpy.context.scene.objects.active = obj
|
||
|
bpy.ops.object.modifier_remove(modifier = mod.name)
|
||
|
|
||
|
class DisplayModifiersDelete(bpy.types.Operator):
|
||
|
'''Delete modifiers'''
|
||
|
bl_idname = "view3d.display_modifiers_delete"
|
||
|
bl_label = "Delete All"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_delete(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
#Put dummy modifier for boost subsurf
|
||
|
def modifiers_set_dummy(context):
|
||
|
selection = bpy.context.selected_objects
|
||
|
|
||
|
if not(selection):
|
||
|
print("funciona")
|
||
|
for object in bpy.data.objects:
|
||
|
if object.type == "MESH":
|
||
|
mod = object.modifiers.new(type = 'SIMPLE_DEFORM',\
|
||
|
name = "Dummy")
|
||
|
mod.factor = 0
|
||
|
else:
|
||
|
for object in selection:
|
||
|
if object.type == "MESH":
|
||
|
mod = object.modifiers.new(type = 'SIMPLE_DEFORM',\
|
||
|
name = "Dummy")
|
||
|
mod.factor = 0
|
||
|
|
||
|
class DisplayAddDummy(bpy.types.Operator):
|
||
|
'''Add a dummy simple deform modifier to boost\
|
||
|
subsurf modifier viewport performance'''
|
||
|
bl_idname = "view3d.display_modifiers_set_dummy"
|
||
|
bl_label = "Put Dummy"
|
||
|
|
||
|
@classmethod
|
||
|
def poll(cls, context):
|
||
|
return True
|
||
|
|
||
|
def execute(self, context):
|
||
|
modifiers_set_dummy(context)
|
||
|
return {'FINISHED'}
|
||
|
|
||
|
# main class for Fast Navigate
|
||
|
class VIEW3D_PT_FastNavigate(bpy.types.Panel):
|
||
|
bl_space_type = "VIEW_3D"
|
||
|
bl_region_type = "TOOLS"
|
||
|
bl_label = "Fast Navigate"
|
||
|
bl_options = {"DEFAULT_CLOSED"}
|
||
|
|
||
|
def draw(self, context):
|
||
|
layout = self.layout
|
||
|
|
||
|
# Tools
|
||
|
scene = context.scene
|
||
|
row = layout.row(align=True)
|
||
|
row.alignment = 'LEFT'
|
||
|
row.operator("view3d.fast_navigate_operator")
|
||
|
row.operator("view3d.fast_navigate_stop")
|
||
|
layout.label("Settings :")
|
||
|
row = layout.row()
|
||
|
box = row.box()
|
||
|
box.prop(scene,"OriginalMode")
|
||
|
box.prop(scene,"FastMode")
|
||
|
box.prop(scene, "EditActive", "Edit mode")
|
||
|
box.prop(scene, "Delay")
|
||
|
box.prop(scene, "DelayTimeGlobal", "Delay time")
|
||
|
box.alignment = 'LEFT'
|
||
|
box.prop(scene,"ShowParticles")
|
||
|
box.prop(scene,"ParticlesPercentageDisplay")
|
||
|
|
||
|
# main class for Display Mode
|
||
|
class VIEW3D_PT_DisplayMode(bpy.types.Panel):
|
||
|
bl_space_type = "VIEW_3D"
|
||
|
bl_region_type = "TOOLS"
|
||
|
bl_label = "Display Mode"
|
||
|
bl_options = {"DEFAULT_CLOSED"}
|
||
|
|
||
|
def draw(self, context):
|
||
|
layout = self.layout
|
||
|
|
||
|
# Tools
|
||
|
col = layout.column()
|
||
|
col.alignment = 'EXPAND'
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_textured" , icon ='TEXTURE_SHADED')
|
||
|
row.operator("view3d.display_solid" , icon ='SOLID')
|
||
|
col = layout.column()
|
||
|
col.alignment = 'EXPAND'
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_wire" , icon = 'WIRE')
|
||
|
row.operator("view3d.display_bounds" , icon = 'BBOX')
|
||
|
|
||
|
# main class for Shading Setup
|
||
|
class VIEW3D_PT_ShadingSetup(bpy.types.Panel):
|
||
|
bl_space_type = "VIEW_3D"
|
||
|
bl_region_type = "TOOLS"
|
||
|
bl_label = "Shading Setup"
|
||
|
bl_options = {"DEFAULT_CLOSED"}
|
||
|
|
||
|
def draw(self, context):
|
||
|
layout = self.layout
|
||
|
|
||
|
# Tools
|
||
|
col = layout.column(align=True)
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_shade_smooth")
|
||
|
row.operator("view3d.display_shade_flat")
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_shadeless_on", "Shadeless On",\
|
||
|
icon = 'SOLID')
|
||
|
row.operator("view3d.display_shadeless_off",\
|
||
|
"Shadeless Off", icon = 'SOLID')
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_wire_on", "Wire On", icon = 'WIRE')
|
||
|
row.operator("view3d.display_wire_off", "Wire Off", icon = 'WIRE')
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_bounds_on", "Bounds On", icon = 'BBOX')
|
||
|
row.operator("view3d.display_bounds_off", "Bounds Off", icon = 'BBOX')
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_double_sided_on",\
|
||
|
"DSided On", icon = 'MESH_DATA')
|
||
|
row.operator("view3d.display_double_sided_off",\
|
||
|
"DSided Off", icon = 'MESH_DATA')
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_x_ray_on",\
|
||
|
"XRay On", icon = 'GHOST_ENABLED')
|
||
|
row.operator("view3d.display_x_ray_off",\
|
||
|
"XRay Off", icon = 'GHOST_ENABLED')
|
||
|
row = col.row()
|
||
|
row.separator()
|
||
|
row = col.row()
|
||
|
|
||
|
scene = context.scene
|
||
|
row.prop(scene, "BoundingMode")
|
||
|
|
||
|
# main class for Scene Visualization
|
||
|
class VIEW3D_PT_SceneVisualization(bpy.types.Panel):
|
||
|
bl_space_type = "VIEW_3D"
|
||
|
bl_region_type = "TOOLS"
|
||
|
bl_label = "Scene Visualization"
|
||
|
bl_options = {"DEFAULT_CLOSED"}
|
||
|
|
||
|
def draw(self, context):
|
||
|
layout = self.layout
|
||
|
|
||
|
# Tools
|
||
|
scene = context.scene
|
||
|
render = scene.render
|
||
|
space = context.space_data
|
||
|
layout.prop(space, "show_manipulator")
|
||
|
layout.prop(space, "show_outline_selected")
|
||
|
layout.prop(space, "show_only_render")
|
||
|
layout.prop(space, "show_textured_solid")
|
||
|
layout.prop(space, "show_backface_culling")
|
||
|
layout.prop(space, "show_all_objects_origin")
|
||
|
layout.prop(render,"use_simplify", "Simplify")
|
||
|
if scene.render.use_simplify == True:
|
||
|
layout.label("Settings :")
|
||
|
row = layout.row()
|
||
|
box = row.box()
|
||
|
box.prop(render, "simplify_subdivision", "Subdivision")
|
||
|
box.prop(render, "simplify_shadow_samples", "Shadow Samples")
|
||
|
box.prop(render, "simplify_child_particles", "Child Particles")
|
||
|
box.prop(render, "simplify_ao_sss", "AO and SSS")
|
||
|
layout.operator("view3d.display_simplify")
|
||
|
|
||
|
# main class for Modifier Tools
|
||
|
class VIEW3D_PT_ModifierTools(bpy.types.Panel):
|
||
|
bl_space_type = "VIEW_3D"
|
||
|
bl_region_type = "TOOLS"
|
||
|
bl_label = "Modifier Tools"
|
||
|
bl_options = {"DEFAULT_CLOSED"}
|
||
|
|
||
|
def draw(self, context):
|
||
|
layout = self.layout
|
||
|
|
||
|
# Tools
|
||
|
layout.label("Modifiers", icon = 'MODIFIER')
|
||
|
col = layout.column(align=True)
|
||
|
col.alignment = 'EXPAND'
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_modifiers_render_on",\
|
||
|
icon = 'RENDER_STILL')
|
||
|
row.operator("view3d.display_modifiers_render_off")
|
||
|
row.operator("view3d.display_modifiers_viewport_on",
|
||
|
icon = 'RESTRICT_VIEW_OFF')
|
||
|
row.operator("view3d.display_modifiers_viewport_off")
|
||
|
col = layout.column(align=True)
|
||
|
col.alignment = 'EXPAND'
|
||
|
row = col.row()
|
||
|
row.operator("view3d.display_modifiers_edit_on", icon = 'EDITMODE_HLT')
|
||
|
row.operator("view3d.display_modifiers_edit_off")
|
||
|
row.operator("view3d.display_modifiers_cage_on",\
|
||
|
icon = 'EDITMODE_DEHLT')
|
||
|
row.operator("view3d.display_modifiers_cage_off")
|
||
|
row = layout.row(align=True)
|
||
|
row.operator("view3d.display_modifiers_expand", icon = 'TRIA_DOWN')
|
||
|
row.operator("view3d.display_modifiers_collapse", icon = 'TRIA_RIGHT')
|
||
|
row = layout.row(align=True)
|
||
|
row.operator("view3d.display_modifiers_apply", icon = 'MODIFIER')
|
||
|
row.operator("view3d.display_modifiers_delete", icon = 'X')
|
||
|
row = layout.row(align=True)
|
||
|
row.operator("view3d.display_modifiers_set_dummy",\
|
||
|
icon = 'OUTLINER_OB_ARMATURE')
|
||
|
|
||
|
# register the classes
|
||
|
def register():
|
||
|
bpy.utils.register_class(FastNavigate)
|
||
|
bpy.utils.register_class(DisplayTextured)
|
||
|
bpy.utils.register_class(DisplaySolid)
|
||
|
bpy.utils.register_class(DisplayWire)
|
||
|
bpy.utils.register_class(DisplayBounds)
|
||
|
bpy.utils.register_class(DisplayWireframeOn)
|
||
|
bpy.utils.register_class(DisplayWireframeOff)
|
||
|
bpy.utils.register_class(DisplayBoundsOn)
|
||
|
bpy.utils.register_class(DisplayBoundsOff)
|
||
|
bpy.utils.register_class(DisplayShadeSmooth)
|
||
|
bpy.utils.register_class(DisplayShadeFlat)
|
||
|
bpy.utils.register_class(DisplayShadelessOn)
|
||
|
bpy.utils.register_class(DisplayShadelessOff)
|
||
|
bpy.utils.register_class(DisplayDoubleSidedOn)
|
||
|
bpy.utils.register_class(DisplayDoubleSidedOff)
|
||
|
bpy.utils.register_class(DisplayXRayOn)
|
||
|
bpy.utils.register_class(DisplayXRayOff)
|
||
|
bpy.utils.register_class(DisplayModifiersRenderOn)
|
||
|
bpy.utils.register_class(DisplayModifiersRenderOff)
|
||
|
bpy.utils.register_class(DisplayModifiersViewportOn)
|
||
|
bpy.utils.register_class(DisplayModifiersViewportOff)
|
||
|
bpy.utils.register_class(DisplayModifiersEditOn)
|
||
|
bpy.utils.register_class(DisplayModifiersEditOff)
|
||
|
bpy.utils.register_class(DisplayModifiersCageOn)
|
||
|
bpy.utils.register_class(DisplayModifiersCageOff)
|
||
|
bpy.utils.register_class(DisplayModifiersExpand)
|
||
|
bpy.utils.register_class(DisplayModifiersCollapse)
|
||
|
bpy.utils.register_class(DisplayModifiersApply)
|
||
|
bpy.utils.register_class(DisplayModifiersDelete)
|
||
|
bpy.utils.register_class(DisplayAddDummy)
|
||
|
bpy.utils.register_class(DisplaySimplify)
|
||
|
bpy.utils.register_module(__name__)
|
||
|
pass
|
||
|
|
||
|
def unregister():
|
||
|
bpy.utils.unregister_class(FastNavigate)
|
||
|
bpy.utils.unregister_class(DisplayTextured)
|
||
|
bpy.utils.unregister_class(DisplaySolid)
|
||
|
bpy.utils.unregister_class(DisplayWire)
|
||
|
bpy.utils.unregister_class(DisplayBounds)
|
||
|
bpy.utils.unregister_class(DisplayShadeSmooth)
|
||
|
bpy.utils.unregister_class(DisplayShadeFlat)
|
||
|
bpy.utils.unregister_class(DisplayShadelessOn)
|
||
|
bpy.utils.unregister_class(DisplayShadelessOff)
|
||
|
bpy.utils.unregister_class(DisplayWireframeOn)
|
||
|
bpy.utils.unregister_class(DisplayWireframeOff)
|
||
|
bpy.utils.unregister_class(DisplayBoundsOn)
|
||
|
bpy.utils.unregister_class(DisplayBoundsOff)
|
||
|
bpy.utils.unregister_class(DisplayDoubleSidedOn)
|
||
|
bpy.utils.unregister_class(DisplayDoubleSidedOff)
|
||
|
bpy.utils.unregister_class(DisplayXRayOn)
|
||
|
bpy.utils.unregister_class(DisplayXRayOff)
|
||
|
bpy.utils.unregister_class(DisplayModifiersRenderOn)
|
||
|
bpy.utils.unregister_class(DisplayModifiersRenderOff)
|
||
|
bpy.utils.unregister_class(DisplayModifiersViewportOn)
|
||
|
bpy.utils.unregister_class(DisplayModifiersViewportOff)
|
||
|
bpy.utils.unregister_class(DisplayModifiersEditOn)
|
||
|
bpy.utils.unregister_class(DisplayModifiersEditOff)
|
||
|
bpy.utils.unregister_class(DisplayModifiersCageOn)
|
||
|
bpy.utils.unregister_class(DisplayModifiersCageOff)
|
||
|
bpy.utils.unregister_class(DisplayModifiersExpand)
|
||
|
bpy.utils.unregister_class(DisplayModifiersCollapse)
|
||
|
bpy.utils.unregister_class(DisplayModifiersApply)
|
||
|
bpy.utils.unregister_class(DisplayModifiersDelete)
|
||
|
bpy.utils.unregister_class(DisplayAddDummy)
|
||
|
bpy.utils.unregister_class(DisplaySimplify)
|
||
|
bpy.utils.unregister_module(__name__)
|
||
|
pass
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
register()
|