[Bf-blender-cvs] [39ac38c25fa] sculpt-dev: Attributes: return refined Attribute from attributes.new method
Jacques Lucke
noreply at git.blender.org
Mon Feb 15 22:56:50 CET 2021
Commit: 39ac38c25fa022ab4d9dd16d2b1e08a1ecc4fb37
Author: Jacques Lucke
Date: Mon Feb 15 12:06:21 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB39ac38c25fa022ab4d9dd16d2b1e08a1ecc4fb37
Attributes: return refined Attribute from attributes.new method
Previously `mesh.attributes.new(...)` would return a generic attribute that
one could not do much with. Now it returns refined attributes like `FloatAttribute`.
===================================================================
M source/blender/makesrna/intern/rna_attribute.c
===================================================================
diff --git a/source/blender/makesrna/intern/rna_attribute.c b/source/blender/makesrna/intern/rna_attribute.c
index 21b26b51e0a..28c65992236 100644
--- a/source/blender/makesrna/intern/rna_attribute.c
+++ b/source/blender/makesrna/intern/rna_attribute.c
@@ -79,6 +79,34 @@ static char *rna_Attribute_path(PointerRNA *ptr)
return BLI_sprintfN("attributes['%s']", layer->name);
}
+static StructRNA *srna_by_custom_data_layer_type(const CustomDataType type)
+{
+ switch (type) {
+ case CD_PROP_FLOAT:
+ return &RNA_FloatAttribute;
+ case CD_PROP_INT32:
+ return &RNA_IntAttribute;
+ case CD_PROP_FLOAT3:
+ return &RNA_FloatVectorAttribute;
+ case CD_PROP_COLOR:
+ return &RNA_FloatColorAttribute;
+ case CD_MLOOPCOL:
+ return &RNA_ByteColorAttribute;
+ case CD_PROP_STRING:
+ return &RNA_StringAttribute;
+ case CD_PROP_BOOL:
+ return &RNA_BoolAttribute;
+ default:
+ return NULL;
+ }
+}
+
+static StructRNA *rna_Attribute_refine(PointerRNA *ptr)
+{
+ CustomDataLayer *layer = ptr->data;
+ return srna_by_custom_data_layer_type(layer->type);
+}
+
static void rna_Attribute_name_set(PointerRNA *ptr, const char *value)
{
BKE_id_attribute_rename(ptr->owner_id, ptr->data, value, NULL);
@@ -280,35 +308,11 @@ void rna_AttributeGroup_iterator_next(CollectionPropertyIterator *iter)
PointerRNA rna_AttributeGroup_iterator_get(CollectionPropertyIterator *iter)
{
/* refine to the proper type */
- StructRNA *type;
CustomDataLayer *layer = rna_iterator_array_get(iter);
-
- switch (layer->type) {
- case CD_PROP_FLOAT:
- type = &RNA_FloatAttribute;
- break;
- case CD_PROP_INT32:
- type = &RNA_IntAttribute;
- break;
- case CD_PROP_FLOAT3:
- type = &RNA_FloatVectorAttribute;
- break;
- case CD_PROP_COLOR:
- type = &RNA_FloatColorAttribute;
- break;
- case CD_MLOOPCOL:
- type = &RNA_ByteColorAttribute;
- break;
- case CD_PROP_STRING:
- type = &RNA_StringAttribute;
- break;
- case CD_PROP_BOOL:
- type = &RNA_BoolAttribute;
- break;
- default:
- return PointerRNA_NULL;
+ StructRNA *type = srna_by_custom_data_layer_type(layer->type);
+ if (type == NULL) {
+ return PointerRNA_NULL;
}
-
return rna_pointer_inherit_refine(&iter->parent, type, layer);
}
@@ -598,6 +602,7 @@ static void rna_def_attribute(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "CustomDataLayer");
RNA_def_struct_ui_text(srna, "Attribute", "Geometry attribute");
RNA_def_struct_path_func(srna, "rna_Attribute_path");
+ RNA_def_struct_refine_func(srna, "rna_Attribute_refine");
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Attribute_name_set");
More information about the Bf-blender-cvs
mailing list