Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/attribute.c
| Show First 20 Lines • Show All 305 Lines • ▼ Show 20 Lines | AttributeDomain BKE_id_attribute_domain(const ID *id, const CustomDataLayer *layer) | ||||
| } | } | ||||
| BLI_assert_msg(0, "Custom data layer not found in geometry"); | BLI_assert_msg(0, "Custom data layer not found in geometry"); | ||||
| return ATTR_DOMAIN_NUM; | return ATTR_DOMAIN_NUM; | ||||
| } | } | ||||
| int BKE_id_attribute_data_length(ID *id, CustomDataLayer *layer) | int BKE_id_attribute_data_length(ID *id, CustomDataLayer *layer) | ||||
| { | { | ||||
| /* When in mesh editmode, attributes point to bmesh customdata layers, the attribute data is | |||||
| * empty since custom data is stored per element instead of a single array there (same es UVs | |||||
| * etc.), see D11998. */ | |||||
| switch (GS(id->name)) { | |||||
| case ID_ME: { | |||||
| Mesh *mesh = (Mesh *)id; | |||||
| if (mesh->edit_mesh != NULL) { | |||||
| return 0; | |||||
| } | |||||
| } | |||||
| default: | |||||
| break; | |||||
| } | |||||
| DomainInfo info[ATTR_DOMAIN_NUM]; | DomainInfo info[ATTR_DOMAIN_NUM]; | ||||
| get_domains(id, info); | get_domains(id, info); | ||||
| for (AttributeDomain domain = 0; domain < ATTR_DOMAIN_NUM; domain++) { | for (AttributeDomain domain = 0; domain < ATTR_DOMAIN_NUM; domain++) { | ||||
| CustomData *customdata = info[domain].customdata; | CustomData *customdata = info[domain].customdata; | ||||
| if (customdata && | if (customdata && | ||||
| ARRAY_HAS_ITEM((CustomDataLayer *)layer, customdata->layers, customdata->totlayer)) { | ARRAY_HAS_ITEM((CustomDataLayer *)layer, customdata->layers, customdata->totlayer)) { | ||||
| return info[domain].length; | return info[domain].length; | ||||
| ▲ Show 20 Lines • Show All 360 Lines • Show Last 20 Lines | |||||