Cleanup: Replace macro with function
This commit is contained in:
parent
272a38e0c2
commit
b6195f6664
|
@ -75,6 +75,8 @@ void BKE_curveprofile_create_samples(struct CurveProfile *profile,
|
|||
bool sample_straight_edges,
|
||||
struct CurveProfilePoint *r_samples);
|
||||
|
||||
int BKE_curveprofile_table_size(const struct CurveProfile *profile);
|
||||
|
||||
void BKE_curveprofile_init(struct CurveProfile *profile, short segments_len);
|
||||
|
||||
/* Called for a complete update of the widget after modifications */
|
||||
|
|
|
@ -21,6 +21,8 @@
|
|||
* \ingroup bke
|
||||
*/
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "DNA_curve_types.h"
|
||||
|
@ -35,6 +37,9 @@
|
|||
|
||||
#include "BLO_read_write.h"
|
||||
|
||||
/** Number of points in high resolution table is dynamic up to a maximum. */
|
||||
#define PROF_TABLE_MAX 512
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name Data Handling
|
||||
* \{ */
|
||||
|
@ -569,6 +574,14 @@ void BKE_curveprofile_reset(CurveProfile *profile)
|
|||
/** \name Sampling and Evaluation
|
||||
* \{ */
|
||||
|
||||
int BKE_curveprofile_table_size(const CurveProfile *profile)
|
||||
{
|
||||
/** Number of table points per control point. */
|
||||
const int resolution = 16;
|
||||
|
||||
return std::clamp((profile->path_len - 1) * resolution + 1, 0, PROF_TABLE_MAX);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper for 'curve_profile_create' samples.
|
||||
* Returns whether both handles that make up the edge are vector handles.
|
||||
|
@ -848,7 +861,7 @@ void BKE_curveprofile_create_samples(CurveProfile *profile,
|
|||
*/
|
||||
static void curveprofile_make_table(CurveProfile *profile)
|
||||
{
|
||||
int n_samples = PROF_TABLE_LEN(profile->path_len);
|
||||
int n_samples = BKE_curveprofile_table_size(profile);
|
||||
CurveProfilePoint *new_table = (CurveProfilePoint *)MEM_callocN(
|
||||
sizeof(CurveProfilePoint) * (n_samples + 1), __func__);
|
||||
|
||||
|
@ -1012,7 +1025,7 @@ void BKE_curveprofile_init(CurveProfile *profile, short segments_len)
|
|||
*/
|
||||
static float curveprofile_distance_to_next_table_point(const CurveProfile *profile, int i)
|
||||
{
|
||||
BLI_assert(i < PROF_TABLE_LEN(profile->path_len));
|
||||
BLI_assert(i < BKE_curveprofile_table_size(profile));
|
||||
|
||||
return len_v2v2(&profile->table[i].x, &profile->table[i + 1].x);
|
||||
}
|
||||
|
@ -1025,7 +1038,7 @@ static float curveprofile_distance_to_next_table_point(const CurveProfile *profi
|
|||
static float curveprofile_total_length(const CurveProfile *profile)
|
||||
{
|
||||
float total_length = 0;
|
||||
for (int i = 0; i < PROF_TABLE_LEN(profile->path_len) - 1; i++) {
|
||||
for (int i = 0; i < BKE_curveprofile_table_size(profile) - 1; i++) {
|
||||
total_length += len_v2v2(&profile->table[i].x, &profile->table[i + 1].x);
|
||||
}
|
||||
return total_length;
|
||||
|
@ -1109,7 +1122,7 @@ void BKE_curveprofile_evaluate_length_portion(const CurveProfile *profile,
|
|||
float length_travelled = 0.0f;
|
||||
while (length_travelled < requested_length) {
|
||||
/* Check if we reached the last point before the final one. */
|
||||
if (i == PROF_TABLE_LEN(profile->path_len) - 2) {
|
||||
if (i == BKE_curveprofile_table_size(profile) - 2) {
|
||||
break;
|
||||
}
|
||||
float new_length = curveprofile_distance_to_next_table_point(profile, i);
|
||||
|
|
|
@ -1860,13 +1860,13 @@ void ui_draw_but_CURVEPROFILE(ARegion *region,
|
|||
/* Also add the last points on the right and bottom edges to close off the fill polygon. */
|
||||
const bool add_left_tri = profile->view_rect.xmin < 0.0f;
|
||||
const bool add_bottom_tri = profile->view_rect.ymin < 0.0f;
|
||||
uint tot_points = (uint)PROF_TABLE_LEN(profile->path_len) + 1 + add_left_tri + add_bottom_tri;
|
||||
uint tot_points = (uint)BKE_curveprofile_table_size(profile) + 1 + add_left_tri + add_bottom_tri;
|
||||
const uint tot_triangles = tot_points - 2;
|
||||
|
||||
/* Create array of the positions of the table's points. */
|
||||
float(*table_coords)[2] = MEM_mallocN(sizeof(*table_coords) * tot_points, "table x coords");
|
||||
for (uint i = 0; i < (uint)PROF_TABLE_LEN(profile->path_len);
|
||||
i++) { /* Only add the points from the table here. */
|
||||
for (uint i = 0; i < (uint)BKE_curveprofile_table_size(profile); i++) {
|
||||
/* Only add the points from the table here. */
|
||||
table_coords[i][0] = pts[i].x;
|
||||
table_coords[i][1] = pts[i].y;
|
||||
}
|
||||
|
|
|
@ -7587,7 +7587,7 @@ static int ui_do_but_CURVEPROFILE(
|
|||
dist_min_sq = square_f(U.dpi_fac * 8.0f); /* 8 pixel radius from each table point. */
|
||||
|
||||
/* Loop through the path's high resolution table and find what's near the click. */
|
||||
for (int i = 1; i <= PROF_TABLE_LEN(profile->path_len); i++) {
|
||||
for (int i = 1; i <= BKE_curveprofile_table_size(profile); i++) {
|
||||
copy_v2_v2(f_xy_prev, f_xy);
|
||||
BLI_rctf_transform_pt_v(&but->rect, &profile->view_rect, f_xy, &table[i].x);
|
||||
|
||||
|
|
|
@ -29,13 +29,6 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** Number of points in high resolution table is dynamic up to a maximum. */
|
||||
#define PROF_TABLE_MAX 512
|
||||
/** Number of table points per control point. */
|
||||
#define PROF_RESOL 16
|
||||
/** Dynamic size of widget's high resolution table. Input should be profile->totpoint. */
|
||||
#define PROF_TABLE_LEN(n_pts) min_ii(PROF_TABLE_MAX, (((n_pts - 1)) * PROF_RESOL) + 1)
|
||||
|
||||
/**
|
||||
* Each control point that makes up the profile.
|
||||
* \note The flags use the same enum as Bezier curves, but they aren't guaranteed
|
||||
|
|
Loading…
Reference in New Issue