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) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs