[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