Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Schempp <fabianschempp@googlemail.com>2021-03-15 01:11:36 +0300
committerFabian Schempp <fabianschempp@googlemail.com>2021-03-15 01:11:36 +0300
commit070010e203f6cf9ac8fe30c8b60a5394df98e730 (patch)
tree75d78e6b5e7fea7aaca8a53a538998d4d2d9473f /source/blender/nodes/geometry
parenta01fb22f28df21acab103a5216591355b1dc85d7 (diff)
Nodes: multi-input support for Attribute Remove node
This patch adds multi-input support to the Attribute Remove node. Reviewed By: Hans Goudey Differential Revision: https://developer.blender.org/D10698
Diffstat (limited to 'source/blender/nodes/geometry')
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_attribute_remove.cc38
1 files changed, 27 insertions, 11 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_attribute_remove.cc b/source/blender/nodes/geometry/nodes/node_geo_attribute_remove.cc
index bf9bda67045..837f0c3629a 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_attribute_remove.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_remove.cc
@@ -18,7 +18,16 @@
static bNodeSocketTemplate geo_node_attribute_remove_in[] = {
{SOCK_GEOMETRY, N_("Geometry")},
- {SOCK_STRING, N_("Attribute")},
+ {SOCK_STRING,
+ N_("Attribute"),
+ 0.0f,
+ 0.0f,
+ 0.0f,
+ 1.0f,
+ -1.0f,
+ 1.0f,
+ PROP_NONE,
+ SOCK_MULTI_INPUT},
{-1, ""},
};
@@ -29,30 +38,37 @@ static bNodeSocketTemplate geo_node_attribute_remove_out[] = {
namespace blender::nodes {
-static void remove_attribute(GeometryComponent &component, const GeoNodeExecParams &params)
+static void remove_attribute(GeometryComponent &component,
+ GeoNodeExecParams &params,
+ Span<std::string> attribute_names)
{
- const std::string attribute_name = params.get_input<std::string>("Attribute");
- if (attribute_name.empty()) {
- return;
- }
+ for (std::string attribute_name : attribute_names) {
+ if (attribute_name.empty()) {
+ continue;
+ }
- if (!component.attribute_try_delete(attribute_name)) {
- params.error_message_add(NodeWarningType::Error,
- TIP_("Cannot delete attribute with name \"") + attribute_name + "\"");
+ if (!component.attribute_try_delete(attribute_name)) {
+ params.error_message_add(NodeWarningType::Error,
+ TIP_("Cannot delete attribute with name \"") + attribute_name +
+ "\"");
+ }
}
}
static void geo_node_attribute_remove_exec(GeoNodeExecParams params)
{
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
+ Vector<std::string> attribute_names = params.extract_multi_input<std::string>("Attribute");
geometry_set = geometry_set_realize_instances(geometry_set);
if (geometry_set.has<MeshComponent>()) {
- remove_attribute(geometry_set.get_component_for_write<MeshComponent>(), params);
+ remove_attribute(
+ geometry_set.get_component_for_write<MeshComponent>(), params, attribute_names);
}
if (geometry_set.has<PointCloudComponent>()) {
- remove_attribute(geometry_set.get_component_for_write<PointCloudComponent>(), params);
+ remove_attribute(
+ geometry_set.get_component_for_write<PointCloudComponent>(), params, attribute_names);
}
params.set_output("Geometry", geometry_set);