Blender V4.5
instances_attributes.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#include "BKE_instances.hh"
6
8
9namespace blender::bke {
10
12{
13 Instances &instances = *static_cast<Instances *>(owner);
15}
16
18{
19 static CustomDataAccessInfo instance_custom_data_access = {
20 [](void *owner) -> CustomData * {
21 Instances *instances = static_cast<Instances *>(owner);
22 return &instances->custom_data_attributes();
23 },
24 [](const void *owner) -> const CustomData * {
25 const Instances *instances = static_cast<const Instances *>(owner);
26 return &instances->custom_data_attributes();
27 },
28 [](const void *owner) -> int {
29 const Instances *instances = static_cast<const Instances *>(owner);
30 return instances->instances_num();
31 }};
32
43 instance_custom_data_access,
44 nullptr);
45
46 static BuiltinCustomDataLayerProvider instance_transform("instance_transform",
50 instance_custom_data_access,
51 nullptr);
52
54 static BuiltinCustomDataLayerProvider reference_index(".reference_index",
58 instance_custom_data_access,
60
61 static CustomDataAttributeProvider instance_custom_data(AttrDomain::Instance,
62 instance_custom_data_access);
63
64 return GeometryAttributeProviders({&instance_transform, &id, &reference_index},
65 {&instance_custom_data});
66}
67
69{
73 fn.domain_size = [](const void *owner, const AttrDomain domain) {
74 if (owner == nullptr) {
75 return 0;
76 }
77 const Instances *instances = static_cast<const Instances *>(owner);
78 switch (domain) {
80 return instances->instances_num();
81 default:
82 return 0;
83 }
84 };
85 fn.domain_supported = [](const void * /*owner*/, const AttrDomain domain) {
86 return domain == AttrDomain::Instance;
87 };
88 fn.adapt_domain = [](const void * /*owner*/,
89 const GVArray &varray,
90 const AttrDomain from_domain,
91 const AttrDomain to_domain) {
92 if (from_domain == to_domain && from_domain == AttrDomain::Instance) {
93 return varray;
94 }
95 return GVArray{};
96 };
97 return fn;
98}
99
105
106} // namespace blender::bke
@ CD_PROP_INT32
@ CD_PROP_FLOAT4X4
int instances_num() const
Definition instances.cc:398
CustomData & custom_data_attributes()
AttributeAccessorFunctions accessor_functions_for_providers()
static GeometryAttributeProviders create_attribute_providers_for_instances()
static AttributeAccessorFunctions get_instances_accessor_functions()
static void tag_component_reference_index_changed(void *owner)
const AttributeAccessorFunctions & instance_attribute_accessor_functions()