[Bf-blender-cvs] [e5f43cf4b70] temp-geometry-nodes-fields-prototype: Support fields in the material assign node
Hans Goudey
noreply at git.blender.org
Tue Aug 3 05:34:13 CEST 2021
Commit: e5f43cf4b700d2a94cf32a63a68af0a8b60032fa
Author: Hans Goudey
Date: Mon Aug 2 23:33:36 2021 -0400
Branches: temp-geometry-nodes-fields-prototype
https://developer.blender.org/rBe5f43cf4b700d2a94cf32a63a68af0a8b60032fa
Support fields in the material assign node
===================================================================
M source/blender/nodes/geometry/nodes/node_geo_material_assign.cc
===================================================================
diff --git a/source/blender/nodes/geometry/nodes/node_geo_material_assign.cc b/source/blender/nodes/geometry/nodes/node_geo_material_assign.cc
index 02b2d685bdd..b1d38582059 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_material_assign.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_material_assign.cc
@@ -36,7 +36,7 @@ static bNodeSocketTemplate geo_node_material_assign_in[] = {
0.0f,
PROP_NONE,
SOCK_HIDE_LABEL},
- {SOCK_STRING, N_("Selection")},
+ {SOCK_BOOLEAN, N_("Selection"), 0, 0, 0, 0, 0, 0, PROP_NONE, SOCK_HIDE_VALUE},
{-1, ""},
};
@@ -75,8 +75,6 @@ static void assign_material_to_faces(Mesh &mesh, const VArray<bool> &face_mask,
static void geo_node_material_assign_exec(GeoNodeExecParams params)
{
Material *material = params.extract_input<Material *>("Material");
- const std::string mask_name = params.extract_input<std::string>("Selection");
-
GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
geometry_set = geometry_set_realize_instances(geometry_set);
@@ -85,9 +83,17 @@ static void geo_node_material_assign_exec(GeoNodeExecParams params)
MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>();
Mesh *mesh = mesh_component.get_for_write();
if (mesh != nullptr) {
- GVArray_Typed<bool> face_mask = mesh_component.attribute_get_for_read<bool>(
- mask_name, ATTR_DOMAIN_FACE, true);
- assign_material_to_faces(*mesh, face_mask, material);
+
+ bke::FieldRef<bool> field = params.get_input_field<bool>("Selection");
+ bke::FieldInputs field_inputs = field->prepare_inputs();
+ Vector<std::unique_ptr<bke::FieldInputValue>> field_input_values;
+ prepare_field_inputs(field_inputs, mesh_component, ATTR_DOMAIN_FACE, field_input_values);
+ bke::FieldOutput field_output = field->evaluate(
+ IndexRange(mesh_component.attribute_domain_size(ATTR_DOMAIN_FACE)), field_inputs);
+
+ GVArray_Typed<bool> selection{field_output.varray_ref()};
+
+ assign_material_to_faces(*mesh, *selection, material);
}
}
More information about the Bf-blender-cvs
mailing list