diff options
Diffstat (limited to 'source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc')
-rw-r--r-- | source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc | 70 |
1 files changed, 37 insertions, 33 deletions
diff --git a/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc b/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc index e0a3faaefb0..4ac155d2f57 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc @@ -46,7 +46,7 @@ extern void copy_masked_polys_to_new_mesh(const Mesh &src_mesh, blender::Span<int> masked_poly_indices, blender::Span<int> new_loop_starts); -namespace blender::nodes { +namespace blender::nodes::delete_geometry_node { static void geo_node_delete_geometry_declare(NodeDeclarationBuilder &b) { @@ -1148,6 +1148,36 @@ static void separate_mesh_selection(GeometrySet &geometry_set, do_mesh_separation(geometry_set, src_component, selection, invert, selection_domain, mode); } +static void geo_node_delete_geometry_exec(GeoNodeExecParams params) +{ + GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); + + const Field<bool> selection_field = params.extract_input<Field<bool>>("Selection"); + + const bNode &node = params.node(); + const NodeGeometryDeleteGeometry &storage = *(const NodeGeometryDeleteGeometry *)node.storage; + const AttributeDomain domain = static_cast<AttributeDomain>(storage.domain); + const GeometryNodeDeleteGeometryMode mode = static_cast<GeometryNodeDeleteGeometryMode>( + storage.mode); + + bool all_is_error = false; + geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) { + bool this_is_error = false; + /* Invert here because we want to keep the things not in the selection. */ + separate_geometry(geometry_set, domain, mode, selection_field, true, this_is_error); + all_is_error &= this_is_error; + }); + if (all_is_error) { + /* Only show this if none of the instances/components actually changed. */ + params.error_message_add(NodeWarningType::Info, TIP_("No geometry with given domain")); + } + + params.set_output("Geometry", std::move(geometry_set)); +} + +} // namespace blender::nodes::delete_geometry_node + +namespace blender::nodes { void separate_geometry(GeometrySet &geometry_set, const AttributeDomain domain, const GeometryNodeDeleteGeometryMode mode, @@ -1155,6 +1185,7 @@ void separate_geometry(GeometrySet &geometry_set, const bool invert, bool &r_is_error) { + using namespace blender::nodes::delete_geometry_node; bool some_valid_domain = false; if (geometry_set.has_pointcloud()) { if (domain == ATTR_DOMAIN_POINT) { @@ -1176,34 +1207,6 @@ void separate_geometry(GeometrySet &geometry_set, } r_is_error = !some_valid_domain && geometry_set.has_realized_data(); } - -static void geo_node_delete_geometry_exec(GeoNodeExecParams params) -{ - GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); - - const Field<bool> selection_field = params.extract_input<Field<bool>>("Selection"); - - const bNode &node = params.node(); - const NodeGeometryDeleteGeometry &storage = *(const NodeGeometryDeleteGeometry *)node.storage; - const AttributeDomain domain = static_cast<AttributeDomain>(storage.domain); - const GeometryNodeDeleteGeometryMode mode = static_cast<GeometryNodeDeleteGeometryMode>( - storage.mode); - - bool all_is_error = false; - geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) { - bool this_is_error = false; - /* Invert here because we want to keep the things not in the selection. */ - separate_geometry(geometry_set, domain, mode, selection_field, true, this_is_error); - all_is_error &= this_is_error; - }); - if (all_is_error) { - /* Only show this if none of the instances/components actually changed. */ - params.error_message_add(NodeWarningType::Info, TIP_("No geometry with given domain")); - } - - params.set_output("Geometry", std::move(geometry_set)); -} - } // namespace blender::nodes void register_node_type_geo_delete_geometry() @@ -1217,10 +1220,11 @@ void register_node_type_geo_delete_geometry() node_free_standard_storage, node_copy_standard_storage); - node_type_init(&ntype, blender::nodes::geo_node_delete_geometry_init); + node_type_init(&ntype, blender::nodes::delete_geometry_node::geo_node_delete_geometry_init); - ntype.declare = blender::nodes::geo_node_delete_geometry_declare; - ntype.geometry_node_execute = blender::nodes::geo_node_delete_geometry_exec; - ntype.draw_buttons = blender::nodes::geo_node_delete_geometry_layout; + ntype.declare = blender::nodes::delete_geometry_node::geo_node_delete_geometry_declare; + ntype.geometry_node_execute = + blender::nodes::delete_geometry_node::geo_node_delete_geometry_exec; + ntype.draw_buttons = blender::nodes::delete_geometry_node::geo_node_delete_geometry_layout; nodeRegisterType(&ntype); } |