Spacebar Menu: Fix Brush menu in Paint mode
Bumped version to 1.8.5 Fix the brush menu being broken by the missing brush attribute in Texture Painting mode before adding the UV map and the Paint Slot The bug is also in Blender's UI (from which the code is derived) Some small fixes - add a check to wire all Operator Update wiki link
This commit is contained in:
parent
93d779e189
commit
ad84001f6e
|
@ -20,12 +20,12 @@
|
|||
bl_info = {
|
||||
"name": "Dynamic Context Menu",
|
||||
"author": "meta-androcto",
|
||||
"version": (1, 8, 4),
|
||||
"version": (1, 8, 5),
|
||||
"blender": (2, 77, 0),
|
||||
"location": "View3D > Spacebar",
|
||||
"description": "Object Mode Context Sensitive Spacebar Menu",
|
||||
"warning": "",
|
||||
"wiki_url": "http://wiki.blender.org/index.php/Extensions:2.6/Py/"
|
||||
"wiki_url": "https://wiki.blender.org/index.php/Extensions:2.6/Py/"
|
||||
"Scripts/3D_interaction/Dynamic_Spacebar_Menu",
|
||||
"category": "3D View",
|
||||
}
|
||||
|
@ -101,7 +101,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_Edit_Gpencil", icon='GREASEPENCIL')
|
||||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -131,7 +132,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_edit_mesh_extrude", icon='ORTHO')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_edit_mesh_delete", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -169,7 +171,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
|
||||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_Brush_Settings", icon='BRUSH_DATA')
|
||||
layout.menu("VIEW3D_MT_Brush_Selection", text="Vertex Paint Tool", icon='BRUSH_VERTEXDRAW')
|
||||
layout.menu("VIEW3D_MT_Brush_Selection",
|
||||
text="Vertex Paint Tool", icon='BRUSH_VERTEXDRAW')
|
||||
layout.menu("VIEW3D_MT_Vertex_Colors", icon='GROUP_VCOL')
|
||||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
|
||||
|
@ -187,7 +190,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_Paint_Weights", icon='WPAINT_HLT')
|
||||
layout.menu("VIEW3D_MT_Brush_Settings", icon='BRUSH_DATA')
|
||||
layout.menu("VIEW3D_MT_Brush_Selection", text="Weight Paint Tool", icon='BRUSH_TEXMASK')
|
||||
layout.menu("VIEW3D_MT_Brush_Selection",
|
||||
text="Weight Paint Tool", icon='BRUSH_TEXMASK')
|
||||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
|
||||
layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
|
||||
|
@ -202,7 +206,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_View_Menu", icon='ZOOM_ALL')
|
||||
layout.menu("VIEW3D_MT_Brush_Settings", icon='BRUSH_DATA')
|
||||
layout.menu("VIEW3D_MT_Brush_Selection", text="Texture Paint Tool", icon='SCULPTMODE_HLT')
|
||||
layout.menu("VIEW3D_MT_Brush_Selection",
|
||||
text="Texture Paint Tool", icon='SCULPTMODE_HLT')
|
||||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
|
||||
layout.menu("VIEW3D_MT_Object_Interactive_Mode", icon='EDIT')
|
||||
|
@ -233,7 +238,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -295,7 +301,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
|
||||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -357,7 +364,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
|
||||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
|
||||
|
@ -418,7 +426,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -468,7 +477,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
|
||||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -498,7 +508,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
|
||||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -529,7 +540,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
|
||||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -599,7 +611,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_pose_specials", icon='SOLO_OFF')
|
||||
layout.menu("VIEW3D_MT_pose_group", icon='GROUP_BONE')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("pose.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT_BONE')
|
||||
layout.operator_menu_enum("pose.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT_BONE')
|
||||
UseSeparator(self, context)
|
||||
layout.menu("VIEW3D_MT_UndoS", icon='ARROW_LEFTRIGHT')
|
||||
layout.menu("VIEW3D_MT_Object_Interactive_Armature", icon='VIEW3D')
|
||||
|
@ -630,7 +643,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.modifier_add", "type", icon='MODIFIER')
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -688,7 +702,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_object_specials", text="Specials", icon='SOLO_OFF')
|
||||
layout.menu("VIEW3D_MT_Camera_Options", icon='OUTLINER_OB_CAMERA')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -715,7 +730,8 @@ class VIEW3D_MT_Space_Dynamic_Menu(Menu):
|
|||
layout.menu("VIEW3D_MT_ParentMenu", icon='ROTACTIVE')
|
||||
layout.menu("VIEW3D_MT_GroupMenu", icon='GROUP')
|
||||
UseSeparator(self, context)
|
||||
layout.operator_menu_enum("object.constraint_add", "type", text="Add Constraint", icon='CONSTRAINT')
|
||||
layout.operator_menu_enum("object.constraint_add",
|
||||
"type", text="Add Constraint", icon='CONSTRAINT')
|
||||
UseSeparator(self, context)
|
||||
layout.operator("object.delete", text="Delete Object", icon='X')
|
||||
UseSeparator(self, context)
|
||||
|
@ -1514,6 +1530,7 @@ class VIEW3D_MT_Brush_Selection(Menu):
|
|||
brush = None
|
||||
|
||||
if not brush:
|
||||
layout.label(text="No Brushes currently available", icon="INFO")
|
||||
return
|
||||
|
||||
if not context.particle_edit_object:
|
||||
|
@ -1551,7 +1568,7 @@ class VIEW3D_MT_Brush_Settings(Menu):
|
|||
def draw(self, context):
|
||||
layout = self.layout
|
||||
settings = UnifiedPaintPanel.paint_settings(context)
|
||||
brush = settings.brush
|
||||
brush = getattr(settings, "brush", None)
|
||||
|
||||
ups = context.tool_settings.unified_paint_settings
|
||||
layout.prop(ups, "use_unified_size", text="Unified Size")
|
||||
|
@ -1560,11 +1577,12 @@ class VIEW3D_MT_Brush_Settings(Menu):
|
|||
layout.prop(ups, "use_unified_color", text="Unified Color")
|
||||
UseSeparator(self, context)
|
||||
|
||||
layout.menu("VIEW3D_MT_brush_paint_modes")
|
||||
|
||||
if not brush:
|
||||
layout.label(text="No Brushes currently available", icon="INFO")
|
||||
return
|
||||
|
||||
layout.menu("VIEW3D_MT_brush_paint_modes")
|
||||
|
||||
if context.sculpt_object:
|
||||
sculpt_tool = brush.sculpt_tool
|
||||
|
||||
|
@ -1658,51 +1676,62 @@ class VIEW3D_MT_Sculpt_Specials(Menu):
|
|||
settings = context.tool_settings
|
||||
|
||||
if context.sculpt_object.use_dynamic_topology_sculpting:
|
||||
layout.operator("sculpt.dynamic_topology_toggle", icon='X', text="Disable Dyntopo")
|
||||
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")
|
||||
layout.operator("sculpt.dynamic_topology_toggle",
|
||||
icon='SCULPT_DYNTOPO', text="Enable Dyntopo")
|
||||
|
||||
|
||||
# Display Wire (Thanks to marvin.k.breuer) #
|
||||
class VIEW3D_OT_Display_Wire_All(Operator):
|
||||
"""Display Wire on All Objects"""
|
||||
bl_label = "Wire on All Objects"
|
||||
bl_idname = "view3d.display_wire_all"
|
||||
bl_description = "Enable/Disable Display Wire on All Objects"
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return context.active_object is not None
|
||||
|
||||
def execute(self, context):
|
||||
|
||||
is_error = False
|
||||
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
|
||||
try:
|
||||
if obj.show_wire:
|
||||
obj.show_all_edges = False
|
||||
obj.show_wire = False
|
||||
else:
|
||||
obj.show_all_edges = True
|
||||
obj.show_wire = True
|
||||
except:
|
||||
is_error = True
|
||||
pass
|
||||
|
||||
if is_error:
|
||||
self.report({'WARNING'},
|
||||
"Wire on All Objects could not be completed for some objects")
|
||||
|
||||
return {'FINISHED'}
|
||||
|
||||
|
@ -1715,6 +1744,7 @@ class VIEW3D_MT_Vertex_Colors(Menu):
|
|||
layout = self.layout
|
||||
layout.operator("paint.vertex_color_set")
|
||||
UseSeparator(self, context)
|
||||
|
||||
layout.operator("paint.vertex_color_smooth")
|
||||
layout.operator("paint.vertex_color_dirt")
|
||||
|
||||
|
@ -1726,8 +1756,10 @@ class VIEW3D_MT_Paint_Weights(Menu):
|
|||
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'
|
||||
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")
|
||||
|
@ -1737,19 +1769,22 @@ class VIEW3D_MT_Paint_Weights(Menu):
|
|||
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")
|
||||
|
@ -1767,17 +1802,21 @@ class VIEW3D_MT_Edit_Armature(Menu):
|
|||
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")
|
||||
|
|
Loading…
Reference in New Issue