diff options
Diffstat (limited to 'source/blender/editors/mask')
-rw-r--r-- | source/blender/editors/mask/mask_add.c | 14 | ||||
-rw-r--r-- | source/blender/editors/mask/mask_draw.c | 4 | ||||
-rw-r--r-- | source/blender/editors/mask/mask_edit.c | 53 | ||||
-rw-r--r-- | source/blender/editors/mask/mask_intern.h | 1 |
4 files changed, 62 insertions, 10 deletions
diff --git a/source/blender/editors/mask/mask_add.c b/source/blender/editors/mask/mask_add.c index cb47adbe73e..2dae9561d4e 100644 --- a/source/blender/editors/mask/mask_add.c +++ b/source/blender/editors/mask/mask_add.c @@ -72,7 +72,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C, MaskLayer *masklay, *point_masklay; MaskSpline *point_spline; MaskSplinePoint *point = NULL; - float dist = FLT_MAX, co[2]; + float dist_best_sq = FLT_MAX, co[2]; int width, height; float u; float scalex, scaley; @@ -123,7 +123,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C, } for (j = 0; j < tot_point - 1; j++) { - float cur_dist, a[2], b[2]; + float dist_sq, a[2], b[2]; a[0] = points[2 * j] * scalex; a[1] = points[2 * j + 1] * scaley; @@ -131,16 +131,16 @@ bool ED_mask_find_nearest_diff_point(const bContext *C, b[0] = points[2 * j + 2] * scalex; b[1] = points[2 * j + 3] * scaley; - cur_dist = dist_to_line_segment_v2(co, a, b); + dist_sq = dist_squared_to_line_segment_v2(co, a, b); - if (cur_dist < dist) { + if (dist_sq < dist_best_sq) { if (tangent) sub_v2_v2v2(tangent, &diff_points[2 * j + 2], &diff_points[2 * j]); point_masklay = masklay; point_spline = spline; point = use_deform ? &spline->points[(cur_point - spline->points_deform)] : cur_point; - dist = cur_dist; + dist_best_sq = dist_sq; u = (float)j / tot_point; } } @@ -154,7 +154,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C, } } - if (point && dist < threshold) { + if (point && dist_best_sq < threshold) { if (masklay_r) *masklay_r = point_masklay; @@ -174,7 +174,7 @@ bool ED_mask_find_nearest_diff_point(const bContext *C, } if (score_r) { - *score_r = dist; + *score_r = dist_best_sq; } return true; diff --git a/source/blender/editors/mask/mask_draw.c b/source/blender/editors/mask/mask_draw.c index 7e767d8f6c8..2efa9e211c9 100644 --- a/source/blender/editors/mask/mask_draw.c +++ b/source/blender/editors/mask/mask_draw.c @@ -253,7 +253,7 @@ static void draw_spline_points(const bContext *C, MaskLayer *masklay, MaskSpline return; if (sc) - undistort = sc->clip && (sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT) != 0; + undistort = sc->clip && (sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT); /* TODO, add this to sequence editor */ handle_size = UI_GetThemeValuef(TH_HANDLE_VERTEX_SIZE) * U.pixelsize; @@ -422,7 +422,7 @@ static void mask_draw_curve_type(const bContext *C, MaskSpline *spline, float (* float (*points)[2] = orig_points; if (sc) { - int undistort = sc->clip && sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT; + const bool undistort = sc->clip && (sc->user.render_flag & MCLIP_PROXY_RENDER_UNDISTORT); if (undistort) { int i; diff --git a/source/blender/editors/mask/mask_edit.c b/source/blender/editors/mask/mask_edit.c index e2eb32e86d9..e1a58d529b6 100644 --- a/source/blender/editors/mask/mask_edit.c +++ b/source/blender/editors/mask/mask_edit.c @@ -35,6 +35,7 @@ #include "BKE_context.h" #include "BKE_mask.h" +#include "DNA_mask_types.h" #include "DNA_scene_types.h" #include "WM_api.h" @@ -397,6 +398,58 @@ void ED_mask_cursor_location_get(ScrArea *sa, float cursor[2]) } } +bool ED_mask_selected_minmax(const bContext *C, float min[2], float max[2]) +{ + Mask *mask = CTX_data_edit_mask(C); + MaskLayer *mask_layer; + bool ok = false; + INIT_MINMAX2(min, max); + for (mask_layer = mask->masklayers.first; + mask_layer != NULL; + mask_layer = mask_layer->next) + { + MaskSpline *spline; + if (mask_layer->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { + continue; + } + for (spline = mask_layer->splines.first; + spline != NULL; + spline = spline->next) + { + MaskSplinePoint *points_array = BKE_mask_spline_point_array(spline); + int i; + for (i = 0; i < spline->tot_point; i++) { + MaskSplinePoint *point = &spline->points[i]; + MaskSplinePoint *deform_point = &points_array[i]; + BezTriple *bezt = &point->bezt; + float handle[2]; + if (!MASKPOINT_ISSEL_ANY(point)) { + continue; + } + if (bezt->f2 & SELECT) { + minmax_v2v2_v2(min, max, deform_point->bezt.vec[1]); + } + if (BKE_mask_point_handles_mode_get(point) == MASK_HANDLE_MODE_STICK) { + BKE_mask_point_handle(deform_point, MASK_WHICH_HANDLE_STICK, handle); + minmax_v2v2_v2(min, max, handle); + } + else { + if ((bezt->f1 & SELECT) && (bezt->h1 != HD_VECT)) { + BKE_mask_point_handle(deform_point, MASK_WHICH_HANDLE_LEFT, handle); + minmax_v2v2_v2(min, max, handle); + } + if ((bezt->f3 & SELECT) && (bezt->h2 != HD_VECT)) { + BKE_mask_point_handle(deform_point, MASK_WHICH_HANDLE_RIGHT, handle); + minmax_v2v2_v2(min, max, handle); + } + } + ok = true; + } + } + } + return ok; +} + /********************** registration *********************/ void ED_operatortypes_mask(void) diff --git a/source/blender/editors/mask/mask_intern.h b/source/blender/editors/mask/mask_intern.h index 5cdb224ce21..66a6c75272e 100644 --- a/source/blender/editors/mask/mask_intern.h +++ b/source/blender/editors/mask/mask_intern.h @@ -34,7 +34,6 @@ struct bContext; struct Mask; -struct wmEvent; struct wmOperatorType; /* internal exports only */ |