Skip to content
Snippets Groups Projects
space_view3d_toolshelf_menu.py 126 KiB
Newer Older
  • Learn to ignore specific revisions
  •         layout.operator("view3d.snap_cursor_selected_to_center2",
    
                            text="Selection and Cursor to Center")
            UseSeparator(self, context)
    
            layout.menu("VIEW3D_MT_Pivot2")
    
            layout.operator("view3d.pivot_cursor2",
    
                            text="Set Cursor as Pivot Point")
    
            layout.operator("view3d.revert_pivot2",
    
                            text="Revert Pivot Point")
    
    
    # ********** Object Interactive Mode **********
    class InteractiveMode2(Menu):
    
        bl_idname = "VIEW3D_MT_Object_Interactive_Mode2"
    
        bl_label = "Interactive Mode"
        bl_description = "Menu of objects interactive modes (Window Types)"
    
        def draw(self, context):
            layout = self.layout
    
    
            layout.operator(SetObjectMode2.bl_idname, text="Object", icon="OBJECT_DATAMODE").mode = "OBJECT"
            layout.operator(SetObjectMode2.bl_idname, text="Edit", icon="EDITMODE_HLT").mode = "EDIT"
            layout.operator(SetObjectMode2.bl_idname, text="Sculpt", icon="SCULPTMODE_HLT").mode = "SCULPT"
            layout.operator(SetObjectMode2.bl_idname, text="Vertex Paint", icon="VPAINT_HLT").mode = "VERTEX_PAINT"
            layout.operator(SetObjectMode2.bl_idname, text="Weight Paint", icon="WPAINT_HLT").mode = "WEIGHT_PAINT"
            layout.operator(SetObjectMode2.bl_idname, text="Texture Paint", icon="TPAINT_HLT").mode = "TEXTURE_PAINT"
            layout.operator(SetObjectMode2.bl_idname, text="Particle Edit", icon="PARTICLEMODE").mode = "PARTICLE_EDIT"
    
                layout.operator("view3d.interactive_mode_grease_pencil2", icon="GREASEPENCIL")
    
    
    
    # ********** Object Armature Interactive Mode **********
    class InteractiveModeArmature2(Menu):
    
        bl_idname = "VIEW3D_MT_Object_Interactive_Armature2"
    
        bl_label = "Interactive Mode"
        bl_description = "Menu of objects interactive mode"
    
        def draw(self, context):
            layout = self.layout
    
    
            layout.operator(SetObjectMode2.bl_idname, text="Object", icon="OBJECT_DATAMODE").mode = "OBJECT"
            layout.operator(SetObjectMode2.bl_idname, text="Edit", icon="EDITMODE_HLT").mode = "EDIT"
            layout.operator(SetObjectMode2.bl_idname, text="Pose", icon="POSE_HLT").mode = "POSE"
    
                layout.operator("view3d.interactive_mode_grease_pencil2", icon="GREASEPENCIL")
    
    
    
    # ********** Interactive Mode Other **********
    class InteractiveModeOther2(Menu):
    
        bl_idname = "VIEW3D_MT_Object_Interactive_Other2"
    
        bl_label = "Interactive Mode"
        bl_description = "Menu of objects interactive mode"
    
        def draw(self, context):
            layout = self.layout
            layout.operator("object.editmode_toggle", text="Edit/Object Toggle",
                            icon='OBJECT_DATA')
            if context.gpencil_data:
    
                layout.operator("view3d.interactive_mode_grease_pencil2", icon="GREASEPENCIL")
    
    
    
    # ********** Grease Pencil Interactive Mode **********
    class VIEW3D_OT_Interactive_Mode_Grease_Pencil2(Operator):
    
        bl_idname = "view3d.interactive_mode_grease_pencil2"
    
        bl_label = "Edit Strokes"
        bl_description = "Toggle Edit Strokes for Grease Pencil"
    
        @classmethod
        def poll(cls, context):
            return (context.gpencil_data is not None)
    
        def execute(self, context):
            try:
                bpy.ops.gpencil.editmode_toggle()
            except:
                self.report({'WARNING'}, "It is not possible to enter into the interactive mode")
            return {'FINISHED'}
    
    
    class VIEW3D_MT_Edit_Gpencil2(Menu):
        bl_label = "GPencil"
    
        def draw(self, context):
            toolsettings = context.tool_settings
    
            layout = self.layout
    
            layout.operator("gpencil.brush_paint", text="Sculpt Strokes").wait_for_input = True
            layout.prop_menu_enum(toolsettings.gpencil_sculpt, "tool", text="Sculpt Brush")
    
    
            layout.menu("VIEW3D_MT_edit_gpencil_transform")
            layout.operator("transform.mirror", text="Mirror")
            layout.menu("GPENCIL_MT_snap")
    
    
    
            layout.menu("VIEW3D_MT_object_animation")   # NOTE: provides keyingset access...
    
    
    
            layout.menu("VIEW3D_MT_edit_gpencil_delete")
            layout.operator("gpencil.duplicate_move", text="Duplicate")
    
    
    
            layout.menu("VIEW3D_MT_select_gpencil")
    
    
            layout.operator("gpencil.copy", text="Copy")
            layout.operator("gpencil.paste", text="Paste")
    
            layout.separator()
    
            layout.prop_menu_enum(toolsettings, "proportional_edit")
            layout.prop_menu_enum(toolsettings, "proportional_edit_falloff")
    
            layout.separator()
    
            layout.operator("gpencil.reveal")
            layout.operator("gpencil.hide", text="Show Active Layer Only").unselected = True
            layout.operator("gpencil.hide", text="Hide Active Layer").unselected = False
    
            layout.separator()
    
            layout.operator_menu_enum("gpencil.move_to_layer", "layer", text="Move to Layer")
            layout.operator_menu_enum("gpencil.convert", "type", text="Convert to Geometry...")
    
    
    # ********** Text Interactive Mode **********
    class VIEW3D_OT_Interactive_Mode_Text2(Operator):
    
        bl_idname = "view3d.interactive_mode_text2"
    
        bl_label = "Enter Edit Mode"
        bl_description = "Toggle object's editmode"
    
        @classmethod
        def poll(cls, context):
            return (context.active_object is not None)
    
        def execute(self, context):
            bpy.ops.object.editmode_toggle()
            self.report({'INFO'}, "Spacebar shortcut won't work in the Text Edit mode")
            return {'FINISHED'}
    
    
    # ********** Object Parent **********
    class VIEW3D_MT_ParentMenu2(Menu):
        bl_label = "Parent"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("object.parent_set", text="Set")
            layout.operator("object.parent_clear", text="Clear")
    
    
    # ********** Object Group **********
    class VIEW3D_MT_GroupMenu2(Menu):
        bl_label = "Group"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("collection.create")
            layout.operator("collection.objects_add_active")
    
            layout.operator("collection.objects_remove")
            layout.operator("collection.objects_remove_all")
            layout.operator("collection.objects_remove_active")
    
    
    
    # ********** Object Camera Options **********
    class VIEW3D_MT_Camera_Options2(Menu):
        bl_label = "Camera"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'EXEC_REGION_WIN'
            layout.operator("object.camera_add", text="Add Camera", icon='OUTLINER_OB_CAMERA')
            self.layout.operator("view3d.object_as_camera", text="Object As Camera", icon='OUTLINER_OB_CAMERA')
            self.layout.operator("view3d.viewnumpad", text="View Active Camera", icon='OUTLINER_OB_CAMERA').type = 'CAMERA'
    
    
    class VIEW3D_MT_Object_Data_Link2(Menu):
        bl_label = "Object Data"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator_menu_enum("object.make_local", "type", text="Make Local...")
            layout.menu("VIEW3D_MT_make_single_user")
            layout.operator("object.proxy_make", text="Make Proxy...")
            layout.operator("object.make_dupli_face")
            UseSeparator(self, context)
            layout.operator("object.data_transfer")
            layout.operator("object.datalayout_transfer")
    
    
    class VIEW3D_MT_Duplicate2(Menu):
        bl_label = "Duplicate"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("object.duplicate_move")
            layout.operator("object.duplicate_move_linked")
    
    
    class VIEW3D_MT_KeyframeMenu2(Menu):
        bl_label = "Keyframe"
    
        def draw(self, context):
            layout = self.layout
            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...")
    
    
    class VIEW3D_MT_UndoS2(Menu):
        bl_label = "Undo/Redo"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("ed.undo")
            layout.operator("ed.redo")
            UseSeparator(self, context)
            layout.operator("ed.undo_history")
    
    
    # ********** Normals / Auto Smooth Menu **********
    # Thanks to marvin.k.breuer for the Autosmooth part of the menu
    class VIEW3D_MT_AutoSmooth2(Menu):
        bl_label = "Normals / Auto Smooth"
    
        def draw(self, context):
            layout = self.layout
            obj = context.object
            obj_data = context.active_object.data
    
            # moved the VIEW3D_MT_edit_mesh_normals contents here under an Edit mode check
            if obj and obj.type == 'MESH' and obj.mode in {'EDIT'}:
                layout.operator("mesh.normals_make_consistent",
                                text="Recalculate Outside").inside = False
                layout.operator("mesh.normals_make_consistent",
                                text="Recalculate Inside").inside = True
                layout.operator("mesh.flip_normals")
                UseSeparator(self, context)
    
            layout.prop(obj_data, "show_double_sided", text="Normals: Double Sided")
            UseSeparator(self, context)
            layout.prop(obj_data, "use_auto_smooth", text="Normals: Auto Smooth")
    
            # Auto Smooth Angle - two tab spaces to align it with the rest of the menu
            layout.prop(obj_data, "auto_smooth_angle",
                        text="       Auto Smooth Angle")
    
    
    # Edit Mode Menu's #
    
    # ********** Edit Mesh **********
    class VIEW3D_MT_Edit_Mesh2(Menu):
        bl_label = "Mesh"
    
        def draw(self, context):
            layout = self.layout
            toolsettings = context.tool_settings
            view = context.space_data
    
            layout.menu("VIEW3D_MT_edit_mesh_vertices", icon='VERTEXSEL')
            layout.menu("VIEW3D_MT_edit_mesh_edges", icon='EDGESEL')
            layout.menu("VIEW3D_MT_edit_mesh_faces", icon='FACESEL')
            UseSeparator(self, context)
            layout.operator("mesh.duplicate_move")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_edit_mesh_clean", icon='AUTO')
            layout.prop(view, "use_occlude_geometry")
            UseSeparator(self, context)
    
            layout.menu("VIEW3D_MT_AutoSmooth2", icon='META_DATA')
    
            layout.operator("mesh.loopcut_slide",
                            text="Loopcut", icon='UV_EDGESEL')
            UseSeparator(self, context)
            layout.operator("mesh.symmetrize")
            layout.operator("mesh.symmetry_snap")
            UseSeparator(self, context)
            layout.operator("mesh.bisect")
            layout.operator_menu_enum("mesh.sort_elements", "type", text="Sort Elements...")
            UseSeparator(self, context)
            layout.prop_menu_enum(toolsettings, "proportional_edit")
            layout.prop_menu_enum(toolsettings, "proportional_edit_falloff")
            UseSeparator(self, context)
    
            layout.prop(toolsettings, "use_mesh_automerge")
            # Double Threshold - two tab spaces to align it with the rest of the menu
            layout.prop(toolsettings, "double_threshold", text="       Double Threshold")
    
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_edit_mesh_showhide")
    
    
    # ********** Edit Multiselect **********
    
    class VIEW3D_MT_Edit_Multi2(Menu):
        bl_label = "Multi Select"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            prop = layout.operator("wm.context_set_value", text="Vertex Select",
                                   icon='VERTEXSEL')
            prop.value = "(True, False, False)"
            prop.data_path = "tool_settings.mesh_select_mode"
    
            prop = layout.operator("wm.context_set_value", text="Edge Select",
                                   icon='EDGESEL')
            prop.value = "(False, True, False)"
            prop.data_path = "tool_settings.mesh_select_mode"
    
            prop = layout.operator("wm.context_set_value", text="Face Select",
                                   icon='FACESEL')
            prop.value = "(False, False, True)"
            prop.data_path = "tool_settings.mesh_select_mode"
            UseSeparator(self, context)
    
            prop = layout.operator("wm.context_set_value",
                                   text="Vertex & Edge Select",
                                   icon='EDITMODE_HLT')
            prop.value = "(True, True, False)"
            prop.data_path = "tool_settings.mesh_select_mode"
    
            prop = layout.operator("wm.context_set_value",
                                   text="Vertex & Face Select",
    
                                   icon='XRAY')
    
            prop.value = "(True, False, True)"
            prop.data_path = "tool_settings.mesh_select_mode"
    
            prop = layout.operator("wm.context_set_value",
                                   text="Edge & Face Select",
                                   icon='SNAP_FACE')
            prop.value = "(False, True, True)"
            prop.data_path = "tool_settings.mesh_select_mode"
            UseSeparator(self, context)
    
            prop = layout.operator("wm.context_set_value",
                                   text="Vertex & Edge & Face Select",
                                   icon='SNAP_VOLUME')
            prop.value = "(True, True, True)"
            prop.data_path = "tool_settings.mesh_select_mode"
    
    
    # ********** Edit Mesh Edge **********
    class VIEW3D_MT_EditM_Edge2(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
            UseSeparator(self, context)
    
            layout.operator("mesh.mark_sharp")
            layout.operator("mesh.mark_sharp", text="Clear Sharp").clear = True
            layout.operator("mesh.extrude_move_along_normals", text="Extrude")
            UseSeparator(self, context)
    
            layout.operator("mesh.edge_rotate",
                            text="Rotate Edge CW").direction = 'CW'
            layout.operator("mesh.edge_rotate",
                            text="Rotate Edge CCW").direction = 'CCW'
            UseSeparator(self, context)
    
            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")
    
    
    # ********** Edit Mesh Cursor **********
    class VIEW3D_MT_EditCursorMenu2(Menu):
        bl_label = "Snap Cursor"
    
        def draw(self, context):
            layout = self.layout
            layout.operator_context = 'INVOKE_REGION_WIN'
    
            layout.operator("object.setorigintoselected2",
    
                            text="Origin to Selected V/F/E")
            UseSeparator(self, context)
            layout.menu("VIEW3D_Snap_Origin")
            layout.menu("VIEW3D_Snap_Context")
            UseSeparator(self, context)
            layout.operator("view3d.snap_cursor_to_selected",
                            text="Cursor to Selected")
            layout.operator("view3d.snap_cursor_to_center",
                            text="Cursor to Center")
            layout.operator("view3d.snap_cursor_to_grid",
                            text="Cursor to Grid")
            layout.operator("view3d.snap_cursor_to_active",
                            text="Cursor to Active")
    
            layout.operator("view3d.snap_cursor_to_edge_intersection2",
    
                            text="Cursor to Edge Intersection")
            UseSeparator(self, context)
    
            layout.operator("view3d.snap_selected_to_cursor",
    
                            text="Selection to Cursor").use_offset = False
            layout.operator("view3d.snap_selected_to_cursor",
                            text="Selection to Cursor (Keep Offset)").use_offset = True
    
            layout.operator("view3d.snap_selected_to_grid",
                            text="Selection to Grid")
            UseSeparator(self, context)
    
            layout.menu("VIEW3D_MT_Pivot2")
    
            layout.operator("view3d.pivot_cursor2",
    
                            text="Set Cursor as Pivot Point")
    
            layout.operator("view3d.revert_pivot2",
    
                            text="Revert Pivot Point")
    
    
    # ********** Edit Mesh UV **********
    class VIEW3D_MT_UV_Map2(Menu):
        bl_label = "UV Mapping"
    
        def draw(self, context):
            layout = self.layout
            layout.operator("uv.unwrap")
            UseSeparator(self, context)
            layout.operator_context = 'INVOKE_DEFAULT'
            layout.operator("uv.smart_project")
            layout.operator("uv.lightmap_pack")
            layout.operator("uv.follow_active_quads")
            layout.operator_context = 'EXEC_REGION_WIN'
            layout.operator("uv.cube_project")
            layout.operator("uv.cylinder_project")
            layout.operator("uv.sphere_project")
            layout.operator_context = 'INVOKE_REGION_WIN'
            UseSeparator(self, context)
            layout.operator("uv.project_from_view").scale_to_bounds = False
            layout.operator("uv.project_from_view", text="Project from View (Bounds)").scale_to_bounds = True
            UseSeparator(self, context)
            layout.operator("uv.reset")
    
    
    # ********** Edit Curve **********
    class VIEW3D_MT_Edit_Curve2(Menu):
        bl_label = "Curve"
    
        def draw(self, context):
            layout = self.layout
    
            toolsettings = context.tool_settings
    
            layout.operator("curve.extrude_move")
            layout.operator("curve.spin")
            layout.operator("curve.duplicate_move")
            layout.operator("curve.split")
            layout.operator("curve.separate")
            layout.operator("curve.make_segment")
            layout.operator("curve.cyclic_toggle")
            UseSeparator(self, context)
            layout.operator("curve.delete", text="Delete...")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_edit_curve_segments")
            layout.prop_menu_enum(toolsettings, "proportional_edit",
                                  icon="PROP_CON")
            layout.prop_menu_enum(toolsettings, "proportional_edit_falloff",
                                  icon="SMOOTHCURVE")
            layout.menu("VIEW3D_MT_edit_curve_showhide")
    
    
    class VIEW3D_MT_EditCurveCtrlpoints2(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.operator_menu_enum("curve.handle_type_set", "type")
                layout.menu("VIEW3D_MT_hook")
    
    
    class VIEW3D_MT_EditCurveSegments2(Menu):
        bl_label = "Curve Segments"
    
        def draw(self, context):
            layout = self.layout
            layout.operator("curve.subdivide")
            layout.operator("curve.switch_direction")
    
    
    class VIEW3D_MT_EditCurveSpecials2(Menu):
        bl_label = "Specials"
    
        def draw(self, context):
            layout = self.layout
            layout.operator("curve.subdivide")
            UseSeparator(self, context)
            layout.operator("curve.switch_direction")
            layout.operator("curve.spline_weight_set")
            layout.operator("curve.radius_set")
            UseSeparator(self, context)
            layout.operator("curve.smooth")
            layout.operator("curve.smooth_weight")
            layout.operator("curve.smooth_radius")
            layout.operator("curve.smooth_tilt")
    
    
    # Brushes Menu's #
    # Thanks to CoDEmanX for the code
    class VIEW3D_MT_Brush_Selection2(Menu):
        bl_label = "Brush Tool"
    
        def draw(self, context):
            layout = self.layout
            settings = UnifiedPaintPanel.paint_settings(context)
    
            # check if brush exists (for instance, in paint mode before adding a slot)
            if hasattr(settings, 'brush'):
                brush = settings.brush
            else:
                brush = None
    
            if not brush:
                return
    
            if not context.particle_edit_object:
                if UseBrushesLists():
                    flow = layout.column_flow(columns=3)
    
                    for brsh in bpy.data.brushes:
                        if (context.sculpt_object and brsh.use_paint_sculpt):
                            props = flow.operator("wm.context_set_id", text=brsh.name,
                                                  icon_value=layout.icon(brsh))
                            props.data_path = "tool_settings.sculpt.brush"
                            props.value = brsh.name
                        elif (context.image_paint_object and brsh.use_paint_image):
                            props = flow.operator("wm.context_set_id", text=brsh.name,
                                                  icon_value=layout.icon(brsh))
                            props.data_path = "tool_settings.image_paint.brush"
                            props.value = brsh.name
                        elif (context.vertex_paint_object and brsh.use_paint_vertex):
                            props = flow.operator("wm.context_set_id", text=brsh.name,
                                                  icon_value=layout.icon(brsh))
                            props.data_path = "tool_settings.vertex_paint.brush"
                            props.value = brsh.name
                        elif (context.weight_paint_object and brsh.use_paint_weight):
                            props = flow.operator("wm.context_set_id", text=brsh.name,
                                                  icon_value=layout.icon(brsh))
                            props.data_path = "tool_settings.weight_paint.brush"
                            props.value = brsh.name
                else:
                    layout.template_ID_preview(settings, "brush", new="brush.add", rows=3, cols=8)
    
    
    class VIEW3D_MT_Brush_Settings2(Menu):
        bl_label = "Brush Settings"
    
        def draw(self, context):
            layout = self.layout
            settings = UnifiedPaintPanel.paint_settings(context)
            brush = settings.brush
    
            ups = context.tool_settings.unified_paint_settings
            layout.prop(ups, "use_unified_size", text="Unified Size")
            layout.prop(ups, "use_unified_strength", text="Unified Strength")
            if context.image_paint_object or context.vertex_paint_object:
                layout.prop(ups, "use_unified_color", text="Unified Color")
            UseSeparator(self, context)
    
            layout.menu("VIEW3D_MT_brush_paint_modes")
    
            if not brush:
                return
    
            if context.sculpt_object:
                sculpt_tool = brush.sculpt_tool
    
                UseSeparator(self, context)
                layout.operator_menu_enum("brush.curve_preset", "shape", text="Curve Preset")
                UseSeparator(self, context)
    
                if sculpt_tool != 'GRAB':
                    layout.prop_menu_enum(brush, "stroke_method")
    
                    if sculpt_tool in {'DRAW', 'PINCH', 'INFLATE', 'LAYER', 'CLAY'}:
                        layout.prop_menu_enum(brush, "direction")
    
                    if sculpt_tool == 'LAYER':
                        layout.prop(brush, "use_persistent")
                        layout.operator("sculpt.set_persistent_base")
    
    
    # Sculpt Menu's #
    class VIEW3D_MT_Sculpts2(Menu):
        bl_label = "Sculpt"
    
        def draw(self, context):
            layout = self.layout
            toolsettings = context.tool_settings
            sculpt = toolsettings.sculpt
    
            layout.prop(sculpt, "use_symmetry_x")
            layout.prop(sculpt, "use_symmetry_y")
            layout.prop(sculpt, "use_symmetry_z")
    
            UseSeparator(self, context)
            layout.prop(sculpt, "lock_x")
            layout.prop(sculpt, "lock_y")
            layout.prop(sculpt, "lock_z")
    
            UseSeparator(self, context)
            layout.prop(sculpt, "use_threaded", text="Threaded Sculpt")
            layout.prop(sculpt, "show_low_resolution")
            layout.prop(sculpt, "use_deform_only")
    
            UseSeparator(self, context)
            layout.prop(sculpt, "show_brush")
            layout.prop(sculpt, "show_diffuse_color")
    
    
    class VIEW3D_MT_Hide_Masks2(Menu):
        bl_label = "Hide/Mask"
    
        def draw(self, context):
            layout = self.layout
    
            props = layout.operator("paint.mask_lasso_gesture", text="Lasso Mask")
            UseSeparator(self, context)
    
            props = layout.operator("view3d.select_box", text="Box Mask", icon="BORDER_RECT")
    
            props = layout.operator("paint.hide_show", text="Box Hide")
            props.action = 'HIDE'
            props.area = 'INSIDE'
    
            props = layout.operator("paint.hide_show", text="Box Show")
            props.action = 'SHOW'
            props.area = 'INSIDE'
            UseSeparator(self, context)
    
            props = layout.operator("paint.mask_flood_fill", text="Fill Mask", icon="BORDER_RECT")
            props.mode = 'VALUE'
            props.value = 1
    
            props = layout.operator("paint.mask_flood_fill", text="Clear Mask")
            props.mode = 'VALUE'
            props.value = 0
    
            layout.operator("paint.mask_flood_fill", text="Invert Mask").mode = 'INVERT'
            UseSeparator(self, context)
    
            props = layout.operator("paint.hide_show", text="Show All", icon="RESTRICT_VIEW_OFF")
            props.action = 'SHOW'
            props.area = 'ALL'
    
            props = layout.operator("paint.hide_show", text="Hide Masked", icon="RESTRICT_VIEW_ON")
            props.area = 'MASKED'
            props.action = 'HIDE'
    
    
    # Sculpt Specials Menu (Thanks to marvin.k.breuer) #
    class VIEW3D_MT_Sculpt_Specials2(Menu):
        bl_label = "Sculpt Specials"
    
        def draw(self, context):
            layout = self.layout
            settings = context.tool_settings
    
            if context.sculpt_object.use_dynamic_topology_sculpting:
                layout.operator("sculpt.dynamic_topology_toggle", icon='X', text="Disable Dyntopo")
                UseSeparator(self, context)
                if (settings.sculpt.detail_type_method == 'CONSTANT'):
                    layout.prop(settings.sculpt, "constant_detail", text="Const.")
                    layout.operator("sculpt.sample_detail_size", text="", icon='EYEDROPPER')
                else:
                    layout.prop(settings.sculpt, "detail_size", text="Detail")
    
                UseSeparator(self, context)
                layout.operator("sculpt.symmetrize", icon='ARROW_LEFTRIGHT')
                layout.prop(settings.sculpt, "symmetrize_direction", "")
                UseSeparator(self, context)
                layout.operator("sculpt.optimize")
                if (settings.sculpt.detail_type_method == 'CONSTANT'):
                    layout.operator("sculpt.detail_flood_fill")
    
                UseSeparator(self, context)
                layout.prop(settings.sculpt, "detail_refine_method", text="")
                layout.prop(settings.sculpt, "detail_type_method", text="")
                UseSeparator(self, context)
                layout.prop(settings.sculpt, "use_smooth_shading", "Smooth")
    
            else:
                layout.operator("sculpt.dynamic_topology_toggle", icon='SCULPT_DYNTOPO', text="Enable Dyntopo")
    
    
    # Display Wire (Thanks to marvin.k.breuer) #
    class VIEW3D_OT_Display_Wire_All2(Operator):
        """Display Wire on All Objects"""
        bl_label = "Wire on All Objects"
    
        bl_idname = "view3d.display_wire_all2"
    
    
        @classmethod
        def poll(cls, context):
            return context.active_object is not None
    
        def execute(self, context):
    
            for obj in bpy.data.objects:
                if obj.show_wire:
                    obj.show_all_edges = False
                    obj.show_wire = False
                else:
                    obj.show_all_edges = True
                    obj.show_wire = True
    
            return {'FINISHED'}
    
    
    # Vertex Color Menu #
    class VIEW3D_MT_Vertex_Colors2(Menu):
        bl_label = "Vertex Colors"
    
        def draw(self, context):
            layout = self.layout
            layout.operator("paint.vertex_color_set")
            UseSeparator(self, context)
            layout.operator("paint.vertex_color_smooth")
            layout.operator("paint.vertex_color_dirt")
    
    
    # Weight Paint Menu #
    class VIEW3D_MT_Paint_Weights2(Menu):
        bl_label = "Weights"
    
        def draw(self, context):
            layout = self.layout
    
            layout.operator("paint.weight_from_bones", text="Assign Automatic From Bones").type = 'AUTOMATIC'
            layout.operator("paint.weight_from_bones", text="Assign From Bone Envelopes").type = 'ENVELOPES'
            UseSeparator(self, context)
    
            layout.operator("object.vertex_group_normalize_all", text="Normalize All")
            layout.operator("object.vertex_group_normalize", text="Normalize")
            UseSeparator(self, context)
    
            layout.operator("object.vertex_group_mirror", text="Mirror")
            layout.operator("object.vertex_group_invert", text="Invert")
            UseSeparator(self, context)
            layout.operator("object.vertex_group_clean", text="Clean")
            layout.operator("object.vertex_group_quantize", text="Quantize")
            UseSeparator(self, context)
            layout.operator("object.vertex_group_levels", text="Levels")
            layout.operator("object.vertex_group_smooth", text="Smooth")
            UseSeparator(self, context)
            props = layout.operator("object.data_transfer", text="Transfer Weights")
            props.use_reverse_transfer = True
            props.data_type = 'VGROUP_WEIGHTS'
            UseSeparator(self, context)
            layout.operator("object.vertex_group_limit_total", text="Limit Total")
            layout.operator("object.vertex_group_fix", text="Fix Deforms")
    
            UseSeparator(self, context)
    
            layout.operator("paint.weight_set")
    
    
    # Armature Menu's #
    
    class VIEW3D_MT_Edit_Armature2(Menu):
        bl_label = "Armature"
    
        def draw(self, context):
            layout = self.layout
            toolsettings = context.tool_settings
    
            layout.prop_menu_enum(toolsettings, "proportional_edit", icon="PROP_CON")
            layout.prop_menu_enum(toolsettings, "proportional_edit_falloff", icon="SMOOTHCURVE")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings")
            layout.operator("armature.merge")
            layout.operator("armature.fill")
            layout.operator("armature.split")
            layout.operator("armature.separate")
            layout.operator("armature.switch_direction", text="Switch Direction")
            layout.operator_context = 'EXEC_AREA'
            layout.operator("armature.symmetrize")
            UseSeparator(self, context)
            layout.operator("armature.delete")
            UseSeparator(self, context)
            layout.operator_context = 'INVOKE_DEFAULT'
            layout.operator("armature.armature_layers")
            layout.operator("armature.bone_layers")
    
    
    class VIEW3D_MT_EditArmatureTK2(Menu):
        bl_label = "Armature Tools"
    
        def draw(self, context):
            layout = self.layout
            layout.operator("armature.subdivide", text="Subdivide")
            layout.operator("armature.extrude_move")
            layout.operator("armature.extrude_forked")
            layout.operator("armature.duplicate_move")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_edit_armature_delete")
            UseSeparator(self, context)
            layout.operator("transform.transform",
                            text="Scale Envelope Distance").mode = 'BONE_SIZE'
            layout.operator("transform.transform",
                            text="Scale B-Bone Width").mode = 'BONE_SIZE'
    
    
    # Armature Pose Menu's #
    
    class VIEW3D_MT_Pose2(Menu):
        bl_label = "Pose"
    
        def draw(self, context):
            layout = self.layout
    
            layout.menu("VIEW3D_MT_object_animation")
            layout.menu("VIEW3D_MT_pose_slide")
            layout.menu("VIEW3D_MT_pose_propagate")
            layout.menu("VIEW3D_MT_pose_library")
            layout.menu("VIEW3D_MT_pose_motion")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_pose_group")
            layout.menu("VIEW3D_MT_object_parent")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_pose_ik")
            layout.menu("VIEW3D_MT_pose_constraints")
    
            layout.menu("VIEW3D_MT_PoseNames2")
    
            layout.operator("pose.quaternions_flip")
            layout.operator_context = 'INVOKE_AREA'
            UseSeparator(self, context)
            layout.operator("armature.armature_layers", text="Change Armature Layers...")
            layout.operator("pose.bone_layers", text="Change Bone Layers...")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_pose_showhide")
            layout.menu("VIEW3D_MT_bone_options_toggle", text="Bone Settings")
    
    
    # Transform Menu's #
    
    class VIEW3D_MT_TransformMenu2(Menu):
        bl_label = "Transform"
    
        def draw(self, context):
            layout = self.layout
    
            layout.menu("VIEW3D_MT_ManipulatorMenu12")
    
            layout.operator("transform.translate", text="Move")
    
            layout.operator("transform.rotate", text="Rotate")
            layout.operator("transform.resize", text="Scale")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_object_clear")
            layout.menu("VIEW3D_MT_object_apply")
            UseSeparator(self, context)
            layout.operator("transform.translate", text="Move Texture Space").texture_space = True
            layout.operator("transform.resize", text="Scale Texture Space").texture_space = True
            UseSeparator(self, context)
            layout.operator("object.randomize_transform")
            layout.operator("transform.tosphere", text="To Sphere")
            layout.operator("transform.shear", text="Shear")
            layout.operator("transform.bend", text="Bend")
            layout.operator("transform.push_pull", text="Push/Pull")
            UseSeparator(self, context)
            layout.operator("object.align")
            layout.operator_context = 'EXEC_REGION_WIN'
            layout.operator("transform.transform",
                            text="Align to Transform Orientation").mode = 'ALIGN'
    
    # ********** Edit Mesh Transform **********
    class VIEW3D_MT_TransformMenuEdit2(Menu):
        bl_label = "Transform"
    
            layout.menu("VIEW3D_MT_ManipulatorMenu12")
    
            layout.operator("transform.translate", text="Move")
    
            layout.operator("transform.rotate", text="Rotate")
            layout.operator("transform.resize", text="Scale")
    
            layout.operator("transform.tosphere", text="To Sphere")
            layout.operator("transform.shear", text="Shear")
            layout.operator("transform.bend", text="Bend")
            layout.operator("transform.push_pull", text="Push/Pull")
    
            layout.operator("transform.vertex_warp", text="Warp")
            layout.operator("transform.vertex_random", text="Randomize")
            UseSeparator(self, context)
            layout.operator("transform.translate", text="Move Texture Space").texture_space = True
            layout.operator("transform.resize", text="Scale Texture Space").texture_space = True
            UseSeparator(self, context)
            layout.operator_context = 'EXEC_REGION_WIN'
            layout.operator("transform.transform",
                            text="Align to Transform Orientation").mode = 'ALIGN'
    
            layout.operator("object.origin_set",
                            text="Geometry to Origin").type = 'GEOMETRY_ORIGIN'
    
    
    # ********** Transform Lite/Short **********
    class VIEW3D_MT_TransformMenuLite2(Menu):
        bl_label = "Transform"
    
        def draw(self, context):
            layout = self.layout
    
            layout.menu("VIEW3D_MT_ManipulatorMenu12")
    
            layout.operator("transform.translate", text="Move")
    
            layout.operator("transform.rotate", text="Rotate")
            layout.operator("transform.resize", text="Scale")
            UseSeparator(self, context)
            layout.menu("VIEW3D_MT_object_clear")
            layout.menu("VIEW3D_MT_object_apply")
            UseSeparator(self, context)
            layout.operator("transform.transform",
                            text="Align to Transform Orientation").mode = 'ALIGN'
    
    
    # ********** Transform Camera **********
    class VIEW3D_MT_TransformMenuCamera2(Menu):
        bl_label = "Transform"
    
        def draw(self, context):
            layout = self.layout
    
    
            layout.menu("VIEW3D_MT_ManipulatorMenu12")
    
            layout.menu("VIEW3D_MT_object_clear")
            layout.menu("VIEW3D_MT_object_apply")
    
            layout.operator("transform.translate", text="Move")
    
            layout.operator("transform.rotate", text="Rotate")
            layout.operator("transform.resize", text="Scale")
            layout.operator("object.align")
            layout.operator_context = 'EXEC_REGION_WIN'
            UseSeparator(self, context)
            layout.operator("transform.transform",
                            text="Align to Transform Orientation").mode = 'ALIGN'
    
    
    # ********** Transform Armature  **********
    class VIEW3D_MT_TransformMenuArmature2(Menu):
        bl_label = "Transform"
    
        def draw(self, context):
            layout = self.layout
    
            layout.menu("VIEW3D_MT_ManipulatorMenu12")
    
            layout.operator("transform.translate", text="Move")
    
            layout.operator("transform.rotate", text="Rotate")
            layout.operator("transform.resize", text="Scale")
            UseSeparator(self, context)
            layout.operator("armature.align")
            layout.operator("object.align")
            layout.operator_context = 'EXEC_AREA'
            UseSeparator(self, context)
    
            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'
    
            layout.operator("object.origin_set",
                            text="Origin to Center of Mass").type = 'ORIGIN_CENTER_OF_MASS'
    
    # ********** Transform Armature Edit **********
    class VIEW3D_MT_TransformMenuArmatureEdit2(Menu):
        bl_label = "Transform"
    
            layout.menu("VIEW3D_MT_ManipulatorMenu12")
    
            layout.operator("transform.translate", text="Move")
    
            layout.operator("transform.rotate", text="Rotate")
            layout.operator("transform.resize", text="Scale")
            UseSeparator(self, context)
            layout.operator("transform.tosphere", text="To Sphere")
            layout.operator("transform.shear", text="Shear")
            layout.operator("transform.bend", text="Bend")
            layout.operator("transform.push_pull", text="Push/Pull")
            layout.operator("transform.vertex_warp", text="Warp")
            UseSeparator(self, context)
            layout.operator("transform.vertex_random", text="Randomize")
            layout.operator("armature.align")
            layout.operator_context = 'EXEC_AREA'
    
    # ********** Transform Armature Pose **********
    class VIEW3D_MT_TransformMenuArmaturePose2(Menu):