Blender  V3.3
BKE_attribute.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2006 Blender Foundation. All rights reserved. */
3 
9 #pragma once
10 
11 #include "BLI_sys_types.h"
12 
13 #include "BKE_customdata.h"
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 struct CustomData;
20 struct CustomDataLayer;
21 struct ID;
22 struct ReportList;
23 
25 typedef enum eAttrDomain {
26  ATTR_DOMAIN_AUTO = -1, /* Use for nodes to choose automatically based on other data. */
27  ATTR_DOMAIN_POINT = 0, /* Mesh, Curve or Point Cloud Point */
28  ATTR_DOMAIN_EDGE = 1, /* Mesh Edge */
29  ATTR_DOMAIN_FACE = 2, /* Mesh Face */
30  ATTR_DOMAIN_CORNER = 3, /* Mesh Corner */
31  ATTR_DOMAIN_CURVE = 4, /* A single curve in a larger curve data-block */
32  ATTR_DOMAIN_INSTANCE = 5, /* Instance */
34 #define ATTR_DOMAIN_NUM 6
35 
36 typedef enum eAttrDomainMask {
42  ATTR_DOMAIN_MASK_ALL = (1 << 5) - 1
44 
45 #define ATTR_DOMAIN_AS_MASK(domain) ((eAttrDomainMask)((1 << (int)(domain))))
46 
47 /* All domains that support color attributes. */
48 #define ATTR_DOMAIN_MASK_COLOR \
49  ((eAttrDomainMask)((ATTR_DOMAIN_MASK_POINT | ATTR_DOMAIN_MASK_CORNER)))
50 
51 /* Attributes. */
52 
53 bool BKE_id_attributes_supported(const struct ID *id);
54 bool BKE_attribute_allow_procedural_access(const char *attribute_name);
55 
60  struct ID *id, const char *name, int type, eAttrDomain domain, struct ReportList *reports);
61 bool BKE_id_attribute_remove(struct ID *id, const char *name, struct ReportList *reports);
62 
67  const char *name,
68  struct ReportList *reports);
69 
70 struct CustomDataLayer *BKE_id_attribute_find(const struct ID *id,
71  const char *name,
72  int type,
73  eAttrDomain domain);
74 
75 struct CustomDataLayer *BKE_id_attribute_search(struct ID *id,
76  const char *name,
78  eAttrDomainMask domain_mask);
79 
80 eAttrDomain BKE_id_attribute_domain(const struct ID *id, const struct CustomDataLayer *layer);
81 int BKE_id_attribute_data_length(struct ID *id, struct CustomDataLayer *layer);
82 bool BKE_id_attribute_required(const struct ID *id, const char *name);
83 bool BKE_id_attribute_rename(struct ID *id,
84  const char *old_name,
85  const char *new_name,
86  struct ReportList *reports);
87 
88 int BKE_id_attributes_length(const struct ID *id,
89  eAttrDomainMask domain_mask,
91 
93 void BKE_id_attributes_active_set(struct ID *id, struct CustomDataLayer *layer);
94 int *BKE_id_attributes_active_index_p(struct ID *id);
95 
98  int lookup_index,
99  eAttrDomainMask domain_mask,
100  eCustomDataMask layer_mask);
101 
103 int BKE_id_attribute_to_index(const struct ID *id,
104  const CustomDataLayer *layer,
105  eAttrDomainMask domain_mask,
106  eCustomDataMask layer_mask);
107 
109  int active_flag,
110  eAttrDomainMask domain_mask,
112 void BKE_id_attribute_subset_active_set(struct ID *id,
113  struct CustomDataLayer *layer,
114  int active_flag,
115  eAttrDomainMask domain_mask,
117 
126  const struct CustomData *vdata,
127  const struct CustomData *edata,
128  const struct CustomData *ldata,
129  const struct CustomData *pdata,
130  const struct CustomData *cdata,
131  struct ID *r_id);
132 
134 void BKE_id_attributes_active_color_set(struct ID *id, struct CustomDataLayer *active_layer);
136 void BKE_id_attributes_render_color_set(struct ID *id, struct CustomDataLayer *active_layer);
137 struct CustomDataLayer *BKE_id_attributes_color_find(const struct ID *id, const char *name);
138 
139 bool BKE_id_attribute_calc_unique_name(struct ID *id, const char *name, char *outname);
140 
141 #ifdef __cplusplus
142 }
143 #endif
int BKE_id_attributes_length(const struct ID *id, eAttrDomainMask domain_mask, eCustomDataMask mask)
void BKE_id_attributes_active_color_set(struct ID *id, struct CustomDataLayer *active_layer)
Definition: attribute.cc:715
int BKE_id_attribute_data_length(struct ID *id, struct CustomDataLayer *layer)
Definition: attribute.cc:413
eAttrDomain
Definition: BKE_attribute.h:25
@ ATTR_DOMAIN_CURVE
Definition: BKE_attribute.h:31
@ ATTR_DOMAIN_INSTANCE
Definition: BKE_attribute.h:32
@ ATTR_DOMAIN_POINT
Definition: BKE_attribute.h:27
@ ATTR_DOMAIN_FACE
Definition: BKE_attribute.h:29
@ ATTR_DOMAIN_CORNER
Definition: BKE_attribute.h:30
@ ATTR_DOMAIN_AUTO
Definition: BKE_attribute.h:26
@ ATTR_DOMAIN_EDGE
Definition: BKE_attribute.h:28
bool BKE_id_attribute_remove(struct ID *id, const char *name, struct ReportList *reports)
Definition: attribute.cc:288
struct CustomDataLayer * BKE_id_attributes_active_get(struct ID *id)
Definition: attribute.cc:458
bool BKE_id_attributes_supported(const struct ID *id)
struct CustomDataLayer * BKE_id_attribute_find(const struct ID *id, const char *name, int type, eAttrDomain domain)
int * BKE_id_attributes_active_index_p(struct ID *id)
Definition: attribute.cc:512
void BKE_id_attributes_render_color_set(struct ID *id, struct CustomDataLayer *active_layer)
Definition: attribute.cc:727
bool BKE_id_attribute_calc_unique_name(struct ID *id, const char *name, char *outname)
Definition: attribute.cc:203
struct CustomDataLayer * BKE_id_attributes_active_color_get(const struct ID *id)
struct CustomDataLayer * BKE_id_attribute_new(struct ID *id, const char *name, int type, eAttrDomain domain, struct ReportList *reports)
Definition: attribute.cc:220
bool BKE_attribute_allow_procedural_access(const char *attribute_name)
Definition: attribute.cc:138
eAttrDomainMask
Definition: BKE_attribute.h:36
@ ATTR_DOMAIN_MASK_POINT
Definition: BKE_attribute.h:37
@ ATTR_DOMAIN_MASK_EDGE
Definition: BKE_attribute.h:38
@ ATTR_DOMAIN_MASK_ALL
Definition: BKE_attribute.h:42
@ ATTR_DOMAIN_MASK_CORNER
Definition: BKE_attribute.h:40
@ ATTR_DOMAIN_MASK_CURVE
Definition: BKE_attribute.h:41
@ ATTR_DOMAIN_MASK_FACE
Definition: BKE_attribute.h:39
void BKE_id_attributes_active_set(struct ID *id, struct CustomDataLayer *layer)
Definition: attribute.cc:488
int BKE_id_attribute_to_index(const struct ID *id, const CustomDataLayer *layer, eAttrDomainMask domain_mask, eCustomDataMask layer_mask)
struct CustomDataLayer * BKE_id_attributes_render_color_get(const struct ID *id)
struct CustomDataLayer * BKE_id_attribute_subset_active_get(const struct ID *id, int active_flag, eAttrDomainMask domain_mask, eCustomDataMask mask)
CustomDataLayer * BKE_id_attribute_from_index(struct ID *id, int lookup_index, eAttrDomainMask domain_mask, eCustomDataMask layer_mask)
Definition: attribute.cc:551
eAttrDomain BKE_id_attribute_domain(const struct ID *id, const struct CustomDataLayer *layer)
void BKE_id_attribute_subset_active_set(struct ID *id, struct CustomDataLayer *layer, int active_flag, eAttrDomainMask domain_mask, eCustomDataMask mask)
Definition: attribute.cc:674
struct CustomDataLayer * BKE_id_attribute_duplicate(struct ID *id, const char *name, struct ReportList *reports)
Definition: attribute.cc:256
bool BKE_id_attribute_rename(struct ID *id, const char *old_name, const char *new_name, struct ReportList *reports)
Definition: attribute.cc:143
struct CustomDataLayer * BKE_id_attributes_color_find(const struct ID *id, const char *name)
bool BKE_id_attribute_required(const struct ID *id, const char *name)
CustomData * BKE_id_attributes_iterator_next_domain(struct ID *id, struct CustomDataLayer *layers)
Definition: attribute.cc:529
void BKE_id_attribute_copy_domains_temp(short id_type, const struct CustomData *vdata, const struct CustomData *edata, const struct CustomData *ldata, const struct CustomData *pdata, const struct CustomData *cdata, struct ID *r_id)
struct CustomDataLayer * BKE_id_attribute_search(struct ID *id, const char *name, eCustomDataMask type, eAttrDomainMask domain_mask)
Definition: attribute.cc:348
CustomData interface, see also DNA_customdata_types.h.
uint64_t eCustomDataMask
_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
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
Definition: math_float4.h:513
Definition: DNA_ID.h:368