diff options
author | Fabian Schempp <fabianschempp@googlemail.com> | 2021-03-12 01:42:19 +0300 |
---|---|---|
committer | Fabian Schempp <fabianschempp@googlemail.com> | 2021-03-12 01:42:19 +0300 |
commit | 3256f0d52c8f172c340a7ef5154e780308e777ca (patch) | |
tree | e26edd0e5c5ea5cd446fe000807d3cf85f2ad243 /source | |
parent | 60f7275f7f3cbf62561ac114a25844b396242b59 (diff) |
Added missing file to last commit:
Nodes: Add Attribute Remove Node D10697
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_attribute_remove.cc | 71 |
1 files changed, 71 insertions, 0 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 new file mode 100644 index 00000000000..bf9bda67045 --- /dev/null +++ b/source/blender/nodes/geometry/nodes/node_geo_attribute_remove.cc @@ -0,0 +1,71 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#include "node_geometry_util.hh" + +static bNodeSocketTemplate geo_node_attribute_remove_in[] = { + {SOCK_GEOMETRY, N_("Geometry")}, + {SOCK_STRING, N_("Attribute")}, + {-1, ""}, +}; + +static bNodeSocketTemplate geo_node_attribute_remove_out[] = { + {SOCK_GEOMETRY, N_("Geometry")}, + {-1, ""}, +}; + +namespace blender::nodes { + +static void remove_attribute(GeometryComponent &component, const GeoNodeExecParams ¶ms) +{ + const std::string attribute_name = params.get_input<std::string>("Attribute"); + if (attribute_name.empty()) { + return; + } + + 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"); + + geometry_set = geometry_set_realize_instances(geometry_set); + + if (geometry_set.has<MeshComponent>()) { + remove_attribute(geometry_set.get_component_for_write<MeshComponent>(), params); + } + if (geometry_set.has<PointCloudComponent>()) { + remove_attribute(geometry_set.get_component_for_write<PointCloudComponent>(), params); + } + + params.set_output("Geometry", geometry_set); +} +} // namespace blender::nodes + +void register_node_type_geo_attribute_remove() +{ + static bNodeType ntype; + + geo_node_type_base( + &ntype, GEO_NODE_ATTRIBUTE_REMOVE, "Attribute Remove", NODE_CLASS_ATTRIBUTE, 0); + node_type_socket_templates(&ntype, geo_node_attribute_remove_in, geo_node_attribute_remove_out); + ntype.geometry_node_execute = blender::nodes::geo_node_attribute_remove_exec; + nodeRegisterType(&ntype); +} |