Fix #106261: When geometry output is viewed the cycling operator picks wrong sockets. #106318
|
@ -524,7 +524,7 @@ static void remove_links_to_unavailable_viewer_sockets(bNodeTree &btree, bNode &
|
||||||
|
|
||||||
static bNodeSocket *determine_socket_to_view(bNode &node_to_view)
|
static bNodeSocket *determine_socket_to_view(bNode &node_to_view)
|
||||||
{
|
{
|
||||||
int last_linked_socket_index = -1;
|
int last_linked_data_socket_index = -1;
|
||||||
bool has_linked_geometry_socket = false;
|
bool has_linked_geometry_socket = false;
|
||||||
for (bNodeSocket *socket : node_to_view.output_sockets()) {
|
for (bNodeSocket *socket : node_to_view.output_sockets()) {
|
||||||
if (!socket_can_be_viewed(*socket)) {
|
if (!socket_can_be_viewed(*socket)) {
|
||||||
|
@ -541,12 +541,14 @@ static bNodeSocket *determine_socket_to_view(bNode &node_to_view)
|
||||||
if (socket->type == SOCK_GEOMETRY) {
|
if (socket->type == SOCK_GEOMETRY) {
|
||||||
has_linked_geometry_socket = true;
|
has_linked_geometry_socket = true;
|
||||||
}
|
}
|
||||||
last_linked_socket_index = socket->index();
|
else {
|
||||||
|
last_linked_data_socket_index = socket->index();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (last_linked_socket_index == -1) {
|
if (last_linked_data_socket_index == -1 && !has_linked_geometry_socket) {
|
||||||
/* Return the first socket that can be viewed. */
|
/* Return the first socket that can be viewed. */
|
||||||
for (bNodeSocket *socket : node_to_view.output_sockets()) {
|
for (bNodeSocket *socket : node_to_view.output_sockets()) {
|
||||||
if (socket_can_be_viewed(*socket)) {
|
if (socket_can_be_viewed(*socket)) {
|
||||||
|
@ -559,7 +561,7 @@ static bNodeSocket *determine_socket_to_view(bNode &node_to_view)
|
||||||
/* Pick the next socket to be linked to the viewer. */
|
/* Pick the next socket to be linked to the viewer. */
|
||||||
const int tot_outputs = node_to_view.output_sockets().size();
|
const int tot_outputs = node_to_view.output_sockets().size();
|
||||||
for (const int offset : IndexRange(1, tot_outputs)) {
|
for (const int offset : IndexRange(1, tot_outputs)) {
|
||||||
const int index = (last_linked_socket_index + offset) % tot_outputs;
|
const int index = (last_linked_data_socket_index + offset) % tot_outputs;
|
||||||
bNodeSocket &output_socket = node_to_view.output_socket(index);
|
bNodeSocket &output_socket = node_to_view.output_socket(index);
|
||||||
if (!socket_can_be_viewed(output_socket)) {
|
if (!socket_can_be_viewed(output_socket)) {
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Reference in New Issue