diff options
author | Jacques Lucke <jacques@blender.org> | 2020-11-17 19:20:15 +0300 |
---|---|---|
committer | Jacques Lucke <jacques@blender.org> | 2020-11-17 19:20:15 +0300 |
commit | 04147e28649ec982ff9dfa69b77f10252ad67e50 (patch) | |
tree | c1258228590b75f1472d57f853f81b0bcbcdc4a1 | |
parent | 9a157d65321af49304024d2e24c7700dff9fed71 (diff) |
use data type and domain enum in random attribute nodeattribute-accessor
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 11 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_nodetree.c | 25 | ||||
-rw-r--r-- | source/blender/nodes/NOD_static_types.h | 2 | ||||
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_random_attribute.cc | 13 |
4 files changed, 48 insertions, 3 deletions
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 825b6274831..ff1a417dd97 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -3163,6 +3163,14 @@ static void node_geometry_buts_triangulate(uiLayout *layout, bContext *UNUSED(C) uiItemR(layout, ptr, "ngon_method", DEFAULT_FLAGS, "", ICON_NONE); } +static void node_geometry_buts_random_attribute(uiLayout *layout, + bContext *UNUSED(C), + PointerRNA *ptr) +{ + uiItemR(layout, ptr, "data_type", DEFAULT_FLAGS, "", ICON_NONE); + uiItemR(layout, ptr, "domain", DEFAULT_FLAGS, "", ICON_NONE); +} + static void node_geometry_set_butfunc(bNodeType *ntype) { switch (ntype->type) { @@ -3175,6 +3183,9 @@ static void node_geometry_set_butfunc(bNodeType *ntype) case GEO_NODE_TRIANGULATE: ntype->draw_buttons = node_geometry_buts_triangulate; break; + case GEO_NODE_RANDOM_ATTRIBUTE: + ntype->draw_buttons = node_geometry_buts_random_attribute; + break; } } diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index ec93fd0aac4..c04f2274739 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -36,6 +36,7 @@ #include "DNA_texture_types.h" #include "BKE_animsys.h" +#include "BKE_attribute.h" #include "BKE_image.h" #include "BKE_node.h" #include "BKE_texture.h" @@ -8258,6 +8259,30 @@ static void def_geo_triangulate(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); } +static void def_geo_attribute_create_common(StructRNA *srna) +{ + PropertyRNA *prop; + + prop = RNA_def_property(srna, "data_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom1"); + RNA_def_property_enum_items(prop, rna_enum_attribute_type_items); + RNA_def_property_enum_default(prop, CD_PROP_FLOAT); + RNA_def_property_ui_text(prop, "Data Type", "Type of data stored in attribute"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); + + prop = RNA_def_property(srna, "domain", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "custom2"); + RNA_def_property_enum_items(prop, rna_enum_attribute_domain_items); + RNA_def_property_enum_default(prop, ATTR_DOMAIN_VERTEX); + RNA_def_property_ui_text(prop, "Domain", ""); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); +} + +static void def_geo_random_attribute(StructRNA *srna) +{ + def_geo_attribute_create_common(srna); +} + /* -------------------------------------------------------------------------- */ static void rna_def_shader_node(BlenderRNA *brna) diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h index 246b42a4e40..e332dc358da 100644 --- a/source/blender/nodes/NOD_static_types.h +++ b/source/blender/nodes/NOD_static_types.h @@ -274,7 +274,7 @@ DefNode(GeometryNode, GEO_NODE_BOOLEAN, def_geo_boolean, "BOOLEAN", Boolean, "Bo DefNode(GeometryNode, GEO_NODE_POINT_DISTRIBUTE, 0, "POINT_DISTRIBUTE", PointDistribute, "Point Distribute", "") DefNode(GeometryNode, GEO_NODE_POINT_INSTANCE, 0, "POINT_INSTANCE", PointInstance, "Point Instance", "") DefNode(GeometryNode, GEO_NODE_OBJECT_INFO, 0, "OBJECT_INFO", ObjectInfo, "Object Info", "") -DefNode(GeometryNode, GEO_NODE_RANDOM_ATTRIBUTE, 0, "RANDOM_ATTRIBUTE", RandomAttribute, "Random Attribute", "") +DefNode(GeometryNode, GEO_NODE_RANDOM_ATTRIBUTE, def_geo_random_attribute, "RANDOM_ATTRIBUTE", RandomAttribute, "Random Attribute", "") /* undefine macros */ #undef DefNode diff --git a/source/blender/nodes/geometry/nodes/node_geo_random_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_random_attribute.cc index c743cc31a94..399faad9415 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_random_attribute.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_random_attribute.cc @@ -34,10 +34,19 @@ static bNodeSocketTemplate geo_node_random_attribute_out[] = { {-1, ""}, }; +static void geo_attribute_random_init(bNodeTree *UNUSED(tree), bNode *node) +{ + node->custom1 = CD_PROP_FLOAT; +} + namespace blender::nodes { static void geo_random_attribute_exec(GeoNodeExecParams params) { + const bNode &node = params.node(); + const int data_type = node.custom1; + const AttributeDomain domain = static_cast<AttributeDomain>(node.custom2); + GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); const std::string attribute_name = params.extract_input<std::string>("Attribute"); const float3 min_value = params.extract_input<float3>("Min"); @@ -55,8 +64,7 @@ static void geo_random_attribute_exec(GeoNodeExecParams params) mesh_component, attribute_name); if (!attribute_opt.has_value()) { - BKE_id_attribute_new( - &mesh->id, attribute_name.c_str(), CD_PROP_FLOAT3, ATTR_DOMAIN_VERTEX, nullptr); + BKE_id_attribute_new(&mesh->id, attribute_name.c_str(), data_type, domain, nullptr); attribute_opt = bke::mesh_attribute_get_for_write(mesh_component, attribute_name); } @@ -96,6 +104,7 @@ void register_node_type_geo_random_attribute() geo_node_type_base(&ntype, GEO_NODE_RANDOM_ATTRIBUTE, "Random Attribute", 0, 0); node_type_socket_templates(&ntype, geo_node_random_attribute_in, geo_node_random_attribute_out); + node_type_init(&ntype, geo_attribute_random_init); ntype.geometry_node_execute = blender::nodes::geo_random_attribute_exec; nodeRegisterType(&ntype); } |