Changeset View
Changeset View
Standalone View
Standalone View
source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
| Show First 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | static void geo_node_curve_resample_init(bNodeTree *UNUSED(tree), bNode *node) | ||||
| data->mode = GEO_NODE_CURVE_SAMPLE_COUNT; | data->mode = GEO_NODE_CURVE_SAMPLE_COUNT; | ||||
| node->storage = data; | node->storage = data; | ||||
| } | } | ||||
| static void geo_node_curve_resample_update(bNodeTree *UNUSED(ntree), bNode *node) | static void geo_node_curve_resample_update(bNodeTree *UNUSED(ntree), bNode *node) | ||||
| { | { | ||||
| NodeGeometryCurveResample &node_storage = *(NodeGeometryCurveResample *)node->storage; | NodeGeometryCurveResample &node_storage = *(NodeGeometryCurveResample *)node->storage; | ||||
| const GeometryNodeCurveResampleMode mode = (GeometryNodeCurveResampleMode)node_storage.mode; | const GeometryNodeCurveSampleMode mode = (GeometryNodeCurveSampleMode)node_storage.mode; | ||||
| bNodeSocket *count_socket = ((bNodeSocket *)node->inputs.first)->next; | bNodeSocket *count_socket = ((bNodeSocket *)node->inputs.first)->next; | ||||
| bNodeSocket *length_socket = count_socket->next; | bNodeSocket *length_socket = count_socket->next; | ||||
| nodeSetSocketAvailability(count_socket, mode == GEO_NODE_CURVE_SAMPLE_COUNT); | nodeSetSocketAvailability(count_socket, mode == GEO_NODE_CURVE_SAMPLE_COUNT); | ||||
| nodeSetSocketAvailability(length_socket, mode == GEO_NODE_CURVE_SAMPLE_LENGTH); | nodeSetSocketAvailability(length_socket, mode == GEO_NODE_CURVE_SAMPLE_LENGTH); | ||||
| } | } | ||||
| struct SampleModeParam { | struct SampleModeParam { | ||||
| GeometryNodeCurveResampleMode mode; | GeometryNodeCurveSampleMode mode; | ||||
| std::optional<float> length; | std::optional<float> length; | ||||
| std::optional<int> count; | std::optional<int> count; | ||||
| }; | }; | ||||
| static SplinePtr resample_spline(const Spline &src, const int count) | static SplinePtr resample_spline(const Spline &src, const int count) | ||||
| { | { | ||||
| std::unique_ptr<PolySpline> dst = std::make_unique<PolySpline>(); | std::unique_ptr<PolySpline> dst = std::make_unique<PolySpline>(); | ||||
| Spline::copy_base_settings(src, *dst); | Spline::copy_base_settings(src, *dst); | ||||
| ▲ Show 20 Lines • Show All 131 Lines • ▼ Show 20 Lines | static void geo_node_resample_exec(GeoNodeExecParams params) | ||||
| if (!geometry_set.has_curve()) { | if (!geometry_set.has_curve()) { | ||||
| params.set_output("Geometry", GeometrySet()); | params.set_output("Geometry", GeometrySet()); | ||||
| return; | return; | ||||
| } | } | ||||
| const CurveEval &input_curve = *geometry_set.get_curve_for_read(); | const CurveEval &input_curve = *geometry_set.get_curve_for_read(); | ||||
| NodeGeometryCurveResample &node_storage = *(NodeGeometryCurveResample *)params.node().storage; | NodeGeometryCurveResample &node_storage = *(NodeGeometryCurveResample *)params.node().storage; | ||||
| const GeometryNodeCurveResampleMode mode = (GeometryNodeCurveResampleMode)node_storage.mode; | const GeometryNodeCurveSampleMode mode = (GeometryNodeCurveSampleMode)node_storage.mode; | ||||
| SampleModeParam mode_param; | SampleModeParam mode_param; | ||||
| mode_param.mode = mode; | mode_param.mode = mode; | ||||
| if (mode == GEO_NODE_CURVE_SAMPLE_COUNT) { | if (mode == GEO_NODE_CURVE_SAMPLE_COUNT) { | ||||
| const int count = params.extract_input<int>("Count"); | const int count = params.extract_input<int>("Count"); | ||||
| if (count < 1) { | if (count < 1) { | ||||
| params.set_output("Geometry", GeometrySet()); | params.set_output("Geometry", GeometrySet()); | ||||
| return; | return; | ||||
| } | } | ||||
| Show All 29 Lines | |||||