/* SPDX-License-Identifier: GPL-2.0-or-later */ #include "node_geometry_util.hh" namespace blender::nodes::node_geo_separate_components_cc { static void node_declare(NodeDeclarationBuilder &b) { b.add_input(N_("Geometry")); b.add_output(N_("Mesh")); b.add_output(N_("Point Cloud")); b.add_output(N_("Curve")); b.add_output(N_("Volume")); b.add_output(N_("Instances")); } static void node_geo_exec(GeoNodeExecParams params) { GeometrySet geometry_set = params.extract_input("Geometry"); GeometrySet meshes; GeometrySet point_clouds; GeometrySet volumes; GeometrySet curves; GeometrySet instances; if (geometry_set.has()) { meshes.add(*geometry_set.get_component_for_read()); } if (geometry_set.has()) { point_clouds.add(*geometry_set.get_component_for_read()); } if (geometry_set.has()) { curves.add(*geometry_set.get_component_for_read()); } if (geometry_set.has()) { volumes.add(*geometry_set.get_component_for_read()); } if (geometry_set.has()) { instances.add(*geometry_set.get_component_for_read()); } params.set_output("Mesh", meshes); params.set_output("Point Cloud", point_clouds); params.set_output("Curve", curves); params.set_output("Volume", volumes); params.set_output("Instances", instances); } } // namespace blender::nodes::node_geo_separate_components_cc void register_node_type_geo_separate_components() { namespace file_ns = blender::nodes::node_geo_separate_components_cc; static bNodeType ntype; geo_node_type_base( &ntype, GEO_NODE_SEPARATE_COMPONENTS, "Separate Components", NODE_CLASS_GEOMETRY); ntype.declare = file_ns::node_declare; ntype.geometry_node_execute = file_ns::node_geo_exec; nodeRegisterType(&ntype); }