diff options
Diffstat (limited to 'release/scripts/startup/bl_ui/space_view3d.py')
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d.py | 747 |
1 files changed, 563 insertions, 184 deletions
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index b6479df3047..a618ef7fd4e 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -19,11 +19,11 @@ # <pep8 compliant> import bpy from bpy.types import Header, Menu, Panel -from bl_ui.properties_grease_pencil_common import ( - GreasePencilDataPanel, - GreasePencilPaletteColorPanel, - ) -from bl_ui.properties_paint_common import UnifiedPaintPanel +from .properties_grease_pencil_common import ( + GreasePencilDataPanel, + GreasePencilPaletteColorPanel, +) +from .properties_paint_common import UnifiedPaintPanel from bpy.app.translations import contexts as i18n_contexts @@ -55,7 +55,7 @@ class VIEW3D_HT_header(Header): # Occlude geometry if ((view.viewport_shade not in {'BOUNDBOX', 'WIREFRAME'} and (mode == 'PARTICLE_EDIT' or (mode == 'EDIT' and obj.type == 'MESH'))) or - (mode == 'WEIGHT_PAINT')): + (mode in {'WEIGHT_PAINT', 'VERTEX_PAINT'})): row.prop(view, "use_occlude_geometry", text="") # Proportional editing @@ -170,7 +170,7 @@ class VIEW3D_MT_editor_menus(Menu): mesh = obj.data if mesh.use_paint_mask: layout.menu("VIEW3D_MT_select_paint_mask") - elif mesh.use_paint_mask_vertex and mode_string == 'PAINT_WEIGHT': + elif mesh.use_paint_mask_vertex and mode_string in {'PAINT_WEIGHT', 'PAINT_VERTEX'}: layout.menu("VIEW3D_MT_select_paint_mask_vertex") elif mode_string != 'SCULPT': layout.menu("VIEW3D_MT_select_%s" % mode_string.lower()) @@ -284,7 +284,8 @@ class VIEW3D_MT_transform_object(VIEW3D_MT_transform_base): layout.separator() layout.operator_context = 'EXEC_REGION_WIN' - layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' # XXX see alignmenu() in edit.c of b2.4x to get this working + # XXX see alignmenu() in edit.c of b2.4x to get this working + layout.operator("transform.transform", text="Align to Transform Orientation").mode = 'ALIGN' layout.separator() @@ -293,7 +294,8 @@ class VIEW3D_MT_transform_object(VIEW3D_MT_transform_base): 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' + layout.operator("object.origin_set", text="Origin to Center of Mass (Surface)").type = 'ORIGIN_CENTER_OF_MASS' + layout.operator("object.origin_set", text="Origin to Center of Mass (Volume)").type = 'ORIGIN_CENTER_OF_VOLUME' layout.separator() layout.operator("object.randomize_transform") @@ -309,17 +311,21 @@ class VIEW3D_MT_transform_armature(VIEW3D_MT_transform_base): VIEW3D_MT_transform_base.draw(self, context) # armature specific extensions follow... - layout.separator() - obj = context.object if obj.type == 'ARMATURE' and obj.mode in {'EDIT', 'POSE'}: if obj.data.draw_type == 'BBONE': + layout.separator() + layout.operator("transform.transform", text="Scale BBone").mode = 'BONE_SIZE' elif obj.data.draw_type == 'ENVELOPE': + layout.separator() + layout.operator("transform.transform", text="Scale Envelope Distance").mode = 'BONE_SIZE' layout.operator("transform.transform", text="Scale Radius").mode = 'BONE_ENVELOPE' if context.edit_object and context.edit_object.type == 'ARMATURE': + layout.separator() + layout.operator("armature.align") @@ -433,39 +439,34 @@ class VIEW3D_MT_view(Menu): def draw(self, context): layout = self.layout + view = context.space_data layout.operator("view3d.properties", icon='MENU_PANEL') layout.operator("view3d.toolshelf", icon='MENU_PANEL') layout.separator() - layout.operator("view3d.viewnumpad", text="Camera").type = 'CAMERA' - layout.operator("view3d.viewnumpad", text="Top").type = 'TOP' - layout.operator("view3d.viewnumpad", text="Bottom").type = 'BOTTOM' - layout.operator("view3d.viewnumpad", text="Front").type = 'FRONT' - layout.operator("view3d.viewnumpad", text="Back").type = 'BACK' - layout.operator("view3d.viewnumpad", text="Right").type = 'RIGHT' - layout.operator("view3d.viewnumpad", text="Left").type = 'LEFT' + layout.operator("view3d.view_selected").use_all_regions = False + if view.region_quadviews: + layout.operator("view3d.view_selected", text="View Selected (Quad View)").use_all_regions = True - layout.menu("VIEW3D_MT_view_cameras", text="Cameras") + layout.operator("view3d.view_all").center = False + layout.operator("view3d.localview", text="View Global/Local") + layout.operator("view3d.view_persportho") layout.separator() - layout.operator("view3d.view_persportho") + layout.menu("VIEW3D_MT_view_cameras", text="Cameras") layout.separator() - + layout.menu("VIEW3D_MT_view_viewpoint") layout.menu("VIEW3D_MT_view_navigation") layout.menu("VIEW3D_MT_view_align") layout.separator() layout.operator_context = 'INVOKE_REGION_WIN' - - layout.operator("view3d.clip_border", text="Clipping Border...") - layout.operator("view3d.zoom_border", text="Zoom Border...") - layout.operator("view3d.render_border", text="Render Border...").camera_only = False - layout.operator("view3d.clear_render_border") + layout.menu("VIEW3D_MT_view_borders", text="View Borders") layout.separator() @@ -473,12 +474,6 @@ class VIEW3D_MT_view(Menu): layout.separator() - layout.operator("view3d.localview", text="View Global/Local") - layout.operator("view3d.view_selected").use_all_regions = False - layout.operator("view3d.view_all").center = False - - layout.separator() - layout.operator("screen.animation_play", text="Playback Animation") layout.separator() @@ -489,6 +484,40 @@ class VIEW3D_MT_view(Menu): layout.operator("screen.screen_full_area", text="Toggle Fullscreen Area").use_hide_panels = True +class VIEW3D_MT_view_cameras(Menu): + bl_label = "Cameras" + + def draw(self, context): + layout = self.layout + + layout.operator("view3d.object_as_camera") + layout.operator("view3d.viewnumpad", text="Active Camera").type = 'CAMERA' + + +class VIEW3D_MT_view_viewpoint(Menu): + bl_label = "Viewpoint" + + def draw(self, context): + layout = self.layout + + layout.operator("view3d.viewnumpad", text="Camera").type = 'CAMERA' + + layout.separator() + + layout.operator("view3d.viewnumpad", text="Top").type = 'TOP' + layout.operator("view3d.viewnumpad", text="Bottom").type = 'BOTTOM' + + layout.separator() + + layout.operator("view3d.viewnumpad", text="Front").type = 'FRONT' + layout.operator("view3d.viewnumpad", text="Back").type = 'BACK' + + layout.separator() + + layout.operator("view3d.viewnumpad", text="Right").type = 'RIGHT' + layout.operator("view3d.viewnumpad", text="Left").type = 'LEFT' + + class VIEW3D_MT_view_navigation(Menu): bl_label = "Navigation" @@ -514,6 +543,7 @@ class VIEW3D_MT_view_navigation(Menu): layout.operator("view3d.zoom", text="Zoom In").delta = 1 layout.operator("view3d.zoom", text="Zoom Out").delta = -1 + layout.operator("view3d.zoom_border", text="Zoom Border...") layout.operator("view3d.zoom_camera_1_to_1", text="Zoom Camera 1:1") layout.separator() @@ -535,7 +565,6 @@ class VIEW3D_MT_view_align(Menu): layout.operator("view3d.view_all", text="Center Cursor and View All").center = True layout.operator("view3d.camera_to_view", text="Align Active Camera to View") layout.operator("view3d.camera_to_view_selected", text="Align Active Camera to Selected") - layout.operator("view3d.view_selected") layout.operator("view3d.view_center_cursor") layout.separator() @@ -575,14 +604,17 @@ class VIEW3D_MT_view_align_selected(Menu): props.type = 'LEFT' -class VIEW3D_MT_view_cameras(Menu): - bl_label = "Cameras" +class VIEW3D_MT_view_borders(Menu): + bl_label = "View Borders" def draw(self, context): layout = self.layout + layout.operator("view3d.clip_border", text="Clipping Border...") + layout.operator("view3d.render_border", text="Render Border...").camera_only = False - layout.operator("view3d.object_as_camera") - layout.operator("view3d.viewnumpad", text="Active Camera").type = 'CAMERA' + layout.separator() + + layout.operator("view3d.clear_render_border") # ********** Select menus, suffix from context.mode ********** @@ -632,6 +664,9 @@ class VIEW3D_MT_select_object(Menu): layout.operator("object.select_all").action = 'TOGGLE' layout.operator("object.select_all", text="Inverse").action = 'INVERT' + + layout.separator() + layout.operator("object.select_random", text="Random") layout.operator("object.select_mirror", text="Mirror") layout.operator("object.select_by_layer", text="Select All by Layer") @@ -690,6 +725,9 @@ class VIEW3D_MT_select_pose(Menu): layout.operator("pose.select_all").action = 'TOGGLE' layout.operator("pose.select_all", text="Inverse").action = 'INVERT' layout.operator("pose.select_mirror", text="Flip Active") + + layout.separator() + layout.operator("pose.select_constraint_target", text="Constraint Target") layout.operator("pose.select_linked", text="Linked") @@ -755,7 +793,7 @@ class VIEW3D_MT_edit_mesh_select_by_trait(Menu): layout.operator("mesh.select_non_manifold", text="Non Manifold") layout.operator("mesh.select_loose", text="Loose Geometry") layout.operator("mesh.select_interior_faces", text="Interior Faces") - layout.operator("mesh.select_face_by_sides") + layout.operator("mesh.select_face_by_sides", text="Faces by Sides") layout.separator() @@ -777,6 +815,32 @@ class VIEW3D_MT_edit_mesh_select_more_less(Menu): layout.operator("mesh.select_prev_item", text="Previous Active") +class VIEW3D_MT_edit_mesh_select_linked(Menu): + bl_label = "Select Linked" + + def draw(self, context): + layout = self.layout + + layout.operator("mesh.select_linked", text="Linked") + layout.operator("mesh.shortest_path_select", text="Shortest Path") + layout.operator("mesh.faces_select_linked_flat", text="Linked Flat Faces") + + +class VIEW3D_MT_edit_mesh_select_loops(Menu): + bl_label = "Select Loops" + + def draw(self, context): + layout = self.layout + + layout.operator("mesh.loop_multi_select", text="Edge Loops").ring = False + layout.operator("mesh.loop_multi_select", text="Edge Rings").ring = True + + layout.separator() + + layout.operator("mesh.loop_to_region") + layout.operator("mesh.region_to_loop") + + class VIEW3D_MT_select_edit_mesh(Menu): bl_label = "Select" @@ -802,7 +866,6 @@ class VIEW3D_MT_select_edit_mesh(Menu): # geometric layout.operator("mesh.edges_select_sharp", text="Sharp Edges") - layout.operator("mesh.faces_select_linked_flat", text="Linked Flat Faces") layout.separator() @@ -819,18 +882,16 @@ class VIEW3D_MT_select_edit_mesh(Menu): layout.separator() - layout.operator("mesh.select_mirror", text="Mirror") - layout.operator("mesh.select_axis", text="Side of Active") + layout.menu("VIEW3D_MT_edit_mesh_select_loops") - layout.operator("mesh.select_linked", text="Linked") - layout.operator("mesh.shortest_path_select", text="Shortest Path") - layout.operator("mesh.loop_multi_select", text="Edge Loops").ring = False - layout.operator("mesh.loop_multi_select", text="Edge Rings").ring = True + layout.separator() + + layout.menu("VIEW3D_MT_edit_mesh_select_linked") layout.separator() - layout.operator("mesh.loop_to_region") - layout.operator("mesh.region_to_loop") + layout.operator("mesh.select_axis", text="Side of Active") + layout.operator("mesh.select_mirror", text="Mirror") class VIEW3D_MT_select_edit_curve(Menu): @@ -846,6 +907,9 @@ class VIEW3D_MT_select_edit_curve(Menu): layout.operator("curve.select_all").action = 'TOGGLE' layout.operator("curve.select_all", text="Inverse").action = 'INVERT' + + layout.separator() + layout.operator("curve.select_random") layout.operator("curve.select_nth") layout.operator("curve.select_linked", text="Select Linked") @@ -877,6 +941,9 @@ class VIEW3D_MT_select_edit_surface(Menu): layout.operator("curve.select_all").action = 'TOGGLE' layout.operator("curve.select_all", text="Inverse").action = 'INVERT' + + layout.separator() + layout.operator("curve.select_random") layout.operator("curve.select_nth") layout.operator("curve.select_linked", text="Select Linked") @@ -900,9 +967,13 @@ class VIEW3D_MT_select_edit_text(Menu): def draw(self, context): layout = self.layout - layout.operator("font.text_copy", text="Copy") - layout.operator("font.text_cut", text="Cut") + layout.menu("VIEW3D_MT_undo_redo") + + layout.separator() + layout.operator("font.text_paste", text="Paste") + layout.operator("font.text_cut", text="Cut") + layout.operator("font.text_copy", text="Copy") layout.separator() @@ -947,13 +1018,16 @@ class VIEW3D_MT_select_edit_lattice(Menu): layout.separator() - layout.operator("lattice.select_mirror") - layout.operator("lattice.select_random") layout.operator("lattice.select_all").action = 'TOGGLE' layout.operator("lattice.select_all", text="Inverse").action = 'INVERT' layout.separator() + layout.operator("lattice.select_mirror") + layout.operator("lattice.select_random") + + layout.separator() + layout.operator("lattice.select_ungrouped", text="Ungrouped Verts") @@ -1014,6 +1088,9 @@ class VIEW3D_MT_select_gpencil(Menu): layout.operator("gpencil.select_all", text="(De)select All").action = 'TOGGLE' layout.operator("gpencil.select_all", text="Inverse").action = 'INVERT' + + layout.separator() + layout.operator("gpencil.select_linked", text="Linked") layout.operator_menu_enum("gpencil.select_grouped", "type", text="Grouped") @@ -1100,11 +1177,7 @@ class VIEW3D_MT_angle_control(Menu): layout.prop(tex_slot, "use_random", text="Random") -# ********** Add menu ********** - -# XXX: INFO_MT_ names used to keep backwards compatibility (Addons etc that hook into the menu) - - +# XXX: INFO_MT_ names used to keep backwards compatibility (Add-ons etc. that hook into the menu) class INFO_MT_mesh_add(Menu): bl_idname = "INFO_MT_mesh_add" bl_label = "Mesh" @@ -1205,6 +1278,16 @@ class INFO_MT_lamp_add(Menu): layout.operator_enum("object.lamp_add", "type") +class INFO_MT_camera_add(Menu): + bl_idname = "INFO_MT_camera_add" + bl_label = "Camera" + + def draw(self, context): + layout = self.layout + layout.operator_context = 'EXEC_REGION_WIN' + layout.operator("object.camera_add", text="Camera", icon='OUTLINER_OB_CAMERA') + + class INFO_MT_add(Menu): bl_label = "Add" @@ -1217,12 +1300,12 @@ class INFO_MT_add(Menu): # "align_view" to work on first call (see [#32719]). layout.operator_context = 'EXEC_REGION_WIN' - #layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH') + # layout.operator_menu_enum("object.mesh_add", "type", text="Mesh", icon='OUTLINER_OB_MESH') layout.menu("INFO_MT_mesh_add", icon='OUTLINER_OB_MESH') - #layout.operator_menu_enum("object.curve_add", "type", text="Curve", icon='OUTLINER_OB_CURVE') + # layout.operator_menu_enum("object.curve_add", "type", text="Curve", icon='OUTLINER_OB_CURVE') layout.menu("INFO_MT_curve_add", icon='OUTLINER_OB_CURVE') - #layout.operator_menu_enum("object.surface_add", "type", text="Surface", icon='OUTLINER_OB_SURFACE') + # layout.operator_menu_enum("object.surface_add", "type", text="Surface", icon='OUTLINER_OB_SURFACE') layout.menu("INFO_MT_surface_add", icon='OUTLINER_OB_SURFACE') layout.menu("INFO_MT_metaball_add", text="Metaball", icon='OUTLINER_OB_META') layout.operator("object.text_add", text="Text", icon='OUTLINER_OB_FONT') @@ -1236,21 +1319,63 @@ class INFO_MT_add(Menu): layout.operator("object.speaker_add", text="Speaker", icon='OUTLINER_OB_SPEAKER') layout.separator() - layout.operator("object.camera_add", text="Camera", icon='OUTLINER_OB_CAMERA') + if INFO_MT_camera_add.is_extended(): + layout.menu("INFO_MT_camera_add", icon='OUTLINER_OB_CAMERA') + else: + INFO_MT_camera_add.draw(self, context) + layout.menu("INFO_MT_lamp_add", icon='OUTLINER_OB_LAMP') layout.separator() - layout.operator_menu_enum("object.effector_add", "type", text="Force Field", icon='OUTLINER_OB_EMPTY') + layout.operator_menu_enum("object.effector_add", "type", text="Force Field", icon='OUTLINER_OB_FORCE_FIELD') layout.separator() if len(bpy.data.groups) > 10: layout.operator_context = 'INVOKE_REGION_WIN' - layout.operator("object.group_instance_add", text="Group Instance...", icon='OUTLINER_OB_EMPTY') + layout.operator("object.group_instance_add", text="Group Instance...", icon='OUTLINER_OB_GROUP_INSTANCE') else: - layout.operator_menu_enum("object.group_instance_add", "group", text="Group Instance", icon='OUTLINER_OB_EMPTY') + layout.operator_menu_enum( + "object.group_instance_add", + "group", + text="Group Instance", + icon='OUTLINER_OB_GROUP_INSTANCE', + ) -# ********** Object menu ********** +class VIEW3D_MT_undo_redo(Menu): + bl_label = "Undo/Redo" + _operator_name = "" + + def draw(self, context): + layout = self.layout + + layout.operator("ed.undo") + layout.operator("ed.redo") + + layout.separator() + + layout.operator("ed.undo_history") + + +class VIEW3D_MT_object_relations(Menu): + bl_label = "Relations" + + def draw(self, context): + layout = self.layout + + layout.operator("object.proxy_make", text="Make Proxy...") + + layout.operator("object.make_dupli_face") + + layout.separator() + + layout.operator_menu_enum("object.make_local", "type", text="Make Local...") + layout.menu("VIEW3D_MT_make_single_user") + + layout.separator() + + layout.operator("object.data_transfer") + layout.operator("object.datalayout_transfer") class VIEW3D_MT_object(Menu): @@ -1262,9 +1387,11 @@ class VIEW3D_MT_object(Menu): view = context.space_data is_local_view = (view.local_view is not None) - layout.operator("ed.undo") - layout.operator("ed.redo") - layout.operator("ed.undo_history") + layout.menu("VIEW3D_MT_undo_redo") + + layout.separator() + + layout.operator("object.delete", text="Delete...").use_global = False layout.separator() @@ -1272,53 +1399,45 @@ class VIEW3D_MT_object(Menu): layout.menu("VIEW3D_MT_mirror") layout.menu("VIEW3D_MT_object_clear") layout.menu("VIEW3D_MT_object_apply") - layout.menu("VIEW3D_MT_snap") layout.separator() - layout.menu("VIEW3D_MT_object_animation") + layout.menu("VIEW3D_MT_object_parent") + layout.menu("VIEW3D_MT_object_group") + layout.menu("VIEW3D_MT_snap") layout.separator() layout.operator("object.duplicate_move") layout.operator("object.duplicate_move_linked") - layout.operator("object.delete", text="Delete...").use_global = False - layout.operator("object.proxy_make", text="Make Proxy...") - layout.menu("VIEW3D_MT_make_links", text="Make Links...") - layout.operator("object.make_dupli_face") - layout.operator_menu_enum("object.make_local", "type", text="Make Local...") - layout.menu("VIEW3D_MT_make_single_user") + layout.operator("object.join") + if is_local_view: + layout.operator_context = 'EXEC_REGION_WIN' + layout.operator("object.move_to_layer", text="Move out of Local View") + layout.operator_context = 'INVOKE_REGION_WIN' + else: + layout.operator("object.move_to_layer", text="Move to Layer...") layout.separator() - - layout.menu("VIEW3D_MT_object_parent") - layout.menu("VIEW3D_MT_object_track") - layout.menu("VIEW3D_MT_object_group") + layout.menu("VIEW3D_MT_make_links", text="Make Links...") + layout.menu("VIEW3D_MT_object_relations") layout.menu("VIEW3D_MT_object_constraints") + layout.menu("VIEW3D_MT_object_track") layout.separator() - layout.menu("VIEW3D_MT_object_quick_effects") + layout.menu("VIEW3D_MT_object_animation") layout.separator() - layout.menu("VIEW3D_MT_object_game") + layout.menu("VIEW3D_MT_object_quick_effects") layout.separator() - layout.operator("object.join") - layout.operator("object.data_transfer") - layout.operator("object.datalayout_transfer") + layout.menu("VIEW3D_MT_object_game") layout.separator() - if is_local_view: - layout.operator_context = 'EXEC_REGION_WIN' - layout.operator("object.move_to_layer", text="Move out of Local View") - layout.operator_context = 'INVOKE_REGION_WIN' - else: - layout.operator("object.move_to_layer", text="Move to Layer...") - layout.menu("VIEW3D_MT_object_showhide") layout.operator_menu_enum("object.convert", "target") @@ -1349,6 +1468,9 @@ class VIEW3D_MT_object_clear(Menu): layout.operator("object.location_clear", text="Location").clear_delta = False layout.operator("object.rotation_clear", text="Rotation").clear_delta = False layout.operator("object.scale_clear", text="Scale").clear_delta = False + + layout.separator() + layout.operator("object.origin_clear", text="Origin") @@ -1428,18 +1550,21 @@ class VIEW3D_MT_object_specials(Menu): layout.operator_context = 'INVOKE_REGION_WIN' if scene.render.use_shading_nodes: - try: - value = lamp.node_tree.nodes["Emission"].inputs["Strength"].default_value - except AttributeError: - value = None - - if value is not None: + emission_node = None + if lamp.node_tree: + for node in lamp.node_tree.nodes: + if getattr(node, "type", None) == 'EMISSION': + emission_node = node + break + + if emission_node is not None: props = layout.operator("wm.context_modal_mouse", text="Strength") props.data_path_iter = "selected_editable_objects" - props.data_path_item = "data.node_tree.nodes[\"Emission\"].inputs[\"Strength\"].default_value" + props.data_path_item = "data.node_tree" \ + ".nodes[\"" + emission_node.name + "\"]" \ + ".inputs[\"Strength\"].default_value" props.header_text = "Lamp Strength: %.3f" props.input_scale = 0.1 - del value if lamp.type == 'AREA': props = layout.operator("wm.context_modal_mouse", text="Size X") @@ -1523,16 +1648,41 @@ class VIEW3D_MT_object_apply(Menu): layout.separator() - layout.operator("object.transforms_to_deltas", text="Location to Deltas", text_ctxt=i18n_contexts.default).mode = 'LOC' - layout.operator("object.transforms_to_deltas", text="Rotation to Deltas", text_ctxt=i18n_contexts.default).mode = 'ROT' - layout.operator("object.transforms_to_deltas", text="Scale to Deltas", text_ctxt=i18n_contexts.default).mode = 'SCALE' - - layout.operator("object.transforms_to_deltas", text="All Transforms to Deltas", text_ctxt=i18n_contexts.default).mode = 'ALL' + layout.operator( + "object.transforms_to_deltas", + text="Location to Deltas", + text_ctxt=i18n_contexts.default, + ).mode = 'LOC' + layout.operator( + "object.transforms_to_deltas", + text="Rotation to Deltas", + text_ctxt=i18n_contexts.default, + ).mode = 'ROT' + layout.operator( + "object.transforms_to_deltas", + text="Scale to Deltas", + text_ctxt=i18n_contexts.default, + ).mode = 'SCALE' + + layout.operator( + "object.transforms_to_deltas", + text="All Transforms to Deltas", + text_ctxt=i18n_contexts.default, + ).mode = 'ALL' layout.operator("object.anim_transforms_to_deltas") layout.separator() - layout.operator("object.visual_transform_apply", text="Visual Transform", text_ctxt=i18n_contexts.default) + layout.operator( + "object.visual_transform_apply", + text="Visual Transform", + text_ctxt=i18n_contexts.default, + ) + layout.operator( + "object.convert", + text="Visual Geometry to Mesh", + text_ctxt=i18n_contexts.default, + ).target = 'MESH' layout.operator("object.duplicates_make_real") @@ -1543,7 +1693,9 @@ class VIEW3D_MT_object_parent(Menu): layout = self.layout layout.operator_enum("object.parent_set", "type") + layout.separator() + layout.operator_enum("object.parent_clear", "type") @@ -1554,7 +1706,9 @@ class VIEW3D_MT_object_track(Menu): layout = self.layout layout.operator_enum("object.track_set", "type") + layout.separator() + layout.operator_enum("object.track_clear", "type") @@ -1583,6 +1737,9 @@ class VIEW3D_MT_object_constraints(Menu): layout.operator("object.constraint_add_with_targets") layout.operator("object.constraints_copy") + + layout.separator() + layout.operator("object.constraints_clear") @@ -1605,6 +1762,9 @@ class VIEW3D_MT_object_showhide(Menu): layout = self.layout layout.operator("object.hide_view_clear", text="Show Hidden") + + layout.separator() + layout.operator("object.hide_view_set", text="Hide Selected").unselected = False layout.operator("object.hide_view_set", text="Hide Unselected").unselected = True @@ -1642,12 +1802,16 @@ class VIEW3D_MT_make_links(Menu): def draw(self, context): layout = self.layout operator_context_default = layout.operator_context + if len(bpy.data.scenes) > 10: layout.operator_context = 'INVOKE_REGION_WIN' layout.operator("object.make_links_scene", text="Objects to Scene...", icon='OUTLINER_OB_EMPTY') else: layout.operator_context = 'EXEC_REGION_WIN' - layout.operator_menu_enum("object.make_links_scene", "scene", text="Objects to Scene...") + layout.operator_menu_enum("object.make_links_scene", "scene", text="Objects to Scene") + + layout.separator() + layout.operator_context = operator_context_default layout.operator_enum("object.make_links_data", "type") # inline @@ -1675,7 +1839,6 @@ class VIEW3D_MT_object_game(Menu): layout.operator("object.game_property_clear") -# ********** Brush menu ********** class VIEW3D_MT_brush(Menu): bl_label = "Brush" @@ -1683,7 +1846,7 @@ class VIEW3D_MT_brush(Menu): 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") @@ -1692,6 +1855,11 @@ class VIEW3D_MT_brush(Menu): layout.prop(ups, "use_unified_color", text="Unified Color") layout.separator() + # skip if no active brush + if not brush: + layout.label(text="No Brushes currently available", icon='INFO') + return + # brush paint modes layout.menu("VIEW3D_MT_brush_paint_modes") @@ -1704,10 +1872,6 @@ class VIEW3D_MT_brush(Menu): elif context.vertex_paint_object or context.weight_paint_object: layout.prop_menu_enum(brush, "vertex_tool") - # skip if no active brush - if not brush: - return - # TODO: still missing a lot of brush options here # sculpt options @@ -1745,23 +1909,20 @@ class VIEW3D_MT_brush_paint_modes(Menu): layout.prop(brush, "use_paint_image", text="Texture Paint") -# ********** Vertex paint menu ********** - - class VIEW3D_MT_paint_vertex(Menu): bl_label = "Paint" def draw(self, context): layout = self.layout - layout.operator("ed.undo") - layout.operator("ed.redo") + layout.menu("VIEW3D_MT_undo_redo") layout.separator() layout.operator("paint.vertex_color_set") layout.operator("paint.vertex_color_smooth") layout.operator("paint.vertex_color_dirt") + layout.operator("paint.vertex_color_from_weight") layout.separator() @@ -1783,9 +1944,12 @@ class VIEW3D_MT_hook(Menu): if [mod.type == 'HOOK' for mod in context.active_object.modifiers]: layout.separator() + layout.operator_menu_enum("object.hook_assign", "modifier") layout.operator_menu_enum("object.hook_remove", "modifier") + layout.separator() + layout.operator_menu_enum("object.hook_select", "modifier") layout.operator_menu_enum("object.hook_reset", "modifier") layout.operator_menu_enum("object.hook_recenter", "modifier") @@ -1804,29 +1968,29 @@ class VIEW3D_MT_vertex_group(Menu): if ob.mode == 'EDIT' or (ob.mode == 'WEIGHT_PAINT' and ob.type == 'MESH' and ob.data.use_paint_mask_vertex): if ob.vertex_groups.active: layout.separator() + layout.operator("object.vertex_group_assign", text="Assign to Active Group") - layout.operator("object.vertex_group_remove_from", text="Remove from Active Group").use_all_groups = False + layout.operator( + "object.vertex_group_remove_from", + text="Remove from Active Group", + ).use_all_groups = False layout.operator("object.vertex_group_remove_from", text="Remove from All").use_all_groups = True - layout.separator() if ob.vertex_groups.active: + layout.separator() + layout.operator_menu_enum("object.vertex_group_set_active", "group", text="Set Active Group") layout.operator("object.vertex_group_remove", text="Remove Active Group").all = False layout.operator("object.vertex_group_remove", text="Remove All Groups").all = True -# ********** Weight paint menu ********** - - class VIEW3D_MT_paint_weight(Menu): bl_label = "Weights" def draw(self, context): layout = self.layout - layout.operator("ed.undo") - layout.operator("ed.redo") - layout.operator("ed.undo_history") + layout.menu("VIEW3D_MT_undo_redo") layout.separator() @@ -1837,15 +2001,23 @@ class VIEW3D_MT_paint_weight(Menu): layout.operator("object.vertex_group_normalize_all", text="Normalize All") layout.operator("object.vertex_group_normalize", text="Normalize") + + layout.separator() + layout.operator("object.vertex_group_mirror", text="Mirror") layout.operator("object.vertex_group_invert", text="Invert") layout.operator("object.vertex_group_clean", text="Clean") + + layout.separator() + layout.operator("object.vertex_group_quantize", text="Quantize") layout.operator("object.vertex_group_levels", text="Levels") layout.operator("object.vertex_group_smooth", text="Smooth") + props = layout.operator("object.data_transfer", text="Transfer Weights") props.use_reverse_transfer = True props.data_type = 'VGROUP_WEIGHTS' + layout.operator("object.vertex_group_limit_total", text="Limit Total") layout.operator("object.vertex_group_fix", text="Fix Deforms") @@ -1854,9 +2026,6 @@ class VIEW3D_MT_paint_weight(Menu): layout.operator("paint.weight_set") -# ********** Sculpt menu ********** - - class VIEW3D_MT_sculpt(Menu): bl_label = "Sculpt" @@ -1866,25 +2035,28 @@ class VIEW3D_MT_sculpt(Menu): toolsettings = context.tool_settings sculpt = toolsettings.sculpt - layout.operator("ed.undo") - layout.operator("ed.redo") + layout.menu("VIEW3D_MT_undo_redo") layout.separator() layout.prop(sculpt, "use_symmetry_x") layout.prop(sculpt, "use_symmetry_y") layout.prop(sculpt, "use_symmetry_z") + layout.separator() + layout.prop(sculpt, "lock_x") layout.prop(sculpt, "lock_y") layout.prop(sculpt, "lock_z") layout.separator() + layout.prop(sculpt, "use_threaded", text="Threaded Sculpt") layout.prop(sculpt, "show_low_resolution") layout.prop(sculpt, "show_brush") layout.prop(sculpt, "use_deform_only") layout.prop(sculpt, "show_diffuse_color") + layout.prop(sculpt, "show_mask") class VIEW3D_MT_hide_mask(Menu): @@ -1926,9 +2098,6 @@ class VIEW3D_MT_hide_mask(Menu): props = layout.operator("paint.mask_lasso_gesture", text="Lasso Mask") -# ********** Particle menu ********** - - class VIEW3D_MT_particle(Menu): bl_label = "Particle" @@ -1937,18 +2106,19 @@ class VIEW3D_MT_particle(Menu): particle_edit = context.tool_settings.particle_edit - layout.operator("ed.undo") - layout.operator("ed.redo") - layout.operator("ed.undo_history") + layout.menu("VIEW3D_MT_undo_redo") layout.separator() - layout.operator("particle.mirror") + layout.operator("particle.delete") layout.separator() + layout.operator("particle.mirror") + layout.operator("particle.remove_doubles") - layout.operator("particle.delete") + + layout.separator() if particle_edit.select_mode == 'POINT': layout.operator("particle.subdivide") @@ -1971,7 +2141,13 @@ class VIEW3D_MT_particle_specials(Menu): particle_edit = context.tool_settings.particle_edit layout.operator("particle.rekey") + + layout.separator() + layout.operator("particle.delete") + + layout.separator() + layout.operator("particle.remove_doubles") layout.operator("particle.unify_length") @@ -1979,6 +2155,7 @@ class VIEW3D_MT_particle_specials(Menu): layout.operator("particle.subdivide") layout.operator("particle.weight_set") + layout.separator() layout.operator("particle.mirror") @@ -2008,18 +2185,13 @@ class VIEW3D_MT_particle_showhide(ShowHideMenu, Menu): _operator_name = "particle" -# ********** Pose Menu ********** - - class VIEW3D_MT_pose(Menu): bl_label = "Pose" def draw(self, context): layout = self.layout - layout.operator("ed.undo") - layout.operator("ed.redo") - layout.operator("ed.undo_history") + layout.menu("VIEW3D_MT_undo_redo") layout.separator() @@ -2096,7 +2268,7 @@ class VIEW3D_MT_pose_transform(Menu): layout.separator() - layout.operator("pose.user_transforms_clear", text="Reset unkeyed") + layout.operator("pose.user_transforms_clear", text="Reset Unkeyed") class VIEW3D_MT_pose_slide(Menu): @@ -2167,6 +2339,7 @@ class VIEW3D_MT_pose_group(Menu): layout.operator_context = 'EXEC_AREA' layout.operator("pose.group_assign", text="Assign to New Group").type = 0 + if pose.bone_groups: active_group = pose.bone_groups.active_index + 1 layout.operator("pose.group_assign", text="Assign to Group").type = active_group @@ -2226,6 +2399,9 @@ class VIEW3D_MT_pose_specials(Menu): layout.operator("pose.select_constraint_target") layout.operator("pose.flip_names") + + layout.separator() + layout.operator("pose.paths_calculate") layout.operator("pose.paths_clear") layout.operator("pose.user_transforms_clear") @@ -2293,9 +2469,11 @@ class VIEW3D_MT_edit_mesh(Menu): toolsettings = context.tool_settings - layout.operator("ed.undo") - layout.operator("ed.redo") - layout.operator("ed.undo_history") + layout.menu("VIEW3D_MT_undo_redo") + + layout.separator() + + layout.menu("VIEW3D_MT_edit_mesh_delete") layout.separator() @@ -2311,13 +2489,15 @@ class VIEW3D_MT_edit_mesh(Menu): layout.operator("mesh.duplicate_move") layout.menu("VIEW3D_MT_edit_mesh_extrude") - layout.menu("VIEW3D_MT_edit_mesh_delete") layout.separator() layout.menu("VIEW3D_MT_edit_mesh_vertices") layout.menu("VIEW3D_MT_edit_mesh_edges") layout.menu("VIEW3D_MT_edit_mesh_faces") + + layout.separator() + layout.menu("VIEW3D_MT_edit_mesh_normals") layout.menu("VIEW3D_MT_edit_mesh_clean") @@ -2488,8 +2668,8 @@ class VIEW3D_MT_edit_mesh_vertices(Menu): layout.operator("object.vertex_parent_set") -class VIEW3D_MT_edit_mesh_edges(Menu): - bl_label = "Edges" +class VIEW3D_MT_edit_mesh_edges_data(Menu): + bl_label = "Edge Data" def draw(self, context): layout = self.layout @@ -2498,13 +2678,6 @@ class VIEW3D_MT_edit_mesh_edges(Menu): layout.operator_context = 'INVOKE_REGION_WIN' - layout.operator("mesh.edge_face_add") - layout.operator("mesh.subdivide") - layout.operator("mesh.subdivide_edgering") - layout.operator("mesh.unsubdivide") - - layout.separator() - layout.operator("transform.edge_crease") layout.operator("transform.edge_bevelweight") @@ -2525,6 +2698,26 @@ class VIEW3D_MT_edit_mesh_edges(Menu): layout.operator("mesh.mark_freestyle_edge", text="Clear Freestyle Edge").clear = True layout.separator() + +class VIEW3D_MT_edit_mesh_edges(Menu): + bl_label = "Edges" + + def draw(self, context): + layout = self.layout + + layout.operator_context = 'INVOKE_REGION_WIN' + + layout.operator("mesh.edge_face_add") + layout.operator("mesh.subdivide") + layout.operator("mesh.subdivide_edgering") + layout.operator("mesh.unsubdivide") + + layout.separator() + + layout.menu("VIEW3D_MT_edit_mesh_edges_data") + + 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 @@ -2613,7 +2806,7 @@ class VIEW3D_MT_edit_mesh_normals(Menu): class VIEW3D_MT_edit_mesh_clean(Menu): - bl_label = "Clean up" + bl_label = "Clean Up" def draw(self, context): layout = self.layout @@ -2626,6 +2819,9 @@ class VIEW3D_MT_edit_mesh_clean(Menu): layout.operator("mesh.dissolve_degenerate") layout.operator("mesh.dissolve_limited") layout.operator("mesh.face_make_planar") + + layout.separator() + layout.operator("mesh.vert_connect_nonplanar") layout.operator("mesh.vert_connect_concave") layout.operator("mesh.remove_doubles") @@ -2684,7 +2880,13 @@ class VIEW3D_MT_edit_gpencil_delete(Menu): def draw_curve(self, context): layout = self.layout - toolsettings = context.tool_settings + layout.menu("VIEW3D_MT_undo_redo") + + layout.separator() + + layout.menu("VIEW3D_MT_edit_curve_delete") + + layout.separator() layout.menu("VIEW3D_MT_transform") layout.menu("VIEW3D_MT_mirror") @@ -2695,11 +2897,13 @@ def draw_curve(self, context): layout.operator("curve.extrude_move") layout.operator("curve.spin") layout.operator("curve.duplicate_move") + + layout.separator() + layout.operator("curve.split") layout.operator("curve.separate") layout.operator("curve.make_segment") layout.operator("curve.cyclic_toggle") - layout.menu("VIEW3D_MT_edit_curve_delete") layout.separator() @@ -2708,6 +2912,10 @@ def draw_curve(self, context): layout.separator() + layout.menu("VIEW3D_MT_edit_curve_clean") + + layout.separator() + layout.menu("VIEW3D_MT_edit_proportional") layout.separator() @@ -2756,6 +2964,14 @@ class VIEW3D_MT_edit_curve_segments(Menu): layout.operator("curve.subdivide") layout.operator("curve.switch_direction") +class VIEW3D_MT_edit_curve_clean(Menu): + bl_label = "Clean Up" + + def draw(self, context): + layout = self.layout + + layout.operator("curve.decimate") + class VIEW3D_MT_edit_curve_specials(Menu): bl_label = "Specials" @@ -2767,6 +2983,9 @@ class VIEW3D_MT_edit_curve_specials(Menu): layout.operator("curve.switch_direction") layout.operator("curve.spline_weight_set") layout.operator("curve.radius_set") + + layout.separator() + layout.operator("curve.smooth") layout.operator("curve.smooth_weight") layout.operator("curve.smooth_radius") @@ -2802,12 +3021,18 @@ class VIEW3D_MT_edit_font(Menu): def draw(self, context): layout = self.layout + # Break convention of having undo menu here, + # instead place in "Edit" menu, matching the text menu. + layout.menu("VIEW3D_MT_edit_text_chars") layout.separator() layout.operator("font.style_toggle", text="Toggle Bold").style = 'BOLD' layout.operator("font.style_toggle", text="Toggle Italic").style = 'ITALIC' + + layout.separator() + layout.operator("font.style_toggle", text="Toggle Underline").style = 'UNDERLINE' layout.operator("font.style_toggle", text="Toggle Small Caps").style = 'SMALL_CAPS' @@ -2826,9 +3051,15 @@ class VIEW3D_MT_edit_text_chars(Menu): layout.operator("font.text_insert", text="Degree Sign").text = "\u00B0" layout.operator("font.text_insert", text="Multiplication Sign").text = "\u00D7" layout.operator("font.text_insert", text="Circle").text = "\u008A" + + layout.separator() + layout.operator("font.text_insert", text="Superscript 1").text = "\u00B9" layout.operator("font.text_insert", text="Superscript 2").text = "\u00B2" layout.operator("font.text_insert", text="Superscript 3").text = "\u00B3" + + layout.separator() + layout.operator("font.text_insert", text="Double >>").text = "\u00BB" layout.operator("font.text_insert", text="Double <<").text = "\u00AB" layout.operator("font.text_insert", text="Promillage").text = "\u2030" @@ -2852,11 +3083,11 @@ class VIEW3D_MT_edit_meta(Menu): def draw(self, context): layout = self.layout - toolsettings = context.tool_settings + layout.menu("VIEW3D_MT_undo_redo") - layout.operator("ed.undo") - layout.operator("ed.redo") - layout.operator("ed.undo_history") + layout.separator() + + layout.operator("mball.delete_metaelems", text="Delete...") layout.separator() @@ -2866,7 +3097,6 @@ class VIEW3D_MT_edit_meta(Menu): layout.separator() - layout.operator("mball.delete_metaelems", text="Delete...") layout.operator("mball.duplicate_metaelems") layout.separator() @@ -2895,7 +3125,9 @@ class VIEW3D_MT_edit_lattice(Menu): def draw(self, context): layout = self.layout - toolsettings = context.tool_settings + layout.menu("VIEW3D_MT_undo_redo") + + layout.separator() layout.menu("VIEW3D_MT_transform") layout.menu("VIEW3D_MT_mirror") @@ -2924,6 +3156,14 @@ class VIEW3D_MT_edit_armature(Menu): edit_object = context.edit_object arm = edit_object.data + layout.menu("VIEW3D_MT_undo_redo") + + layout.separator() + + layout.operator("armature.delete") + + layout.separator() + layout.menu("VIEW3D_MT_transform_armature") layout.menu("VIEW3D_MT_mirror") layout.menu("VIEW3D_MT_snap") @@ -2939,7 +3179,6 @@ class VIEW3D_MT_edit_armature(Menu): layout.operator("armature.duplicate_move") layout.operator("armature.merge") layout.operator("armature.fill") - layout.operator("armature.delete") layout.operator("armature.split") layout.operator("armature.separate") @@ -3041,14 +3280,11 @@ class VIEW3D_MT_edit_gpencil(Menu): layout = self.layout - layout.operator("ed.undo") - layout.operator("ed.redo") - layout.operator("ed.undo_history") + layout.menu("VIEW3D_MT_undo_redo") layout.separator() - 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_delete") layout.separator() @@ -3058,12 +3294,16 @@ class VIEW3D_MT_edit_gpencil(Menu): layout.separator() + layout.operator("gpencil.brush_paint", text="Sculpt Strokes").wait_for_input = True + layout.prop_menu_enum(toolsettings.gpencil_sculpt, "tool", text="Sculpt Brush") + + layout.separator() + layout.menu("VIEW3D_MT_object_animation") # NOTE: provides keyingset access... layout.menu("VIEW3D_MT_edit_gpencil_interpolate") layout.separator() - layout.menu("VIEW3D_MT_edit_gpencil_delete") layout.operator("gpencil.duplicate_move", text="Duplicate") layout.operator("gpencil.stroke_subdivide", text="Subdivide") @@ -3517,7 +3757,7 @@ class VIEW3D_PT_view3d_meshstatvis(Panel): row = layout.row(align=True) row.prop(statvis, "overhang_min", text="") row.prop(statvis, "overhang_max", text="") - layout.prop(statvis, "overhang_axis", expand=True) + layout.row().prop(statvis, "overhang_axis", expand=True) elif statvis_type == 'THICKNESS': row = layout.row(align=True) row.prop(statvis, "thickness_min", text="") @@ -3787,12 +4027,151 @@ class VIEW3D_PT_context_properties(Panel): rna_prop_ui.draw(self.layout, context, member, object, False) -def register(): - bpy.utils.register_module(__name__) - - -def unregister(): - bpy.utils.unregister_module(__name__) - -if __name__ == "__main__": - register() +classes = ( + VIEW3D_HT_header, + VIEW3D_MT_editor_menus, + VIEW3D_MT_transform, + VIEW3D_MT_transform_base, + VIEW3D_MT_transform_object, + VIEW3D_MT_transform_armature, + VIEW3D_MT_mirror, + VIEW3D_MT_snap, + VIEW3D_MT_uv_map, + VIEW3D_MT_edit_proportional, + VIEW3D_MT_view, + VIEW3D_MT_view_cameras, + VIEW3D_MT_view_navigation, + VIEW3D_MT_view_align, + VIEW3D_MT_view_align_selected, + VIEW3D_MT_view_viewpoint, + VIEW3D_MT_view_borders, + VIEW3D_MT_select_object, + VIEW3D_MT_select_object_more_less, + VIEW3D_MT_select_pose, + VIEW3D_MT_select_pose_more_less, + VIEW3D_MT_select_particle, + VIEW3D_MT_edit_mesh, + VIEW3D_MT_edit_mesh_select_similar, + VIEW3D_MT_edit_mesh_select_by_trait, + VIEW3D_MT_edit_mesh_select_more_less, + VIEW3D_MT_select_edit_mesh, + VIEW3D_MT_select_edit_curve, + VIEW3D_MT_select_edit_surface, + VIEW3D_MT_select_edit_text, + VIEW3D_MT_select_edit_metaball, + VIEW3D_MT_select_edit_lattice, + VIEW3D_MT_select_edit_armature, + VIEW3D_MT_select_gpencil, + VIEW3D_MT_select_paint_mask, + VIEW3D_MT_select_paint_mask_vertex, + VIEW3D_MT_angle_control, + INFO_MT_mesh_add, + INFO_MT_curve_add, + INFO_MT_surface_add, + INFO_MT_metaball_add, + INFO_MT_edit_curve_add, + INFO_MT_edit_armature_add, + INFO_MT_armature_add, + INFO_MT_lamp_add, + INFO_MT_camera_add, + INFO_MT_add, + VIEW3D_MT_undo_redo, + VIEW3D_MT_object_relations, + VIEW3D_MT_object, + VIEW3D_MT_object_animation, + VIEW3D_MT_object_clear, + VIEW3D_MT_object_specials, + VIEW3D_MT_object_apply, + VIEW3D_MT_object_parent, + VIEW3D_MT_object_track, + VIEW3D_MT_object_group, + VIEW3D_MT_object_constraints, + VIEW3D_MT_object_quick_effects, + VIEW3D_MT_object_showhide, + VIEW3D_MT_make_single_user, + VIEW3D_MT_make_links, + VIEW3D_MT_object_game, + VIEW3D_MT_brush, + VIEW3D_MT_brush_paint_modes, + VIEW3D_MT_paint_vertex, + VIEW3D_MT_hook, + VIEW3D_MT_vertex_group, + VIEW3D_MT_paint_weight, + VIEW3D_MT_sculpt, + VIEW3D_MT_hide_mask, + VIEW3D_MT_particle, + VIEW3D_MT_particle_specials, + VIEW3D_MT_particle_showhide, + VIEW3D_MT_pose, + VIEW3D_MT_pose_transform, + VIEW3D_MT_pose_slide, + VIEW3D_MT_pose_propagate, + VIEW3D_MT_pose_library, + VIEW3D_MT_pose_motion, + VIEW3D_MT_pose_group, + VIEW3D_MT_pose_ik, + VIEW3D_MT_pose_constraints, + VIEW3D_MT_pose_showhide, + VIEW3D_MT_pose_apply, + VIEW3D_MT_pose_specials, + VIEW3D_MT_bone_options_toggle, + VIEW3D_MT_bone_options_enable, + VIEW3D_MT_bone_options_disable, + VIEW3D_MT_edit_mesh_specials, + 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_edges_data, + VIEW3D_MT_edit_mesh_faces, + VIEW3D_MT_edit_mesh_normals, + VIEW3D_MT_edit_mesh_clean, + VIEW3D_MT_edit_mesh_delete, + VIEW3D_MT_edit_mesh_showhide, + VIEW3D_MT_edit_gpencil, + VIEW3D_MT_edit_gpencil_delete, + VIEW3D_MT_edit_curve, + VIEW3D_MT_edit_curve_ctrlpoints, + VIEW3D_MT_edit_curve_segments, + VIEW3D_MT_edit_curve_clean, + VIEW3D_MT_edit_curve_specials, + VIEW3D_MT_edit_curve_delete, + VIEW3D_MT_edit_curve_showhide, + VIEW3D_MT_edit_surface, + VIEW3D_MT_edit_font, + VIEW3D_MT_edit_text_chars, + VIEW3D_MT_edit_meta, + VIEW3D_MT_edit_meta_showhide, + VIEW3D_MT_edit_lattice, + VIEW3D_MT_edit_armature, + VIEW3D_MT_armature_specials, + VIEW3D_MT_edit_armature_parent, + VIEW3D_MT_edit_armature_roll, + VIEW3D_MT_edit_armature_delete, + VIEW3D_MT_edit_gpencil_transform, + VIEW3D_MT_edit_gpencil_interpolate, + VIEW3D_PT_grease_pencil, + VIEW3D_PT_grease_pencil_palettecolor, + VIEW3D_PT_view3d_properties, + VIEW3D_PT_view3d_cursor, + VIEW3D_PT_view3d_name, + VIEW3D_PT_view3d_display, + VIEW3D_PT_view3d_stereo, + VIEW3D_PT_view3d_shading, + VIEW3D_PT_view3d_motion_tracking, + VIEW3D_PT_view3d_meshdisplay, + VIEW3D_PT_view3d_meshstatvis, + VIEW3D_PT_view3d_curvedisplay, + VIEW3D_PT_background_image, + VIEW3D_PT_transform_orientations, + VIEW3D_PT_etch_a_ton, + VIEW3D_PT_context_properties, +) + + +if __name__ == "__main__": # only for live edit. + from bpy.utils import register_class + for cls in classes: + register_class(cls) |