This commit adds an option to interpolate the number of control points in new curves based on the count in neighboring existing curves. The idea is to provide a more automatic default than manually controlling the number of points in a curve, so users don't have to think about the resolution quite as much. Internally, some utilities for creating new curves are extracted to a new header file. These can be used for the various nodes and operators that create new curves. The top-bar UI will be adjusted in a separate patch, probably moving all of the settings that affect the size and shape of the new curves into a popover. Differential Revision: https://developer.blender.org/D14877
39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
*/
|
|
|
|
#include "BKE_curves_utils.hh"
|
|
|
|
namespace blender::bke::curves {
|
|
|
|
void fill_curve_counts(const bke::CurvesGeometry &curves,
|
|
const Span<IndexRange> curve_ranges,
|
|
MutableSpan<int> counts)
|
|
{
|
|
threading::parallel_for(curve_ranges.index_range(), 512, [&](IndexRange ranges_range) {
|
|
for (const IndexRange curves_range : curve_ranges.slice(ranges_range)) {
|
|
threading::parallel_for(curves_range, 4096, [&](IndexRange range) {
|
|
for (const int i : range) {
|
|
counts[i] = curves.points_for_curve(i).size();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
void accumulate_counts_to_offsets(MutableSpan<int> counts_to_offsets, const int start_offset)
|
|
{
|
|
int offset = start_offset;
|
|
for (const int i : counts_to_offsets.index_range().drop_back(1)) {
|
|
const int count = counts_to_offsets[i];
|
|
BLI_assert(count > 0);
|
|
counts_to_offsets[i] = offset;
|
|
offset += count;
|
|
}
|
|
counts_to_offsets.last() = offset;
|
|
}
|
|
|
|
} // namespace blender::bke::curves
|