5#define DNA_DEPRECATED_ALLOW
41 case CD_CUSTOMLOOPNORMAL:
42 case CD_SCULPT_FACE_SETS:
45 case CD_FREESTYLE_EDGE:
46 case CD_FREESTYLE_FACE:
112 struct AttributeToAdd {
122 for (
const auto &item : domains.
items()) {
124 const CustomData &custom_data = item.value.data;
125 const int domain_size = item.value.size;
132 {layer.name, domain, *attr_type, layer.data, domain_size, layer.sharing_info});
140 for (AttributeToAdd &attribute : attributes_to_add) {
142 array_data.
data = attribute.array_data;
143 array_data.
size = attribute.array_size;
148 std::move(array_data));
151 for (
const auto &[domain, custom_data] : domains.
items()) {
154 custom_data.data.totlayer = 0;
155 custom_data.data.maxlayer = 0;
161 custom_data.data.layers =
data.data;
162 custom_data.data.totlayer =
data.size;
163 custom_data.data.maxlayer =
data.capacity;
218 const int domain_size = custom_data_domains.
lookup(attribute.
domain()).size;
219 if (
const auto *array_data = std::get_if<Attribute::ArrayData>(&attribute.
data())) {
226 array_data->sharing_info.get());
228 else if (
const auto *single_data = std::get_if<Attribute::SingleData>(&attribute.
data())) {
231 cpp_type.
fill_construct_n(single_data->value, value->data.data(), domain_size);
233 &custom_data, *data_type, value->data.data(), domain_size, attribute.
name(), value);
242 {{AttrDomain::Point, {mesh.vert_data, mesh.verts_num}},
243 {AttrDomain::Edge, {mesh.edge_data, mesh.edges_num}},
246 if (
const char *
name = mesh.active_uv_map_attribute) {
252 mesh.active_uv_map_attribute =
nullptr;
254 if (
const char *
name = mesh.default_uv_map_attribute) {
259 MEM_freeN(mesh.default_uv_map_attribute);
260 mesh.default_uv_map_attribute =
nullptr;
270 mesh.attribute_storage.wrap());
278 curves.attribute_storage.wrap());
282 curves.update_curve_types();
Low-level operations for curves.
CustomData interface, see also DNA_customdata_types.h.
int CustomData_get_named_layer(const CustomData *data, eCustomDataType type, blender::StringRef name)
void CustomData_set_layer_render(CustomData *data, eCustomDataType type, int n)
void CustomData_reset(CustomData *data)
void CustomData_update_typemap(CustomData *data)
const void * CustomData_add_layer_named_with_data(CustomData *data, eCustomDataType type, void *layer_data, int totelem, blender::StringRef name, const blender::ImplicitSharingInfo *sharing_info)
void CustomData_set_layer_active(CustomData *data, eCustomDataType type, int n)
#define BLI_assert_unreachable()
BMesh const char void * data
void fill_construct_n(const void *value, void *dst, int64_t n) const
Value & lookup_or_add_default(const Key &key)
const Value & lookup(const Key &key) const
Value pop_default(const Key &key, const Value &default_value)
ItemIterator items() const &
void append(const T &value)
VectorData< T, Allocator > release()
Attribute & add(std::string name, bke::AttrDomain domain, bke::AttrType data_type, Attribute::DataVariant data)
void foreach(FunctionRef< void(Attribute &)> fn)
std::string unique_name_calc(StringRef name) const
const DataVariant & data() const
AttrDomain domain() const
StringRefNull name() const
AttrType data_type() const
void MEM_freeN(void *vmemh)
std::optional< eCustomDataType > attr_type_to_custom_data_type(AttrType attr_type)
void pointcloud_convert_customdata_to_storage(PointCloud &pointcloud)
static void attribute_legacy_convert_customdata_to_storage(const Map< AttrDomain, CustomDataAndSize > &domains, AttributeStorage &storage)
std::optional< AttrType > custom_data_type_to_attr_type(eCustomDataType data_type)
void mesh_convert_customdata_to_storage(Mesh &mesh)
void mesh_convert_storage_to_customdata(Mesh &mesh)
void curves_convert_customdata_to_storage(CurvesGeometry &curves)
void grease_pencil_convert_customdata_to_storage(GreasePencil &grease_pencil)
static void convert_storage_to_customdata(AttributeStorage &storage, const Map< AttrDomain, CustomDataAndSizeMutable > &custom_data_domains)
const CPPType * custom_data_type_to_cpp_type(eCustomDataType type)
CustomData layers_data_legacy
struct AttributeStorage attribute_storage
struct AttributeStorage attribute_storage
struct CustomData pdata_legacy
ImplicitSharingPtr sharing_info