Skip to content
Snippets Groups Projects
space_view3d_spacebar_menu.py 51.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • #3d_cursor_menu.py (c) 2011 Jonathan Smith (JayDez)
    
    #
    # ##### BEGIN GPL LICENSE BLOCK #####
    #
    #  This program is free software; you can redistribute it and/or
    #  modify it under the terms of the GNU General Public License
    #  as published by the Free Software Foundation; either version 2
    #  of the License, or (at your option) any later version.
    #
    #  This program is distributed in the hope that it will be useful,
    #  but WITHOUT ANY WARRANTY; without even the implied warranty of
    #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    #  GNU General Public License for more details.
    #
    #  You should have received a copy of the GNU General Public License
    #  along with this program; if not, write to the Free Software Foundation,
    #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    #
    # ##### END GPL LICENSE BLOCK #####
    
    
    bl_info = {
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        "name": "Dynamic Spacebar Menu",
    
        "author": "JayDez, sim88, meta-androcto, sam",
    
        "version": (1, 7, 2),
    
        "blender": (2, 5, 6),
    
        "location": "View3D > Spacebar Key",
    
        "description": "Context Sensitive Spacebar Menu",
    
        "warning": "",
    
    Luca Bonavita's avatar
    Luca Bonavita committed
        "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
            "Scripts/3D_interaction/Dynamic_Spacebar_Menu",
        "tracker_url": "https://projects.blender.org/tracker/index.php?"\
    
            "func=detail&aid=22060",
    
        "category": "3D View"}
    
    
    This adds a the Dynamic Spacebar Menu in the View3D.
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    *  This script gives a basic menu with common simple tools for easy access.
    
    *  Very similar to the Spacebar menu in 2.49
    *  Context sensitive for Object, Edit, Sculpt, Pose, Weight/Texture/Vertex
           Paint modes.
    
    * Object sensitive based on object selected in edit mode.
    
    v1.7.3 - (JayDez) - Wrong operator names for deleting in editmode
    
    v1.7.2 - (JayDez) - Adding proportional editing menu to where it was missing
    
    v1.7.1 - (JayDez) - Fixing up lattice menu and a wrong operator in curve menu
    
    v1.7 - (JayDez) - Fixing up animation menu and Metaball Add Menu
    
    v1.6.1 - (JayDez) - Added Add Menu to Curve and Surface (respectively)
    
    v1.6 - (JayDez) - Fixed a couple wrong names. (Thanks Bao2 and Dennis)
    v1.5.1 - (JayDez) - Changing formatting to be more uniform.
    
    v1.5 - (meta-androcto) - adding context sensitive menus.
    v1.3 - (JayDez) - Changed toggle editmode to an if statement, so that
        if you are in editmode it will show change to object mode but
        otherwise it shows change to edit mode. Also added separate icons
        for change to edit mode and to object mode.
    v1.2 - (JayDez) - Editing docs, changing 3D cursor to dynamic menu,
        reorganizing menu.
    v1.1 - (meta-androcto) - added editmode menu
    v1.0 - (meta-androcto) - initial final revision (commited to contrib)
    v0.1 through 0.9 - various tests/contributions by various people and scripts
        Devs: JayDez, Crouch, sim88, meta-androcto, Sam
        Scripts: 3D Cursor Menu, Original Dynamic Menu
    """
    
    import bpy
    from bpy import *
    
    from mathutils import Vector, Matrix
    import math
    
    
    # Dynamic Menu
    class VIEW3D_MT_Space_Dynamic_Menu(bpy.types.Menu):
        bl_label = "Dynamic Spacebar Menu"
    
        def draw(self, context):
            layout = self.layout
            settings = context.tool_settings
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            ob = context
            if ob.mode == 'OBJECT':
                # Object mode
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
                layout.separator()
    
                # Add Menu block
                layout.menu("VIEW3D_MT_AddMenu", icon='OBJECT_DATAMODE')
                layout.separator()
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
    
                # Cursor Block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
    
                layout.separator()
    
                # Parent block
                layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
    
                # Group block
                layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
                layout.separator()
    
                # Modifier block
    
                layout.operator_menu_enum("object.modifier_add", "type",
                    icon='MODIFIER')
    
                layout.separator()
    
                # Align block
                layout.menu("VIEW3D_MT_AlignMenu", icon='ALIGN')
                layout.separator()
    
                # Select block
                layout.menu("VIEW3D_MT_SelectMenu", icon='RESTRICT_SELECT_OFF')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
    Jonathan Smith's avatar
    Jonathan Smith committed
                #TODO: Add if statement to test whether editmode switch needs to
                #be added to the menu, since certain object can't enter edit mode
                #In which case we don't need the toggle
    
                # Toggle Editmode
                layout.operator("object.editmode_toggle", text="Enter Edit Mode",
                    icon='EDITMODE_HLT')
    
                # Delete block
                layout.operator("object.delete", text="Delete Object",
                    icon='CANCEL')
    
    
            elif ob.mode == 'EDIT_MESH':
                # Edit mode
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    
                # Add block
                layout.menu("INFO_MT_mesh_add", text="Add Mesh",
    
                    icon='OUTLINER_OB_MESH')
    
                layout.separator()
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
                # Cursor block
    
                layout.menu("VIEW3D_MT_EditCursorMenu", icon='CURSOR')
    
                # Proportional block
                layout.prop_menu_enum(settings, "proportional_edit",
                    icon="PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                    icon="SMOOTHCURVE")
                layout.separator()
    
    
                layout.menu("VIEW3D_MT_edit_TK", icon='EDITMODE_HLT')
    
                # Multi Select
                layout.menu("VIEW3D_MT_edit_multi", icon='VERTEXSEL')
                layout.separator()
    
                layout.menu("VIEW3D_MT_edit_mesh_extrude", icon='EDIT_VEC')
    
                layout.separator()
    
                # Tools block
                layout.menu("VIEW3D_MT_edit_mesh_specials", icon='MODIFIER')
                layout.menu("VIEW3D_MT_uv_map", icon='MOD_UVPROJECT')
    
                layout.menu("VIEW3D_MT_SelectEditMenu",
                    icon='RESTRICT_SELECT_OFF')
    
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                layout.operator("object.editmode_toggle",
    
                    text="Enter Object Mode", icon='OBJECT_DATAMODE')
    
    
                # Delete Block
                layout.operator("mesh.delete", icon='CANCEL')
    
            if ob.mode == 'EDIT_CURVE':
                # Curve menu
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.separator()
    
                # Add block
                layout.menu("INFO_MT_curve_add", text="Add Curve",
                    icon='OUTLINER_OB_CURVE')
                layout.separator()
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
    
                layout.separator()
    
                # Proportional block
    
                layout.prop_menu_enum(settings, "proportional_edit",
    
                    icon="PROP_CON")
    
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
    
                    icon="SMOOTHCURVE")
    
                layout.separator()
    
                # Edit Control Points
                layout.menu("VIEW3D_MT_EditCurveCtrlpoints",
                    icon='CURVE_BEZCURVE')
                layout.separator()
    
                # Edit Curve Specials
                layout.menu("VIEW3D_MT_EditCurveSpecials",
                    icon='MODIFIER')
                layout.separator()
    
    
                # Select Curve Block
    
                #Could use: VIEW3D_MT_select_edit_curve
                #Which is the default, instead of a hand written one, left it alone
                #for now though.
    
                layout.menu("VIEW3D_MT_SelectCurveMenu",
                    icon='RESTRICT_SELECT_OFF')
    
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                # Toggle Objectmode
                layout.operator("object.editmode_toggle", text="Enter Object Mode",
                    icon='OBJECT_DATA')
    
                # Delete block
    
                layout.operator("curve.delete", text="Delete Object",
    
                    icon='CANCEL')
    
            if ob.mode == 'EDIT_SURFACE':
                # Surface menu
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.separator()
    
                # Add block
                layout.menu("INFO_MT_surface_add", text="Add Surface",
                    icon='OUTLINER_OB_SURFACE')
                layout.separator()
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
    
                layout.separator()
    
                # Proportional block
    
                layout.prop_menu_enum(settings, "proportional_edit",
    
                    icon="PROP_CON")
    
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
    
                    icon="SMOOTHCURVE")
    
    
                # Edit Curve Specials
                layout.menu("VIEW3D_MT_EditCurveSpecials",
                    icon='MODIFIER')
                layout.separator()
    
                # Select Surface
                layout.menu("VIEW3D_MT_SelectSurface", icon='RESTRICT_SELECT_OFF')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                # Toggle Objectmode
                layout.operator("object.editmode_toggle", text="Enter Object Mode",
                    icon='OBJECT_DATA')
    
                # Delete block
    
                layout.operator("curve.delete", text="Delete Object",
    
                    icon='CANCEL')
    
            if ob.mode == 'EDIT_METABALL':
                # Metaball menu
    
                #Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
                layout.separator()
    
                # Add block
                #layout.menu("INFO_MT_metaball_add", text="Add Metaball",
                #    icon='OUTLINER_OB_META')
    
                layout.operator_menu_enum("object.metaball_add", "type",
                    text="Add Metaball", icon='OUTLINER_OB_META')
                layout.separator()
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
    
                layout.separator()
    
                # Proportional block
    
                layout.prop_menu_enum(settings, "proportional_edit",
    
                    icon="PROP_CON")
    
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
    
                    icon="SMOOTHCURVE")
    
                layout.separator()
    
                #Select Metaball
                layout.menu("VIEW3D_MT_SelectMetaball", icon='RESTRICT_SELECT_OFF')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                # Toggle Objectmode
                layout.operator("object.editmode_toggle", text="Enter Object Mode",
                    icon='OBJECT_DATA') 
    
                # Delete block
    
                layout.operator("mball.delete_metaelems", text="Delete Object",
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                    icon='CANCEL')
    
            elif ob.mode == 'EDIT_LATTICE':
                # Lattice menu
    
                #Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    Jonathan Smith's avatar
    Jonathan Smith committed
                layout.separator()
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                layout.separator()
    
                # Proportional block
    
                layout.prop_menu_enum(settings, "proportional_edit",
                    icon= "PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                    icon= "SMOOTHCURVE")
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                layout.separator()
    
                #Select Lattice
    
                layout.menu("VIEW3D_MT_select_edit_lattice",
                    icon='RESTRICT_SELECT_OFF')
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                # Toggle Objectmode
                layout.operator("object.editmode_toggle", text="Enter Object Mode",
                    icon='OBJECT_DATA')
    
    
    Jonathan Smith's avatar
    Jonathan Smith committed
                # Delete block - Can't delete any lattice stuff so not needed
                #layout.operator("object.delete", text="Delete Object",
                #    icon='CANCEL')				
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    
            if  context.mode == 'PARTICLE':
                # Particle menu
    
                #Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    Brendon Murphy's avatar
    Brendon Murphy committed
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                layout.separator()
    
                # Proportional block
    
                layout.prop_menu_enum(settings, "proportional_edit",
                    icon= "PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                    icon= "SMOOTHCURVE")
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                layout.separator()
    
    
                # Particle block
                layout.menu("VIEW3D_MT_particle", icon='PARTICLEMODE')
                layout.separator()
    
                #Select Particle
    
                layout.menu("VIEW3D_MT_select_particle",
                    icon='RESTRICT_SELECT_OFF')
    
    
                # History/Cursor Block
                layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
    
    
    Brendon Murphy's avatar
    Brendon Murphy committed
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                layout.operator("object.mode_set", text="Enter Object Mode",
    
                    icon='OBJECT_DATA')
    
                # Delete block
                layout.operator("object.delete", text="Delete Object",
                    icon='CANCEL')
    
            ob = context
            if ob.mode == 'PAINT_WEIGHT':
                # Weight paint menu
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
                layout.separator()
    
                # Weight Paint block
                layout.menu("VIEW3D_MT_paint_weight", icon='WPAINT_HLT')
                layout.separator()
    
                # History/Cursor Block
                layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                layout.operator("object.mode_set", text="Enter Object Mode",
    
                    icon='OBJECT_DATA')
    
            elif ob.mode == 'PAINT_VERTEX':
                # Vertex paint menu
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
                layout.separator()
    
                # Vertex Paint block
                layout.operator("paint.vertex_color_set", icon='VPAINT_HLT')
                layout.separator()
    
                # History/Cursor Block
                layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                layout.operator("object.mode_set", text="Enter Object Mode",
    
                    icon='OBJECT_DATA')
    
            elif ob.mode == 'PAINT_TEXTURE':
                # Texture paint menu
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
                layout.separator()
    
                # History/Cursor Block
                layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                layout.operator("object.mode_set", text="Enter Object Mode",
    
                    icon='OBJECT_DATA')
    
            elif ob.mode == 'SCULPT':
                # Sculpt menu
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
    
                layout.separator()
    
                # Sculpt block
                layout.menu("VIEW3D_MT_sculpt", icon='SCULPTMODE_HLT')
                layout.separator()
    
                # History/Cursor Block
                layout.menu("VIEW3D_MT_undoS", icon='ARROW_LEFTRIGHT')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                # Toggle Objectmode
                layout.operator("object.mode_set", text="Enter Object Mode",
                    icon='OBJECT_DATA')
    
    
            elif ob.mode == 'EDIT_ARMATURE':
                # Armature menu
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    
                # Transform block
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
                # Mirror block
                layout.menu("VIEW3D_MT_MirrorMenu", icon='MOD_MIRROR')
    
                # Cursor block
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
                layout.separator()
    
    
                # Proportional block
                layout.prop_menu_enum(settings, "proportional_edit",
                    icon="PROP_CON")
                layout.prop_menu_enum(settings, "proportional_edit_falloff",
                    icon="SMOOTHCURVE")
                layout.separator()
    
    
                # Edit Armature roll
                layout.menu("VIEW3D_MT_edit_armature_roll",
    
                    icon='BONE_DATA')
    
                layout.separator()
    
                # Edit Armature Toolkit
                layout.menu("VIEW3D_MT_EditArmatureTK",
    			    icon='ARMATURE_DATA')
                layout.separator()
    
                # Edit Armature Name
                layout.menu("VIEW3D_MT_ArmatureName",
    			    icon='NEW')
                layout.separator()
     
                # Parent block
                layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
    
                layout.separator()
    
                layout.operator_menu_enum("armature.flags_set", "mode",
                    text="Bone Settings")
    
                # Edit Armature Specials
                layout.menu("VIEW3D_MT_armature_specials", icon='MODIFIER')
                layout.separator()
    
    
                # Edit Armature Select
                layout.menu("VIEW3D_MT_SelectArmatureMenu",
                    icon='RESTRICT_SELECT_OFF')
    
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
    
                # Toggle Posemode
                layout.operator("object.posemode_toggle", text="Enter Pose Mode",
    
                    icon='POSE_HLT')
    
    
                # Toggle Posemode
                layout.operator("object.editmode_toggle", text="Enter Object Mode",
                    icon='OBJECT_DATA')
    
    
                layout.operator("armature.delete", text="Delete Object",
    
                    icon='CANCEL')
    
    
            if context.mode == 'POSE':
                # Pose mode menu
                arm = context.active_object.data
    
                # Search Menu
                layout.operator("wm.search_menu", text="Search", icon='VIEWZOOM')
    
    
                # Transform Menu
                layout.menu("VIEW3D_MT_TransformMenu", icon='MANIPUL')
    
    			# Clear Transform
                layout.menu("VIEW3D_MT_pose_transform")
    
    			# Cursor Menu
                layout.menu("VIEW3D_MT_CursorMenu", icon='CURSOR')
                layout.separator()
    
    			# Pose Copy Block
                layout.menu("VIEW3D_MT_PoseCopy", icon='FILE')
                layout.separator()
    			
    
    
                if arm.draw_type in ('BBONE', 'ENVELOPE'):
    
                    layout.operator("transform.transform",
    
                        text="Scale Envelope Distance").mode = 'BONE_SIZE'
    
    
                layout.menu("VIEW3D_MT_pose_apply")
                layout.separator()
    
                layout.operator("pose.relax")
                layout.separator()
    
                layout.menu("VIEW3D_MT_KeyframeMenu")
                layout.separator()
    
                layout.menu("VIEW3D_MT_pose_pose")
                layout.menu("VIEW3D_MT_pose_motion")
                layout.menu("VIEW3D_MT_pose_group")
                layout.separator()
    
                layout.menu("VIEW3D_MT_pose_ik")
                layout.menu("VIEW3D_MT_PoseNames")
                layout.separator()
    
                layout.menu("VIEW3D_MT_pose_constraints")
                layout.separator()
    
                layout.operator("pose.quaternions_flip")
                layout.separator()
    
                layout.operator_context = 'INVOKE_AREA'
                layout.operator("pose.armature_layers",
                    text="Change Armature Layers...")
                layout.operator("pose.bone_layers", text="Change Bone Layers...")
                layout.separator()
    
                layout.menu("VIEW3D_MT_pose_showhide")
                layout.operator_menu_enum("pose.flags_set", 'mode',
                    text="Bone Settings")
    
                layout.separator()
    
    			# Select Pose Block
                layout.menu("VIEW3D_MT_SelectPoseMenu", icon='RESTRICT_SELECT_OFF')
    
                # Toolshelf block
                layout.operator("view3d.toolshelf", icon='MENU_PANEL')
                layout.separator()
    
                # Properties block
                layout.operator("view3d.properties", icon='MENU_PANEL')
                layout.separator()
    
    
                # Toggle Editmode
                layout.operator("object.editmode_toggle", text="Enter Edit Mode",
                    icon='EDITMODE_HLT')
    
    
                layout.operator("object.mode_set", text="Enter Object Mode",
                    icon='OBJECT_DATA').mode='OBJECT'
    
    
    
    class VIEW3D_MT_AddMenu(bpy.types.Menu):
        bl_label = "Add Object Menu"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            layout.menu("INFO_MT_mesh_add", text="Add Mesh",
                icon='OUTLINER_OB_MESH')
    
    Brendon Murphy's avatar
    Brendon Murphy committed
            layout.menu("INFO_MT_curve_add", text="Add Curve",
    
                icon='OUTLINER_OB_CURVE')
    
            layout.menu("INFO_MT_surface_add", text="Add Surface",
    
                icon='OUTLINER_OB_SURFACE')
            layout.operator_menu_enum("object.metaball_add", "type",
                icon='OUTLINER_OB_META')
            layout.operator("object.text_add", text="Add Text",
                icon='OUTLINER_OB_FONT')
            layout.separator()
            layout.menu("INFO_MT_armature_add", text="Add Armature",
                icon='OUTLINER_OB_ARMATURE')
    
    Brendon Murphy's avatar
    Brendon Murphy committed
            layout.operator("object.add", text="Lattice",
                icon='OUTLINER_OB_LATTICE').type = 'LATTICE'
            layout.separator()
    
            layout.operator("object.add", text="Add Empty",
                icon='OUTLINER_OB_EMPTY')
            layout.separator()
    
            layout.operator("object.camera_add", text="Camera",
                icon='OUTLINER_OB_CAMERA')
            layout.operator_menu_enum("object.lamp_add", "type",
                icon="OUTLINER_OB_LAMP")
            layout.separator()
    
            layout.operator_menu_enum("object.effector_add", "type",
                text="Force Field",
                icon='OUTLINER_OB_EMPTY')
    
            layout.operator_menu_enum("object.group_instance_add", "group",
    
                text="Group Instance",
                icon='OUTLINER_OB_EMPTY')
    
    
    class VIEW3D_MT_TransformMenu(bpy.types.Menu):
        bl_label = "Transform Menu"
    
        # TODO: get rid of the custom text strings?
        def draw(self, context):
            layout = self.layout
    
            layout.operator("transform.translate", text="Grab/Move")
            # TODO: sub-menu for grab per axis
            layout.operator("transform.rotate", text="Rotate")
            # TODO: sub-menu for rot per axis
            layout.operator("transform.resize", text="Scale")
            # TODO: sub-menu for scale per axis
            layout.separator()
    
            layout.operator("transform.tosphere", text="To Sphere")
            layout.operator("transform.shear", text="Shear")
            layout.operator("transform.warp", text="Warp")
            layout.operator("transform.push_pull", text="Push/Pull")
            if context.edit_object and context.edit_object.type == 'ARMATURE':
                layout.operator("armature.align")
            else:
                layout.operator_context = 'EXEC_REGION_WIN'
                # @todo vvv See alignmenu() in edit.c of b2.4x to get this working.
                layout.operator("transform.transform",
                    text="Align to Transform Orientation").mode = 'ALIGN'
            layout.separator()
    
            layout.operator_context = 'EXEC_AREA'
    
            layout.operator("object.origin_set",
                text="Geometry to Origin").type = 'GEOMETRY_ORIGIN'
            layout.operator("object.origin_set",
                text="Origin to Geometry").type = 'ORIGIN_GEOMETRY'
            layout.operator("object.origin_set",
                text="Origin to 3D Cursor").type = 'ORIGIN_CURSOR'
    
    
    class VIEW3D_MT_MirrorMenu(bpy.types.Menu):
        bl_label = "Mirror Menu"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("transform.mirror", text="Interactive Mirror")
            layout.separator()
    
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            props = layout.operator("transform.mirror", text="X Global")
            props.constraint_axis = (True, False, False)
            props.constraint_orientation = 'GLOBAL'
    
            props = layout.operator("transform.mirror", text="Y Global")
            props.constraint_axis = (False, True, False)
            props.constraint_orientation = 'GLOBAL'
    
            props = layout.operator("transform.mirror", text="Z Global")
            props.constraint_axis = (False, False, True)
            props.constraint_orientation = 'GLOBAL'
    
            if context.edit_object:
    
                layout.separator()
    
                props = layout.operator("transform.mirror", text="X Local")
                props.constraint_axis = (True, False, False)
                props.constraint_orientation = 'LOCAL'
                props = layout.operator("transform.mirror", text="Y Local")
                props.constraint_axis = (False, True, False)
                props.constraint_orientation = 'LOCAL'
                props = layout.operator("transform.mirror", text="Z Local")
                props.constraint_axis = (False, False, True)
                props.constraint_orientation = 'LOCAL'
    
                layout.operator("object.vertex_group_mirror")
    
    class VIEW3D_MT_ParentMenu(bpy.types.Menu):
        bl_label = "Parent Menu"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("object.parent_set", text="Set")
            layout.operator("object.parent_clear", text="Clear")
    
    class VIEW3D_MT_GroupMenu(bpy.types.Menu):
        bl_label = "Group Menu"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("group.create")
            layout.operator("group.objects_remove")
            layout.separator()
    
            layout.operator("group.objects_add_active")
            layout.operator("group.objects_remove_active")
    
    class VIEW3D_MT_AlignMenu(bpy.types.Menu):
        bl_label = "Align Menu"
    
        def draw(self, context):
            layout = self.layout
    
            layout.menu("VIEW3D_MT_view_align_selected")
            layout.separator()
    
    
            layout.operator("view3d.view_all",
                text="Center Cursor and View All").center = True
            layout.operator("view3d.camera_to_view",
                text="Align Active Camera to View")
    
            layout.operator("view3d.view_selected")
            layout.operator("view3d.view_center_cursor")
    
    class VIEW3D_MT_SelectMenu(bpy.types.Menu):
        bl_label = "Select Menu"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            layout.operator("view3d.select_border")
            layout.operator("view3d.select_circle")
            layout.separator()
    
            layout.operator("object.select_all", text="Select/Deselect All")
            layout.operator("object.select_inverse", text="Inverse")
            layout.operator("object.select_random", text="Random")
            layout.operator("object.select_mirror", text="Mirror")
            layout.operator("object.select_by_layer", text="Select All by Layer")
    
            layout.operator_menu_enum("object.select_by_type", "type",
                text="Select All by Type...")
    
            layout.operator("object.select_camera", text="Select Camera")
            layout.separator()
    
    
            layout.operator_menu_enum("object.select_grouped", "type",
                text="Grouped")
            layout.operator_menu_enum("object.select_linked", "type",
                text="Linked")
    
            layout.operator("object.select_pattern", text="Select Pattern...")
    
    class VIEW3D_MT_SelectEditMenu(bpy.types.Menu):
        bl_label = "Select Menu"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("view3d.select_border")
            layout.operator("view3d.select_circle")
            layout.separator()
    
            layout.operator("mesh.select_all", text="Select/Deselect All")
            layout.operator("mesh.select_inverse", text="Inverse")
            layout.separator()
    
            layout.operator("mesh.select_random", text="Random")
            layout.operator("mesh.select_nth", text="Every N Number of Verts")
            layout.operator("mesh.edges_select_sharp", text="Sharp Edges")
    
            layout.operator("mesh.faces_select_linked_flat",
                text="Linked Flat Faces")
    
            layout.operator("mesh.faces_select_interior", text="Interior Faces")
            layout.operator("mesh.select_axis", text="Side of Active")
            layout.separator()
    
    
            layout.operator("mesh.select_by_number_vertices",
                text="Triangles").type = 'TRIANGLES'
            layout.operator("mesh.select_by_number_vertices",
                text="Quads").type = 'QUADS'
    
            if context.scene.tool_settings.mesh_select_mode[2] == False:
    
                    layout.operator("mesh.select_non_manifold",
                text="Non Manifold")
            layout.operator("mesh.select_by_number_vertices",
                text="Loose Verts/Edges").type = 'OTHER'
    
            layout.operator("mesh.select_similar", text="Similar")
            layout.separator()
    
            layout.operator("mesh.select_less", text="Less")
            layout.operator("mesh.select_more", text="More")
            layout.separator()
    
            layout.operator("mesh.select_mirror", text="Mirror")
    
            layout.operator("mesh.select_linked", text="Linked")
            layout.operator("mesh.select_vertex_path", text="Vertex Path")
            layout.operator("mesh.loop_multi_select", text="Edge Loop")
            layout.operator("mesh.loop_multi_select", text="Edge Ring").ring = True
            layout.separator()
    
            layout.operator("mesh.loop_to_region")
            layout.operator("mesh.region_to_loop")
    
    class VIEW3D_MT_SelectCurveMenu(bpy.types.Menu):
        bl_label = "Select Menu"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("view3d.select_border")
            layout.operator("view3d.select_circle")