diff options
author | Martijn Versteegh <Baardaap> | 2022-06-29 19:36:46 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-06-29 19:36:46 +0300 |
commit | d23818fcd97872667ee969ec85704d3155f2c17a (patch) | |
tree | 6907125851335631c7b073ceed733cc447a0c49f /source/blender | |
parent | 95964444c660249cd3891a9c287ebe0ed165ce07 (diff) |
Attributes: Use attribute renaming function for generic mesh layers
The RNA API in rna_mesh.c has a function to rename generic customdata
layers. However for customdata layers which are attributes (i.e. not
specialized types) the attribute renaming function needs to be used,
as that can ensure unique names across domains.
Differential Revision: https://developer.blender.org/D15310
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/makesrna/intern/rna_mesh.c | 48 |
1 files changed, 42 insertions, 6 deletions
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c index 7e94a7b0146..015b6d4055b 100644 --- a/source/blender/makesrna/intern/rna_mesh.c +++ b/source/blender/makesrna/intern/rna_mesh.c @@ -21,6 +21,7 @@ #include "BLI_math_rotation.h" #include "BLI_utildefines.h" +#include "BKE_attribute.h" #include "BKE_editmesh.h" #include "RNA_access.h" @@ -166,27 +167,62 @@ static CustomData *rna_cd_from_layer(PointerRNA *ptr, CustomDataLayer *cdl) static void rna_MeshVertexLayer_name_set(PointerRNA *ptr, const char *value) { - rna_cd_layer_name_set(rna_mesh_vdata(ptr), (CustomDataLayer *)ptr->data, value); + CustomDataLayer *layer = (CustomDataLayer *)ptr->data; + + if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) { + BKE_id_attribute_rename(ptr->owner_id, layer->name, value, NULL); + } + else { + rna_cd_layer_name_set(rna_mesh_vdata(ptr), layer, value); + } } # if 0 static void rna_MeshEdgeLayer_name_set(PointerRNA *ptr, const char *value) { - rna_cd_layer_name_set(rna_mesh_edata(ptr), (CustomDataLayer *)ptr->data, value); + CustomDataLayer *layer = (CustomDataLayer *)ptr->data; + + if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) { + BKE_id_attribute_rename(ptr->owner_id, layer->name, value, NULL); + } + else { + rna_cd_layer_name_set(rna_mesh_edata(ptr), layer, value); + } } # endif static void rna_MeshPolyLayer_name_set(PointerRNA *ptr, const char *value) { - rna_cd_layer_name_set(rna_mesh_pdata(ptr), (CustomDataLayer *)ptr->data, value); + CustomDataLayer *layer = (CustomDataLayer *)ptr->data; + + if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) { + BKE_id_attribute_rename(ptr->owner_id, layer->name, value, NULL); + } + else { + rna_cd_layer_name_set(rna_mesh_pdata(ptr), layer, value); + } } static void rna_MeshLoopLayer_name_set(PointerRNA *ptr, const char *value) { - rna_cd_layer_name_set(rna_mesh_ldata(ptr), (CustomDataLayer *)ptr->data, value); + CustomDataLayer *layer = (CustomDataLayer *)ptr->data; + + if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) { + BKE_id_attribute_rename(ptr->owner_id, layer->name, value, NULL); + } + else { + rna_cd_layer_name_set(rna_mesh_ldata(ptr), layer, value); + } } /* only for layers shared between types */ static void rna_MeshAnyLayer_name_set(PointerRNA *ptr, const char *value) { - CustomData *cd = rna_cd_from_layer(ptr, (CustomDataLayer *)ptr->data); - rna_cd_layer_name_set(cd, (CustomDataLayer *)ptr->data, value); + CustomDataLayer *layer = (CustomDataLayer *)ptr->data; + + if (CD_TYPE_AS_MASK(layer->type) & CD_MASK_PROP_ALL) { + BKE_id_attribute_rename(ptr->owner_id, layer->name, value, NULL); + } + else { + CustomData *cd = rna_cd_from_layer(ptr, layer); + rna_cd_layer_name_set(cd, layer, value); + } } static bool rna_Mesh_has_custom_normals_get(PointerRNA *ptr) |