From 2b30d26ae97070ec007dc609f7a7bd43a92e7e91 Mon Sep 17 00:00:00 2001 From: Christoph Lendenfeld Date: Thu, 17 Aug 2023 14:25:16 +0200 Subject: [PATCH] Refactor: resolution_scale in graph_draw.cc Recent patches added a variable `resolution_scale` This variable defines how many points on the x or y axis to add. However I find the name confusing. Instead of that, change it to `pixels_per_unit` and move the `points_per_pixel` factor to `calculate_bezt_draw_resolution` no functional changes Pull Request: https://projects.blender.org/blender/blender/pulls/111037 --- .../blender/editors/space_graph/graph_draw.cc | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/source/blender/editors/space_graph/graph_draw.cc b/source/blender/editors/space_graph/graph_draw.cc index ba080b93afd..c9d48b0c06e 100644 --- a/source/blender/editors/space_graph/graph_draw.cc +++ b/source/blender/editors/space_graph/graph_draw.cc @@ -845,16 +845,19 @@ static void draw_fcurve_curve_samples(bAnimContext *ac, static int calculate_bezt_draw_resolution(BezTriple *bezt, BezTriple *prevbezt, - const blender::float2 resolution_scale) + const blender::float2 pixels_per_unit) { - const int resolution_x = int((bezt->vec[1][0] - prevbezt->vec[1][0]) * resolution_scale[0]); + const float points_per_pixel = 0.25f; + const int resolution_x = int(((bezt->vec[1][0] - prevbezt->vec[1][0]) * pixels_per_unit[0]) * + points_per_pixel); /* Include the handles in the resolution calculation to cover the case where keys have the same * y-value, but their handles are offset to create an arc. */ const float min_y = min_ffff( bezt->vec[1][1], bezt->vec[2][1], prevbezt->vec[1][1], prevbezt->vec[0][1]); const float max_y = max_ffff( bezt->vec[1][1], bezt->vec[2][1], prevbezt->vec[1][1], prevbezt->vec[0][1]); - const int resolution_y = int((max_y - min_y) * resolution_scale[1]); + const int resolution_y = int(((max_y - min_y) * pixels_per_unit[1]) * points_per_pixel); + /* Using a simple sum instead of calculating the diagonal. This gives a slightly higher * resolution but it does compensate for the fact that bezier curves can create long arcs between * keys. */ @@ -1007,19 +1010,16 @@ static void add_extrapolation_point_right(FCurve *fcu, curve_vertices.append(vertex_position); } -static blender::float2 calculate_resolution_scale(View2D *v2d) +static blender::float2 calculate_pixels_per_unit(View2D *v2d) { - /* The resolution for bezier forward diff in frame/value space. This ensures a constant - * resolution in screen-space. */ const int window_width = BLI_rcti_size_x(&v2d->mask); const int window_height = BLI_rcti_size_y(&v2d->mask); - const float points_per_pixel = 0.25f; const float v2d_frame_range = BLI_rctf_size_x(&v2d->cur); const float v2d_value_range = BLI_rctf_size_y(&v2d->cur); - const blender::float2 resolution_scale = {(window_width * points_per_pixel) / v2d_frame_range, - (window_height * points_per_pixel) / v2d_value_range}; - return resolution_scale; + const blender::float2 pixels_per_unit = {window_width / v2d_frame_range, + window_height / v2d_value_range}; + return pixels_per_unit; } /* Helper function - draw one repeat of an F-Curve (using Bezier curve approximations). */ @@ -1055,7 +1055,7 @@ static void draw_fcurve_curve_keys( curve_vertices.append({bezt->vec[1][0], bezt->vec[1][1]}); } - const blender::float2 resolution_scale = calculate_resolution_scale(v2d); + const blender::float2 pixels_per_unit = calculate_pixels_per_unit(v2d); const int window_width = BLI_rcti_size_x(&v2d->mask); const float v2d_frame_range = BLI_rctf_size_x(&v2d->cur); const float pixel_width = v2d_frame_range / window_width; @@ -1082,7 +1082,7 @@ static void draw_fcurve_curve_keys( break; case BEZT_IPO_BEZ: { - const int resolution = calculate_bezt_draw_resolution(bezt, prevbezt, resolution_scale); + const int resolution = calculate_bezt_draw_resolution(bezt, prevbezt, pixels_per_unit); add_bezt_vertices(bezt, prevbezt, resolution, curve_vertices); break; }