[Bf-blender-cvs] [5d0409c25cd] temp-geometry-nodes-expandable-geometry-socket-prototype: initial array output

Jacques Lucke noreply at git.blender.org
Tue Aug 3 13:45:41 CEST 2021


Commit: 5d0409c25cd4e5bc1c3bc4a0101559574a08d0ad
Author: Jacques Lucke
Date:   Tue Aug 3 13:12:18 2021 +0200
Branches: temp-geometry-nodes-expandable-geometry-socket-prototype
https://developer.blender.org/rB5d0409c25cd4e5bc1c3bc4a0101559574a08d0ad

initial array output

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

M	source/blender/editors/space_node/node_edit.cc
M	source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc

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

diff --git a/source/blender/editors/space_node/node_edit.cc b/source/blender/editors/space_node/node_edit.cc
index 184dc1d5e85..ac291b7bb83 100644
--- a/source/blender/editors/space_node/node_edit.cc
+++ b/source/blender/editors/space_node/node_edit.cc
@@ -36,6 +36,7 @@
 #include "BLI_math.h"
 
 #include "BKE_context.h"
+#include "BKE_geometry_set.hh"
 #include "BKE_global.h"
 #include "BKE_image.h"
 #include "BKE_lib_id.h"
@@ -3022,6 +3023,8 @@ static int node_geometry_expander_output_add_exec(bContext *C, wmOperator *op)
   expander_output->data_identifier = BLI_strdup("position");
   expander_output->socket_identifier = BLI_strdup(identifier.c_str());
   expander_output->socket_type = SOCK_FLOAT;
+  expander_output->component_type = (int)GEO_COMPONENT_TYPE_MESH;
+  expander_output->domain = ATTR_DOMAIN_POINT;
   BLI_addtail(&storage->outputs, expander_output);
 
   nodeUpdate(ntree, node);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc b/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
index dac908268fc..d6903b0a085 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
@@ -43,8 +43,20 @@ static void geo_node_geometry_expander_exec(GeoNodeExecParams params)
   const bNode &bnode = params.node();
   const NodeGeometryGeometryExpander *storage = (const NodeGeometryGeometryExpander *)
                                                     bnode.storage;
+  GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
   LISTBASE_FOREACH (GeometryExpanderOutput *, expander_output, &storage->outputs) {
-    params.set_output(expander_output->socket_identifier, 0.0f);
+    const GeometryComponent *component = geometry_set.get_component_for_read(
+        (GeometryComponentType)expander_output->component_type);
+    if (component == nullptr) {
+      params.set_output(expander_output->socket_identifier, Array<float>());
+      continue;
+    }
+
+    GVArray_Typed<float> attribute = component->attribute_get_for_read<float>(
+        expander_output->data_identifier, (AttributeDomain)expander_output->domain, 0.0f);
+    Array<float> values(attribute.size());
+    attribute->materialize(values);
+    params.set_output(expander_output->socket_identifier, std::move(values));
   }
 }



More information about the Bf-blender-cvs mailing list