Fix accessing attribute data in editmode
When in mesh editmode, attributes point to bmesh customdata, the attribute data is empty since custom data is stored per element instead of a single array there (same es UVs etc.). Opposed to e.g. UVs, general attributes were not setting their data length/size to zero in case of editmode though, which could lead to - crash in Outliner Data Api view [that was reported in T95922] - RuntimeError such as the following: ``` RuntimeError: bpy_prop_collection[index]: internal error, valid index 0 given in 8 sized collection, but value not found ``` Now check for mesh editmode in `BKE_id_attribute_data_length` (and return zero in that case). Alternatively, the check could also be done in `rna_Attribute_data_length` only (such as UVs do in `rna_MeshUVLoopLayer_data_length`). Ref D11998 Fixes T95922 Maniphest Tasks: T95922 Differential Revision: https://developer.blender.org/D14714
This commit is contained in:
parent
048c769774
commit
5179b8236b
Notes:
blender-bot
2024-03-07 11:36:15 +01:00
Referenced by issue #95922, Outliner / Data API: Showing custom mesh attributes while in Edit Mode crashes blender
Referenced by pull request #119149, Fix #79961: Outliner Data API crash with a MeshSkinVertex in editmode
Referenced by commit d5fe4c40ed
, Fix #79961: Outliner Data API crash with a MeshSkinVertex in editmode
|
@ -311,6 +311,20 @@ AttributeDomain BKE_id_attribute_domain(const ID *id, const CustomDataLayer *lay
|
|||
|
||||
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];
|
||||
get_domains(id, info);
|
||||
|
||||
|
|
Loading…
Reference in New Issue