Commit: a238533550195a4260d5a10d1228a27a632dee6c Author: Joseph Eagar Date: Fri Dec 30 15:12:22 2022 -0800 Branches: temp-sculpt-roll-mapping https://developer.blender.org/rBa238533550195a4260d5a10d1228a27a632dee6c
temp-sculpt-roll-mapping: Visualization improvements * Only draw curve line at start of stroke * Fixed dash =================================================================== M source/blender/editors/sculpt_paint/paint_stroke.cc M source/blender/editors/sculpt_paint/sculpt.cc =================================================================== diff --git a/source/blender/editors/sculpt_paint/paint_stroke.cc b/source/blender/editors/sculpt_paint/paint_stroke.cc index fdf8343c48b..c45230118ae 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.cc +++ b/source/blender/editors/sculpt_paint/paint_stroke.cc @@ -49,7 +49,7 @@ #include <math.h> //#define DEBUG_TIME -#define DRAW_DEBUG_VIS +//#define DRAW_DEBUG_VIS using blender::float2; using blender::float3; @@ -271,34 +271,20 @@ static void paint_brush_make_spline(bContext *C, PaintStroke *stroke) float tmp1[2]; float tmp2[2]; -#if 1 + sub_v2_v2v2(tmp1, d, a); sub_v2_v2v2(tmp2, a, b); interp_v2_v2v2(b, tmp1, tmp2, 0.5f); mul_v2_fl(b, scale); -#else - zero_v2(b); -#endif add_v2_v2(b, a); -#if 1 sub_v2_v2v2(tmp1, a, d); sub_v2_v2v2(tmp2, d, c); interp_v2_v2v2(c, tmp1, tmp2, 0.5f); mul_v2_fl(c, scale); -#else - zero_v2(c); -#endif add_v2_v2(c, d); -#if 0 - printf("\n"); - printf("a: %.2f: %.2f\n", a[0], a[1]); - printf("b: %.2f: %.2f\n", b[0], b[1]); - printf("c: %.2f: %.2f\n", c[0], c[1]); - printf("d: %.2f: %.2f\n", d[0], d[1]); -#endif blender::CubicBezier<float, 2> bez(a, b, c, d); bez.update(); @@ -320,7 +306,6 @@ static void paint_brush_make_spline(bContext *C, PaintStroke *stroke) } } -#ifdef DRAW_DEBUG_VIS static void paint_brush_cubic_vis(const bContext *C, ARegion *region, void *userdata) { PaintStroke *stroke = (PaintStroke *)userdata; @@ -336,6 +321,12 @@ static void paint_brush_cubic_vis(const bContext *C, ARegion *region, void *user return; } +#ifndef DRAW_DEBUG_VIS + if (spline->segments.size() == paint_stroke_max_points(nullptr, stroke)) { + return; + } +#endif + GPU_line_smooth(false); GPU_depth_test(GPU_DEPTH_NONE); GPU_depth_mask(false); @@ -352,7 +343,7 @@ static void paint_brush_cubic_vis(const bContext *C, ARegion *region, void *user immBegin(GPU_PRIM_LINE_STRIP, steps); float s = 0.0f; - float ds = 0.999 * spline->length / (steps - 1); + float ds = 0.99999f * spline->length / (steps - 1); for (int i = 0; i < steps; i++, s += ds) { float3 co = spline->evaluate(s); @@ -362,9 +353,10 @@ static void paint_brush_cubic_vis(const bContext *C, ARegion *region, void *user } immEnd(); -# if 0 // control points +/* Control points. */ +#if defined(DRAW_DEBUG_VIS) && 0 immUniformColor4ub(255, 0, 0, 170); - int components = spline->components(); + int components = spline->order(); immBegin(GPU_PRIM_POINTS, spline->segments.size() * components); @@ -378,9 +370,9 @@ static void paint_brush_cubic_vis(const bContext *C, ARegion *region, void *user } immEnd(); -# endif +#endif -# if 1 // inflection points +#if defined(DRAW_DEBUG_VIS) && 1 /* Inflection points. */ immUniformColor4ub(0, 255, 0, 100); immBegin(GPU_PRIM_POINTS, spline->inflection_points.size()); @@ -392,44 +384,13 @@ static void paint_brush_cubic_vis(const bContext *C, ARegion *region, void *user } immEnd(); -# endif - -# if 0 - s = 0.0f; - ds = 0.1f; - steps = (int)floorf(spline->length / ds + 0.5f); - - immUniformColor4ub(255, 0, 0, 170); - immBegin(GPU_PRIM_POINTS, steps); - for (int i = 0; i < steps; i++, s += ds) { - float3 co = spline->evaluate(s); - mul_v3_m4v3(co, ob->object_to_world, co); - - immVertex3fv(pos, co); - } - - immEnd(); - - immUniformColor4ub(0, 255, 25, 55); - for (int is_points = 0; is_points < 2; is_points++) { - immBegin(is_points ? GPU_PRIM_POINTS : GPU_PRIM_LINE_STRIP, stroke->num_points); - for (int i = 0; i < stroke->num_points; i++) { - int idx = (i + stroke->cur_point) % stroke->num_points; - float3 co = stroke->points[idx].location; - mul_v3_m4v3(co, ob->object_to_world, co); - - immVertex3fv(pos, co); - } - immEnd(); - } -# endif +#endif immUnbindProgram(); GPU_blend(GPU_BLEND_NONE); GPU_line_smooth(false); } -#endif /*** Cursors ***/ static void paint_draw_smooth_cursor(bContext *C, int x, int y, void *customdata) @@ -919,74 +880,80 @@ static void paint_brush_stroke_add_step( } } - /* Add to stroke */ - if (add_step) { - PaintStrokePoint *point; - PaintStrokePoint temp; + paint_stroke_add_point(paint, + stroke, + mval, + mouse_out, + location, + ups->pixel_radius, + pressure, + stroke->pen_flip, + stroke->x_tilt, + stroke->y_tilt); - int n = 1; - int max_points = paint_stroke_max_points(paint, stroke); + if (stroke->need_roll_mapping) { + paint_brush_make_spline(C, stroke); + } - if (stroke->num_points < max_points) { - // n = max_points - stroke->num_points; - } - for (int i = 0; i < n; i++) { - paint_stroke_add_point(paint, - stroke, - mval, - mouse_out, - location, - ups->pixel_radius, - pressure, - stroke->pen_flip, - stroke->x_tilt, - stroke->y_tilt); - if (stroke->need_roll_mapping) { - paint_brush_make_spline(C, stroke); - } + if (!add_step) { + ARegion *region = CTX_wm_region(C); + if (region) { + ED_region_tag_redraw(region); } - if (stroke->need_roll_mapping) { - if (stroke->spline->segments.size() < paint_stroke_max_points(paint, stroke)) { - return; - } - - int cur = stroke->cur_point - (paint_stroke_max_points(paint, stroke) >> 1) - 2; - cur = (cur + stroke->num_points) % stroke->num_points; + stroke->tot_samples++; + return; + } - PaintStrokePoint *p1 = stroke->points + ((cur + stroke->num_points) % stroke->num_points); - PaintStrokePoint *p2 = stroke->points + - ((cur - 1 + stroke->num_points) % stroke->num_points); + /* Add to stroke */ + PaintStrokePoint *point; + PaintStrokePoint temp; - point = &temp; - temp = *p1; + if (stroke->need_roll_mapping) { + if (stroke->spline->segments.size() < paint_stroke_max_points(paint, stroke)) { + ARegion *region = CTX_wm_region(C); + if (region) { + ED_region_tag_redraw(region); + } - interp_v3_v3v3(temp.location, p1->location, p2->location, 0.5f); - interp_v2_v2v2(temp.mouse_in, p1->mouse_in, p2->mouse_in, 0.5f); - interp_v2_v2v2(temp.mouse_out, p1->mouse_out, p2->mouse_out, 0.5f); - } - else { - point = stroke->points + ((stroke->cur_point - 1 + stroke->num_points) % stroke->num_points); + stroke->tot_samples++; + return; } - RNA_collection_add(op->ptr, "stroke", &itemptr); - RNA_float_set(&itemptr, "size", point->size); - RNA_float_set_array(&itemptr, "location", point->location); - /* Mouse coordinates modified by the stroke type options. */ - RNA_float_set_array(&itemptr, "mouse", point->mouse_out); - /* Original mouse coordinates. */ - RNA_float_set_array(&itemptr, "mouse_event", point->mouse_in); - RNA_boolean_set(&itemptr, "pen_flip", point->pen_flip); - RNA_float_set(&itemptr, "pressure", point->pressure); - RNA_float_set(&itemptr, "x_tilt", point->x_tilt); - RNA_float_set(&itemptr, "y_tilt", point->y_tilt); + int cur = stroke->cur_point - (paint_stroke_max_points(paint, stroke) >> 1) - 2; + cur = (cur + stroke->num_points) % stroke->num_points; + + PaintStrokePoint *p1 = stroke->points + ((cur + stroke->num_points) % stroke->num_points); + PaintStrokePoint *p2 = stroke->points + ((cur - 1 + stroke->num_points) % stroke->num_points); - stroke->update_step(C, op, stroke, &itemptr); + point = &temp; + temp = *p1; - /* don't record this for now, it takes up a lot of memory when doing long - * strokes with small brush size, and operators have register disabled */ - RNA_collection_clear(op->ptr, "stroke"); + interp_v3_v3v3(temp.location, p1->location, p2->location, 0.5f); + interp_v2_v2v2(temp.mouse_in, p1->mouse_in, p2->mouse_in, 0.5f); + interp_v2_v2v2(temp.mouse_out, p1->mouse_out, p2->mouse_out, 0.5f); } + else { + point = stroke->points + ((stroke->cur_point - 1 + stroke->num_points) % stroke->num_points); + } + + RNA_collection_add(op->ptr, "stroke", &itemptr); + RNA_float_set(&itemptr, "size", point->size); + RNA_float_set_array(&itemptr, "location", point->location); + /* Mouse coordinates modified by the stroke type options. */ + RNA_float_set_array(&itemptr, "mouse", point->mouse_out); + /* Original mouse coordinates. */ + RNA_float_set_array(&itemptr, "mouse_event", point->mouse_in); + RNA_boolean_set(&itemptr, "pen_flip", point->pen_flip); + RNA_float_set(&itemptr, "pressure", point->pressure); + RNA_float_set(&itemptr, "x_tilt", point->x_tilt); + RNA_float_set(&itemptr, "y_tilt", point->y_tilt); + + stroke->update_step(C, op, stroke, &itemptr); + + /* don't record this for now, it takes up a lot of memory when doing long + * strokes with small brush size, and operators have register disabled */ + RNA_collection_clear(op->ptr, "stroke"); stroke->tot_samples++; } @@ -1262,12 +1229,10 @@ PaintStroke *paint_stroke_new(bContext *C, ED_view3d_viewcontext_init(C, &stroke->vc, depsgraph); -#ifdef DRAW_DEBUG_VIS ARegion *region = CTX_wm_region(C); stroke->debug_draw_handle = ED_region_draw_cb_activate( region->type, paint_brush_cubic_vis, stroke, REGION_DRAW_POST_VIEW); -#endif stroke->get_location = get_location; stroke->test_start = test_start; @@ -1360,12 +1325,10 @@ void paint_stroke_free(bContext *C, wmOperator * /*op*/, PaintStroke *stroke) BLI_freelistN(&stroke->line); -#ifdef DRAW_DEBUG_VIS ARegion *region = CTX_wm_region(C); ED_region_draw_cb_exit(region->type, stroke->debug_draw_handle); ED_region_tag_redraw(region); -#endif MEM_delete<BezierSpline3f>(stroke->world_spline); MEM_delete<BezierSpline2f>(stroke->spline); diff --git a/source/blende @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs