From ded679d86661b9269a36490e34d67c90198b45e6 Mon Sep 17 00:00:00 2001 From: Fabian Schempp Date: Thu, 20 May 2021 20:21:06 +0200 Subject: Initial setup for decimate node --- source/blender/blenkernel/intern/node.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index a0e444186f2..f55b810e7a4 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -5052,6 +5052,7 @@ static void registerGeometryNodes() register_node_type_geo_collection_info(); register_node_type_geo_curve_to_mesh(); register_node_type_geo_curve_resample(); + register_node_type_geo_decimate(); register_node_type_geo_edge_split(); register_node_type_geo_is_viewport(); register_node_type_geo_join_geometry(); -- cgit v1.2.3 From 78322cbee66de5a9c8bef2969bd410e1e5c96f95 Mon Sep 17 00:00:00 2001 From: Fabian Schempp Date: Fri, 2 Jul 2021 20:49:28 +0200 Subject: Split decimate into three different nodes. --- source/blender/blenkernel/intern/node.cc | 3 +++ 1 file changed, 3 insertions(+) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 7884998f9e4..be6133a0e39 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -5051,6 +5051,7 @@ static void registerGeometryNodes() register_node_type_geo_attribute_remove(); register_node_type_geo_boolean(); register_node_type_geo_bounding_box(); + register_node_type_geo_collapse(); register_node_type_geo_collection_info(); register_node_type_geo_convex_hull(); register_node_type_geo_curve_length(); @@ -5060,6 +5061,7 @@ static void registerGeometryNodes() register_node_type_geo_curve_reverse(); register_node_type_geo_curve_subdivide(); register_node_type_geo_decimate(); + register_node_type_geo_dissolve(); register_node_type_geo_delete_geometry(); register_node_type_geo_edge_split(); register_node_type_geo_input_material(); @@ -5093,6 +5095,7 @@ static void registerGeometryNodes() register_node_type_geo_switch(); register_node_type_geo_transform(); register_node_type_geo_triangulate(); + register_node_type_geo_unsubdivide(); register_node_type_geo_volume_to_mesh(); } -- cgit v1.2.3 From bcc1b614d8a211d0514a6a0a10ec9f1211ccd39f Mon Sep 17 00:00:00 2001 From: Fabian Schempp Date: Sat, 3 Jul 2021 00:07:14 +0200 Subject: Geometry Nodes: Collapse Node, Dissolve Node, Unsubdivide Node initially working node added factor as slot Merge branch 'master' into gsoc-2021-porting-modifiers-to-nodes-decimate # Conflicts: # source/blender/blenkernel/BKE_node.h # source/blender/blenkernel/intern/node.cc # source/blender/nodes/CMakeLists.txt # source/blender/nodes/NOD_geometry.h # source/blender/nodes/NOD_static_types.h Split decimate into three different nodes. Set default values for dissolve node removed decimate node and reformatting Merge branch 'master' into soc-2021-porting-modifiers-to-nodes-decimate # Conflicts: # source/blender/blenkernel/BKE_node.h # source/blender/nodes/CMakeLists.txt merged with master and cleanup Differential Revision: https://developer.blender.org/D11791 --- source/blender/blenkernel/intern/node.cc | 1 - 1 file changed, 1 deletion(-) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 28f3bc37615..ed8049e602e 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -5065,7 +5065,6 @@ static void registerGeometryNodes() register_node_type_geo_curve_resample(); register_node_type_geo_curve_reverse(); register_node_type_geo_curve_subdivide(); - register_node_type_geo_decimate(); register_node_type_geo_dissolve(); register_node_type_geo_delete_geometry(); register_node_type_geo_edge_split(); -- cgit v1.2.3 From 1f30133770a8868c797469b95598e88a8cc6809e Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 15 Jul 2021 18:23:28 +1000 Subject: Cleanup: replace BLI_assert(!"text") with BLI_assert_msg(0, "text") This shows the text as part of the assertion message. --- source/blender/blenkernel/intern/node.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 81153fe8486..3151c76e747 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -399,7 +399,7 @@ static ID *node_owner_get(Main *bmain, ID *id) } } - BLI_assert(!"Embedded node tree with no owner. Critical Main inconsistency."); + BLI_assert_msg(0, "Embedded node tree with no owner. Critical Main inconsistency."); return nullptr; } -- cgit v1.2.3 From 38dd4ac4dd466fa4bfc2ace213e72665aa9376f1 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 16 Jul 2021 11:45:52 +1000 Subject: Cleanup: remove redundant parentheses --- source/blender/blenkernel/intern/node.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 3151c76e747..164c29ea5db 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -506,7 +506,7 @@ void ntreeBlendWrite(BlendWriter *writer, bNodeTree *ntree) if (node->storage) { /* could be handlerized at some point, now only 1 exception still */ - if ((ELEM(ntree->type, NTREE_SHADER, NTREE_GEOMETRY)) && + if (ELEM(ntree->type, NTREE_SHADER, NTREE_GEOMETRY) && ELEM(node->type, SH_NODE_CURVE_VEC, SH_NODE_CURVE_RGB)) { BKE_curvemapping_blend_write(writer, (const CurveMapping *)node->storage); } @@ -3143,7 +3143,7 @@ static void free_localized_node_groups(bNodeTree *ntree) } LISTBASE_FOREACH (bNode *, node, &ntree->nodes) { - if ((ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) && node->id) { + if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP) && node->id) { bNodeTree *ngroup = (bNodeTree *)node->id; ntreeFreeTree(ngroup); MEM_freeN(ngroup); @@ -3335,7 +3335,7 @@ bNodeTree *ntreeLocalize(bNodeTree *ntree) ltree->id.tag |= LIB_TAG_LOCALIZED; LISTBASE_FOREACH (bNode *, node, <ree->nodes) { - if ((ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP)) && node->id) { + if (ELEM(node->type, NODE_GROUP, NODE_CUSTOM_GROUP) && node->id) { node->id = (ID *)ntreeLocalize((bNodeTree *)node->id); } } -- cgit v1.2.3 From 54c69bf72922ecdcd14dd8ffb219379727547869 Mon Sep 17 00:00:00 2001 From: Angus Stanton Date: Sun, 18 Jul 2021 14:05:57 -0400 Subject: Geometry Nodes: Curve Trim Node This node implements shortening each spline in the curve based on either a length from the start of each spline, or a factor of the total length of each spline, similar to the "Start & End Mapping" panel of curve properties. For Bezier curves, the first and last control points are adjusted to maintain the shape of the curve, but NURB splines are currently implicitly converted to poly splines. The node is implemented to avoid copying where possible, so it outputs a changed version of the input curve rather than a new one. Differential Revision: https://developer.blender.org/D11901 --- source/blender/blenkernel/intern/node.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 164c29ea5db..2484596d474 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -5121,8 +5121,9 @@ static void registerGeometryNodes() register_node_type_geo_curve_subdivide(); register_node_type_geo_curve_to_mesh(); register_node_type_geo_curve_to_points(); - register_node_type_geo_dissolve(); + register_node_type_geo_curve_trim(); register_node_type_geo_delete_geometry(); + register_node_type_geo_dissolve(); register_node_type_geo_edge_split(); register_node_type_geo_input_material(); register_node_type_geo_is_viewport(); -- cgit v1.2.3 From e9b69bbd85d6d3b38393e036ee7102ab88fdc77d Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 21 Jul 2021 13:05:39 +1000 Subject: Cleanup: replace NB with NOTE in comments --- source/blender/blenkernel/intern/node.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 2484596d474..8a474886eb5 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -1212,10 +1212,12 @@ static void update_typeinfo(Main *bmain, FOREACH_NODETREE_END; } -/* Try to initialize all typeinfo in a node tree. - * NB: In general undefined typeinfo is a perfectly valid case, +/** + * Try to initialize all type-info in a node tree. + * + * \note In general undefined type-info is a perfectly valid case, * the type may just be registered later. - * In that case the update_typeinfo function will set typeinfo on registration + * In that case the update_typeinfo function will set type-info on registration * and do necessary updates. */ void ntreeSetTypes(const struct bContext *C, bNodeTree *ntree) -- cgit v1.2.3 From 4d25d74a1ac92594e55db31e014fbcae774dbb30 Mon Sep 17 00:00:00 2001 From: Johnny Matthews Date: Thu, 22 Jul 2021 10:55:50 -0400 Subject: Geometry Nodes: Set Bezier Handle Type Node This node takes a curve and a point selection and allows you to set the specified (or all) points left/right or both handles to a given type. Differential Revision: https://developer.blender.org/D11992 --- source/blender/blenkernel/intern/node.cc | 1 + 1 file changed, 1 insertion(+) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index 8a474886eb5..a4319717d19 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -5120,6 +5120,7 @@ static void registerGeometryNodes() register_node_type_geo_curve_primitive_star(); register_node_type_geo_curve_resample(); register_node_type_geo_curve_reverse(); + register_node_type_geo_curve_set_handles(); register_node_type_geo_curve_subdivide(); register_node_type_geo_curve_to_mesh(); register_node_type_geo_curve_to_points(); -- cgit v1.2.3 From 7fa2e087f50505aa0741fd1b8ad9adf0c65d7db0 Mon Sep 17 00:00:00 2001 From: Wannes Malfait Date: Wed, 28 Jul 2021 15:43:24 +0200 Subject: Fix T89415: update multi input indices after deleting a node When deleting a node, links attached to that node are deleted, but if one of those links was connected to a multi input socket, the indices of the other links connected to it were not updated. This adds updates both in the case of a normal delete as well as after a delete with reconnect. Differential Revision: https://developer.blender.org/D11716 --- source/blender/blenkernel/intern/node.cc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'source/blender/blenkernel/intern/node.cc') diff --git a/source/blender/blenkernel/intern/node.cc b/source/blender/blenkernel/intern/node.cc index a4319717d19..bcd600a4cb1 100644 --- a/source/blender/blenkernel/intern/node.cc +++ b/source/blender/blenkernel/intern/node.cc @@ -2504,6 +2504,22 @@ bool nodeLinkIsHidden(const bNodeLink *link) return nodeSocketIsHidden(link->fromsock) || nodeSocketIsHidden(link->tosock); } +/* Adjust the indices of links connected to the given multi input socket after deleting the link at + * `deleted_index`. This function also works if the link has not yet been deleted. */ +static void adjust_multi_input_indices_after_removed_link(bNodeTree *ntree, + bNodeSocket *sock, + int deleted_index) +{ + LISTBASE_FOREACH (bNodeLink *, link, &ntree->links) { + /* We only need to adjust those with a greater index, because the others will have the same + * index. */ + if (link->tosock != sock || link->multi_input_socket_index <= deleted_index) { + continue; + } + link->multi_input_socket_index -= 1; + } +} + void nodeInternalRelink(bNodeTree *ntree, bNode *node) { /* store link pointers in output sockets, for efficient lookup */ @@ -2537,10 +2553,18 @@ void nodeInternalRelink(bNodeTree *ntree, bNode *node) ntree->update |= NTREE_UPDATE_LINKS; } else { + if (link->tosock->flag & SOCK_MULTI_INPUT) { + adjust_multi_input_indices_after_removed_link( + ntree, link->tosock, link->multi_input_socket_index); + } nodeRemLink(ntree, link); } } else { + if (link->tosock->flag & SOCK_MULTI_INPUT) { + adjust_multi_input_indices_after_removed_link( + ntree, link->tosock, link->multi_input_socket_index); + }; nodeRemLink(ntree, link); } } @@ -2991,6 +3015,11 @@ void nodeUnlinkNode(bNodeTree *ntree, bNode *node) } if (lb) { + /* Only bother adjusting if the socket is not on the node we're deleting. */ + if (link->tonode != node && link->tosock->flag & SOCK_MULTI_INPUT) { + adjust_multi_input_indices_after_removed_link( + ntree, link->tosock, link->multi_input_socket_index); + } LISTBASE_FOREACH (bNodeSocket *, sock, lb) { if (link->fromsock == sock || link->tosock == sock) { nodeRemLink(ntree, link); -- cgit v1.2.3