diff options
author | mattoverby <mattoverby@gmail.com> | 2020-08-13 02:21:23 +0300 |
---|---|---|
committer | mattoverby <mattoverby@gmail.com> | 2020-08-13 02:21:23 +0300 |
commit | dfeffa39b848c3b54d6461c9a38c97f7dc7afd8c (patch) | |
tree | c287b999dea9cc5602c08008862a95c81a133c35 /release | |
parent | 4e800f786ab1c4e83f9bb1cdbcb747267f298b9f (diff) | |
parent | 579cb774dac6295c90e35ef8e74ea51ec570c814 (diff) |
merged from master
Diffstat (limited to 'release')
18 files changed, 328 insertions, 149 deletions
diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c index fbdb226ab6d..df1be29f642 100644 --- a/release/datafiles/userdef/userdef_default.c +++ b/release/datafiles/userdef/userdef_default.c @@ -109,7 +109,7 @@ const UserDef U_default = { .keyconfigstr = "blender", .undosteps = 32, .undomemory = 0, - .gp_manhattendist = 1, + .gp_manhattandist = 1, .gp_euclideandist = 2, .gp_eraser = 25, .gp_settings = 0, diff --git a/release/scripts/modules/bl_i18n_utils/utils_spell_check.py b/release/scripts/modules/bl_i18n_utils/utils_spell_check.py index aa80611ac6b..0ec3a322173 100644 --- a/release/scripts/modules/bl_i18n_utils/utils_spell_check.py +++ b/release/scripts/modules/bl_i18n_utils/utils_spell_check.py @@ -72,7 +72,7 @@ class SpellChecker: "wasn", # wasn't # Merged words - "antialiasing", + "antialiasing", "antialias", "arcsine", "arccosine", "arctangent", "autoclip", "autocomplete", @@ -241,7 +241,7 @@ class SpellChecker: "unsets", "unshadowed", "unspill", - "unstitchable", + "unstitchable", "unstitch", "unsubdivided", "unsubdivide", "untrusted", "vectorscope", @@ -421,6 +421,7 @@ class SpellChecker: "searchable", "spacebar", "subtractive", + "superellipse", "tooltip", "tooltips", "trackpad", "tuple", @@ -618,6 +619,7 @@ class SpellChecker: "musgrave", "nayar", "netravali", + "nishita", "ogawa", "oren", "peucker", # Ramer-Douglas-Peucker diff --git a/release/scripts/modules/bl_previews_utils/bl_previews_render.py b/release/scripts/modules/bl_previews_utils/bl_previews_render.py index 73004cee731..bcb2fe8324d 100644 --- a/release/scripts/modules/bl_previews_utils/bl_previews_render.py +++ b/release/scripts/modules/bl_previews_utils/bl_previews_render.py @@ -314,7 +314,7 @@ def do_previews(do_objects, do_collections, do_scenes, do_data_intern): do_save = True if do_data_intern: - bpy.ops.wm.previews_clear(id_type='SHADING') + bpy.ops.wm.previews_clear(id_type={'SHADING'}) bpy.ops.wm.previews_ensure() render_contexts = {} @@ -439,7 +439,7 @@ def do_previews(do_objects, do_collections, do_scenes, do_data_intern): def do_clear_previews(do_objects, do_collections, do_scenes, do_data_intern): if do_data_intern: - bpy.ops.wm.previews_clear(id_type='SHADING') + bpy.ops.wm.previews_clear(id_type={'SHADING'}) if do_objects: for ob in ids_nolib(bpy.data.objects): diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index ef4e1a9f77b..a11343c66c0 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -1926,10 +1926,15 @@ def km_file_browser_main(params): items.extend([ ("file.execute", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, {"properties": [("need_active", True)]}), + # Both .execute and .select are needed here. The former only works if + # there's a file operator (i.e. not in regular editor mode) but is + # needed to load files. The latter makes selection work if there's no + # operator (i.e. in regular editor mode). + ("file.select", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, + {"properties": [("open", True), ("deselect_all", not params.legacy)]}), ("file.refresh", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None), - ("file.select", {"type": 'LEFTMOUSE', "value": 'CLICK'}, + ("file.select", {"type": 'LEFTMOUSE', "value": 'PRESS'}, {"properties": [("open", False), ("deselect_all", not params.legacy)]}), - ("file.select", {"type": 'LEFTMOUSE', "value": 'DOUBLE_CLICK'}, None), ("file.select", {"type": 'LEFTMOUSE', "value": 'CLICK', "ctrl": True}, {"properties": [("extend", True), ("open", False)]}), ("file.select", {"type": 'LEFTMOUSE', "value": 'CLICK', "shift": True}, @@ -3365,16 +3370,14 @@ def km_grease_pencil_stroke_paint_fill(params): # Fill ("gpencil.fill", {"type": 'LEFTMOUSE', "value": 'PRESS'}, {"properties": [("on_back", False)]}), - ("gpencil.fill", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, - {"properties": [("on_back", True)]}), + ("gpencil.fill", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, + {"properties": [("on_back", False)]}), # If press alternate key, the brush now it's for drawing areas - ("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, - {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True)]}), + ("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True), ("disable_stabilizer", True)]}), # If press alternative key, the brush now it's for drawing lines - ("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, - {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True), ("disable_fill", True)]}), - # Lasso select - ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), + ("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True, "shift": True}, + {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True), ("disable_stabilizer", True), ("disable_fill", True)]}), ]) return keymap @@ -4533,6 +4536,8 @@ def km_mesh(params): ("mesh.dissolve_mode", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, None), ("mesh.knife_tool", {"type": 'K', "value": 'PRESS'}, {"properties": [("use_occlude_geometry", True), ("only_selected", False)]}), + ("mesh.knife_tool", {"type": 'K', "value": 'PRESS', "shift": True}, + {"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}), @@ -4568,8 +4573,6 @@ def km_mesh(params): ("mesh.faces_select_linked_flat", {"type": 'F', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), ("mesh.spin", {"type": 'R', "value": 'PRESS', "alt": True}, None), ("mesh.beautify_fill", {"type": 'F', "value": 'PRESS', "shift": True, "alt": True}, None), - ("mesh.knife_tool", {"type": 'K', "value": 'PRESS', "shift": True}, - {"properties": [("use_occlude_geometry", False), ("only_selected", True)]}), *_template_items_object_subdivision_set(), ]) @@ -6288,10 +6291,10 @@ def km_3d_view_tool_sculpt_box_mask(params): "3D View Tool: Sculpt, Box Mask", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("view3d.select_box", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("mode", 'ADD')]}), - ("view3d.select_box", {"type": params.tool_tweak, "value": 'ANY', "ctrl": True}, - {"properties": [("mode", 'SUB')]}), + ("paint.mask_box_gesture", {"type": params.tool_tweak, "value": 'ANY'}, + {"properties": [("value", 1.0)]}), + ("paint.mask_box_gesture", {"type": params.tool_tweak, "value": 'ANY', "ctrl": True}, + {"properties": [("value", 0.0)]}), ]}, ) @@ -6350,6 +6353,18 @@ def km_3d_view_tool_sculpt_mask_by_color(params): ]}, ) +def km_3d_view_tool_sculpt_face_set_edit(params): + return ( + "3D View Tool: Sculpt, Face Set Edit", + {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, + {"items": [ + ("sculpt.face_set_edit", {"type": params.tool_mouse, "value": 'ANY'}, + None), + ("sculpt.face_set_edit", {"type": params.tool_tweak, "value": 'ANY'}, + None) + ]}, + ) + def km_3d_view_tool_paint_weight_sample_weight(params): return ( "3D View Tool: Paint Weight, Sample Weight", @@ -6385,12 +6400,12 @@ def km_3d_view_tool_paint_gpencil_line(params): "3D View Tool: Paint Gpencil, Line", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("gpencil.primitive", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("type", 'LINE'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, - {"properties": [("type", 'LINE'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, - {"properties": [("type", 'LINE'), ("wait_for_input", False)]}), + ("gpencil.primitive_line", {"type": params.tool_tweak, "value": 'ANY'}, + {"properties": [("wait_for_input", False)]}), + ("gpencil.primitive_line", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [("wait_for_input", False)]}), + ("gpencil.primitive_line", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, + {"properties": [("wait_for_input", False)]}), # Lasso select ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), ]}, @@ -6401,10 +6416,10 @@ def km_3d_view_tool_paint_gpencil_polyline(params): "3D View Tool: Paint Gpencil, Polyline", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("gpencil.primitive", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("type", 'POLYLINE'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, - {"properties": [("type", 'POLYLINE'), ("wait_for_input", False)]}), + ("gpencil.primitive_polyline", {"type": params.tool_tweak, "value": 'ANY'}, + {"properties": [("wait_for_input", False)]}), + ("gpencil.primitive_polyline", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [("wait_for_input", False)]}), # Lasso select ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), ]}, @@ -6415,12 +6430,12 @@ def km_3d_view_tool_paint_gpencil_box(params): "3D View Tool: Paint Gpencil, Box", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("gpencil.primitive", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("type", 'BOX'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, - {"properties": [("type", 'BOX'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, - {"properties": [("type", 'BOX'), ("wait_for_input", False)]}), + ("gpencil.primitive_box", {"type": params.tool_tweak, "value": 'ANY'}, + {"properties": [("wait_for_input", False)]}), + ("gpencil.primitive_box", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [("wait_for_input", False)]}), + ("gpencil.primitive_box", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, + {"properties": [("wait_for_input", False)]}), # Lasso select ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), ]}, @@ -6432,12 +6447,12 @@ def km_3d_view_tool_paint_gpencil_circle(params): "3D View Tool: Paint Gpencil, Circle", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("gpencil.primitive", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("type", 'CIRCLE'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, - {"properties": [("type", 'CIRCLE'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, - {"properties": [("type", 'CIRCLE'), ("wait_for_input", False)]}), + ("gpencil.primitive_circle", {"type": params.tool_tweak, "value": 'ANY'}, + {"properties": [("wait_for_input", False)]}), + ("gpencil.primitive_circle", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [("wait_for_input", False)]}), + ("gpencil.primitive_circle", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, + {"properties": [("wait_for_input", False)]}), # Lasso select ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), ]}, @@ -6449,12 +6464,12 @@ def km_3d_view_tool_paint_gpencil_arc(params): "3D View Tool: Paint Gpencil, Arc", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("gpencil.primitive", {"type": params.tool_tweak, "value": 'ANY'}, - {"properties": [("type", 'ARC'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + ("gpencil.primitive_curve", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("type", 'ARC'), ("wait_for_input", False)]}), - ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, + ("gpencil.primitive_curve", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, {"properties": [("type", 'ARC'), ("wait_for_input", False)]}), + ("gpencil.primitive_curve", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True}, + {"properties": [("type",'ARC'), ("wait_for_input", False)]}), # Lasso select ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), ]}, @@ -6466,7 +6481,7 @@ def km_3d_view_tool_paint_gpencil_curve(params): "3D View Tool: Paint Gpencil, Curve", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("gpencil.primitive", {"type": params.tool_tweak, "value": 'ANY'}, + ("gpencil.primitive_curve", {"type": params.tool_tweak, "value": 'ANY'}, {"properties": [("type", 'CURVE'), ("wait_for_input", False)]}), # Lasso select ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), @@ -6893,6 +6908,7 @@ def generate_keymaps(params=None): km_3d_view_tool_sculpt_cloth_filter(params), km_3d_view_tool_sculpt_color_filter(params), km_3d_view_tool_sculpt_mask_by_color(params), + km_3d_view_tool_sculpt_face_set_edit(params), km_3d_view_tool_paint_weight_sample_weight(params), km_3d_view_tool_paint_weight_sample_vertex_group(params), km_3d_view_tool_paint_weight_gradient(params), diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py index eedf07935c8..04721a1704a 100644 --- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py +++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py @@ -2465,16 +2465,14 @@ def km_grease_pencil_stroke_paint_fill(params): # Fill ("gpencil.fill", {"type": 'LEFTMOUSE', "value": 'PRESS'}, {"properties": [("on_back", False)]}), - ("gpencil.fill", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, - {"properties": [("on_back", True)]}), + ("gpencil.fill", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, + {"properties": [("on_back", False)]}), # If press alternate key, the brush now it's for drawing areas - ("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True}, - {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True)]}), + ("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True), ("disable_stabilizer", True)]}), # If press alternative key, the brush now it's for drawing lines ("gpencil.draw", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True, "shift": True}, - {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True), ("disable_fill", True)]}), - # Lasso select - ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None), + {"properties": [("mode", 'DRAW'), ("wait_for_input", False), ("disable_straight", True), ("disable_stabilizer", True), ("disable_fill", True)]}), ]) return keymap diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py index 2befb7c73e2..7af5cd5ee5f 100644 --- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py +++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py @@ -613,7 +613,7 @@ class LightMapPack(Operator): # Image & UVs... PREF_PACK_IN_ONE: BoolProperty( - name="Share Tex Space", + name="Share Texture Space", description=( "Objects Share texture space, map all objects " "into 1 uvmap" diff --git a/release/scripts/startup/bl_ui/properties_constraint.py b/release/scripts/startup/bl_ui/properties_constraint.py index 215c96a5975..b47d4223372 100644 --- a/release/scripts/startup/bl_ui/properties_constraint.py +++ b/release/scripts/startup/bl_ui/properties_constraint.py @@ -1029,7 +1029,7 @@ class ConstraintButtonsSubPanel(Panel): col = layout.column(align=True) col.prop(con, "map_to_z_from", expand=False, text="Z Source Axis") col.prop(con, "to_min_z" + ext, text="Min") - col.prop(con, "to_max_z" + ext, text="Max") + col.prop(con, "to_max_z" + ext, text="Max") layout.prop(con, "mix_mode" + ext, text="Mix") @@ -1396,7 +1396,7 @@ class BONE_PT_bTransformConstraint_from(BoneConstraintPanel, ConstraintButtonsSu def draw(self, context): self.draw_transform_from(context) - + class OBJECT_PT_bTransformConstraint_destination(ObjectConstraintPanel, ConstraintButtonsSubPanel): bl_parent_id = "OBJECT_PT_bTransformConstraint" bl_label = "Map To" diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py index 57563d674d0..6e65ec7e4c3 100644 --- a/release/scripts/startup/bl_ui/properties_data_mesh.py +++ b/release/scripts/startup/bl_ui/properties_data_mesh.py @@ -350,7 +350,7 @@ class DATA_PT_shape_keys(MeshButtonsPanel, Panel): if enable_edit or (ob.use_shape_key_edit_mode and ob.type == 'MESH'): enable_pin = True - if ob.show_only_shape_key: + if ob.show_only_shape_key is False: enable_edit_value = True row = layout.row() diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py index 6dde1e715bb..6a541863aef 100644 --- a/release/scripts/startup/bl_ui/properties_paint_common.py +++ b/release/scripts/startup/bl_ui/properties_paint_common.py @@ -646,6 +646,8 @@ def brush_settings(layout, context, brush, popover=False): layout.prop(brush, "pose_smooth_iterations") if brush.pose_deform_type == 'ROTATE_TWIST' and brush.pose_origin_type in {'TOPOLOGY', 'FACE_SETS'}: layout.prop(brush, "pose_ik_segments") + if brush.pose_deform_type == 'SCALE_TRANSLATE': + layout.prop(brush, "use_pose_lock_rotation") layout.prop(brush, "use_pose_ik_anchored") layout.prop(brush, "use_connected_only") layout.prop(brush, "disconnected_distance_max") @@ -654,14 +656,21 @@ def brush_settings(layout, context, brush, popover=False): elif sculpt_tool == 'CLOTH': layout.separator() - layout.prop(brush, "cloth_sim_limit") - layout.prop(brush, "cloth_sim_falloff") + layout.prop(brush, "cloth_simulation_area_type") + if brush.cloth_simulation_area_type == 'LOCAL': + layout.prop(brush, "cloth_sim_limit") + layout.prop(brush, "cloth_sim_falloff") + layout.prop(brush, "use_cloth_pin_simulation_boundary") + layout.separator() layout.prop(brush, "cloth_deform_type") layout.prop(brush, "cloth_force_falloff_type") layout.separator() layout.prop(brush, "cloth_mass") layout.prop(brush, "cloth_damping") + layout.prop(brush, "cloth_constraint_softbody_strength") + layout.separator() + layout.prop(brush, "use_cloth_collision") layout.separator() elif sculpt_tool == 'SCRAPE': @@ -710,6 +719,12 @@ def brush_settings(layout, context, brush, popover=False): col = layout.column() col.prop(brush, "smear_deform_type") + elif sculpt_tool == 'BOUNDARY': + col = layout.column() + col.prop(brush, "boundary_deform_type") + col.prop(brush, "boundary_falloff_type") + col.prop(brush, "boundary_offset") + elif sculpt_tool == 'TOPOLOGY': col = layout.column() col.prop(brush, "slide_deform_type") @@ -1096,6 +1111,45 @@ def brush_basic_texpaint_settings(layout, context, brush, *, compact=False): header=True ) +def brush_basic__draw_color_selector(context, layout, brush, gp_settings, props): + tool_settings = context.scene.tool_settings + settings = tool_settings.gpencil_paint + ma = gp_settings.material + + row = layout.row(align=True) + if not gp_settings.use_material_pin: + ma = context.object.active_material + icon_id = 0 + if ma: + icon_id = ma.id_data.preview.icon_id + txt_ma = ma.name + maxw = 25 + if len(txt_ma) > maxw: + txt_ma = txt_ma[:maxw - 5] + '..' + txt_ma[-3:] + else: + txt_ma = "" + + sub = row.row() + sub.ui_units_x = 8 + sub.popover( + panel="TOPBAR_PT_gpencil_materials", + text=txt_ma, + icon_value=icon_id, + ) + + row.prop(gp_settings, "use_material_pin", text="") + + if brush.gpencil_tool in {'DRAW', 'FILL'}: + row.separator(factor=1.0) + row.prop_enum(settings, "color_mode", 'MATERIAL', text="", icon='MATERIAL') + row.prop_enum(settings, "color_mode", 'VERTEXCOLOR', text="", icon='VPAINT_HLT') + sub_row = row.row(align=True) + sub_row.enabled = settings.color_mode == 'VERTEXCOLOR' + sub_row.prop_with_popover(brush, "color", text="", panel="TOPBAR_PT_gpencil_vertexcolor") + + if props: + row = layout.row(align=True) + row.prop(props, "subdivision") def brush_basic_gpencil_paint_settings(layout, context, brush, *, compact=False): tool_settings = context.tool_settings @@ -1129,6 +1183,8 @@ def brush_basic_gpencil_paint_settings(layout, context, brush, *, compact=False) # FIXME: tools must use their own UI drawing! elif brush.gpencil_tool == 'FILL': row = layout.row(align=True) + row.prop(gp_settings, "fill_direction", text="", expand=True) + row = layout.row(align=True) row.prop(gp_settings, "fill_leak", text="Leak Size") row = layout.row(align=True) row.prop(brush, "size", text="Thickness") diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py index b03f80bd600..a55bd89ca18 100644 --- a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py +++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py @@ -23,10 +23,10 @@ from bpy.types import ( ) -def rigid_body_warning(layout): +def rigid_body_warning(layout, text): row = layout.row(align=True) row.alignment = 'RIGHT' - row.label(text="Object does not have a Rigid Body") + row.label(text=text, icon='ERROR') class PHYSICS_PT_rigidbody_panel: @@ -49,13 +49,24 @@ class PHYSICS_PT_rigid_body(PHYSICS_PT_rigidbody_panel, Panel): layout.use_property_split = True ob = context.object + parent = ob.parent rbo = ob.rigid_body if rbo is None: - rigid_body_warning(layout) + rigid_body_warning(layout, "Object does not have a Rigid Body") return - layout.prop(rbo, "type", text="Type") + if parent is not None and parent.rigid_body is not None: + if parent.rigid_body.collision_shape == 'COMPOUND': + row = layout.row(align=True) + row.alignment = 'RIGHT' + row.label(text="This object is part of a compound shape", icon='INFO') + else: + rigid_body_warning(layout, "Rigid Body can't be child of a non compound Rigid Body") + return + + if parent is None or parent.rigid_body is None: + layout.prop(rbo, "type", text="Type") class PHYSICS_PT_rigid_body_settings(PHYSICS_PT_rigidbody_panel, Panel): @@ -66,6 +77,8 @@ class PHYSICS_PT_rigid_body_settings(PHYSICS_PT_rigidbody_panel, Panel): @classmethod def poll(cls, context): obj = context.object + if obj.parent is not None and obj.parent.rigid_body is not None: + return False return (obj and obj.rigid_body and (context.engine in cls.COMPAT_ENGINES)) def draw(self, context): @@ -76,7 +89,7 @@ class PHYSICS_PT_rigid_body_settings(PHYSICS_PT_rigidbody_panel, Panel): rbo = ob.rigid_body if rbo is None: - rigid_body_warning(layout) + rigid_body_warning(layout, "Object does not have a Rigid Body") return col = layout.column() @@ -96,17 +109,32 @@ class PHYSICS_PT_rigid_body_collisions(PHYSICS_PT_rigidbody_panel, Panel): @classmethod def poll(cls, context): obj = context.object + if obj.parent is not None and obj.parent.rigid_body is not None and not obj.parent.rigid_body.collision_shape == 'COMPOUND': + return False return (obj and obj.rigid_body and (context.engine in cls.COMPAT_ENGINES)) def draw(self, context): layout = self.layout ob = context.object + parent = ob.parent rbo = ob.rigid_body layout.use_property_split = True layout.prop(rbo, "collision_shape", text="Shape") + if rbo.collision_shape == 'COMPOUND': + if parent is not None and parent.rigid_body is not None and parent.rigid_body.collision_shape == 'COMPOUND': + rigid_body_warning(layout, "Sub compound shapes are not allowed") + else: + found = False + for child in ob.children: + if child.rigid_body is not None: + found = True + break + if not found: + rigid_body_warning(layout, "There are no child rigid bodies") + if rbo.collision_shape in {'MESH', 'CONVEX_HULL'}: layout.prop(rbo, "mesh_source", text="Source") @@ -123,6 +151,8 @@ class PHYSICS_PT_rigid_body_collisions_surface(PHYSICS_PT_rigidbody_panel, Panel @classmethod def poll(cls, context): obj = context.object + if obj.parent is not None and obj.parent.rigid_body is not None: + return False return (obj and obj.rigid_body and (context.engine in cls.COMPAT_ENGINES)) def draw(self, context): @@ -149,6 +179,8 @@ class PHYSICS_PT_rigid_body_collisions_sensitivity(PHYSICS_PT_rigidbody_panel, P @classmethod def poll(cls, context): obj = context.object + if obj.parent is not None and obj.parent.rigid_body is not None and not obj.parent.rigid_body.collision_shape == 'COMPOUND': + return False return (obj and obj.rigid_body and (context.engine in cls.COMPAT_ENGINES)) def draw(self, context): @@ -180,6 +212,8 @@ class PHYSICS_PT_rigid_body_collisions_collections(PHYSICS_PT_rigidbody_panel, P @classmethod def poll(cls, context): obj = context.object + if obj.parent is not None and obj.parent.rigid_body is not None: + return False return (obj and obj.rigid_body and (context.engine in cls.COMPAT_ENGINES)) def draw(self, context): @@ -200,6 +234,8 @@ class PHYSICS_PT_rigid_body_dynamics(PHYSICS_PT_rigidbody_panel, Panel): @classmethod def poll(cls, context): obj = context.object + if obj.parent is not None and obj.parent.rigid_body is not None: + return False return (obj and obj.rigid_body and obj.rigid_body.type == 'ACTIVE' and (context.engine in cls.COMPAT_ENGINES)) diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py index c251d55714f..078b1c9ff38 100644 --- a/release/scripts/startup/bl_ui/space_graph.py +++ b/release/scripts/startup/bl_ui/space_graph.py @@ -293,7 +293,7 @@ class GRAPH_MT_key(Menu): # Using the modal operation doesn't make sense for this variant # as we do not have a modal mode for it, so just execute it. - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("graph.decimate", text="Decimate (Allowed Change)").mode = 'ERROR' layout.operator_context = operator_context diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py index b5926692324..faf4036f9b3 100644 --- a/release/scripts/startup/bl_ui/space_node.py +++ b/release/scripts/startup/bl_ui/space_node.py @@ -275,7 +275,7 @@ class NODE_MT_select(Menu): layout.separator() layout.operator("node.select_all").action = 'TOGGLE' - layout.operator("node.select_all", text="Inverse").action = 'INVERT' + layout.operator("node.select_all", text="Invert").action = 'INVERT' layout.operator("node.select_linked_from") layout.operator("node.select_linked_to") @@ -433,7 +433,7 @@ class NODE_MT_context_menu(Menu): layout.operator("node.delete") layout.operator("node.clipboard_copy", text="Copy") layout.operator("node.clipboard_paste", text="Paste") - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("node.delete_reconnect") diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py index aa4d0b94b7f..5a54d4ca2d8 100644 --- a/release/scripts/startup/bl_ui/space_outliner.py +++ b/release/scripts/startup/bl_ui/space_outliner.py @@ -107,6 +107,14 @@ class OUTLINER_MT_editor_menus(Menu): class OUTLINER_MT_context_menu(Menu): bl_label = "Outliner Context Menu" + @staticmethod + def draw_common_operators(layout): + layout.menu("OUTLINER_MT_context_menu_view") + + layout.separator() + + layout.menu("INFO_MT_area") + def draw(self, context): space = context.space_data @@ -116,11 +124,7 @@ class OUTLINER_MT_context_menu(Menu): OUTLINER_MT_collection_new.draw_without_context_menu(context, layout) layout.separator() - layout.menu("OUTLINER_MT_context_menu_view") - - layout.separator() - - layout.menu("INFO_MT_area") + OUTLINER_MT_context_menu.draw_common_operators(layout) class OUTLINER_MT_context_menu_view(Menu): @@ -242,7 +246,7 @@ class OUTLINER_MT_collection(Menu): layout.separator() - OUTLINER_MT_context_menu.draw(self, context) + OUTLINER_MT_context_menu.draw_common_operators(layout) class OUTLINER_MT_collection_new(Menu): @@ -250,7 +254,7 @@ class OUTLINER_MT_collection_new(Menu): @staticmethod def draw_without_context_menu(context, layout): - layout.operator("outliner.collection_new", text="New Collection").nested = False + layout.operator("outliner.collection_new", text="New Collection").nested = True layout.operator("outliner.id_paste", text="Paste Data-Blocks", icon='PASTEDOWN') def draw(self, context): @@ -260,7 +264,7 @@ class OUTLINER_MT_collection_new(Menu): layout.separator() - OUTLINER_MT_context_menu.draw(self, context) + OUTLINER_MT_context_menu.draw_common_operators(layout) class OUTLINER_MT_object(Menu): @@ -303,11 +307,15 @@ class OUTLINER_MT_object(Menu): layout.operator("outliner.id_operation", text="Unlink").type = 'UNLINK' layout.separator() + layout.operator("outliner.collection_new", text="New Collection").nested = True + + layout.separator() + layout.operator_menu_enum("outliner.id_operation", "type", text="ID Data") layout.separator() - OUTLINER_MT_context_menu.draw(self, context) + OUTLINER_MT_context_menu.draw_common_operators(layout) class OUTLINER_PT_filter(Panel): diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 8dfa182f52d..9f251a9abad 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -796,7 +796,7 @@ class SEQUENCER_MT_context_menu(Menu): props = layout.operator("wm.call_panel", text="Rename...") props.name = "TOPBAR_PT_name" props.keep_open = False - layout.operator("sequencer.delete", text="Delete...") + layout.operator("sequencer.delete", text="Delete") layout.separator() diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 83b3a27154a..38879d41a64 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -1226,22 +1226,32 @@ class _defs_sculpt: @ToolDef.from_fn def mask_border(): + def draw_settings(_context, layout, tool): + props = tool.operator_properties("paint.mask_box_gesture") + layout.prop(props, "use_front_faces_only", expand=False) + return dict( idname="builtin.box_mask", label="Box Mask", icon="ops.sculpt.border_mask", widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn def mask_lasso(): + def draw_settings(_context, layout, tool): + props = tool.operator_properties("paint.mask_lasso_gesture") + layout.prop(props, "use_front_faces_only", expand=False) + return dict( idname="builtin.lasso_mask", label="Lasso Mask", icon="ops.sculpt.lasso_mask", widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn @@ -1257,6 +1267,8 @@ class _defs_sculpt: layout.prop(props, "surface_smooth_current_vertex", expand=False) elif props.type == 'SHARPEN': layout.prop(props, "sharpen_smooth_ratio", expand=False) + layout.prop(props, "sharpen_intensify_detail_strength", expand=False) + layout.prop(props, "sharpen_curvature_smooth_iterations", expand=False) return dict( idname="builtin.mesh_filter", @@ -1276,6 +1288,7 @@ class _defs_sculpt: layout.prop(props, "cloth_mass") layout.prop(props, "cloth_damping") layout.prop(props, "use_face_sets") + layout.prop(props, "use_collisions") return dict( idname="builtin.cloth_filter", @@ -1322,6 +1335,22 @@ class _defs_sculpt: draw_settings=draw_settings, ) + @ToolDef.from_fn + def face_set_edit(): + def draw_settings(_context, layout, tool): + props = tool.operator_properties("sculpt.face_set_edit") + layout.prop(props, "mode", expand=False) + layout.prop(props, "modify_hidden") + + return dict( + idname="builtin.face_set_edit", + label="Edit Face Set", + icon="ops.sculpt.face_set_edit", + widget=None, + keymap="3D View Tool: Sculpt, Face Set Edit", + draw_settings=draw_settings, + ) + class _defs_vertex_paint: @@ -1658,6 +1687,29 @@ class _defs_image_uv_sculpt: class _defs_gpencil_paint: @staticmethod + def gpencil_primitive_toolbar(context, layout, tool, props): + paint = context.tool_settings.gpencil_paint + brush = paint.brush + + if brush is None: + return False + + gp_settings = brush.gpencil_settings + + row = layout.row(align=True) + tool_settings = context.scene.tool_settings + settings = tool_settings.gpencil_paint + row.template_ID_preview(settings, "brush", rows=3, cols=8, hide_buttons=True) + + from bl_ui.properties_paint_common import ( + brush_basic_gpencil_paint_settings, + brush_basic__draw_color_selector, + ) + + brush_basic__draw_color_selector(context, layout, brush, gp_settings, props) + brush_basic_gpencil_paint_settings(layout, context, brush, compact=True) + + @staticmethod def generate_from_brushes(context): return generate_from_enum_ex( context, @@ -1684,6 +1736,10 @@ class _defs_gpencil_paint: @ToolDef.from_fn def line(): + def draw_settings(context, layout, tool): + props = tool.operator_properties("gpencil.primitive_line") + _defs_gpencil_paint.gpencil_primitive_toolbar(context, layout, tool, props) + return dict( idname="builtin.line", label="Line", @@ -1691,10 +1747,15 @@ class _defs_gpencil_paint: cursor='CROSSHAIR', widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn def polyline(): + def draw_settings(context, layout, tool): + props = tool.operator_properties("gpencil.primitive_polyline") + _defs_gpencil_paint.gpencil_primitive_toolbar(context, layout, tool, props) + return dict( idname="builtin.polyline", label="Polyline", @@ -1702,10 +1763,15 @@ class _defs_gpencil_paint: cursor='CROSSHAIR', widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn def box(): + def draw_settings(context, layout, tool): + props = tool.operator_properties("gpencil.primitive_box") + _defs_gpencil_paint.gpencil_primitive_toolbar(context, layout, tool, props) + return dict( idname="builtin.box", label="Box", @@ -1713,10 +1779,15 @@ class _defs_gpencil_paint: cursor='CROSSHAIR', widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn def circle(): + def draw_settings(context, layout, tool): + props = tool.operator_properties("gpencil.primitive_circle") + _defs_gpencil_paint.gpencil_primitive_toolbar(context, layout, tool, props) + return dict( idname="builtin.circle", label="Circle", @@ -1724,10 +1795,15 @@ class _defs_gpencil_paint: cursor='CROSSHAIR', widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn def arc(): + def draw_settings(context, layout, tool): + props = tool.operator_properties("gpencil.primitive_curve") + _defs_gpencil_paint.gpencil_primitive_toolbar(context, layout, tool, props) + return dict( idname="builtin.arc", label="Arc", @@ -1735,10 +1811,15 @@ class _defs_gpencil_paint: cursor='CROSSHAIR', widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn def curve(): + def draw_settings(context, layout, tool): + props = tool.operator_properties("gpencil.primitive_curve") + _defs_gpencil_paint.gpencil_primitive_toolbar(context, layout, tool, props) + return dict( idname="builtin.curve", label="Curve", @@ -1746,6 +1827,7 @@ class _defs_gpencil_paint: cursor='CROSSHAIR', widget=None, keymap=(), + draw_settings=draw_settings, ) @ToolDef.from_fn @@ -2529,6 +2611,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): else () ), None, + _defs_sculpt.face_set_edit, + None, _defs_transform.translate, _defs_transform.rotate, _defs_transform.scale, diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 0a1be2dc698..c251b4bfcac 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -385,19 +385,7 @@ class _draw_tool_settings_context_mode: if tool is None: return False - # is_paint = True - # FIXME: tools must use their own UI drawing! - if tool.idname in { - "builtin.line", - "builtin.box", - "builtin.circle", - "builtin.arc", - "builtin.curve", - "builtin.polyline", - }: - # is_paint = False - pass - elif tool.idname == "builtin.cutter": + if tool.idname == "builtin.cutter": row = layout.row(align=True) row.prop(context.tool_settings.gpencil_sculpt, "intersection_threshold") return False @@ -411,47 +399,16 @@ class _draw_tool_settings_context_mode: gp_settings = brush.gpencil_settings - def draw_color_selector(): - ma = gp_settings.material - row = layout.row(align=True) - if not gp_settings.use_material_pin: - ma = context.object.active_material - icon_id = 0 - if ma: - icon_id = ma.id_data.preview.icon_id - txt_ma = ma.name - maxw = 25 - if len(txt_ma) > maxw: - txt_ma = txt_ma[:maxw - 5] + '..' + txt_ma[-3:] - else: - txt_ma = "" - - sub = row.row() - sub.ui_units_x = 8 - sub.popover( - panel="TOPBAR_PT_gpencil_materials", - text=txt_ma, - icon_value=icon_id, - ) - - row.prop(gp_settings, "use_material_pin", text="") - - if brush.gpencil_tool in {'DRAW', 'FILL'}: - row.separator(factor=1.0) - subrow = row.row(align=True) - row.prop_enum(settings, "color_mode", 'MATERIAL', text="", icon='MATERIAL') - row.prop_enum(settings, "color_mode", 'VERTEXCOLOR', text="", icon='VPAINT_HLT') - sub_row = row.row(align=True) - sub_row.enabled = settings.color_mode == 'VERTEXCOLOR' - sub_row.prop_with_popover(brush, "color", text="", panel="TOPBAR_PT_gpencil_vertexcolor") - row = layout.row(align=True) tool_settings = context.scene.tool_settings settings = tool_settings.gpencil_paint row.template_ID_preview(settings, "brush", rows=3, cols=8, hide_buttons=True) if context.object and brush.gpencil_tool in {'FILL', 'DRAW'}: - draw_color_selector() + from bl_ui.properties_paint_common import ( + brush_basic__draw_color_selector, + ) + brush_basic__draw_color_selector(context, layout, brush, gp_settings, None) if context.object and brush.gpencil_tool == 'TINT': row.separator(factor=0.4) @@ -986,7 +943,7 @@ class VIEW3D_MT_transform_base(Menu): if context.mode != 'OBJECT': layout.operator("transform.vertex_warp", text="Warp") - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("transform.vertex_random", text="Randomize").offset = 0.1 layout.operator_context = 'INVOKE_REGION_WIN' @@ -1551,7 +1508,7 @@ class VIEW3D_MT_edit_mesh_select_by_trait(Menu): layout.separator() - layout.operator("mesh.select_ungrouped", text="Ungrouped Verts") + layout.operator("mesh.select_ungrouped", text="Ungrouped Vertices") class VIEW3D_MT_edit_mesh_select_more_less(Menu): @@ -1813,7 +1770,7 @@ class VIEW3D_MT_select_edit_lattice(Menu): layout.separator() - layout.operator("lattice.select_ungrouped", text="Ungrouped Verts") + layout.operator("lattice.select_ungrouped", text="Ungrouped Vertices") class VIEW3D_MT_select_edit_armature(Menu): @@ -1940,7 +1897,7 @@ class VIEW3D_MT_select_paint_mask_vertex(Menu): layout.separator() - layout.operator("paint.vert_select_ungrouped", text="Ungrouped Verts") + layout.operator("paint.vert_select_ungrouped", text="Ungrouped Vertices") class VIEW3D_MT_angle_control(Menu): @@ -2058,7 +2015,7 @@ class VIEW3D_MT_edit_metaball_context_menu(Menu): layout.separator() # Remove - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("mball.delete_metaelems", text="Delete") @@ -2333,7 +2290,7 @@ class VIEW3D_MT_object(Menu): layout.separator() - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("object.delete", text="Delete").use_global = False layout.operator("object.delete", text="Delete Global").use_global = True @@ -2597,7 +2554,7 @@ class VIEW3D_MT_object_context_menu(Menu): layout.separator() - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("object.delete", text="Delete").use_global = False @@ -2683,7 +2640,7 @@ class VIEW3D_MT_object_parent(Menu): layout.separator() - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("object.parent_no_inverse_set") layout.operator_context = operator_context_default @@ -2774,7 +2731,7 @@ class VIEW3D_MT_make_single_user(Menu): def draw(self, _context): layout = self.layout - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' props = layout.operator("object.make_single_user", text="Object") props.object = True @@ -3688,7 +3645,7 @@ class VIEW3D_MT_edit_mesh_context_menu(Menu): row = layout.row() if is_vert_mode: - col = row.column() + col = row.column(align=True) col.label(text="Vertex Context Menu", icon='VERTEXSEL') col.separator() @@ -3714,7 +3671,7 @@ class VIEW3D_MT_edit_mesh_context_menu(Menu): col.operator("transform.shrink_fatten", text="Shrink/Fatten") col.operator("transform.shear", text="Shear") col.operator("transform.vert_slide", text="Slide Vertices") - col.operator_context = 'EXEC_DEFAULT' + col.operator_context = 'EXEC_REGION_WIN' col.operator("transform.vertex_random", text="Randomize Vertices").offset = 0.1 col.operator("mesh.vertices_smooth", text="Smooth Vertices").factor = 0.5 col.operator_context = 'INVOKE_REGION_WIN' @@ -3738,7 +3695,7 @@ class VIEW3D_MT_edit_mesh_context_menu(Menu): if is_edge_mode: render = context.scene.render - col = row.column() + col = row.column(align=True) col.label(text="Edge Context Menu", icon='EDGESEL') col.separator() @@ -3806,7 +3763,7 @@ class VIEW3D_MT_edit_mesh_context_menu(Menu): col.operator("mesh.delete", text="Delete Edges").type = 'EDGE' if is_face_mode: - col = row.column() + col = row.column(align=True) col.label(text="Face Context Menu", icon='FACESEL') col.separator() @@ -3941,7 +3898,7 @@ class VIEW3D_MT_edit_mesh_vertices(Menu): layout.separator() layout.operator("transform.vert_slide", text="Slide Vertices") - layout.operator_context = 'EXEC_DEFAULT' + 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' @@ -4149,7 +4106,7 @@ class VIEW3D_MT_edit_mesh_normals_select_strength(Menu): class VIEW3D_MT_edit_mesh_normals_set_strength(Menu): - bl_label = "Select by Face Strength" + bl_label = "Set Face Strength" def draw(self, _context): layout = self.layout @@ -4195,7 +4152,7 @@ class VIEW3D_MT_edit_mesh_normals(Menu): layout.operator_context = 'INVOKE_REGION_WIN' layout.operator("transform.rotate_normal", text="Rotate...") layout.operator("mesh.point_normals", text="Point to Target...") - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("mesh.merge_normals", text="Merge") layout.operator("mesh.split_normals", text="Split") @@ -4211,8 +4168,8 @@ class VIEW3D_MT_edit_mesh_normals(Menu): layout.separator() - layout.menu("VIEW3D_MT_edit_mesh_normals_select_strength", text="Select by Face Strength") - layout.menu("VIEW3D_MT_edit_mesh_normals_set_strength", text="Set Face Strength") + layout.menu("VIEW3D_MT_edit_mesh_normals_select_strength") + layout.menu("VIEW3D_MT_edit_mesh_normals_set_strength") class VIEW3D_MT_edit_mesh_shading(Menu): @@ -4662,7 +4619,7 @@ class VIEW3D_MT_edit_meta(Menu): layout.menu("VIEW3D_MT_edit_meta_showhide") - layout.operator_context = 'EXEC_DEFAULT' + layout.operator_context = 'EXEC_REGION_WIN' layout.operator("mball.delete_metaelems", text="Delete") diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index 39e4ee2beac..1b8869d0bc8 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -208,6 +208,10 @@ class VIEW3D_PT_tools_meshedit_options(View3DPanel, Panel): row = layout.row(align=True, heading="Transform") row.prop(tool_settings, "use_transform_correct_face_attributes") + row = layout.row(align=True) + row.active = tool_settings.use_transform_correct_face_attributes + row.prop(tool_settings, "use_transform_correct_keep_connected") + row = layout.row(heading="Mirror") sub = row.row(align=True) sub.prop(mesh, "use_mirror_x", text="X", toggle=True) @@ -1371,6 +1375,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel): bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings' bl_category = "Tool" bl_options = {'DEFAULT_CLOSED'} + bl_ui_units_x = 12 @classmethod def poll(cls, context): @@ -1389,6 +1394,9 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel): col = layout.column(align=True) if brush is not None: + col.prop(gp_settings, "brush_draw_mode") + col.separator() + if brush.gpencil_tool != 'FILL': col.prop(gp_settings, "input_samples") col.separator() @@ -1417,11 +1425,22 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel): row = col.row(align=True) row.prop(gp_settings, "fill_draw_mode", text="Boundary") row.prop(gp_settings, "show_fill_boundary", text="", icon='GRID') + + col.separator() + row = col.row(align=True) + row.prop(gp_settings, "fill_layer_mode", text="Layers") + col.separator() col.prop(gp_settings, "fill_factor", text="Resolution") if gp_settings.fill_draw_mode != 'STROKE': - col.prop(gp_settings, "show_fill", text="Ignore Transparent Strokes") - col.prop(gp_settings, "fill_threshold", text="Threshold") + col = layout.column(align=False, heading="Ignore Transparent") + col.use_property_decorate = False + row = col.row(align=True) + sub = row.row(align=True) + sub.prop(gp_settings, "show_fill", text="") + sub = sub.row(align=True) + sub.active = gp_settings.show_fill + sub.prop(gp_settings, "fill_threshold", text="") class VIEW3D_PT_tools_grease_pencil_brush_stroke(Panel, View3DPanel): diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py index 2c9d7ae769a..f62c2ead144 100644 --- a/release/scripts/startup/nodeitems_builtins.py +++ b/release/scripts/startup/nodeitems_builtins.py @@ -487,7 +487,7 @@ simulation_node_categories = [ NodeItem("SimulationNodeParticleSimulation"), ]), SimulationNodeCategory("SIM_INPUTS", "Input", items=[ - not_implemented_node("SimulationNodeTime"), + NodeItem("SimulationNodeTime"), NodeItem("SimulationNodeParticleAttribute"), NodeItem("FunctionNodeGroupInstanceID"), NodeItem("ShaderNodeValue"), @@ -500,6 +500,7 @@ simulation_node_categories = [ SimulationNodeCategory("SIM_EVENTS", "Events", items=[ NodeItem("SimulationNodeParticleBirthEvent"), NodeItem("SimulationNodeParticleTimeStepEvent"), + NodeItem("SimulationNodeAgeReachedEvent"), not_implemented_node("SimulationNodeParticleMeshCollisionEvent"), ]), SimulationNodeCategory("SIM_FORCES", "Forces", items=[ @@ -508,6 +509,7 @@ simulation_node_categories = [ SimulationNodeCategory("SIM_EXECUTE", "Execute", items=[ NodeItem("SimulationNodeSetParticleAttribute"), NodeItem("SimulationNodeExecuteCondition"), + NodeItem("SimulationNodeKillParticle"), not_implemented_node("SimulationNodeMultiExecute"), ]), SimulationNodeCategory("SIM_NOISE", "Noise", items=[ @@ -537,6 +539,7 @@ simulation_node_categories = [ NodeItem("FunctionNodeFloatCompare"), not_implemented_node("FunctionNodeSwitch"), NodeItem("FunctionNodeCombineStrings"), + NodeItem("FunctionNodeRandomFloat"), ]), SimulationNodeCategory("SIM_GROUP", "Group", items=node_group_items), SimulationNodeCategory("SIM_LAYOUT", "Layout", items=[ |