Nodes: don't use combined input/output sockets in node tree interface
Those shouldn't really exist at all currently, since we forbid them in 354915cf3c
.
Unfortunately, not all cases were removed, and many node trees with such sockets
have been created during the development of 4.1 due to the auto-smooth changes.
I'm not entirely sure if it's still possible to properly remove them now. The commit
above mentions that we might lose links due to changed identifiers. Maybe we're
better off just supporting these inlined sockets while also allowing the "align with
previous socket" functionality.
Either way, not creating more of such node trees for now is reasonable, since we
explicitly disabled that functionality for now.
Pull Request: https://projects.blender.org/blender/blender/pulls/119654
This commit is contained in:
parent
3c25b079ce
commit
067daec270
|
@ -2128,11 +2128,10 @@ static bNodeTree *add_auto_smooth_node_tree(Main &bmain)
|
|||
}
|
||||
group->geometry_node_asset_traits->flag |= GEO_NODE_ASSET_MODIFIER;
|
||||
|
||||
group->tree_interface.add_socket(DATA_("Geometry"),
|
||||
"",
|
||||
"NodeSocketGeometry",
|
||||
NODE_INTERFACE_SOCKET_INPUT | NODE_INTERFACE_SOCKET_OUTPUT,
|
||||
nullptr);
|
||||
group->tree_interface.add_socket(
|
||||
DATA_("Geometry"), "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_OUTPUT, nullptr);
|
||||
group->tree_interface.add_socket(
|
||||
DATA_("Geometry"), "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_INPUT, nullptr);
|
||||
bNodeTreeInterfaceSocket *angle_io_socket = group->tree_interface.add_socket(
|
||||
DATA_("Angle"), "", "NodeSocketFloat", NODE_INTERFACE_SOCKET_INPUT, nullptr);
|
||||
auto &angle_data = *static_cast<bNodeSocketValueFloat *>(angle_io_socket->socket_data);
|
||||
|
@ -2147,7 +2146,7 @@ static bNodeTree *add_auto_smooth_node_tree(Main &bmain)
|
|||
group_input_angle->locx = -420.0f;
|
||||
group_input_angle->locy = -300.0f;
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &group_input_angle->outputs) {
|
||||
if (!STREQ(socket->identifier, "Socket_1")) {
|
||||
if (!STREQ(socket->identifier, "Socket_2")) {
|
||||
socket->flag |= SOCK_HIDDEN;
|
||||
}
|
||||
}
|
||||
|
@ -2155,7 +2154,7 @@ static bNodeTree *add_auto_smooth_node_tree(Main &bmain)
|
|||
group_input_mesh->locx = -60.0f;
|
||||
group_input_mesh->locy = -100.0f;
|
||||
LISTBASE_FOREACH (bNodeSocket *, socket, &group_input_mesh->outputs) {
|
||||
if (!STREQ(socket->identifier, "Socket_0")) {
|
||||
if (!STREQ(socket->identifier, "Socket_1")) {
|
||||
socket->flag |= SOCK_HIDDEN;
|
||||
}
|
||||
}
|
||||
|
@ -2198,7 +2197,7 @@ static bNodeTree *add_auto_smooth_node_tree(Main &bmain)
|
|||
nodeFindSocket(group_output, SOCK_IN, "Socket_0"));
|
||||
nodeAddLink(group,
|
||||
group_input_angle,
|
||||
nodeFindSocket(group_input_angle, SOCK_OUT, "Socket_1"),
|
||||
nodeFindSocket(group_input_angle, SOCK_OUT, "Socket_2"),
|
||||
less_than_or_equal,
|
||||
nodeFindSocket(less_than_or_equal, SOCK_IN, "B"));
|
||||
nodeAddLink(group,
|
||||
|
@ -2213,7 +2212,7 @@ static bNodeTree *add_auto_smooth_node_tree(Main &bmain)
|
|||
nodeFindSocket(boolean_and, SOCK_IN, "Boolean_001"));
|
||||
nodeAddLink(group,
|
||||
group_input_mesh,
|
||||
nodeFindSocket(group_input_mesh, SOCK_OUT, "Socket_0"),
|
||||
nodeFindSocket(group_input_mesh, SOCK_OUT, "Socket_1"),
|
||||
shade_smooth_edge,
|
||||
nodeFindSocket(shade_smooth_edge, SOCK_IN, "Geometry"));
|
||||
nodeAddLink(group,
|
||||
|
@ -2337,14 +2336,14 @@ static ModifierData *create_auto_smooth_modifier(
|
|||
id_us_plus(&md->node_group->id);
|
||||
|
||||
md->settings.properties = idprop::create_group("Nodes Modifier Settings").release();
|
||||
IDProperty *angle_prop = idprop::create("Socket_1", angle).release();
|
||||
IDProperty *angle_prop = idprop::create("Socket_2", angle).release();
|
||||
auto *ui_data = reinterpret_cast<IDPropertyUIDataFloat *>(IDP_ui_data_ensure(angle_prop));
|
||||
ui_data->base.rna_subtype = PROP_ANGLE;
|
||||
ui_data->soft_min = 0.0f;
|
||||
ui_data->soft_max = DEG2RADF(180.0f);
|
||||
IDP_AddToGroup(md->settings.properties, angle_prop);
|
||||
IDP_AddToGroup(md->settings.properties, idprop::create("Socket_1_use_attribute", 0).release());
|
||||
IDP_AddToGroup(md->settings.properties, idprop::create("Socket_1_attribute_name", "").release());
|
||||
IDP_AddToGroup(md->settings.properties, idprop::create("Socket_2_use_attribute", 0).release());
|
||||
IDP_AddToGroup(md->settings.properties, idprop::create("Socket_2_attribute_name", "").release());
|
||||
|
||||
BKE_modifiers_persistent_uid_init(object, md->modifier);
|
||||
return &md->modifier;
|
||||
|
|
|
@ -1190,6 +1190,10 @@ bNodeTreeInterfaceSocket *bNodeTreeInterface::add_socket(const blender::StringRe
|
|||
const NodeTreeInterfaceSocketFlag flag,
|
||||
bNodeTreeInterfacePanel *parent)
|
||||
{
|
||||
/* Check that each interface socket is either an input or an output. Technically, it can be both
|
||||
* at the same time, but we don't want that for the time being. */
|
||||
BLI_assert(((NODE_INTERFACE_SOCKET_INPUT | NODE_INTERFACE_SOCKET_OUTPUT) & flag) !=
|
||||
(NODE_INTERFACE_SOCKET_INPUT | NODE_INTERFACE_SOCKET_OUTPUT));
|
||||
if (parent == nullptr) {
|
||||
parent = &root_panel;
|
||||
}
|
||||
|
|
|
@ -554,11 +554,10 @@ static bNodeTree *add_realize_node_tree(Main *bmain)
|
|||
{
|
||||
bNodeTree *node_tree = ntreeAddTree(bmain, "Realize Instances 2.93 Legacy", "GeometryNodeTree");
|
||||
|
||||
node_tree->tree_interface.add_socket("Geometry",
|
||||
"",
|
||||
"NodeSocketGeometry",
|
||||
NODE_INTERFACE_SOCKET_INPUT | NODE_INTERFACE_SOCKET_OUTPUT,
|
||||
nullptr);
|
||||
node_tree->tree_interface.add_socket(
|
||||
"Geometry", "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_OUTPUT, nullptr);
|
||||
node_tree->tree_interface.add_socket(
|
||||
"Geometry", "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_INPUT, nullptr);
|
||||
|
||||
bNode *group_input = nodeAddStaticNode(nullptr, node_tree, NODE_GROUP_INPUT);
|
||||
group_input->locx = -400.0f;
|
||||
|
|
|
@ -74,11 +74,10 @@ void ensure_surface_deformation_node_exists(bContext &C, Object &curves_ob)
|
|||
nmd.node_group = ntreeAddTree(bmain, DATA_("Surface Deform"), "GeometryNodeTree");
|
||||
|
||||
bNodeTree *ntree = nmd.node_group;
|
||||
ntree->tree_interface.add_socket("Geometry",
|
||||
"",
|
||||
"NodeSocketGeometry",
|
||||
NODE_INTERFACE_SOCKET_INPUT | NODE_INTERFACE_SOCKET_OUTPUT,
|
||||
nullptr);
|
||||
ntree->tree_interface.add_socket(
|
||||
"Geometry", "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_OUTPUT, nullptr);
|
||||
ntree->tree_interface.add_socket(
|
||||
"Geometry", "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_INPUT, nullptr);
|
||||
bNode *group_input = nodeAddStaticNode(&C, ntree, NODE_GROUP_INPUT);
|
||||
bNode *group_output = nodeAddStaticNode(&C, ntree, NODE_GROUP_OUTPUT);
|
||||
bNode *deform_node = nodeAddStaticNode(&C, ntree, GEO_NODE_DEFORM_CURVES_ON_SURFACE);
|
||||
|
|
|
@ -162,11 +162,10 @@ void USDPointInstancerReader::read_object_data(Main *bmain, const double motionS
|
|||
|
||||
bNodeTree *ntree = nmd.node_group;
|
||||
|
||||
ntree->tree_interface.add_socket("Geometry",
|
||||
"",
|
||||
"NodeSocketGeometry",
|
||||
NODE_INTERFACE_SOCKET_INPUT | NODE_INTERFACE_SOCKET_OUTPUT,
|
||||
nullptr);
|
||||
ntree->tree_interface.add_socket(
|
||||
"Geometry", "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_OUTPUT, nullptr);
|
||||
ntree->tree_interface.add_socket(
|
||||
"Geometry", "", "NodeSocketGeometry", NODE_INTERFACE_SOCKET_INPUT, nullptr);
|
||||
bNode *group_input = nodeAddStaticNode(nullptr, ntree, NODE_GROUP_INPUT);
|
||||
group_input->locx = -400.0f;
|
||||
bNode *group_output = nodeAddStaticNode(nullptr, ntree, NODE_GROUP_OUTPUT);
|
||||
|
|
Loading…
Reference in New Issue