diff options
author | Jacques Lucke <jacques@blender.org> | 2022-06-30 16:09:13 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2022-06-30 16:09:13 +0300 |
commit | 416aef4e13ccc30e82ecaa691f26af54dbd5ee7e (patch) | |
tree | a4f8e3b96e01031e5f8049b48043ed3208bfe168 /release | |
parent | 0f22b5599a03d5ce61450528c74ad2f2e47cf913 (diff) |
Curves: New tools for curves sculpt mode.
This commit contains various new features for curves sculpt mode
that have been developed in parallel.
* Selection:
* Operator to select points/curves randomly.
* Operator to select endpoints of curves.
* Operator to grow/shrink an existing selection.
* New Brushes:
* Pinch: Moves points towards the brush center.
* Smooth: Makes individual curves straight without changing the root
or tip position.
* Puff: Makes curves stand up, aligning them with the surface normal.
* Density: Add or remove curves to achieve a certain density defined
by a minimum distance value.
* Slide: Move root points on the surface.
Differential Revision: https://developer.blender.org/D15134
Diffstat (limited to 'release')
3 files changed, 79 insertions, 0 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 623ca2340d1..d12d68ee5a0 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -5624,6 +5624,7 @@ def km_sculpt_curves(params): ("curves.disable_selection", {"type": 'TWO', "value": 'PRESS', "alt": True}, None), *_template_paint_radial_control("curves_sculpt"), *_template_items_select_actions(params, "sculpt_curves.select_all"), + ("sculpt_curves.min_distance_edit", {"type": 'R', "value": 'PRESS', "shift": True}, {}), ]) return keymap diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 5831aa52cc1..9f7ca89b8c9 100644 --- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -2377,6 +2377,51 @@ class _defs_curves_sculpt: data_block='GROW_SHRINK' ) + @ToolDef.from_fn + def pinch(): + return dict( + idname="builtin_brush.pinch", + label="Pinch", + icon="ops.curves.sculpt_pinch", + data_block='PINCH' + ) + + @ToolDef.from_fn + def smooth(): + return dict( + idname="builtin_brush.smooth", + label="Smooth", + icon="ops.curves.sculpt_smooth", + data_block='SMOOTH' + ) + + @ToolDef.from_fn + def puff(): + return dict( + idname="builtin_brush.puff", + label="Puff", + icon="ops.curves.sculpt_puff", + data_block='PUFF' + ) + + @ToolDef.from_fn + def density(): + return dict( + idname="builtin_brush.density", + label="Density", + icon="ops.curves.sculpt_density", + data_block="DENSITY" + ) + + @ToolDef.from_fn + def slide(): + return dict( + idname="builtin_brush.slide", + label="Slide", + icon="ops.curves.sculpt_slide", + data_block="SLIDE" + ) + class _defs_gpencil_vertex: @@ -3140,6 +3185,11 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_curves_sculpt.delete, _defs_curves_sculpt.snake_hook, _defs_curves_sculpt.grow_shrink, + _defs_curves_sculpt.pinch, + _defs_curves_sculpt.smooth, + _defs_curves_sculpt.puff, + _defs_curves_sculpt.density, + _defs_curves_sculpt.slide, None, *_tools_annotate, ], diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 411bad65991..c2342e8949a 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -535,6 +535,31 @@ class _draw_tool_settings_context_mode: layout.prop(brush, "direction", expand=True, text="") layout.prop(brush, "falloff_shape", expand=True) layout.popover("VIEW3D_PT_tools_brush_falloff") + elif curves_tool == 'PINCH': + layout.prop(brush, "direction", expand=True, text="") + layout.prop(brush, "falloff_shape", expand=True) + layout.popover("VIEW3D_PT_tools_brush_falloff") + elif curves_tool == 'SMOOTH': + layout.prop(brush, "falloff_shape", expand=True) + layout.popover("VIEW3D_PT_tools_brush_falloff") + elif curves_tool == 'PUFF': + layout.prop(brush, "falloff_shape", expand=True) + layout.popover("VIEW3D_PT_tools_brush_falloff") + elif curves_tool == 'DENSITY': + layout.prop(brush, "falloff_shape", expand=True) + row = layout.row(align=True) + row.prop(brush.curves_sculpt_settings, "density_mode", text="", expand=True) + row = layout.row(align=True) + row.prop(brush.curves_sculpt_settings, "minimum_distance") + row.operator_context = 'INVOKE_REGION_WIN' + row.operator("sculpt_curves.min_distance_edit", text="", icon='DRIVER_DISTANCE') + row = layout.row(align=True) + row.enabled = brush.curves_sculpt_settings.density_mode != 'REMOVE' + row.prop(brush.curves_sculpt_settings, "density_add_attempts", text="Max Count") + layout.popover("VIEW3D_PT_tools_brush_falloff") + layout.popover("VIEW3D_PT_curves_sculpt_add_shape", text="Curve Shape") + elif curves_tool == "SLIDE": + layout.popover("VIEW3D_PT_tools_brush_falloff") class VIEW3D_HT_header(Header): @@ -2005,6 +2030,9 @@ class VIEW3D_MT_select_sculpt_curves(Menu): layout.operator("sculpt_curves.select_all", text="All").action = 'SELECT' layout.operator("sculpt_curves.select_all", text="None").action = 'DESELECT' layout.operator("sculpt_curves.select_all", text="Invert").action = 'INVERT' + layout.operator("sculpt_curves.select_random", text="Random") + layout.operator("sculpt_curves.select_end", text="Endpoints") + layout.operator("sculpt_curves.select_grow", text="Grow") class VIEW3D_MT_angle_control(Menu): |