Skip to content
Snippets Groups Projects
space_view3d_spacebar_menu.py 41.9 KiB
Newer Older
        prop = layout.operator("wm.context_set_value",
            text="Select By Edge", icon='EDGESEL')
        prop.value = "(False, True, False)"
        prop.path = "tool_settings.mesh_selection_mode"
        layout.menu("VIEW3D_MT_edit_mesh_edges", icon='EDGESEL')

        prop = layout.operator("wm.context_set_value",
            text="Select By Face", icon='FACESEL')
        prop.value = "(False, False, True)"
        prop.path = "tool_settings.mesh_selection_mode"
        layout.menu("VIEW3D_MT_edit_mesh_faces", icon='FACESEL')
        layout.separator()

        layout.menu("VIEW3D_MT_edit_mesh_normals", icon='META_DATA')
        layout.operator("mesh.loopcut_slide",
            text="Loopcut", icon='EDIT_VEC')

class VIEW3D_MT_editM_Edge(bpy.types.Menu):
    bl_label = "Edges"

    def draw(self, context):
        layout = self.layout
        layout.operator_context = 'INVOKE_REGION_WIN'

        layout.operator("mesh.mark_seam")
        layout.operator("mesh.mark_seam", text="Clear Seam").clear = True
        layout.separator()

        layout.operator("mesh.mark_sharp")
        layout.operator("mesh.mark_sharp", text="Clear Sharp").clear = True
        layout.operator("mesh.extrude_move_along_normals", text="Extrude")
        layout.separator()

        layout.operator("mesh.edge_rotate",
            text="Rotate Edge CW").direction = 'CW'
        layout.operator("mesh.edge_rotate",
            text="Rotate Edge CCW").direction = 'CCW'
        layout.separator()

        layout.operator("TFM_OT_edge_slide", text="Edge Slide")
        layout.operator("mesh.loop_multi_select", text="Edge Loop")
        layout.operator("mesh.loop_multi_select", text="Edge Ring").ring = True
        layout.operator("mesh.loop_to_region")
        layout.operator("mesh.region_to_loop")


class VIEW3D_MT_EditCurveCtrlpoints(bpy.types.Menu):
    bl_label = "Control Points"

    def draw(self, context):
        layout = self.layout

        edit_object = context.edit_object

        if edit_object.type == 'CURVE':
            layout.operator("transform.transform").mode = 'TILT'
            layout.operator("curve.tilt_clear")
            layout.operator("curve.separate")

            layout.separator()

            layout.operator_menu_enum("curve.handle_type_set", "type")

            layout.separator()

            layout.menu("VIEW3D_MT_hook")


class VIEW3D_MT_EditCurveSegments(bpy.types.Menu):
    bl_label = "Curve Segments"

    def draw(self, context):
        layout = self.layout

        layout.operator("curve.subdivide")
        layout.operator("curve.switch_direction")

class VIEW3D_MT_EditCurveSpecials(bpy.types.Menu):
    bl_label = "Specials"

    def draw(self, context):
        layout = self.layout

        layout.operator("curve.subdivide")
        layout.operator("curve.switch_direction")
        layout.operator("curve.spline_weight_set")
        layout.operator("curve.radius_set")
        layout.operator("curve.smooth")
        layout.operator("curve.smooth_radius")

class VIEW3D_MT_EditArmatureTK(bpy.types.Menu):
    bl_label = "Armature Tools"

    def draw(self, context):
        layout = self.layout

        # Edit Armature

        layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONESIZE'

        layout.operator("transform.transform", text="Scale B-Bone Width").mode = 'BONESIZE'

        layout.separator()

        layout.operator("armature.extrude_move")

        layout.operator("armature.extrude_forked")

        layout.operator("armature.duplicate_move")
        layout.operator("armature.merge")
        layout.operator("armature.fill")
        layout.operator("armature.delete")
        layout.operator("armature.separate")

        layout.separator()

        layout.operator("armature.subdivide_multi", text="Subdivide")
        layout.operator("armature.switch_direction", text="Switch Direction")

class VIEW3D_MT_ArmatureName(bpy.types.Menu):
    bl_label = "Armature Name"

    def draw(self, context):
        layout = self.layout

        layout.operator_context = 'EXEC_AREA'
        layout.operator("armature.autoside_names", text="AutoName Left/Right").type = 'XAXIS'
        layout.operator("armature.autoside_names", text="AutoName Front/Back").type = 'YAXIS'
        layout.operator("armature.autoside_names", text="AutoName Top/Bottom").type = 'ZAXIS'
        layout.operator("armature.flip_names")
        layout.separator()

class VIEW3D_MT_KeyframeMenu(bpy.types.Menu):
    bl_label = "Keyframe Menu"

    def draw(self, context):
        layout = self.layout

        # Keyframe Bleck
        layout.operator("anim.keyframe_insert_menu",
            text="Insert Keyframe...")
        layout.operator("anim.keyframe_delete_v3d",
            text="Delete Keyframe...")
        layout.operator("anim.keying_set_active_set",
            text="Change Keying Set...")
        layout.separator()

class VIEW3D_MT_CursorMenu(bpy.types.Menu):
    bl_label = "Snap Cursor Menu"

    def draw(self, context):

        layout = self.layout
        layout.operator_context = 'INVOKE_REGION_WIN'
        layout.operator("view3d.snap_cursor_to_center",
            text="Snap Cursor to Center")
        layout.operator("view3d.snap_selected_to_cursor",
            text="Selection to Cursor")
        layout.operator("view3d.snap_cursor_to_selected",
            text="Snap Cursor to Selected")
        layout.separator()

        layout.operator("view3d.snap_cursor_to_grid",
            text="Snap Cursor to Grid")
        layout.operator("view3d.snap_cursor_to_active",
            text="Cursor to Active")
        layout.operator("view3d.snap_selected_to_grid",
            text="Selection to Grid")
        layout.separator()

        layout.operator("view3d.pivot_cursor",
            text="Set Cursor as Pivot Point")
        layout.operator("view3d.revert_pivot",
            text="Revert Pivot Point")

class VIEW3D_MT_undoS(bpy.types.Menu):
    bl_label = "Undo/Redo"

    def draw(self, context):
        layout = self.layout
        layout.operator_context = 'INVOKE_REGION_WIN'
        layout.operator("ed.undo", icon='TRIA_LEFT')
        layout.operator("ed.redo", icon='TRIA_RIGHT')

def register():
    bpy.types.register(VIEW3D_MT_Space_Dynamic_Menu)
    bpy.types.register(VIEW3D_MT_AddMenu)
    bpy.types.register(VIEW3D_MT_TransformMenu)
    bpy.types.register(VIEW3D_MT_MirrorMenu)
    bpy.types.register(VIEW3D_MT_ParentMenu)
    bpy.types.register(VIEW3D_MT_GroupMenu)
    bpy.types.register(VIEW3D_MT_AlignMenu)
    bpy.types.register(VIEW3D_MT_SelectMenu)
    bpy.types.register(VIEW3D_MT_SelectEditMenu)
    bpy.types.register(VIEW3D_MT_SelectCurveMenu)
    bpy.types.register(VIEW3D_MT_SelectPoseMenu)
    bpy.types.register(VIEW3D_MT_PoseCopy)
    bpy.types.register(VIEW3D_MT_PoseNames)
    bpy.types.register(VIEW3D_MT_KeyframeMenu)
    bpy.types.register(VIEW3D_MT_SelectArmatureMenu)
    bpy.types.register(VIEW3D_MT_ArmatureName)
    bpy.types.register(VIEW3D_MT_SelectMetaball)
    bpy.types.register(VIEW3D_MT_SelectSurface)
    bpy.types.register(VIEW3D_MT_edit_TK)
    bpy.types.register(VIEW3D_MT_EditArmatureTK)
    bpy.types.register(VIEW3D_MT_editM_Edge)
    bpy.types.register(VIEW3D_MT_EditCurveCtrlpoints)
    bpy.types.register(VIEW3D_MT_EditCurveSegments)
    bpy.types.register(VIEW3D_MT_EditCurveSpecials)
    bpy.types.register(pivot_cursor)
    bpy.types.register(revert_pivot)
    bpy.types.register(VIEW3D_MT_CursorMenu)
    bpy.types.register(VIEW3D_MT_undoS)

    km = bpy.context.manager.active_keyconfig.keymaps['3D View']
    kmi = km.items.add('wm.call_menu', 'SPACE', 'PRESS')
    kmi.properties.name = "VIEW3D_MT_Space_Dynamic_Menu"


def unregister():
    bpy.types.unregister(VIEW3D_MT_Space_Dynamic_Menu)
    bpy.types.unregister(VIEW3D_MT_AddMenu)
    bpy.types.unregister(VIEW3D_MT_TransformMenu)
    bpy.types.unregister(VIEW3D_MT_MirrorMenu)
    bpy.types.unregister(VIEW3D_MT_ParentMenu)
    bpy.types.unregister(VIEW3D_MT_GroupMenu)
    bpy.types.unregister(VIEW3D_MT_AlignMenu)
    bpy.types.unregister(VIEW3D_MT_SelectMenu)
    bpy.types.unregister(VIEW3D_MT_SelectEditMenu)
    bpy.types.unregister(VIEW3D_MT_SelectCurveMenu)
    bpy.types.unregister(VIEW3D_MT_SelectPoseMenu)
    bpy.types.unregister(VIEW3D_MT_PoseCopy)
    bpy.types.unregister(VIEW3D_MT_PoseNames)
    bpy.types.unregister(VIEW3D_MT_KeyframeMenu)
    bpy.types.unregister(VIEW3D_MT_SelectArmatureMenu)
    bpy.types.unregister(VIEW3D_MT_ArmatureName)
    bpy.types.unregister(VIEW3D_MT_SelectMetaball)
    bpy.types.unregister(VIEW3D_MT_SelectSurface)
    bpy.types.unregister(VIEW3D_MT_edit_TK)
    bpy.types.unregister(VIEW3D_MT_EditArmatureTK)
    bpy.types.unregister(VIEW3D_MT_editM_Edge)
    bpy.types.unregister(VIEW3D_MT_EditCurveCtrlpoints)
    bpy.types.unregister(VIEW3D_MT_EditCurveSegments)
    bpy.types.unregister(VIEW3D_MT_EditCurveSpecials)
    bpy.types.unregister(pivot_cursor)
    bpy.types.unregister(revert_pivot)
    bpy.types.unregister(VIEW3D_MT_CursorMenu)
    bpy.types.unregister(VIEW3D_MT_undoS)

    km = bpy.context.manager.active_keyconfig.keymaps['3D View']
    for kmi in km.items:
        if kmi.idname == 'wm.call_menu':
Brendon Murphy's avatar
Brendon Murphy committed
            if kmi.properties.name == "VIEW3D_MT_Space_Dynamic_Menu":
                km.remove_item(kmi)
                break

if __name__ == "__main__":
    register()