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,
52 .slice(points_by_curve[curve_i].drop_front(amount_start).drop_back(amount_end))
53 .fill(inverted ?
true :
false);
60 const int amount_start,
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);
82 [&](
const int64_t i) {
random[i] = next_bool_random_value(); });
90 const float probability,
Low-level operations for curves.
static IndexMask from_bools(Span< bool > bools, IndexMaskMemory &memory)
static IndexMask from_predicate(const IndexMask &universe, GrainSize grain_size, IndexMaskMemory &memory, Fn &&predicate)
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.
ccl_device_inline float4 mask(const int4 mask, const float4 a)
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[]