105 const Nurb &src_curve = *src_curves[i];
109 offset += src_curve.
pntsu;
111 offsets.
last() = offset;
112 curves.resize(curves.offsets().last(), curves.curves_num());
114 curves.update_curve_types();
116 const OffsetIndices points_by_curve = curves.points_by_curve();
124 selection.foreach_index(
GrainSize(256), [&](
const int curve_i) {
125 const Nurb &src_curve = *src_curves[curve_i];
127 const IndexRange points = points_by_curve[curve_i];
130 const BPoint &bp = src_points[i];
131 positions[points[i]] = bp.
vec;
132 radii[points[i]] = bp.
radius;
133 tilts[points[i]] = bp.
tilt;
149 selection.foreach_index(
GrainSize(256), [&](
const int curve_i) {
150 const Nurb &src_curve = *src_curves[curve_i];
152 const IndexRange points = points_by_curve[curve_i];
154 resolutions[curve_i] = src_curve.
resolu;
158 positions[points[i]] = point.vec[1];
159 handle_positions_l[points[i]] = point.vec[0];
161 handle_positions_r[points[i]] = point.vec[2];
163 radii[points[i]] = point.radius;
164 tilts[points[i]] = point.tilt;
175 selection.foreach_index(
GrainSize(256), [&](
const int curve_i) {
176 const Nurb &src_curve = *src_curves[curve_i];
177 const Span src_points(src_curve.
bp, src_curve.
pntsu);
178 const IndexRange points = points_by_curve[curve_i];
180 resolutions[curve_i] = src_curve.
resolu;
181 nurbs_orders[curve_i] = src_curve.
orderu;
185 const BPoint &bp = src_points[i];
186 positions[points[i]] = bp.
vec;
187 radii[points[i]] = bp.
radius;
188 tilts[points[i]] = bp.
tilt;
189 nurbs_weights[points[i]] = bp.
vec[3];
195 curves.curve_types(),
196 curves.curve_type_counts(),
197 curves.curves_range(),
198 [&](
const IndexMask & ) { BLI_assert_unreachable(); },
205 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)
GPU_SHADER_INTERFACE_INFO(overlay_edit_curve_handle_iface, "vert").flat(Type pos vertex_in(1, Type::UINT, "data") .vertex_out(overlay_edit_curve_handle_iface) .geometry_layout(PrimitiveIn Frequency::GEOMETRY storage_buf(1, Qualifier::READ, "uint", "data[]", Frequency::GEOMETRY) .push_constant(Type Frequency::GEOMETRY selection[]