WIP: UI: Refactor menus in Edit Mode #113122
|
@ -5678,9 +5678,9 @@ def km_edit_mesh(params):
|
|||
{"properties": [("use_occlude_geometry", False), ("only_selected", True)]}),
|
||||
("object.vertex_parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None),
|
||||
# Menus.
|
||||
op_menu("VIEW3D_MT_edit_mesh_faces", {"type": 'F', "value": 'PRESS', "ctrl": True}),
|
||||
op_menu("VIEW3D_MT_edit_mesh_edges", {"type": 'E', "value": 'PRESS', "ctrl": True}),
|
||||
op_menu("VIEW3D_MT_edit_mesh_vertices", {"type": 'V', "value": 'PRESS', "ctrl": True}),
|
||||
op_menu("VIEW3D_MT_edit_mesh_fill_connect", {"type": 'F', "value": 'PRESS', "ctrl": True}),
|
||||
op_menu("VIEW3D_MT_edit_mesh_write_attribute", {"type": 'E', "value": 'PRESS', "ctrl": True}),
|
||||
op_menu("VIEW3D_MT_edit_mesh_cut_slide", {"type": 'V', "value": 'PRESS', "ctrl": True}),
|
||||
op_menu("VIEW3D_MT_hook", {"type": 'H', "value": 'PRESS', "ctrl": True}),
|
||||
op_menu("VIEW3D_MT_uv_map", {"type": 'U', "value": 'PRESS'}),
|
||||
op_menu("VIEW3D_MT_vertex_group", {"type": 'G', "value": 'PRESS', "ctrl": True}),
|
||||
|
|
|
@ -1139,8 +1139,7 @@ class VIEW3D_MT_editor_menus(Menu):
|
|||
layout.menu("VIEW3D_MT_draw_gpencil")
|
||||
elif obj and obj.mode == 'EDIT_GPENCIL':
|
||||
layout.menu("VIEW3D_MT_edit_gpencil")
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_stroke")
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_point")
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_attributes")
|
||||
elif obj and obj.mode == 'WEIGHT_GPENCIL':
|
||||
layout.menu("VIEW3D_MT_weight_gpencil")
|
||||
if obj and obj.mode == 'VERTEX_GPENCIL':
|
||||
|
@ -1153,11 +1152,8 @@ class VIEW3D_MT_editor_menus(Menu):
|
|||
layout.menu("VIEW3D_MT_edit_mesh_vertices")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_edges")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_faces")
|
||||
layout.menu("VIEW3D_MT_uv_map", text="UV")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_attributes")
|
||||
layout.template_node_operator_asset_root_items()
|
||||
elif mode_string in {'EDIT_CURVE', 'EDIT_SURFACE'}:
|
||||
layout.menu("VIEW3D_MT_edit_curve_ctrlpoints")
|
||||
layout.menu("VIEW3D_MT_edit_curve_segments")
|
||||
elif mode_string in {'EDIT_CURVES', 'EDIT_POINT_CLOUD'}:
|
||||
layout.template_node_operator_asset_root_items()
|
||||
elif mode_string == 'EDIT_GREASE_PENCIL':
|
||||
|
@ -1389,6 +1385,11 @@ class VIEW3D_MT_uv_map(Menu):
|
|||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.uvs_rotate")
|
||||
layout.operator("mesh.uvs_reverse")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("uv.reset")
|
||||
|
||||
layout.template_node_operator_asset_menu_items(catalog_path="UV")
|
||||
|
@ -4246,47 +4247,64 @@ class VIEW3D_MT_edit_mesh(Menu):
|
|||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
with_bullet = bpy.app.build_options.bullet
|
||||
|
||||
# Transform
|
||||
layout.menu("VIEW3D_MT_transform")
|
||||
layout.menu("VIEW3D_MT_mirror")
|
||||
layout.menu("VIEW3D_MT_snap")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Create
|
||||
layout.operator("mesh.duplicate_move", text="Duplicate")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_extrude")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_bevel")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_fill_connect")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_edit_mesh_merge", text="Merge")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_split", text="Split")
|
||||
# Merge & Seperate
|
||||
layout.menu("VIEW3D_MT_edit_mesh_merge")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_cut_slide")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_split")
|
||||
|
||||
layout.operator_menu_enum("mesh.separate", "type")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.bisect")
|
||||
layout.operator("mesh.knife_project")
|
||||
layout.operator("mesh.knife_tool")
|
||||
|
||||
if with_bullet:
|
||||
layout.operator("mesh.convex_hull")
|
||||
# Subdivide, Generate & Convert
|
||||
layout.menu("VIEW3D_MT_edit_mesh_subdivide")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_generate")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_convert")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Smooth & Symmetry
|
||||
layout.operator("mesh.symmetrize")
|
||||
layout.operator("mesh.symmetry_snap")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_smooth")
|
||||
layout.operator("mesh.beautify_fill")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.edge_rotate", text="Rotate Edge CW").use_ccw = False
|
||||
layout.operator("mesh.edge_rotate", text="Rotate Edge CCW").use_ccw = True
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Object Data
|
||||
layout.menu("VIEW3D_MT_edit_mesh_normals")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_shading")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_weights")
|
||||
layout.operator("mesh.attribute_set")
|
||||
layout.operator_menu_enum("mesh.sort_elements", "type", text="Sort Elements...")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_shape_keys")
|
||||
layout.operator_menu_enum("mesh.sort_elements", "type")
|
||||
layout.operator("mesh.flip_quad_tessellation")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Parenting
|
||||
layout.operator("object.vertex_parent_set")
|
||||
layout.menu("VIEW3D_MT_hook")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Visibility
|
||||
layout.menu("VIEW3D_MT_edit_mesh_showhide")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_clean")
|
||||
|
||||
|
@ -4297,6 +4315,28 @@ class VIEW3D_MT_edit_mesh(Menu):
|
|||
layout.template_node_operator_asset_menu_items(catalog_path=self.bl_label)
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_attributes(Menu):
|
||||
bl_label = "Attributes"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.menu("VIEW3D_MT_edit_mesh_write_attribute")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_uv_map")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_vertex_group")
|
||||
layout.menu("VIEW3D_MT_edit_mesh_weights")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_edit_mesh_colors")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_context_menu(Menu):
|
||||
bl_label = ""
|
||||
|
||||
|
@ -4508,6 +4548,55 @@ class VIEW3D_MT_edit_mesh_context_menu(Menu):
|
|||
col.operator("mesh.delete", text="Delete Faces").type = 'FACE'
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_write_attribute(Menu):
|
||||
bl_label = "Write"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
with_freestyle = bpy.app.build_options.freestyle
|
||||
|
||||
layout.operator("mesh.attribute_set", text="Set Active Attribute")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("transform.vert_crease")
|
||||
layout.operator("transform.edge_crease")
|
||||
layout.operator("transform.edge_bevelweight")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.mark_seam").clear = False
|
||||
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.mark_sharp", text="Mark Sharp from Vertices").use_verts = True
|
||||
props = layout.operator("mesh.mark_sharp", text="Clear Sharp from Vertices")
|
||||
props.use_verts = True
|
||||
props.clear = True
|
||||
|
||||
if with_freestyle:
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.mark_freestyle_edge").clear = False
|
||||
layout.operator("mesh.mark_freestyle_edge", text="Clear Freestyle Edge").clear = True
|
||||
layout.operator("mesh.mark_freestyle_face").clear = False
|
||||
layout.operator("mesh.mark_freestyle_face", text="Clear Freestyle Face").clear = True
|
||||
|
||||
class VIEW3D_MT_edit_mesh_colors(Menu):
|
||||
bl_label = "Colors"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("mesh.colors_rotate")
|
||||
layout.operator("mesh.colors_reverse")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_select_mode(Menu):
|
||||
bl_label = "Mesh Select Mode"
|
||||
|
||||
|
@ -4555,92 +4644,49 @@ class VIEW3D_MT_edit_mesh_extrude(Menu):
|
|||
layout.separator()
|
||||
|
||||
layout.operator("mesh.extrude_repeat")
|
||||
layout.operator("mesh.dupli_extrude_cursor").rotate_source = True
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.inset", text="Inset Faces")
|
||||
layout.operator("mesh.spin").angle = pi * 2
|
||||
layout.operator("mesh.screw")
|
||||
layout.template_node_operator_asset_menu_items(catalog_path="Mesh/Extrude")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_vertices(Menu):
|
||||
bl_label = "Vertex"
|
||||
class VIEW3D_MT_edit_mesh_bevel(Menu):
|
||||
bl_label = "Bevel"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
layout.operator_context = 'INVOKE_REGION_WIN'
|
||||
|
||||
layout.operator("mesh.extrude_vertices_move", text="Extrude Vertices")
|
||||
layout.operator("mesh.dupli_extrude_cursor").rotate_source = True
|
||||
layout.operator("mesh.bevel", text="Bevel Vertices").affect = 'VERTICES'
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.edge_face_add", text="New Edge/Face from Vertices")
|
||||
layout.operator("mesh.vert_connect_path", text="Connect Vertex Path")
|
||||
layout.operator("mesh.vert_connect", text="Connect Vertex Pairs")
|
||||
|
||||
layout.separator()
|
||||
|
||||
props = layout.operator("mesh.rip_move", text="Rip Vertices")
|
||||
props.MESH_OT_rip.use_fill = False
|
||||
props = layout.operator("mesh.rip_move", text="Rip Vertices and Fill")
|
||||
props.MESH_OT_rip.use_fill = True
|
||||
layout.operator("mesh.rip_edge_move", text="Rip Vertices and Extend")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("transform.vert_slide", text="Slide Vertices")
|
||||
layout.operator_context = 'EXEC_REGION_WIN'
|
||||
layout.operator("mesh.vertices_smooth", text="Smooth Vertices").factor = 0.5
|
||||
layout.operator("mesh.vertices_smooth_laplacian", text="Smooth Vertices (Laplacian)")
|
||||
layout.operator_context = 'INVOKE_REGION_WIN'
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("transform.vert_crease")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.blend_from_shape")
|
||||
layout.operator("mesh.shape_propagate_to_all", text="Propagate to Shapes")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_vertex_group")
|
||||
layout.menu("VIEW3D_MT_hook")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("object.vertex_parent_set")
|
||||
|
||||
layout.template_node_operator_asset_menu_items(catalog_path=self.bl_label)
|
||||
layout.operator("mesh.bevel", text="Bevel Edges").affect = 'EDGES'
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_edges(Menu):
|
||||
bl_label = "Edge"
|
||||
class VIEW3D_MT_edit_mesh_fill_connect(Menu):
|
||||
bl_label = "Fill/Connect"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
with_freestyle = bpy.app.build_options.freestyle
|
||||
layout.operator("mesh.edge_face_add")
|
||||
layout.operator("mesh.fill")
|
||||
layout.operator("mesh.fill_grid")
|
||||
|
||||
layout.operator_context = 'INVOKE_REGION_WIN'
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.extrude_edges_move", text="Extrude Edges")
|
||||
layout.operator("mesh.bevel", text="Bevel Edges").affect = 'EDGES'
|
||||
layout.operator("mesh.vert_connect_path")
|
||||
layout.operator("mesh.vert_connect")
|
||||
layout.operator("mesh.bridge_edge_loops")
|
||||
layout.operator("mesh.screw")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.subdivide")
|
||||
layout.operator("mesh.subdivide_edgering")
|
||||
layout.operator("mesh.unsubdivide")
|
||||
class VIEW3D_MT_edit_mesh_cut_slide(Menu):
|
||||
bl_label = "Cut/Slide"
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.edge_rotate", text="Rotate Edge CW").use_ccw = False
|
||||
layout.operator("mesh.edge_rotate", text="Rotate Edge CCW").use_ccw = True
|
||||
|
||||
layout.separator()
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("transform.vert_slide")
|
||||
layout.operator("transform.edge_slide")
|
||||
props = layout.operator("mesh.loopcut_slide")
|
||||
props.TRANSFORM_OT_edge_slide.release_confirm = False
|
||||
|
@ -4648,112 +4694,76 @@ class VIEW3D_MT_edit_mesh_edges(Menu):
|
|||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("transform.edge_crease")
|
||||
layout.operator("transform.edge_bevelweight")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.mark_seam").clear = False
|
||||
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.mark_sharp", text="Mark Sharp from Vertices").use_verts = True
|
||||
props = layout.operator("mesh.mark_sharp", text="Clear Sharp from Vertices")
|
||||
props.use_verts = True
|
||||
props.clear = True
|
||||
|
||||
if with_freestyle:
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.mark_freestyle_edge").clear = False
|
||||
layout.operator("mesh.mark_freestyle_edge", text="Clear Freestyle Edge").clear = True
|
||||
|
||||
layout.template_node_operator_asset_menu_items(catalog_path=self.bl_label)
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_faces_data(Menu):
|
||||
bl_label = "Face Data"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
with_freestyle = bpy.app.build_options.freestyle
|
||||
|
||||
layout.operator_context = 'INVOKE_REGION_WIN'
|
||||
|
||||
layout.operator("mesh.colors_rotate")
|
||||
layout.operator("mesh.colors_reverse")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.uvs_rotate")
|
||||
layout.operator("mesh.uvs_reverse")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.flip_quad_tessellation")
|
||||
|
||||
if with_freestyle:
|
||||
layout.separator()
|
||||
layout.operator("mesh.mark_freestyle_face").clear = False
|
||||
layout.operator("mesh.mark_freestyle_face", text="Clear Freestyle Face").clear = True
|
||||
layout.template_node_operator_asset_menu_items(catalog_path="Face/Face Data")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_faces(Menu):
|
||||
bl_label = "Face"
|
||||
bl_idname = "VIEW3D_MT_edit_mesh_faces"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator_context = 'INVOKE_REGION_WIN'
|
||||
|
||||
layout.operator("view3d.edit_mesh_extrude_move_normal",
|
||||
text="Extrude Faces")
|
||||
layout.operator("view3d.edit_mesh_extrude_move_shrink_fatten",
|
||||
text="Extrude Faces Along Normals")
|
||||
layout.operator("mesh.extrude_faces_move", text="Extrude Individual Faces")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.inset")
|
||||
layout.operator("mesh.poke")
|
||||
props = layout.operator("mesh.quads_convert_to_tris")
|
||||
props.quad_method = props.ngon_method = 'BEAUTY'
|
||||
layout.operator("mesh.tris_convert_to_quads")
|
||||
layout.operator("mesh.solidify", text="Solidify Faces")
|
||||
layout.operator("mesh.wireframe")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.fill")
|
||||
layout.operator("mesh.fill_grid")
|
||||
layout.operator("mesh.beautify_fill")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.bisect")
|
||||
props = layout.operator("mesh.knife_tool", text="Knife (Visible)")
|
||||
props.use_occlude_geometry = True
|
||||
props.only_selected = False
|
||||
props = layout.operator("mesh.knife_tool", text="Knife (Selected)")
|
||||
props.use_occlude_geometry = False
|
||||
props.only_selected = True
|
||||
layout.operator("mesh.knife_project")
|
||||
layout.operator("mesh.intersect")
|
||||
layout.operator("mesh.intersect_boolean")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.face_split_by_edges")
|
||||
layout.operator("mesh.poke", text="Poke Faces")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("mesh.faces_shade_smooth")
|
||||
layout.operator("mesh.faces_shade_flat")
|
||||
class VIEW3D_MT_edit_mesh_subdivide(Menu):
|
||||
bl_label = "Subdivide"
|
||||
|
||||
layout.separator()
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.menu("VIEW3D_MT_edit_mesh_faces_data")
|
||||
layout.operator("mesh.subdivide")
|
||||
layout.operator("mesh.subdivide_edgering")
|
||||
layout.operator("mesh.unsubdivide")
|
||||
|
||||
layout.template_node_operator_asset_menu_items(catalog_path=self.bl_label)
|
||||
|
||||
class VIEW3D_MT_edit_mesh_generate(Menu):
|
||||
bl_label = "Generate"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
with_bullet = bpy.app.build_options.bullet
|
||||
|
||||
layout.operator("mesh.solidify", text="Solidify Faces")
|
||||
layout.operator("mesh.wireframe")
|
||||
if with_bullet:
|
||||
layout.operator("mesh.convex_hull")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_convert(Menu):
|
||||
bl_label = "Convert"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
props = layout.operator("mesh.quads_convert_to_tris")
|
||||
props.quad_method = props.ngon_method = 'BEAUTY'
|
||||
layout.operator("mesh.tris_convert_to_quads")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_smooth(Menu):
|
||||
bl_label = "Smooth"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("mesh.vertices_smooth", text="Smooth Vertices").factor = 0.5
|
||||
layout.operator("mesh.vertices_smooth_laplacian", text="Smooth Vertices (Laplacian)")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_shape_keys(Menu):
|
||||
bl_label = "Shape Keys"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("mesh.blend_from_shape")
|
||||
layout.operator("mesh.shape_propagate_to_all", text="Propagate to Shapes")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_normals_select_strength(Menu):
|
||||
|
@ -4943,7 +4953,7 @@ class VIEW3D_MT_edit_mesh_merge(Menu):
|
|||
|
||||
|
||||
class VIEW3D_MT_edit_mesh_split(Menu):
|
||||
bl_label = "Split"
|
||||
bl_label = "Split/Rip"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
@ -4953,6 +4963,15 @@ class VIEW3D_MT_edit_mesh_split(Menu):
|
|||
layout.separator()
|
||||
|
||||
layout.operator_enum("mesh.edge_split", "type")
|
||||
layout.operator("mesh.face_split_by_edges")
|
||||
|
||||
layout.separator()
|
||||
|
||||
props = layout.operator("mesh.rip_move", text="Rip Vertices")
|
||||
props.MESH_OT_rip.use_fill = False
|
||||
props = layout.operator("mesh.rip_move", text="Rip Vertices and Fill")
|
||||
props.MESH_OT_rip.use_fill = True
|
||||
layout.operator("mesh.rip_edge_move", text="Rip Vertices and Extend")
|
||||
|
||||
layout.template_node_operator_asset_menu_items(catalog_path="Mesh/Split")
|
||||
|
||||
|
@ -5007,20 +5026,28 @@ class VIEW3D_MT_edit_greasepencil_delete(Menu):
|
|||
# draw_curve is used by VIEW3D_MT_edit_curve and VIEW3D_MT_edit_surface
|
||||
|
||||
|
||||
def draw_curve(self, _context):
|
||||
def draw_curve(self, context):
|
||||
layout = self.layout
|
||||
|
||||
edit_object = context.edit_object
|
||||
|
||||
# Transform
|
||||
layout.menu("VIEW3D_MT_transform")
|
||||
layout.menu("VIEW3D_MT_mirror")
|
||||
layout.menu("VIEW3D_MT_snap")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("curve.spin")
|
||||
# Create
|
||||
layout.operator("curve.duplicate_move")
|
||||
layout.operator("curve.extrude_move")
|
||||
layout.operator("curve.vertex_add")
|
||||
layout.operator("curve.spin")
|
||||
layout.operator("curve.make_segment")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Merge & Seperate
|
||||
layout.operator("curve.split")
|
||||
layout.operator("curve.separate")
|
||||
|
||||
|
@ -5031,7 +5058,47 @@ def draw_curve(self, _context):
|
|||
|
||||
layout.separator()
|
||||
|
||||
# Subdivide
|
||||
layout.operator("curve.subdivide")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Smooth
|
||||
layout.operator("curve.smooth")
|
||||
if edit_object.type == 'CURVE':
|
||||
layout.operator("curve.normals_make_consistent")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Attributes
|
||||
if edit_object.type == 'CURVE':
|
||||
layout.operator("transform.tilt")
|
||||
layout.operator("curve.tilt_clear")
|
||||
layout.operator("curve.smooth_tilt")
|
||||
layout.operator("curve.smooth_radius")
|
||||
layout.operator("curve.smooth_weight")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Stroke Type
|
||||
if edit_object.type == 'CURVE':
|
||||
layout.operator_menu_enum("curve.handle_type_set", "type")
|
||||
layout.operator("curve.switch_direction")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Parenting
|
||||
layout.operator("object.vertex_parent_set")
|
||||
layout.menu("VIEW3D_MT_hook")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Visibility
|
||||
layout.menu("VIEW3D_MT_edit_curve_showhide")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Remove
|
||||
layout.menu("VIEW3D_MT_edit_curve_clean")
|
||||
layout.menu("VIEW3D_MT_edit_curve_delete")
|
||||
|
||||
|
@ -5042,60 +5109,6 @@ class VIEW3D_MT_edit_curve(Menu):
|
|||
draw = draw_curve
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_curve_ctrlpoints(Menu):
|
||||
bl_label = "Control Points"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
edit_object = context.edit_object
|
||||
|
||||
if edit_object.type in {'CURVE', 'SURFACE'}:
|
||||
layout.operator("curve.extrude_move")
|
||||
layout.operator("curve.vertex_add")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("curve.make_segment")
|
||||
|
||||
layout.separator()
|
||||
|
||||
if edit_object.type == 'CURVE':
|
||||
layout.operator("transform.tilt")
|
||||
layout.operator("curve.tilt_clear")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator_menu_enum("curve.handle_type_set", "type")
|
||||
layout.operator("curve.normals_make_consistent")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("curve.smooth")
|
||||
if edit_object.type == 'CURVE':
|
||||
layout.operator("curve.smooth_tilt")
|
||||
layout.operator("curve.smooth_radius")
|
||||
layout.operator("curve.smooth_weight")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_hook")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("object.vertex_parent_set")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_curve_segments(Menu):
|
||||
bl_label = "Segments"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("curve.subdivide")
|
||||
layout.operator("curve.switch_direction")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_curve_clean(Menu):
|
||||
bl_label = "Clean Up"
|
||||
|
||||
|
@ -5577,57 +5590,36 @@ class VIEW3D_MT_assign_material(Menu):
|
|||
class VIEW3D_MT_edit_gpencil(Menu):
|
||||
bl_label = "Grease Pencil"
|
||||
|
||||
def draw(self, _context):
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
# Transform
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_transform")
|
||||
layout.menu("VIEW3D_MT_mirror")
|
||||
layout.menu("GPENCIL_MT_snap")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("GPENCIL_MT_layer_active", text="Active Layer")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_gpencil_animation")
|
||||
layout.operator("gpencil.interpolate_sequence", text="Interpolate Sequence")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Cut, Copy, Paste
|
||||
# Create
|
||||
layout.operator("gpencil.duplicate_move", text="Duplicate")
|
||||
layout.operator("gpencil.stroke_split", text="Split")
|
||||
layout.operator("gpencil.extrude_move", text="Extrude")
|
||||
layout.operator("gpencil.copy", text="Copy", icon='COPYDOWN')
|
||||
layout.operator("gpencil.paste", text="Paste", icon='PASTEDOWN').type = 'ACTIVE'
|
||||
layout.operator("gpencil.paste", text="Paste by Layer").type = 'LAYER'
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_weight_gpencil")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_showhide")
|
||||
# Merge & Seperate
|
||||
layout.operator_menu_enum("gpencil.stroke_join", "type", text="Join",
|
||||
text_ctxt=i18n_contexts.id_gpencil)
|
||||
layout.operator("gpencil.stroke_merge", text="Merge")
|
||||
layout.operator("gpencil.stroke_split", text="Split")
|
||||
|
||||
layout.operator_menu_enum("gpencil.stroke_separate", "mode", text="Separate")
|
||||
layout.menu("GPENCIL_MT_cleanup")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Remove
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_delete")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_gpencil_stroke(Menu):
|
||||
bl_label = "Stroke"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
tool_settings = context.tool_settings
|
||||
settings = tool_settings.gpencil_sculpt
|
||||
|
||||
# Subdivide, Generate & Convert
|
||||
layout.operator("gpencil.stroke_subdivide", text="Subdivide").only_selected = False
|
||||
layout.menu("VIEW3D_MT_gpencil_simplify")
|
||||
layout.operator("gpencil.stroke_trim", text="Trim")
|
||||
|
@ -5635,11 +5627,12 @@ class VIEW3D_MT_edit_gpencil_stroke(Menu):
|
|||
|
||||
layout.separator()
|
||||
|
||||
layout.operator_menu_enum("gpencil.stroke_join", "type", text="Join",
|
||||
text_ctxt=i18n_contexts.id_gpencil)
|
||||
# Smooth & Symmetry
|
||||
layout.operator("gpencil.stroke_smooth", text="Smooth").only_selected = True
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("GPENCIL_MT_layer_active", text="Active Layer")
|
||||
layout.menu("GPENCIL_MT_move_to_layer")
|
||||
layout.menu("VIEW3D_MT_assign_material")
|
||||
layout.operator("gpencil.set_active_material", text="Set as Active Material")
|
||||
|
@ -5647,7 +5640,7 @@ class VIEW3D_MT_edit_gpencil_stroke(Menu):
|
|||
|
||||
layout.separator()
|
||||
|
||||
# Convert
|
||||
# Stroke Type
|
||||
props = layout.operator("gpencil.stroke_cyclical_set", text="Close")
|
||||
props.type = 'CLOSE'
|
||||
props.geometry = True
|
||||
|
@ -5657,37 +5650,45 @@ class VIEW3D_MT_edit_gpencil_stroke(Menu):
|
|||
layout.operator("gpencil.stroke_start_set", text="Set Start Point")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("gpencil.reset_transform_fill", text="Reset Fill Transform")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Animation
|
||||
layout.menu("VIEW3D_MT_gpencil_animation")
|
||||
layout.operator("gpencil.interpolate_sequence", text="Interpolate Sequence")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Visibility
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_showhide")
|
||||
|
||||
layout.separator()
|
||||
|
||||
# Remove
|
||||
layout.menu("VIEW3D_MT_edit_gpencil_delete")
|
||||
layout.menu("GPENCIL_MT_cleanup")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_gpencil_attributes(Menu):
|
||||
bl_label = "Attributes"
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
|
||||
tool_settings = context.tool_settings
|
||||
settings = tool_settings.gpencil_sculpt
|
||||
|
||||
layout.menu("VIEW3D_MT_gpencil_vertex_group")
|
||||
layout.menu("VIEW3D_MT_weight_gpencil")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("gpencil.stroke_normalize", text="Normalize Thickness").mode = 'THICKNESS'
|
||||
layout.operator("gpencil.stroke_normalize", text="Normalize Opacity").mode = 'OPACITY'
|
||||
layout.prop(settings, "use_scale_thickness", text="Scale Thickness")
|
||||
|
||||
layout.separator()
|
||||
layout.operator("gpencil.reset_transform_fill", text="Reset Fill Transform")
|
||||
|
||||
|
||||
class VIEW3D_MT_edit_gpencil_point(Menu):
|
||||
bl_label = "Point"
|
||||
|
||||
def draw(self, _context):
|
||||
layout = self.layout
|
||||
|
||||
layout.operator("gpencil.extrude_move", text="Extrude")
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("gpencil.stroke_smooth", text="Smooth").only_selected = True
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.operator("gpencil.stroke_merge", text="Merge")
|
||||
|
||||
# TODO: add new RIP operator
|
||||
|
||||
layout.separator()
|
||||
|
||||
layout.menu("VIEW3D_MT_gpencil_vertex_group")
|
||||
|
||||
|
||||
class VIEW3D_MT_weight_gpencil(Menu):
|
||||
bl_label = "Weights"
|
||||
|
||||
|
@ -8885,14 +8886,21 @@ classes = (
|
|||
VIEW3D_MT_bone_options_enable,
|
||||
VIEW3D_MT_bone_options_disable,
|
||||
VIEW3D_MT_edit_mesh_context_menu,
|
||||
VIEW3D_MT_edit_mesh_attributes,
|
||||
VIEW3D_MT_edit_mesh_write_attribute,
|
||||
VIEW3D_MT_edit_mesh_select_mode,
|
||||
VIEW3D_MT_edit_mesh_select_linked,
|
||||
VIEW3D_MT_edit_mesh_select_loops,
|
||||
VIEW3D_MT_edit_mesh_extrude,
|
||||
VIEW3D_MT_edit_mesh_vertices,
|
||||
VIEW3D_MT_edit_mesh_edges,
|
||||
VIEW3D_MT_edit_mesh_faces,
|
||||
VIEW3D_MT_edit_mesh_faces_data,
|
||||
VIEW3D_MT_edit_mesh_bevel,
|
||||
VIEW3D_MT_edit_mesh_fill_connect,
|
||||
VIEW3D_MT_edit_mesh_cut_slide,
|
||||
VIEW3D_MT_edit_mesh_subdivide,
|
||||
VIEW3D_MT_edit_mesh_generate,
|
||||
VIEW3D_MT_edit_mesh_convert,
|
||||
VIEW3D_MT_edit_mesh_smooth,
|
||||
VIEW3D_MT_edit_mesh_shape_keys,
|
||||
VIEW3D_MT_edit_mesh_colors,
|
||||
VIEW3D_MT_edit_mesh_normals,
|
||||
VIEW3D_MT_edit_mesh_normals_select_strength,
|
||||
VIEW3D_MT_edit_mesh_normals_set_strength,
|
||||
|
@ -8910,10 +8918,9 @@ classes = (
|
|||
VIEW3D_MT_draw_gpencil,
|
||||
VIEW3D_MT_assign_material,
|
||||
VIEW3D_MT_edit_gpencil,
|
||||
VIEW3D_MT_edit_gpencil_stroke,
|
||||
VIEW3D_MT_edit_gpencil_point,
|
||||
VIEW3D_MT_edit_gpencil_delete,
|
||||
VIEW3D_MT_edit_gpencil_showhide,
|
||||
VIEW3D_MT_edit_gpencil_attributes,
|
||||
VIEW3D_MT_edit_greasepencil_showhide,
|
||||
VIEW3D_MT_weight_gpencil,
|
||||
VIEW3D_MT_gpencil_animation,
|
||||
|
@ -8928,8 +8935,6 @@ classes = (
|
|||
VIEW3D_MT_edit_greasepencil_point,
|
||||
VIEW3D_MT_edit_greasepencil_animation,
|
||||
VIEW3D_MT_edit_curve,
|
||||
VIEW3D_MT_edit_curve_ctrlpoints,
|
||||
VIEW3D_MT_edit_curve_segments,
|
||||
VIEW3D_MT_edit_curve_clean,
|
||||
VIEW3D_MT_edit_curve_context_menu,
|
||||
VIEW3D_MT_edit_curve_delete,
|
||||
|
|
Loading…
Reference in New Issue