From 3c67ae7785409100425c551751c4fe8462132cf5 Mon Sep 17 00:00:00 2001 From: casey bianco-davis Date: Fri, 13 Sep 2024 16:56:51 +0200 Subject: [PATCH] GPv3: Rename `Cutter` tool to `Trim` This rename the `Cutter` tool's name, code and icon to `Trim`. The legacy Grease Pencil code is unchanged. This was discussed in the 2024-07-30 Grease Pencil Module Meeting. Reasons for the change: - Match the `Trim Stroke Ends` setting on brushes. - Match the `stroke_trim` operator. - Name is more clear and more commonly used. - Frees the name for a future boolean cutting tool. Pull Request: https://projects.blender.org/blender/blender/pulls/126452 --- ...cutter.dat => ops.gpencil.stroke_trim.dat} | Bin .../keyconfig/keymap_data/blender_default.py | 8 +- .../startup/bl_ui/space_toolsystem_toolbar.py | 10 +- .../blender/editors/datafiles/CMakeLists.txt | 2 +- .../editors/grease_pencil/CMakeLists.txt | 2 +- .../intern/grease_pencil_edit.cc | 2 +- .../intern/grease_pencil_geom.cc | 120 +++++++++--------- ...pencil_cutter.cc => grease_pencil_trim.cc} | 80 ++++++------ .../editors/include/ED_grease_pencil.hh | 6 +- .../sculpt_paint/grease_pencil_paint.cc | 2 +- 10 files changed, 116 insertions(+), 116 deletions(-) rename release/datafiles/icons/{ops.gpencil.stroke_cutter.dat => ops.gpencil.stroke_trim.dat} (100%) rename source/blender/editors/grease_pencil/intern/{grease_pencil_cutter.cc => grease_pencil_trim.cc} (76%) diff --git a/release/datafiles/icons/ops.gpencil.stroke_cutter.dat b/release/datafiles/icons/ops.gpencil.stroke_trim.dat similarity index 100% rename from release/datafiles/icons/ops.gpencil.stroke_cutter.dat rename to release/datafiles/icons/ops.gpencil.stroke_trim.dat diff --git a/scripts/presets/keyconfig/keymap_data/blender_default.py b/scripts/presets/keyconfig/keymap_data/blender_default.py index 20c86a4b329..f5fc529280c 100644 --- a/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -8638,12 +8638,12 @@ def km_3d_view_tool_paint_gpencil_cutter(params): ) -def km_3d_view_tool_paint_grease_pencil_cutter(params): +def km_3d_view_tool_paint_grease_pencil_trim(params): return ( - "3D View Tool: Paint Grease Pencil, Cutter", + "3D View Tool: Paint Grease Pencil, Trim", {"space_type": 'VIEW_3D', "region_type": 'WINDOW'}, {"items": [ - ("grease_pencil.stroke_cutter", {"type": params.tool_mouse, "value": 'PRESS'}, None), + ("grease_pencil.stroke_trim", {"type": params.tool_mouse, "value": 'PRESS'}, None), ]}, ) @@ -9377,7 +9377,7 @@ def generate_keymaps(params=None): for fallback in (False, True)), *(km_sequencer_editor_tool_generic_select_box_preview(params, fallback=fallback) for fallback in (False, True)), - km_3d_view_tool_paint_grease_pencil_cutter(params), + km_3d_view_tool_paint_grease_pencil_trim(params), km_sequencer_editor_tool_generic_cursor(params), km_sequencer_editor_tool_blade(params), km_sequencer_editor_tool_sample(params), diff --git a/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/scripts/startup/bl_ui/space_toolsystem_toolbar.py index 1db8aef7e2a..d24d590cc5b 100644 --- a/scripts/startup/bl_ui/space_toolsystem_toolbar.py +++ b/scripts/startup/bl_ui/space_toolsystem_toolbar.py @@ -2052,7 +2052,7 @@ class _defs_grease_pencil_paint: ] @ToolDef.from_fn - def cutter(): + def trim(): def draw_settings(context, layout, _tool): brush = context.tool_settings.gpencil_paint.brush gp_settings = brush.gpencil_settings @@ -2062,9 +2062,9 @@ class _defs_grease_pencil_paint: row.prop(gp_settings, "use_active_layer_only") return dict( - idname="builtin.cutter", - label="Cutter", - icon="ops.gpencil.stroke_cutter", + idname="builtin.trim", + label="Trim", + icon="ops.gpencil.stroke_trim", cursor='KNIFE', keymap=(), draw_settings=draw_settings, @@ -3846,7 +3846,7 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel): _defs_view3d_generic.cursor, None, _defs_grease_pencil_paint.generate_from_brushes, - _defs_grease_pencil_paint.cutter, + _defs_grease_pencil_paint.trim, None, _defs_grease_pencil_paint.eyedropper, None, diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt index 31c2c2a5f2d..d57ac3deba0 100644 --- a/source/blender/editors/datafiles/CMakeLists.txt +++ b/source/blender/editors/datafiles/CMakeLists.txt @@ -69,7 +69,7 @@ set_property(GLOBAL PROPERTY ICON_GEOM_NAMES ops.gpencil.primitive_line ops.gpencil.primitive_polyline ops.gpencil.radius - ops.gpencil.stroke_cutter + ops.gpencil.stroke_trim ops.gpencil.transform_fill ops.mesh.bevel ops.mesh.bisect diff --git a/source/blender/editors/grease_pencil/CMakeLists.txt b/source/blender/editors/grease_pencil/CMakeLists.txt index d0ccfcbbf93..38c7c304ddc 100644 --- a/source/blender/editors/grease_pencil/CMakeLists.txt +++ b/source/blender/editors/grease_pencil/CMakeLists.txt @@ -24,7 +24,6 @@ set(INC_SYS set(SRC intern/grease_pencil_add.cc - intern/grease_pencil_cutter.cc intern/grease_pencil_edit.cc intern/grease_pencil_frames.cc intern/grease_pencil_geom.cc @@ -35,6 +34,7 @@ set(SRC intern/grease_pencil_ops.cc intern/grease_pencil_primitive.cc intern/grease_pencil_select.cc + intern/grease_pencil_trim.cc intern/grease_pencil_undo.cc intern/grease_pencil_utils.cc intern/grease_pencil_vertex_paint.cc diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc index a2e5247de3e..85486029a01 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc @@ -3186,7 +3186,7 @@ void ED_operatortypes_grease_pencil_edit() WM_operatortype_append(GREASE_PENCIL_OT_copy); WM_operatortype_append(GREASE_PENCIL_OT_paste); WM_operatortype_append(GREASE_PENCIL_OT_stroke_merge_by_distance); - WM_operatortype_append(GREASE_PENCIL_OT_stroke_cutter); + WM_operatortype_append(GREASE_PENCIL_OT_stroke_trim); WM_operatortype_append(GREASE_PENCIL_OT_extrude); WM_operatortype_append(GREASE_PENCIL_OT_snap_to_grid); WM_operatortype_append(GREASE_PENCIL_OT_snap_to_cursor); diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_geom.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_geom.cc index 85dc711811b..ac2775f5b15 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_geom.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_geom.cc @@ -825,7 +825,7 @@ bke::CurvesGeometry create_curves_outline(const bke::greasepencil::Drawing &draw return dst_curves; } -namespace cutter { +namespace trim { enum Side : uint8_t { Start = 0, End = 1 }; enum Distance : uint8_t { Min = 0, Max = 1 }; @@ -850,8 +850,8 @@ struct Segment { * in a CurvesGeometry. */ int point_range[2]; - /* The normalized distance where the cutter segment is intersected by another curve. - * For the outer ends of the cutter segment the intersection distance is given between: + /* The normalized distance where the trim segment is intersected by another curve. + * For the outer ends of the trim segment the intersection distance is given between: * - [start point - 1] and [start point] * - [end point] and [end point + 1] */ @@ -864,14 +864,14 @@ struct Segment { /** * Structure describing: - * - A collection of cutter segments. + * - A collection of trim segments. */ struct Segments { - /* Collection of cutter segments: parts of curves between other curves, to be removed from the + /* Collection of trim segments: parts of curves between other curves, to be removed from the * geometry. */ Vector segments; - /* Create an initial cutter segment with a point range of one point. */ + /* Create an initial trim segment with a point range of one point. */ Segment *create_segment(const int curve, const int point) { Segment segment{}; @@ -884,7 +884,7 @@ struct Segments { return &this->segments.last(); } - /* Merge cutter segments that are next to each other. */ + /* Merge trim segments that are next to each other. */ void merge_adjacent_segments() { Vector merged_segments; @@ -1072,15 +1072,15 @@ static void get_intersections_of_curve_with_curves(const int src_curve, } /** - * Expand a cutter segment by walking along the curve in forward or backward direction. - * A cutter segments ends at an intersection with another curve, or at the outer end of the curve. + * Expand a trim segment by walking along the curve in forward or backward direction. + * A trim segments ends at an intersection with another curve, or at the outer end of the curve. */ -static void expand_cutter_segment_direction(Segment &segment, - const int direction, - const bke::CurvesGeometry &src, - const Span is_intersected_after_point, - const Span intersection_distance, - MutableSpan point_is_in_segment) +static void expand_trim_segment_direction(Segment &segment, + const int direction, + const bke::CurvesGeometry &src, + const Span is_intersected_after_point, + const Span intersection_distance, + MutableSpan point_is_in_segment) { const OffsetIndices points_by_curve = src.points_by_curve(); const int point_first = points_by_curve[segment.curve].first(); @@ -1149,22 +1149,22 @@ static void expand_cutter_segment_direction(Segment &segment, } /** - * Expand a cutter segment of one point by walking along the curve in both directions. + * Expand a trim segment of one point by walking along the curve in both directions. */ -static void expand_cutter_segment(Segment &segment, - const bke::CurvesGeometry &src, - const Span is_intersected_after_point, - const Span intersection_distance, - MutableSpan point_is_in_segment) +static void expand_trim_segment(Segment &segment, + const bke::CurvesGeometry &src, + const Span is_intersected_after_point, + const Span intersection_distance, + MutableSpan point_is_in_segment) { const int8_t directions[2] = {-1, 1}; for (const int8_t direction : directions) { - expand_cutter_segment_direction(segment, - direction, - src, - is_intersected_after_point, - intersection_distance, - point_is_in_segment); + expand_trim_segment_direction(segment, + direction, + src, + is_intersected_after_point, + intersection_distance, + point_is_in_segment); } } @@ -1190,28 +1190,28 @@ bke::CurvesGeometry trim_curve_segments(const bke::CurvesGeometry &src, intersection_distance); }); - /* Expand the selected curve points to cutter segments (the part of the curve between two + /* Expand the selected curve points to trim segments (the part of the curve between two * intersections). */ const VArray is_cyclic = src.cyclic(); Array point_is_in_segment(src_points_num, false); - threading::EnumerableThreadSpecific cutter_segments_by_thread; + threading::EnumerableThreadSpecific trim_segments_by_thread; curve_selection.foreach_index(GrainSize(32), [&](const int curve_i, const int pos) { - Segments &thread_segments = cutter_segments_by_thread.local(); + Segments &thread_segments = trim_segments_by_thread.local(); for (const int selected_point : selected_points_in_curves[pos]) { - /* Skip point when it is already part of a cutter segment. */ + /* Skip point when it is already part of a trim segment. */ if (point_is_in_segment[selected_point]) { continue; } - /* Create new cutter segment. */ + /* Create new trim segment. */ Segment *segment = thread_segments.create_segment(curve_i, selected_point); - /* Expand the cutter segment in both directions until an intersection is found or the + /* Expand the trim segment in both directions until an intersection is found or the * end of the curve is reached. */ - expand_cutter_segment( + expand_trim_segment( *segment, src, is_intersected_after_point, intersection_distance, point_is_in_segment); - /* When the end of a curve is reached and the curve is cyclic, we add an extra cutter + /* When the end of a curve is reached and the curve is cyclic, we add an extra trim * segment for the cyclic second part. */ if (is_cyclic[curve_i] && (!segment->is_intersected[Side::Start] || !segment->is_intersected[Side::End]) && @@ -1223,28 +1223,28 @@ bke::CurvesGeometry trim_curve_segments(const bke::CurvesGeometry &src, segment = thread_segments.create_segment(curve_i, cyclic_outer_point); /* Expand this second segment. */ - expand_cutter_segment( + expand_trim_segment( *segment, src, is_intersected_after_point, intersection_distance, point_is_in_segment); } } }); - Segments cutter_segments; - for (Segments &thread_segments : cutter_segments_by_thread) { - cutter_segments.segments.extend(thread_segments.segments); + Segments trim_segments; + for (Segments &thread_segments : trim_segments_by_thread) { + trim_segments.segments.extend(thread_segments.segments); } - /* Abort when no cutter segments are found in the lasso area. */ + /* Abort when no trim segments are found in the lasso area. */ bke::CurvesGeometry dst; - if (cutter_segments.segments.is_empty()) { + if (trim_segments.segments.is_empty()) { return dst; } - /* Merge adjacent cutter segments. E.g. two point ranges of 0-10 and 11-20 will be merged + /* Merge adjacent trim segments. E.g. two point ranges of 0-10 and 11-20 will be merged * to one range of 0-20. */ - cutter_segments.merge_adjacent_segments(); + trim_segments.merge_adjacent_segments(); /* Create the point transfer data, for converting the source geometry into the new geometry. - * First, add all curve points not affected by the cutter tool. */ + * First, add all curve points not affected by the trim tool. */ Array> src_to_dst_points(src_points_num); for (const int src_curve : src.curves_range()) { const IndexRange src_points = src_points_by_curve[src_curve]; @@ -1253,19 +1253,19 @@ bke::CurvesGeometry trim_curve_segments(const bke::CurvesGeometry &src, const int src_next_point = (src_point == src_points.last()) ? src_points.first() : (src_point + 1); - /* Add the source point only if it does not lie inside a cutter segment. */ + /* Add the source point only if it does not lie inside a trim segment. */ if (!point_is_in_segment[src_point]) { dst_points.append({src_point, src_next_point, 0.0f, true, false}); } } } - /* Add new curve points at the intersection points of the cutter segments. + /* Add new curve points at the intersection points of the trim segments. * * a b * source curve o--------o---*---o--------o----*---o--------o * ^ ^ - * cutter segment |-----------------| + * trim segment |-----------------| * * o = existing curve point * * = newly created curve point @@ -1278,33 +1278,33 @@ bke::CurvesGeometry trim_curve_segments(const bke::CurvesGeometry &src, * We avoid inserting a new point very close to the adjacent one, because that's just adding * clutter to the geometry. */ - for (const Segment &cutter_segment : cutter_segments.segments) { - /* Intersection at cutter segment start. */ - if (cutter_segment.is_intersected[Side::Start] && - cutter_segment.intersection_distance[Side::Start] > DISTANCE_FACTOR_THRESHOLD) + for (const Segment &trim_segment : trim_segments.segments) { + /* Intersection at trim segment start. */ + if (trim_segment.is_intersected[Side::Start] && + trim_segment.intersection_distance[Side::Start] > DISTANCE_FACTOR_THRESHOLD) { - const int src_point = cutter_segment.point_range[Side::Start] - 1; + const int src_point = trim_segment.point_range[Side::Start] - 1; Vector &dst_points = src_to_dst_points[src_point]; dst_points.append({src_point, src_point + 1, - cutter_segment.intersection_distance[Side::Start], + trim_segment.intersection_distance[Side::Start], false, false}); } - /* Intersection at cutter segment end. */ - if (cutter_segment.is_intersected[Side::End]) { - const int src_point = cutter_segment.point_range[Side::End]; - if (cutter_segment.intersection_distance[Side::End] < (1.0f - DISTANCE_FACTOR_THRESHOLD)) { + /* Intersection at trim segment end. */ + if (trim_segment.is_intersected[Side::End]) { + const int src_point = trim_segment.point_range[Side::End]; + if (trim_segment.intersection_distance[Side::End] < (1.0f - DISTANCE_FACTOR_THRESHOLD)) { Vector &dst_points = src_to_dst_points[src_point]; dst_points.append({src_point, src_point + 1, - cutter_segment.intersection_distance[Side::End], + trim_segment.intersection_distance[Side::End], false, true}); } else { /* Mark the 'is_cut' flag on the next point, because a new curve is starting here after - * the removed cutter segment. */ + * the removed trim segment. */ Vector &dst_points = src_to_dst_points[src_point + 1]; for (PointTransferData &dst_point : dst_points) { if (dst_point.is_src_point) { @@ -1321,7 +1321,7 @@ bke::CurvesGeometry trim_curve_segments(const bke::CurvesGeometry &src, return dst; } -} // namespace cutter +} // namespace trim Curves2DBVHTree build_curves_2d_bvh_from_visible(const ViewContext &vc, const Object &object, diff --git a/source/blender/editors/grease_pencil/intern/grease_pencil_cutter.cc b/source/blender/editors/grease_pencil/intern/grease_pencil_trim.cc similarity index 76% rename from source/blender/editors/grease_pencil/intern/grease_pencil_cutter.cc rename to source/blender/editors/grease_pencil/intern/grease_pencil_trim.cc index 67f72cbb332..c9d9c6552a0 100644 --- a/source/blender/editors/grease_pencil/intern/grease_pencil_cutter.cc +++ b/source/blender/editors/grease_pencil/intern/grease_pencil_trim.cc @@ -35,17 +35,17 @@ namespace blender::ed::greasepencil { static constexpr int BBOX_PADDING = 2; /** - * Apply the stroke cutter to a drawing. + * Apply the stroke trim to a drawing. */ -static bool execute_cutter_on_drawing(const int layer_index, - const int frame_number, - const Object &ob_eval, - const Object &obact, - const ARegion ®ion, - const float4x4 &projection, - const Span mcoords, - const bool keep_caps, - bke::greasepencil::Drawing &drawing) +static bool execute_trim_on_drawing(const int layer_index, + const int frame_number, + const Object &ob_eval, + const Object &obact, + const ARegion ®ion, + const float4x4 &projection, + const Span mcoords, + const bool keep_caps, + bke::greasepencil::Drawing &drawing) { const bke::CurvesGeometry &src = drawing.strokes(); const OffsetIndices src_points_by_curve = src.points_by_curve(); @@ -122,8 +122,8 @@ static bool execute_cutter_on_drawing(const int layer_index, return false; } - /* Apply cutter. */ - bke::CurvesGeometry cut_strokes = ed::greasepencil::cutter::trim_curve_segments( + /* Apply trim. */ + bke::CurvesGeometry cut_strokes = ed::greasepencil::trim::trim_curve_segments( src, screen_space_positions, screen_space_bbox, @@ -139,9 +139,9 @@ static bool execute_cutter_on_drawing(const int layer_index, } /** - * Apply the stroke cutter to all layers. + * Apply the stroke trim to all layers. */ -static int stroke_cutter_execute(const bContext *C, const Span mcoords) +static int stroke_trim_execute(const bContext *C, const Span mcoords) { const Scene *scene = CTX_data_scene(C); const ARegion *region = CTX_wm_region(C); @@ -162,7 +162,7 @@ static int stroke_cutter_execute(const bContext *C, const Span mcoords) std::atomic changed = false; if (active_layer_only) { - /* Apply cutter on drawings of active layer. */ + /* Apply trim on drawings of active layer. */ if (!grease_pencil.has_active_layer()) { return OPERATOR_CANCELLED; } @@ -172,37 +172,37 @@ static int stroke_cutter_execute(const bContext *C, const Span mcoords) const Vector drawings = ed::greasepencil::retrieve_editable_drawings_from_layer(*scene, grease_pencil, layer); threading::parallel_for_each(drawings, [&](const ed::greasepencil::MutableDrawingInfo &info) { - if (execute_cutter_on_drawing(info.layer_index, - info.frame_number, - *ob_eval, - *obact, - *region, - projection, - mcoords, - keep_caps, - info.drawing)) + if (execute_trim_on_drawing(info.layer_index, + info.frame_number, + *ob_eval, + *obact, + *region, + projection, + mcoords, + keep_caps, + info.drawing)) { changed = true; } }); } else { - /* Apply cutter on every editable drawing. */ + /* Apply trim on every editable drawing. */ const Vector drawings = ed::greasepencil::retrieve_editable_drawings(*scene, grease_pencil); threading::parallel_for_each(drawings, [&](const ed::greasepencil::MutableDrawingInfo &info) { const bke::greasepencil::Layer &layer = *grease_pencil.layer(info.layer_index); const float4x4 layer_to_world = layer.to_world_space(*ob_eval); const float4x4 projection = ED_view3d_ob_project_mat_get_from_obmat(rv3d, layer_to_world); - if (execute_cutter_on_drawing(info.layer_index, - info.frame_number, - *ob_eval, - *obact, - *region, - projection, - mcoords, - keep_caps, - info.drawing)) + if (execute_trim_on_drawing(info.layer_index, + info.frame_number, + *ob_eval, + *obact, + *region, + projection, + mcoords, + keep_caps, + info.drawing)) { changed = true; } @@ -217,7 +217,7 @@ static int stroke_cutter_execute(const bContext *C, const Span mcoords) return OPERATOR_FINISHED; } -static int grease_pencil_stroke_cutter(bContext *C, wmOperator *op) +static int grease_pencil_stroke_trim(bContext *C, wmOperator *op) { const Array mcoords = WM_gesture_lasso_path_to_array(C, op); @@ -225,22 +225,22 @@ static int grease_pencil_stroke_cutter(bContext *C, wmOperator *op) return OPERATOR_PASS_THROUGH; } - return stroke_cutter_execute(C, mcoords); + return stroke_trim_execute(C, mcoords); } } // namespace blender::ed::greasepencil -void GREASE_PENCIL_OT_stroke_cutter(wmOperatorType *ot) +void GREASE_PENCIL_OT_stroke_trim(wmOperatorType *ot) { using namespace blender::ed::greasepencil; - ot->name = "Grease Pencil Cutter"; - ot->idname = "GREASE_PENCIL_OT_stroke_cutter"; + ot->name = "Grease Pencil Trim"; + ot->idname = "GREASE_PENCIL_OT_stroke_trim"; ot->description = "Delete stroke points in between intersecting strokes"; ot->invoke = WM_gesture_lasso_invoke; ot->modal = WM_gesture_lasso_modal; - ot->exec = grease_pencil_stroke_cutter; + ot->exec = grease_pencil_stroke_trim; ot->poll = grease_pencil_painting_poll; ot->cancel = WM_gesture_lasso_cancel; diff --git a/source/blender/editors/include/ED_grease_pencil.hh b/source/blender/editors/include/ED_grease_pencil.hh index a3c5fb35676..5de4c5818b4 100644 --- a/source/blender/editors/include/ED_grease_pencil.hh +++ b/source/blender/editors/include/ED_grease_pencil.hh @@ -73,7 +73,7 @@ void ED_primitivetool_modal_keymap(wmKeyConfig *keyconf); void ED_filltool_modal_keymap(wmKeyConfig *keyconf); void ED_interpolatetool_modal_keymap(wmKeyConfig *keyconf); -void GREASE_PENCIL_OT_stroke_cutter(wmOperatorType *ot); +void GREASE_PENCIL_OT_stroke_trim(wmOperatorType *ot); void ED_undosys_type_grease_pencil(UndoType *undo_type); @@ -821,14 +821,14 @@ bool apply_mask_as_segment_selection(bke::CurvesGeometry &curves, GrainSize grain_size, eSelectOp sel_op); -namespace cutter { +namespace trim { bke::CurvesGeometry trim_curve_segments(const bke::CurvesGeometry &src, Span screen_space_positions, Span screen_space_curve_bounds, const IndexMask &curve_selection, const Vector> &selected_points_in_curves, bool keep_caps); -}; // namespace cutter +}; // namespace trim /* Lineart */ diff --git a/source/blender/editors/sculpt_paint/grease_pencil_paint.cc b/source/blender/editors/sculpt_paint/grease_pencil_paint.cc index 2c0cd170cee..1d17e763b78 100644 --- a/source/blender/editors/sculpt_paint/grease_pencil_paint.cc +++ b/source/blender/editors/sculpt_paint/grease_pencil_paint.cc @@ -1183,7 +1183,7 @@ static void trim_stroke_ends(bke::greasepencil::Drawing &drawing, /* Use the first and last point. */ const Vector> point_selection = {{0, int(points.index_range().last())}}; /* Trim the stroke ends by finding self intersections using the screen space positions. */ - bke::CurvesGeometry stroke_trimmed = ed::greasepencil::cutter::trim_curve_segments( + bke::CurvesGeometry stroke_trimmed = ed::greasepencil::trim::trim_curve_segments( stroke, screen_space_positions, {screen_space_bounds},