[Bf-blender-cvs] [1177debb019] temp-geometry-nodes-fields-prototype: Support selection in the point translate node

Hans Goudey noreply at git.blender.org
Sat Aug 7 00:56:51 CEST 2021


Commit: 1177debb01966984415c5d62a59d07ce369376a8
Author: Hans Goudey
Date:   Fri Aug 6 17:48:53 2021 -0500
Branches: temp-geometry-nodes-fields-prototype
https://developer.blender.org/rB1177debb01966984415c5d62a59d07ce369376a8

Support selection in the point translate node

===================================================================

M	source/blender/nodes/geometry/nodes/node_geo_point_translate.cc

===================================================================

diff --git a/source/blender/nodes/geometry/nodes/node_geo_point_translate.cc b/source/blender/nodes/geometry/nodes/node_geo_point_translate.cc
index 717ac50eafd..e9ec7b110c6 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_point_translate.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_point_translate.cc
@@ -31,6 +31,7 @@ static bNodeSocketTemplate geo_node_point_translate_in[] = {
      FLT_MAX,
      PROP_TRANSLATION,
      SOCK_FIELD},
+    {SOCK_BOOLEAN, N_("Selection"), 1, 0, 0, 0, 0, 0, PROP_NONE, SOCK_HIDE_VALUE | SOCK_FIELD},
     {-1, ""},
 };
 
@@ -49,6 +50,15 @@ static void execute_on_component(GeoNodeExecParams params, GeometryComponent &co
     return;
   }
 
+  bke::FieldRef<bool> selection_field = params.get_input_field<bool>("Selection");
+  bke::FieldInputs selection_field_inputs = selection_field->prepare_inputs();
+  Vector<std::unique_ptr<bke::FieldInputValue>> selection_field_input_values;
+  prepare_field_inputs(
+      selection_field_inputs, component, ATTR_DOMAIN_POINT, selection_field_input_values);
+  bke::FieldOutput selection_field_output = selection_field->evaluate(
+      IndexRange(component.attribute_domain_size(ATTR_DOMAIN_POINT)), selection_field_inputs);
+  GVArray_Typed<bool> selection{selection_field_output.varray_ref()};
+
   bke::FieldRef<float3> field = params.get_input_field<float3>("Translation");
   bke::FieldInputs field_inputs = field->prepare_inputs();
   Vector<std::unique_ptr<bke::FieldInputValue>> field_input_values;
@@ -59,7 +69,9 @@ static void execute_on_component(GeoNodeExecParams params, GeometryComponent &co
   GVArray_Typed<float3> translation{field_output.varray_ref()};
 
   for (const int i : IndexRange(translation.size())) {
-    position_attribute->set(i, position_attribute->get(i) + translation[i]);
+    if (selection[i]) {
+      position_attribute->set(i, position_attribute->get(i) + translation[i]);
+    }
   }
 
   position_attribute.save();



More information about the Bf-blender-cvs mailing list