27 const OffsetIndices points_by_curve = curves.points_by_curve();
29 curves.curves_range(), grain_size, memory, [&](
const int curve_i) {
30 const IndexRange points = points_by_curve[curve_i];
31 for (const int point_i : points) {
32 if (selected[point_i]) {
42 const int amount_start,
47 const OffsetIndices points_by_curve = curves.points_by_curve();
52 .
slice(points_by_curve[curve_i].drop_front(amount_start).drop_back(amount_end))
53 .fill(inverted ?
true :
false);
56 return IndexMask::from_bools(
end_points, memory);
60 const int amount_start,
65 return end_points(curves, curves.curves_range(), amount_start, amount_end, inverted, memory);
72 const float probability,
76 const auto next_bool_random_value = [&]() {
return rng.
get_float() <= probability; };
78 const int64_t domain_size = curves.attributes().domain_size(selection_domain);
81 mask.foreach_index_optimized<
int64_t>(
82 [&](
const int64_t i) { random[i] = next_bool_random_value(); });
84 return IndexMask::from_bools(
IndexRange(domain_size), random, memory);
90 const float probability,
94 return random_mask(curves, selection, selection_domain, random_seed, probability, memory);
Low-level operations for curves.
static IndexMask from_predicate(const IndexMask &universe, GrainSize grain_size, IndexMaskMemory &memory, Fn &&predicate)
IndexMask slice(IndexRange range) const
void to_bools(MutableSpan< bool > r_bools) const
void foreach_index(Fn &&fn) const
IMETHOD void random(Vector &a)
addDelta operator for displacement rotational velocity.
IndexMask curve_mask_from_points(const bke::CurvesGeometry &curves, const IndexMask &point_mask, const GrainSize grain_size, IndexMaskMemory &memory)
IndexMask end_points(const bke::CurvesGeometry &curves, const IndexMask &curves_mask, const int amount_start, const int amount_end, const bool inverted, IndexMaskMemory &memory)
IndexMask random_mask(const bke::CurvesGeometry &curves, const IndexMask &mask, const bke::AttrDomain selection_domain, const uint32_t random_seed, const float probability, IndexMaskMemory &memory)
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[]