5#define DNA_DEPRECATED_ALLOW
40 case CD_CUSTOMLOOPNORMAL:
41 case CD_SCULPT_FACE_SETS:
113 struct AttributeToAdd {
123 for (
const auto &item : domains.
items()) {
125 const CustomData &custom_data = item.value.data;
126 const int domain_size = item.value.size;
133 {layer.name, domain, *attr_type, layer.data, domain_size, layer.sharing_info});
141 for (AttributeToAdd &attribute : attributes_to_add) {
143 array_data.
data = attribute.array_data;
144 array_data.
size = attribute.array_size;
149 std::move(array_data));
152 for (
const auto &[domain, custom_data] : domains.
items()) {
155 custom_data.data.totlayer = 0;
156 custom_data.data.maxlayer = 0;
162 custom_data.data.layers =
data.data;
163 custom_data.data.totlayer =
data.size;
164 custom_data.data.maxlayer =
data.capacity;
221 const int domain_size = custom_data_domains.
lookup(attribute.
domain()).size;
222 if (
const auto *array_data = std::get_if<Attribute::ArrayData>(&attribute.
data())) {
229 array_data->sharing_info.get());
231 else if (
const auto *single_data = std::get_if<Attribute::SingleData>(&attribute.
data())) {
234 cpp_type.
fill_construct_n(single_data->value, value->data.data(), domain_size);
236 &custom_data, *data_type, value->data.data(), domain_size, attribute.
name(), value);
245 {{AttrDomain::Point, {mesh.vert_data, mesh.verts_num}},
246 {AttrDomain::Edge, {mesh.edge_data, mesh.edges_num}},
249 if (
const char *name = mesh.active_uv_map_attribute) {
255 mesh.active_uv_map_attribute =
nullptr;
257 if (
const char *name = mesh.default_uv_map_attribute) {
262 MEM_freeN(mesh.default_uv_map_attribute);
263 mesh.default_uv_map_attribute =
nullptr;
278 {{AttrDomain::Point, {curves.point_data, curves.points_num()}},
279 {AttrDomain::Curve, {curves.curve_data, curves.curves_num()}}});
291 {{AttrDomain::Point, {pointcloud.pdata, pointcloud.totpoint}}});
304 {{AttrDomain::Layer, {grease_pencil.layers_data, int(grease_pencil.layers().size())}}});
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_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 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)
std::optional< AttrType > custom_data_type_to_attr_type(eCustomDataType data_type)
void mesh_convert_customdata_to_storage(Mesh &mesh)
void pointcloud_convert_storage_to_customdata(PointCloud &pointcloud)
static AttributeStorage attribute_legacy_convert_customdata_to_storage(const Map< AttrDomain, CustomDataAndSize > &domains)
void mesh_convert_storage_to_customdata(Mesh &mesh)
void grease_pencil_convert_storage_to_customdata(GreasePencil &grease_pencil)
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)
void curves_convert_storage_to_customdata(CurvesGeometry &curves)
struct AttributeStorage attribute_storage
struct AttributeStorage attribute_storage
ImplicitSharingPtr sharing_info