109 if (info[domain].customdata) {
118 const char *new_name,
122 BLI_assert(!
"Required attribute name is not editable");
127 if (customdata ==
NULL) {
144 if (customdata ==
NULL) {
151 return (index == -1) ?
NULL : &(customdata->
layers[index]);
157 const int index = (customdata) ?
205 BLI_assert(!
"Custom data layer not found in geometry");
217 return info[domain].
length;
221 BLI_assert(!
"Custom data layer not found in geometry");
254 for (
int i = 0; i < customdata->
totlayer; i++) {
257 if (index == active_index) {
279 for (
int i = 0; i < customdata->
totlayer; i++) {
281 if (layer == active_layer) {
297 return &((
PointCloud *)
id)->attributes_active_index;
300 return &((
Mesh *)
id)->attributes_active_index;
303 return &((
Hair *)
id)->attributes_active_index;
315 bool use_next = (layers ==
NULL);
319 if (customdata && customdata->
layers) {
320 if (customdata->
layers == layers) {
Generic geometry attributes built on CustomData.
CustomData interface, see also DNA_customdata_types.h.
bool CustomData_free_layer(struct CustomData *data, int type, int totelem, int index)
int CustomData_get_named_layer_index(const struct CustomData *data, int type, const char *name)
void CustomData_set_layer_unique_name(struct CustomData *data, int index)
void * CustomData_add_layer_named(struct CustomData *data, int type, eCDAllocType alloctype, void *layer, int totelem, const char *name)
int CustomData_number_of_layers_typemask(const struct CustomData *data, CustomDataMask mask)
#define CD_TYPE_AS_MASK(_type)
General operations for hairs.
bool BKE_hair_customdata_required(struct Hair *hair, struct CustomDataLayer *layer)
General operations for point-clouds.
bool BKE_pointcloud_customdata_required(struct PointCloud *pointcloud, struct CustomDataLayer *layer)
void BKE_report(ReportList *reports, ReportType type, const char *message)
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_NONNULL()
#define ARRAY_HAS_ITEM(arr_item, arr_start, arr_len)
ID and Library types, which are fundamental for sdna.
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
static void get_domains(ID *id, DomainInfo info[ATTR_DOMAIN_NUM])
static CustomData * attribute_customdata_find(ID *id, CustomDataLayer *layer)
bool BKE_id_attributes_supported(struct ID *id)
int BKE_id_attributes_length(ID *id, const CustomDataMask mask)
CustomDataLayer * BKE_id_attribute_new(ID *id, const char *name, const int type, const AttributeDomain domain, ReportList *reports)
bool BKE_id_attribute_rename(ID *id, CustomDataLayer *layer, const char *new_name, ReportList *reports)
int BKE_id_attribute_data_length(ID *id, CustomDataLayer *layer)
CustomDataLayer * BKE_id_attributes_active_get(ID *id)
bool BKE_id_attribute_required(ID *id, CustomDataLayer *layer)
struct DomainInfo DomainInfo
AttributeDomain BKE_id_attribute_domain(ID *id, CustomDataLayer *layer)
int * BKE_id_attributes_active_index_p(ID *id)
void BKE_id_attributes_active_set(ID *id, CustomDataLayer *active_layer)
CustomData * BKE_id_attributes_iterator_next_domain(ID *id, CustomDataLayer *layers)
bool BKE_id_attribute_remove(ID *id, CustomDataLayer *layer, ReportList *reports)
SIMD_FORCE_INLINE btScalar length(const btQuaternion &q)
Return the length of a quaternion.
struct CustomData pdata ldata
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)