28 static auto attributes = []() {
33 map.
add_new(
"instance_transform", std::move(instance_transform));
38 map.
add_new(
".reference_index", std::move(reference_index));
48 fn.domain_supported = [](
const void * ,
const AttrDomain domain) {
51 fn.domain_size = [](
const void *owner,
const AttrDomain domain) {
53 static_cast<const Instances *
>(owner)->instances_num() :
56 fn.builtin_domain_and_type = [](
const void * ,
57 const StringRef name) -> std::optional<AttributeDomainAndType> {
77 fn.adapt_domain = [](
const void * ,
86 fn.foreach_attribute = [](
const void *owner,
92 const auto get_fn = [&]() {
122 if (!info->deletable) {
136 fn.add = [](
void *owner,
145 if (info->domain != domain || info->type != type) {
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
void tag_reference_handles_changed()
int instances_num() const
bke::AttributeStorage & attribute_storage()
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()
static void tag_component_reference_index_changed(void *owner)
static constexpr AttributeAccessorFunctions get_instances_accessor_functions()
const AttributeAccessorFunctions & instance_attribute_accessor_functions()
static const auto & changed_tags()
AttributeValidator validator