diff --git a/source/blender/blenloader/intern/versioning_400.cc b/source/blender/blenloader/intern/versioning_400.cc index c9ea6b2a452..142e341a07b 100644 --- a/source/blender/blenloader/intern/versioning_400.cc +++ b/source/blender/blenloader/intern/versioning_400.cc @@ -1765,10 +1765,10 @@ static void versioning_nodes_dynamic_sockets(bNodeTree &ntree) } } -static void versioning_switch_node_dynamic_socket(bNodeTree &ntree) +static void versioning_nodes_dynamic_sockets_2(bNodeTree &ntree) { LISTBASE_FOREACH (bNode *, node, &ntree.nodes) { - if (node->type != GEO_NODE_SWITCH) { + if (!ELEM(node->type, GEO_NODE_SWITCH, GEO_NODE_SAMPLE_CURVE)) { continue; } version_socket_identifier_suffixes_for_dynamic_types(node->inputs, "_"); @@ -2586,7 +2586,7 @@ void blo_do_versions_400(FileData *fd, Library * /*lib*/, Main *bmain) LISTBASE_FOREACH (bNodeTree *, ntree, &bmain->nodetrees) { if (ntree->type == NTREE_GEOMETRY) { version_geometry_nodes_use_rotation_socket(*ntree); - versioning_switch_node_dynamic_socket(*ntree); + versioning_nodes_dynamic_sockets_2(*ntree); } } } diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc index 2d3be09c1e7..beac0230696 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc @@ -27,12 +27,10 @@ static void node_declare(NodeDeclarationBuilder &b) b.add_input("Curves").only_realized_data().supported_type( GeometryComponent::Type::Curve); - b.add_input("Value", "Value_Float").hide_value().field_on_all(); - b.add_input("Value", "Value_Int").hide_value().field_on_all(); - b.add_input("Value", "Value_Vector").hide_value().field_on_all(); - b.add_input("Value", "Value_Color").hide_value().field_on_all(); - b.add_input("Value", "Value_Bool").hide_value().field_on_all(); - b.add_input("Value", "Value_Rotation").hide_value().field_on_all(); + if (const bNode *node = b.node_or_null()) { + const NodeGeometryCurveSample &storage = node_storage(*node); + b.add_input(eCustomDataType(storage.data_type), "Value").hide_value().field_on_all(); + } b.add_input("Factor") .min(0.0f) @@ -49,16 +47,14 @@ static void node_declare(NodeDeclarationBuilder &b) node_storage(node).use_all_curves = false; }); - b.add_output("Value", "Value_Float").dependent_field({7, 8, 9}); - b.add_output("Value", "Value_Int").dependent_field({7, 8, 9}); - b.add_output("Value", "Value_Vector").dependent_field({7, 8, 9}); - b.add_output("Value", "Value_Color").dependent_field({7, 8, 9}); - b.add_output("Value", "Value_Bool").dependent_field({7, 8, 9}); - b.add_output("Value", "Value_Rotation").dependent_field({7, 8, 9}); + if (const bNode *node = b.node_or_null()) { + const NodeGeometryCurveSample &storage = node_storage(*node); + b.add_output(eCustomDataType(storage.data_type), "Value").dependent_field({2, 3, 4}); + } - b.add_output("Position").dependent_field({7, 8, 9}); - b.add_output("Tangent").dependent_field({7, 8, 9}); - b.add_output("Normal").dependent_field({7, 8, 9}); + b.add_output("Position").dependent_field({2, 3, 4}); + b.add_output("Tangent").dependent_field({2, 3, 4}); + b.add_output("Normal").dependent_field({2, 3, 4}); } static void node_layout(uiLayout *layout, bContext * /*C*/, PointerRNA *ptr) @@ -80,51 +76,23 @@ static void node_init(bNodeTree * /*tree*/, bNode *node) static void node_update(bNodeTree *ntree, bNode *node) { const NodeGeometryCurveSample &storage = node_storage(*node); - const GeometryNodeCurveSampleMode mode = (GeometryNodeCurveSampleMode)storage.mode; - const eCustomDataType data_type = eCustomDataType(storage.data_type); + const GeometryNodeCurveSampleMode mode = GeometryNodeCurveSampleMode(storage.mode); - bNodeSocket *in_socket_float = static_cast(node->inputs.first)->next; - bNodeSocket *in_socket_int32 = in_socket_float->next; - bNodeSocket *in_socket_vector = in_socket_int32->next; - bNodeSocket *in_socket_color4f = in_socket_vector->next; - bNodeSocket *in_socket_bool = in_socket_color4f->next; - bNodeSocket *in_socket_quat = in_socket_bool->next; - - bNodeSocket *factor = in_socket_quat->next; + bNodeSocket *factor = static_cast(node->inputs.first)->next->next; bNodeSocket *length = factor->next; bNodeSocket *curve_index = length->next; bke::nodeSetSocketAvailability(ntree, factor, mode == GEO_NODE_CURVE_SAMPLE_FACTOR); bke::nodeSetSocketAvailability(ntree, length, mode == GEO_NODE_CURVE_SAMPLE_LENGTH); bke::nodeSetSocketAvailability(ntree, curve_index, !storage.use_all_curves); - - bke::nodeSetSocketAvailability(ntree, in_socket_vector, data_type == CD_PROP_FLOAT3); - bke::nodeSetSocketAvailability(ntree, in_socket_float, data_type == CD_PROP_FLOAT); - bke::nodeSetSocketAvailability(ntree, in_socket_color4f, data_type == CD_PROP_COLOR); - bke::nodeSetSocketAvailability(ntree, in_socket_bool, data_type == CD_PROP_BOOL); - bke::nodeSetSocketAvailability(ntree, in_socket_int32, data_type == CD_PROP_INT32); - bke::nodeSetSocketAvailability(ntree, in_socket_quat, data_type == CD_PROP_QUATERNION); - - bNodeSocket *out_socket_float = static_cast(node->outputs.first); - bNodeSocket *out_socket_int32 = out_socket_float->next; - bNodeSocket *out_socket_vector = out_socket_int32->next; - bNodeSocket *out_socket_color4f = out_socket_vector->next; - bNodeSocket *out_socket_bool = out_socket_color4f->next; - bNodeSocket *out_socket_quat = out_socket_bool->next; - - bke::nodeSetSocketAvailability(ntree, out_socket_vector, data_type == CD_PROP_FLOAT3); - bke::nodeSetSocketAvailability(ntree, out_socket_float, data_type == CD_PROP_FLOAT); - bke::nodeSetSocketAvailability(ntree, out_socket_color4f, data_type == CD_PROP_COLOR); - bke::nodeSetSocketAvailability(ntree, out_socket_bool, data_type == CD_PROP_BOOL); - bke::nodeSetSocketAvailability(ntree, out_socket_int32, data_type == CD_PROP_INT32); - bke::nodeSetSocketAvailability(ntree, out_socket_quat, data_type == CD_PROP_QUATERNION); } static void node_gather_link_searches(GatherLinkSearchOpParams ¶ms) { const NodeDeclaration &declaration = *params.node_type().static_declaration; - search_link_ops_for_declarations(params, declaration.inputs.as_span().take_front(4)); - search_link_ops_for_declarations(params, declaration.outputs.as_span().take_front(3)); + search_link_ops_for_declarations(params, declaration.inputs.as_span().take_front(1)); + search_link_ops_for_declarations(params, declaration.inputs.as_span().take_back(3)); + search_link_ops_for_declarations(params, declaration.outputs.as_span().take_back(3)); const std::optional type = bke::socket_type_to_custom_data_type( eNodeSocketDatatype(params.other_socket().type)); @@ -467,59 +435,6 @@ static Array curve_accumulated_lengths(const bke::CurvesGeometry &curves) return curve_lengths; } -static GField get_input_attribute_field(GeoNodeExecParams ¶ms, const eCustomDataType data_type) -{ - switch (data_type) { - case CD_PROP_FLOAT: - return params.extract_input("Value_Float"); - case CD_PROP_FLOAT3: - return params.extract_input("Value_Vector"); - case CD_PROP_COLOR: - return params.extract_input("Value_Color"); - case CD_PROP_BOOL: - return params.extract_input("Value_Bool"); - case CD_PROP_INT32: - return params.extract_input("Value_Int"); - case CD_PROP_QUATERNION: - return params.extract_input("Value_Rotation"); - default: - BLI_assert_unreachable(); - } - return {}; -} - -static void output_attribute_field(GeoNodeExecParams ¶ms, GField field) -{ - switch (bke::cpp_type_to_custom_data_type(field.cpp_type())) { - case CD_PROP_FLOAT: { - params.set_output("Value_Float", field); - break; - } - case CD_PROP_FLOAT3: { - params.set_output("Value_Vector", field); - break; - } - case CD_PROP_COLOR: { - params.set_output("Value_Color", field); - break; - } - case CD_PROP_BOOL: { - params.set_output("Value_Bool", field); - break; - } - case CD_PROP_INT32: { - params.set_output("Value_Int", field); - break; - } - case CD_PROP_QUATERNION: { - params.set_output("Value_Rotation", field); - break; - } - default: - break; - } -} - static void node_geo_exec(GeoNodeExecParams params) { GeometrySet geometry_set = params.extract_input("Curves"); @@ -538,12 +453,11 @@ static void node_geo_exec(GeoNodeExecParams params) curves.ensure_evaluated_lengths(); const NodeGeometryCurveSample &storage = node_storage(params.node()); - const GeometryNodeCurveSampleMode mode = (GeometryNodeCurveSampleMode)storage.mode; - const eCustomDataType data_type = eCustomDataType(storage.data_type); + const GeometryNodeCurveSampleMode mode = GeometryNodeCurveSampleMode(storage.mode); Field length_field = params.extract_input>( mode == GEO_NODE_CURVE_SAMPLE_FACTOR ? "Factor" : "Length"); - GField src_values_field = get_input_attribute_field(params, data_type); + GField src_values_field = params.extract_input("Value"); std::shared_ptr sample_op; if (curves.curves_num() == 1) { @@ -577,7 +491,7 @@ static void node_geo_exec(GeoNodeExecParams params) params.set_output("Position", Field(sample_op, 0)); params.set_output("Tangent", Field(sample_op, 1)); params.set_output("Normal", Field(sample_op, 2)); - output_attribute_field(params, GField(sample_op, 3)); + params.set_output("Value", GField(sample_op, 3)); } static void node_register() diff --git a/source/blender/nodes/intern/node_socket.cc b/source/blender/nodes/intern/node_socket.cc index a3fd22d83c3..1608b9999c4 100644 --- a/source/blender/nodes/intern/node_socket.cc +++ b/source/blender/nodes/intern/node_socket.cc @@ -371,9 +371,6 @@ static const char *get_current_socket_identifier_for_future_socket( const Span socket_decls) { switch (node.type) { - case GEO_NODE_SAMPLE_CURVE: { - return get_identifier_from_decl("Value", socket, socket_decls); - } case FN_NODE_RANDOM_VALUE: { return get_identifier_from_decl({"Min", "Max", "Value"}, socket, socket_decls); }