diff options
author | Campbell Barton <ideasman42@gmail.com> | 2020-03-25 11:06:17 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2020-03-25 11:06:17 +0300 |
commit | 4c57f07a0fde0ca067e5b0e6609ded6c0e170cc2 (patch) | |
tree | 652abc47c4f68fd7377c031d82ada29949bb4f28 /source/blender/editors/mask/mask_add.c | |
parent | 2bc791437e3b8e42c1369daf15c72934474b1e73 (diff) |
Cleanup: move mask queries into own file
Similar functions to lookup nearest mask points were in mask_add.c
& mask_edit.c
Diffstat (limited to 'source/blender/editors/mask/mask_add.c')
-rw-r--r-- | source/blender/editors/mask/mask_add.c | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/source/blender/editors/mask/mask_add.c b/source/blender/editors/mask/mask_add.c index a190b048ee3..5d461ffdb20 100644 --- a/source/blender/editors/mask/mask_add.c +++ b/source/blender/editors/mask/mask_add.c @@ -47,158 +47,6 @@ #include "mask_intern.h" /* own include */ -bool ED_mask_find_nearest_diff_point(const bContext *C, - struct Mask *mask_orig, - const float normal_co[2], - int threshold, - bool feather, - float tangent[2], - const bool use_deform, - const bool use_project, - MaskLayer **r_mask_layer, - MaskSpline **r_spline, - MaskSplinePoint **r_point, - float *r_u, - float *r_score) -{ - ScrArea *sa = CTX_wm_area(C); - ARegion *region = CTX_wm_region(C); - - MaskLayer *point_mask_layer; - MaskSpline *point_spline; - MaskSplinePoint *point = NULL; - float dist_best_sq = FLT_MAX, co[2]; - int width, height; - float u = 0.0f; - float scalex, scaley; - - Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C); - Mask *mask_eval = (Mask *)DEG_get_evaluated_id(depsgraph, &mask_orig->id); - - ED_mask_get_size(sa, &width, &height); - ED_mask_pixelspace_factor(sa, region, &scalex, &scaley); - - co[0] = normal_co[0] * scalex; - co[1] = normal_co[1] * scaley; - - for (MaskLayer *mask_layer_orig = mask_orig->masklayers.first, - *mask_layer_eval = mask_eval->masklayers.first; - mask_layer_orig != NULL; - mask_layer_orig = mask_layer_orig->next, mask_layer_eval = mask_layer_eval->next) { - if (mask_layer_orig->restrictflag & (MASK_RESTRICT_VIEW | MASK_RESTRICT_SELECT)) { - continue; - } - - for (MaskSpline *spline_orig = mask_layer_orig->splines.first, - *spline_eval = mask_layer_eval->splines.first; - spline_orig != NULL; - spline_orig = spline_orig->next, spline_eval = spline_eval->next) { - int i; - MaskSplinePoint *cur_point_eval; - - for (i = 0, cur_point_eval = use_deform ? spline_eval->points_deform : spline_eval->points; - i < spline_eval->tot_point; - i++, cur_point_eval++) { - unsigned int tot_diff_point; - float *diff_points = BKE_mask_point_segment_diff( - spline_eval, cur_point_eval, width, height, &tot_diff_point); - - if (diff_points) { - int j, tot_point; - unsigned int tot_feather_point; - float *feather_points = NULL, *points; - - if (feather) { - feather_points = BKE_mask_point_segment_feather_diff( - spline_eval, cur_point_eval, width, height, &tot_feather_point); - - points = feather_points; - tot_point = tot_feather_point; - } - else { - points = diff_points; - tot_point = tot_diff_point; - } - - for (j = 0; j < tot_point - 1; j++) { - float dist_sq, a[2], b[2]; - - a[0] = points[2 * j] * scalex; - a[1] = points[2 * j + 1] * scaley; - - b[0] = points[2 * j + 2] * scalex; - b[1] = points[2 * j + 3] * scaley; - - dist_sq = dist_squared_to_line_segment_v2(co, a, b); - - if (dist_sq < dist_best_sq) { - if (tangent) { - sub_v2_v2v2(tangent, &diff_points[2 * j + 2], &diff_points[2 * j]); - } - - point_mask_layer = mask_layer_orig; - point_spline = spline_orig; - point = use_deform ? - &spline_orig->points[(cur_point_eval - spline_eval->points_deform)] : - &spline_orig->points[(cur_point_eval - spline_eval->points)]; - dist_best_sq = dist_sq; - u = (float)j / tot_point; - } - } - - if (feather_points != NULL) { - MEM_freeN(feather_points); - } - MEM_freeN(diff_points); - } - } - } - } - - if (point && dist_best_sq < threshold) { - if (r_mask_layer) { - *r_mask_layer = point_mask_layer; - } - - if (r_spline) { - *r_spline = point_spline; - } - - if (r_point) { - *r_point = point; - } - - if (r_u) { - /* TODO(sergey): Projection fails in some weirdo cases.. */ - if (use_project) { - u = BKE_mask_spline_project_co(point_spline, point, u, normal_co, MASK_PROJ_ANY); - } - - *r_u = u; - } - - if (r_score) { - *r_score = dist_best_sq; - } - - return true; - } - - if (r_mask_layer) { - *r_mask_layer = NULL; - } - - if (r_spline) { - *r_spline = NULL; - } - - if (r_point) { - *r_point = NULL; - } - - return false; -} - /******************** add vertex *********************/ static void setup_vertex_point(Mask *mask, |