[Bf-blender-cvs] [ef611546d6b] temp-geometry-nodes-expandable-geometry-socket-prototype: keep already existing links when adding new sockets
Jacques Lucke
noreply at git.blender.org
Tue Aug 3 12:08:34 CEST 2021
Commit: ef611546d6b9d3479840042fcae570fcd815c0ac
Author: Jacques Lucke
Date: Tue Aug 3 12:08:23 2021 +0200
Branches: temp-geometry-nodes-expandable-geometry-socket-prototype
https://developer.blender.org/rBef611546d6b9d3479840042fcae570fcd815c0ac
keep already existing links when adding new sockets
===================================================================
M source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
===================================================================
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 3298f4b4f95..dac908268fc 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_geometry_expander.cc
@@ -40,8 +40,12 @@ static void geo_node_geometry_expander_layout(uiLayout *layout,
static void geo_node_geometry_expander_exec(GeoNodeExecParams params)
{
- NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)params.node().storage;
- UNUSED_VARS(storage);
+ const bNode &bnode = params.node();
+ const NodeGeometryGeometryExpander *storage = (const NodeGeometryGeometryExpander *)
+ bnode.storage;
+ LISTBASE_FOREACH (GeometryExpanderOutput *, expander_output, &storage->outputs) {
+ params.set_output(expander_output->socket_identifier, 0.0f);
+ }
}
static void geo_node_geometry_expander_init(bNodeTree *UNUSED(ntree), bNode *node)
@@ -54,19 +58,35 @@ static void geo_node_geometry_expander_init(bNodeTree *UNUSED(ntree), bNode *nod
static void geo_node_geometry_expander_update(bNodeTree *ntree, bNode *node)
{
NodeGeometryGeometryExpander *storage = (NodeGeometryGeometryExpander *)node->storage;
- LISTBASE_FOREACH_MUTABLE (bNodeSocket *, socket, &node->outputs) {
- nodeRemoveSocket(ntree, node, socket);
+
+ Map<StringRef, bNodeSocket *> old_outputs;
+
+ LISTBASE_FOREACH (bNodeSocket *, socket, &node->outputs) {
+ old_outputs.add(socket->identifier, socket);
}
+ VectorSet<bNodeSocket *> new_sockets;
LISTBASE_FOREACH (GeometryExpanderOutput *, expander_output, &storage->outputs) {
- const char *idname = nodeStaticSocketType(expander_output->socket_type, PROP_NONE);
- nodeAddSocket(ntree,
- node,
- SOCK_OUT,
- idname,
- expander_output->socket_identifier,
- expander_output->data_identifier);
+ bNodeSocket *socket = old_outputs.lookup_default(expander_output->socket_identifier, nullptr);
+ if (socket == nullptr) {
+ const char *idname = nodeStaticSocketType(expander_output->socket_type, PROP_NONE);
+ socket = nodeAddSocket(ntree,
+ node,
+ SOCK_OUT,
+ idname,
+ expander_output->socket_identifier,
+ expander_output->data_identifier);
+ }
+ new_sockets.add_new(socket);
+ }
+ LISTBASE_FOREACH_MUTABLE (bNodeSocket *, socket, &node->outputs) {
+ if (!new_sockets.contains(socket)) {
+ nodeRemoveSocket(ntree, node, socket);
+ }
+ }
+ BLI_listbase_clear(&node->outputs);
+ for (bNodeSocket *socket : new_sockets) {
+ BLI_addtail(&node->outputs, socket);
}
- // nodeAddSocket(ntree, node, SOCK_OUT, "NodeSocketFloat", "")
}
static void geo_node_geometry_expander_storage_free(bNode *node)
More information about the Bf-blender-cvs
mailing list