CurveEval: Add total_length() and total_control_point_size() methods

Add the following methods to the CurveEval class:
total_length() : returns the total length of the curve without needing to
                    allocate a new array
total_control_point_size() : returns the total number of control points without
                    needing to allocate a new array
This commit is contained in:
Johnny Matthews 2021-11-22 12:07:59 -06:00
parent 0129178376
commit 5ad4ca4e02
2 changed files with 21 additions and 0 deletions

View File

@ -580,6 +580,9 @@ struct CurveEval {
blender::Array<int> evaluated_point_offsets() const;
blender::Array<float> accumulated_spline_lengths() const;
float total_length() const;
int total_control_point_size() const;
void mark_cache_invalid();
void assert_valid_point_attributes() const;

View File

@ -109,6 +109,24 @@ void CurveEval::bounds_min_max(float3 &min, float3 &max, const bool use_evaluate
}
}
float CurveEval::total_length() const
{
float length = 0.0f;
for (const SplinePtr &spline : this->splines()) {
length += spline->length();
}
return length;
}
int CurveEval::total_control_point_size() const
{
int count = 0;
for (const SplinePtr &spline : this->splines()) {
count += spline->size();
}
return count;
}
/**
* Return the start indices for each of the curve spline's control points, if they were part
* of a flattened array. This can be used to facilitate parallelism by avoiding the need to