[Bf-blender-cvs] [d23818fcd97] master: Attributes: Use attribute renaming function for generic mesh layers

Martijn Versteegh noreply at git.blender.org
Wed Jun 29 18:37:12 CEST 2022


Commit: d23818fcd97872667ee969ec85704d3155f2c17a
Author: Martijn Versteegh
Date:   Wed Jun 29 11:36:46 2022 -0500
Branches: master
https://developer.blender.org/rBd23818fcd97872667ee969ec85704d3155f2c17a

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

===================================================================

M	source/blender/makesrna/intern/rna_mesh.c

===================================================================

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)



More information about the Bf-blender-cvs mailing list