Cleanup: use version_node_* for Map Value

Pull Request: https://projects.blender.org/blender/blender/pulls/143796
This commit is contained in:
Habib Gahbiche
2025-08-01 17:35:01 +02:00
parent e8ddaff8ea
commit a64083d6e4

View File

@@ -900,13 +900,14 @@ static void do_version_map_value_node(bNodeTree *node_tree, bNode *node)
const float clamped_value = use_max ? blender::math::min(min_clamped_value, max) :
min_clamped_value;
bNode *value_node = blender::bke::node_add_static_node(nullptr, *node_tree, SH_NODE_VALUE);
value_node->parent = node->parent;
value_node->location[0] = node->location[0];
value_node->location[1] = node->location[1];
bNode &value_node = version_node_add_empty(*node_tree, "ShaderNodeValue");
bNodeSocket &value_output = version_node_add_socket(
*node_tree, value_node, SOCK_OUT, "NodeSocketFloat", "Value");
value_node.parent = node->parent;
value_node.location[0] = node->location[0];
value_node.location[1] = node->location[1];
bNodeSocket *value_output = blender::bke::node_find_socket(*value_node, SOCK_OUT, "Value");
static_cast<bNodeSocketValueFloat *>(value_output->default_value)->value = clamped_value;
static_cast<bNodeSocketValueFloat *>(value_output.default_value)->value = clamped_value;
/* Relink from the Map Value node to the value node. */
LISTBASE_FOREACH_BACKWARD_MUTABLE (bNodeLink *, link, &node_tree->links) {
@@ -914,14 +915,13 @@ static void do_version_map_value_node(bNodeTree *node_tree, bNode *node)
continue;
}
version_node_add_link(*node_tree, *value_node, *value_output, *link->tonode, *link->tosock);
version_node_add_link(*node_tree, value_node, value_output, *link->tonode, *link->tosock);
blender::bke::node_remove_link(node_tree, *link);
}
MEM_freeN(&texture_mapping);
node->storage = nullptr;
blender::bke::node_remove_node(nullptr, *node_tree, *node, false);
version_node_remove(*node_tree, *node);
version_socket_update_is_used(node_tree);
return;
@@ -929,93 +929,109 @@ static void do_version_map_value_node(bNodeTree *node_tree, bNode *node)
/* Otherwise, add math nodes to do the computation, starting with an add node to add the offset
* of the range. */
bNode *add_node = blender::bke::node_add_static_node(nullptr, *node_tree, SH_NODE_MATH);
add_node->parent = node->parent;
add_node->custom1 = NODE_MATH_ADD;
add_node->location[0] = node->location[0];
add_node->location[1] = node->location[1];
add_node->flag |= NODE_COLLAPSED;
bNode &add_node = version_node_add_empty(*node_tree, "ShaderNodeMath");
bNodeSocket &add_input_a = version_node_add_socket(
*node_tree, add_node, SOCK_IN, "NodeSocketFloat", "Value");
bNodeSocket &add_input_b = version_node_add_socket(
*node_tree, add_node, SOCK_IN, "NodeSocketFloat", "Value_001");
version_node_add_socket(*node_tree, add_node, SOCK_IN, "NodeSocketFloat", "Value_002");
bNodeSocket *add_input_a = static_cast<bNodeSocket *>(BLI_findlink(&add_node->inputs, 0));
bNodeSocket *add_input_b = static_cast<bNodeSocket *>(BLI_findlink(&add_node->inputs, 1));
bNodeSocket *add_output = blender::bke::node_find_socket(*add_node, SOCK_OUT, "Value");
bNodeSocket &add_output = version_node_add_socket(
*node_tree, add_node, SOCK_OUT, "NodeSocketFloat", "Value");
add_node.parent = node->parent;
add_node.custom1 = NODE_MATH_ADD;
add_node.location[0] = node->location[0];
add_node.location[1] = node->location[1];
add_node.flag |= NODE_COLLAPSED;
/* Connect the origin of the node to the first input of the add node and remove the original
* link. */
version_node_add_link(
*node_tree, *value_link->fromnode, *value_link->fromsock, *add_node, *add_input_a);
*node_tree, *value_link->fromnode, *value_link->fromsock, add_node, add_input_a);
blender::bke::node_remove_link(node_tree, *value_link);
/* Set the offset to the second input of the add node. */
static_cast<bNodeSocketValueFloat *>(add_input_b->default_value)->value = offset;
static_cast<bNodeSocketValueFloat *>(add_input_b.default_value)->value = offset;
/* Add a multiply node to multiply by the size. */
bNode *multiply_node = blender::bke::node_add_static_node(nullptr, *node_tree, SH_NODE_MATH);
multiply_node->parent = node->parent;
multiply_node->custom1 = NODE_MATH_MULTIPLY;
multiply_node->location[0] = add_node->location[0];
multiply_node->location[1] = add_node->location[1] - 40.0f;
multiply_node->flag |= NODE_COLLAPSED;
bNode &multiply_node = version_node_add_empty(*node_tree, "ShaderNodeMath");
multiply_node.parent = node->parent;
multiply_node.custom1 = NODE_MATH_MULTIPLY;
multiply_node.location[0] = add_node.location[0];
multiply_node.location[1] = add_node.location[1] - 40.0f;
multiply_node.flag |= NODE_COLLAPSED;
bNodeSocket *multiply_input_a = static_cast<bNodeSocket *>(
BLI_findlink(&multiply_node->inputs, 0));
bNodeSocket *multiply_input_b = static_cast<bNodeSocket *>(
BLI_findlink(&multiply_node->inputs, 1));
bNodeSocket *multiply_output = blender::bke::node_find_socket(*multiply_node, SOCK_OUT, "Value");
bNodeSocket &multiply_input_a = version_node_add_socket(
*node_tree, multiply_node, SOCK_IN, "NodeSocketFloat", "Value");
bNodeSocket &multiply_input_b = version_node_add_socket(
*node_tree, multiply_node, SOCK_IN, "NodeSocketFloat", "Value_001");
version_node_add_socket(*node_tree, multiply_node, SOCK_IN, "NodeSocketFloat", "Value_002");
bNodeSocket &multiply_output = version_node_add_socket(
*node_tree, multiply_node, SOCK_OUT, "NodeSocketFloat", "Value");
/* Connect the output of the add node to the first input of the multiply node. */
version_node_add_link(*node_tree, *add_node, *add_output, *multiply_node, *multiply_input_a);
version_node_add_link(*node_tree, add_node, add_output, multiply_node, multiply_input_a);
/* Set the size to the second input of the multiply node. */
static_cast<bNodeSocketValueFloat *>(multiply_input_b->default_value)->value = size;
static_cast<bNodeSocketValueFloat *>(multiply_input_b.default_value)->value = size;
bNode *final_node = multiply_node;
bNodeSocket *final_output = multiply_output;
bNode *final_node = &multiply_node;
bNodeSocket *final_output = &multiply_output;
if (use_min) {
/* Add a maximum node to clamp by the minimum. */
bNode *max_node = blender::bke::node_add_static_node(nullptr, *node_tree, SH_NODE_MATH);
max_node->parent = node->parent;
max_node->custom1 = NODE_MATH_MAXIMUM;
max_node->location[0] = final_node->location[0];
max_node->location[1] = final_node->location[1] - 40.0f;
max_node->flag |= NODE_COLLAPSED;
bNode &max_node = version_node_add_empty(*node_tree, "ShaderNodeMath");
max_node.parent = node->parent;
max_node.custom1 = NODE_MATH_MAXIMUM;
max_node.location[0] = final_node->location[0];
max_node.location[1] = final_node->location[1] - 40.0f;
max_node.flag |= NODE_COLLAPSED;
bNodeSocket *max_input_a = static_cast<bNodeSocket *>(BLI_findlink(&max_node->inputs, 0));
bNodeSocket *max_input_b = static_cast<bNodeSocket *>(BLI_findlink(&max_node->inputs, 1));
bNodeSocket *max_output = blender::bke::node_find_socket(*max_node, SOCK_OUT, "Value");
bNodeSocket &max_input_a = version_node_add_socket(
*node_tree, max_node, SOCK_IN, "NodeSocketFloat", "Value");
bNodeSocket &max_input_b = version_node_add_socket(
*node_tree, max_node, SOCK_IN, "NodeSocketFloat", "Value_001");
version_node_add_socket(*node_tree, max_node, SOCK_IN, "NodeSocketFloat", "Value_002");
bNodeSocket &max_output = version_node_add_socket(
*node_tree, max_node, SOCK_OUT, "NodeSocketFloat", "Value");
/* Connect the output of the final node to the first input of the maximum node. */
version_node_add_link(*node_tree, *final_node, *final_output, *max_node, *max_input_a);
version_node_add_link(*node_tree, *final_node, *final_output, max_node, max_input_a);
/* Set the minimum to the second input of the maximum node. */
static_cast<bNodeSocketValueFloat *>(max_input_b->default_value)->value = min;
static_cast<bNodeSocketValueFloat *>(max_input_b.default_value)->value = min;
final_node = max_node;
final_output = max_output;
final_node = &max_node;
final_output = &max_output;
}
if (use_max) {
/* Add a minimum node to clamp by the maximum. */
bNode *min_node = blender::bke::node_add_static_node(nullptr, *node_tree, SH_NODE_MATH);
min_node->parent = node->parent;
min_node->custom1 = NODE_MATH_MINIMUM;
min_node->location[0] = final_node->location[0];
min_node->location[1] = final_node->location[1] - 40.0f;
min_node->flag |= NODE_COLLAPSED;
bNode &min_node = version_node_add_empty(*node_tree, "ShaderNodeMath");
min_node.parent = node->parent;
min_node.custom1 = NODE_MATH_MINIMUM;
min_node.location[0] = final_node->location[0];
min_node.location[1] = final_node->location[1] - 40.0f;
min_node.flag |= NODE_COLLAPSED;
bNodeSocket *min_input_a = static_cast<bNodeSocket *>(BLI_findlink(&min_node->inputs, 0));
bNodeSocket *min_input_b = static_cast<bNodeSocket *>(BLI_findlink(&min_node->inputs, 1));
bNodeSocket *min_output = blender::bke::node_find_socket(*min_node, SOCK_OUT, "Value");
bNodeSocket &min_input_a = version_node_add_socket(
*node_tree, min_node, SOCK_IN, "NodeSocketFloat", "Value");
bNodeSocket &min_input_b = version_node_add_socket(
*node_tree, min_node, SOCK_IN, "NodeSocketFloat", "Value_001");
version_node_add_socket(*node_tree, min_node, SOCK_IN, "NodeSocketFloat", "Value_002");
bNodeSocket &min_output = version_node_add_socket(
*node_tree, min_node, SOCK_OUT, "NodeSocketFloat", "Value");
/* Connect the output of the final node to the first input of the minimum node. */
version_node_add_link(*node_tree, *final_node, *final_output, *min_node, *min_input_a);
version_node_add_link(*node_tree, *final_node, *final_output, min_node, min_input_a);
/* Set the maximum to the second input of the minimum node. */
static_cast<bNodeSocketValueFloat *>(min_input_b->default_value)->value = max;
static_cast<bNodeSocketValueFloat *>(min_input_b.default_value)->value = max;
final_node = min_node;
final_output = min_output;
final_node = &min_node;
final_output = &min_output;
}
/* Relink from the Map Value node to the final node. */
@@ -1031,7 +1047,7 @@ static void do_version_map_value_node(bNodeTree *node_tree, bNode *node)
MEM_freeN(&texture_mapping);
node->storage = nullptr;
blender::bke::node_remove_node(nullptr, *node_tree, *node, false);
version_node_remove(*node_tree, *node);
version_socket_update_is_used(node_tree);
}