108 const Nurb &src_curve = *src_curves[
i];
112 offset += src_curve.
pntsu;
114 offsets.
last() = offset;
117 curves.update_curve_types();
126 auto create_poly = [&](
const IndexMask &selection) {
127 selection.foreach_index(
GrainSize(256), [&](
const int curve_i) {
128 const Nurb &src_curve = *src_curves[curve_i];
130 const IndexRange points = points_by_curve[curve_i];
133 const BPoint &bp = src_points[
i];
134 positions[points[
i]] = bp.
vec;
136 tilts[points[
i]] = bp.
tilt;
145 auto create_bezier = [&](
const IndexMask &selection) {
152 selection.foreach_index(
GrainSize(256), [&](
const int curve_i) {
153 const Nurb &src_curve = *src_curves[curve_i];
155 const IndexRange points = points_by_curve[curve_i];
157 resolutions[curve_i] = src_curve.
resolu;
161 positions[points[
i]] = point.
vec[1];
162 handle_positions_l[points[
i]] = point.
vec[0];
164 handle_positions_r[points[
i]] = point.
vec[2];
166 radii[points[
i]] = point.
radius;
167 tilts[points[
i]] = point.
tilt;
172 auto create_nurbs = [&](
const IndexMask &selection) {
178 selection.foreach_index(
GrainSize(256), [&](
const int curve_i) {
179 const Nurb &src_curve = *src_curves[curve_i];
180 const Span src_points(src_curve.
bp, src_curve.
pntsu);
181 const IndexRange points = points_by_curve[curve_i];
183 resolutions[curve_i] = src_curve.
resolu;
184 nurbs_orders[curve_i] = src_curve.
orderu;
188 const BPoint &bp = src_points[
i];
189 positions[points[
i]] = bp.
vec;
191 tilts[points[
i]] = bp.
tilt;
192 nurbs_weights[points[
i]] = bp.
vec[3];
196 curves.nurbs_custom_knots_update_size();
197 if (!
curves.nurbs_has_custom_knots()) {
203 selection.foreach_index([&](
const int curve_i) {
205 const Nurb &src_curve = *src_curves[curve_i];
206 const IndexRange knots = knots_by_curve[curve_i];
214 curves.curve_type_counts(),
216 [&](
const IndexMask & ) { BLI_assert_unreachable(); },
223 radius_attribute.
finish();
void foreach_curve_by_type(const VArray< int8_t > &types, const std::array< int, CURVE_TYPES_NUM > &type_counts, const IndexMask &selection, FunctionRef< void(IndexMask)> catmull_rom_fn, FunctionRef< void(IndexMask)> poly_fn, FunctionRef< void(IndexMask)> bezier_fn, FunctionRef< void(IndexMask)> nurbs_fn)