Commit: 400f022989c318a7f3cf392164713bf12e93251e Author: Hans Goudey Date: Tue Jan 17 10:31:07 2023 -0600 Branches: master https://developer.blender.org/rB400f022989c318a7f3cf392164713bf12e93251e
Geometry Nodes: Add warning to set material node with no faces The node can't do anything in this case, which isn't always obvious. Resolves T103133 =================================================================== M source/blender/nodes/geometry/nodes/node_geo_set_material.cc =================================================================== diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_material.cc b/source/blender/nodes/geometry/nodes/node_geo_set_material.cc index e6e3eadff03..aa2930cfed9 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_set_material.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_set_material.cc @@ -65,22 +65,27 @@ static void node_geo_exec(GeoNodeExecParams params) GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry"); /* Only add the warnings once, even if there are many unique instances. */ + bool no_faces_warning = false; bool point_selection_warning = false; bool volume_selection_warning = false; bool curves_selection_warning = false; geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) { - if (geometry_set.has_mesh()) { - MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>(); - Mesh &mesh = *mesh_component.get_for_write(); - - bke::MeshFieldContext field_context{mesh, ATTR_DOMAIN_FACE}; - fn::FieldEvaluator selection_evaluator{field_context, mesh.totpoly}; - selection_evaluator.add(selection_field); - selection_evaluator.evaluate(); - const IndexMask selection = selection_evaluator.get_evaluated_as_mask(0); - - assign_material_to_faces(mesh, selection, material); + if (Mesh *mesh = geometry_set.get_mesh_for_write()) { + if (mesh->totpoly == 0) { + if (mesh->totvert > 0) { + no_faces_warning = true; + } + } + else { + bke::MeshFieldContext field_context{*mesh, ATTR_DOMAIN_FACE}; + fn::FieldEvaluator selection_evaluator{field_context, mesh->totpoly}; + selection_evaluator.add(selection_field); + selection_evaluator.evaluate(); + const IndexMask selection = selection_evaluator.get_evaluated_as_mask(0); + + assign_material_to_faces(*mesh, selection, material); + } } if (Volume *volume = geometry_set.get_volume_for_write()) { BKE_id_material_eval_assign(&volume->id, 1, material); @@ -102,6 +107,10 @@ static void node_geo_exec(GeoNodeExecParams params) } }); + if (no_faces_warning) { + params.error_message_add(NodeWarningType::Info, + TIP_("Mesh has no faces for material assignment")); + } if (volume_selection_warning) { params.error_message_add( NodeWarningType::Info, _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs