Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_separate_components.cc
| Show All 19 Lines | |||||
| static void geo_node_join_geometry_declare(NodeDeclarationBuilder &b) | static void geo_node_join_geometry_declare(NodeDeclarationBuilder &b) | ||||
| { | { | ||||
| b.add_input<decl::Geometry>("Geometry"); | b.add_input<decl::Geometry>("Geometry"); | ||||
| b.add_output<decl::Geometry>("Mesh"); | b.add_output<decl::Geometry>("Mesh"); | ||||
| b.add_output<decl::Geometry>("Point Cloud"); | b.add_output<decl::Geometry>("Point Cloud"); | ||||
| b.add_output<decl::Geometry>("Curve"); | b.add_output<decl::Geometry>("Curve"); | ||||
| b.add_output<decl::Geometry>("Volume"); | b.add_output<decl::Geometry>("Volume"); | ||||
| b.add_output<decl::Geometry>("Instances"); | |||||
| } | } | ||||
| static void geo_node_separate_components_exec(GeoNodeExecParams params) | static void geo_node_separate_components_exec(GeoNodeExecParams params) | ||||
| { | { | ||||
| GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); | GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); | ||||
| /* Note that it will be possible to skip realizing instances here when instancing | |||||
| * geometry directly is supported by creating corresponding geometry instances. */ | |||||
| geometry_set = bke::geometry_set_realize_instances(geometry_set); | |||||
| GeometrySet meshes; | GeometrySet meshes; | ||||
| GeometrySet point_clouds; | GeometrySet point_clouds; | ||||
| GeometrySet volumes; | GeometrySet volumes; | ||||
| GeometrySet curves; | GeometrySet curves; | ||||
| GeometrySet instances; | |||||
| if (geometry_set.has<MeshComponent>()) { | if (geometry_set.has<MeshComponent>()) { | ||||
| meshes.add(*geometry_set.get_component_for_read<MeshComponent>()); | meshes.add(*geometry_set.get_component_for_read<MeshComponent>()); | ||||
| } | } | ||||
| if (geometry_set.has<PointCloudComponent>()) { | if (geometry_set.has<PointCloudComponent>()) { | ||||
| point_clouds.add(*geometry_set.get_component_for_read<PointCloudComponent>()); | point_clouds.add(*geometry_set.get_component_for_read<PointCloudComponent>()); | ||||
| } | } | ||||
| if (geometry_set.has<CurveComponent>()) { | if (geometry_set.has<CurveComponent>()) { | ||||
| curves.add(*geometry_set.get_component_for_read<CurveComponent>()); | curves.add(*geometry_set.get_component_for_read<CurveComponent>()); | ||||
| } | } | ||||
| if (geometry_set.has<VolumeComponent>()) { | if (geometry_set.has<VolumeComponent>()) { | ||||
| volumes.add(*geometry_set.get_component_for_read<VolumeComponent>()); | volumes.add(*geometry_set.get_component_for_read<VolumeComponent>()); | ||||
| } | } | ||||
| if (geometry_set.has<InstancesComponent>()) { | |||||
| instances.add(*geometry_set.get_component_for_read<InstancesComponent>()); | |||||
| } | |||||
| params.set_output("Mesh", meshes); | params.set_output("Mesh", meshes); | ||||
| params.set_output("Point Cloud", point_clouds); | params.set_output("Point Cloud", point_clouds); | ||||
| params.set_output("Curve", curves); | params.set_output("Curve", curves); | ||||
| params.set_output("Volume", volumes); | params.set_output("Volume", volumes); | ||||
| params.set_output("Instances", instances); | |||||
| } | } | ||||
| } // namespace blender::nodes | } // namespace blender::nodes | ||||
| void register_node_type_geo_separate_components() | void register_node_type_geo_separate_components() | ||||
| { | { | ||||
| static bNodeType ntype; | static bNodeType ntype; | ||||
| geo_node_type_base( | geo_node_type_base( | ||||
| &ntype, GEO_NODE_SEPARATE_COMPONENTS, "Separate Components", NODE_CLASS_GEOMETRY, 0); | &ntype, GEO_NODE_SEPARATE_COMPONENTS, "Separate Components", NODE_CLASS_GEOMETRY, 0); | ||||
| ntype.declare = blender::nodes::geo_node_join_geometry_declare; | ntype.declare = blender::nodes::geo_node_join_geometry_declare; | ||||
| ntype.geometry_node_execute = blender::nodes::geo_node_separate_components_exec; | ntype.geometry_node_execute = blender::nodes::geo_node_separate_components_exec; | ||||
| nodeRegisterType(&ntype); | nodeRegisterType(&ntype); | ||||
| } | } | ||||