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()     |