18 points.tag_positions_changed();
24 points.tag_radii_changed();
36 static auto attributes = []() {
41 map.
add_new(
"position", std::move(position));
44 map.
add_new(
"radius", std::move(radius));
54 fn.domain_supported = [](
const void * ,
const AttrDomain domain) {
57 fn.domain_size = [](
const void *owner,
const AttrDomain domain) {
60 fn.builtin_domain_and_type = [](
const void * ,
61 const StringRef name) -> std::optional<AttributeDomainAndType> {
81 fn.adapt_domain = [](
const void * ,
90 fn.foreach_attribute = [](
const void *owner,
96 const auto get_fn = [&]() {
126 if (!info->deletable) {
140 fn.add = [](
void *owner,
146 const int domain_size = pointcloud.
totpoint;
149 if (info->domain != domain || info->type != type) {
General operations for point clouds.
void add_new(const Key &key, const Value &value)
const AttributeAccessor * accessor
Attribute & add(std::string name, bke::AttrDomain domain, bke::AttrType data_type, Attribute::DataVariant data)
Attribute * lookup(StringRef name)
bool remove(StringRef name)
void foreach_with_stop(FunctionRef< bool(Attribute &)> fn)
AttrDomain domain() const
StringRefNull name() const
AttrType data_type() const
static constexpr AttributeAccessorFunctions get_pointcloud_accessor_functions()
GAttributeReader attribute_to_reader(const Attribute &attribute, const AttrDomain domain, const int64_t domain_size)
Attribute::DataVariant attribute_init_to_data(const bke::AttrType data_type, const int64_t domain_size, const AttributeInit &initializer)
GAttributeWriter attribute_to_writer(void *owner, const Map< StringRef, AttrUpdateOnChange > &changed_tags, const int64_t domain_size, Attribute &attribute)
static const auto & builtin_attributes()
const AttributeAccessorFunctions & pointcloud_attribute_accessor_functions()
static void tag_radius_changed(void *owner)
static const auto & changed_tags()
static void tag_position_changed(void *owner)
struct AttributeStorage attribute_storage
AttributeValidator validator