This is the last node to use the `CurveEval` type. Since the curve to points node is basically the same as the resample node, now it just reuses the resample code and moves the curve point `CustomData` to a new point cloud at the end. I had to add support for sampling tangents and normals to the resampling. There is one behavior change: If the radius attribute doesn't exist, the node won't set the radius to 1 for the output point cloud anymore. Instead, the default radius for point clouds will be used. That issue was similar to T99814. Differential Revision: https://developer.blender.org/D16008
49 lines
1.8 KiB
C++
49 lines
1.8 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
#include "FN_field.hh"
|
|
|
|
#include "BKE_anonymous_attribute.hh"
|
|
#include "BKE_curves.hh"
|
|
|
|
namespace blender::geometry {
|
|
|
|
using bke::CurvesGeometry;
|
|
|
|
struct ResampleCurvesOutputAttributeIDs {
|
|
bke::AttributeIDRef tangent_id;
|
|
bke::AttributeIDRef normal_id;
|
|
};
|
|
|
|
/**
|
|
* Create new curves where the selected curves have been resampled with a number of uniform-length
|
|
* samples defined by the count field. Interpolate attributes to the result, with an accuracy that
|
|
* depends on the curve's resolution parameter.
|
|
*
|
|
* \note The values provided by the #count_field are clamped to 1 or greater.
|
|
*/
|
|
CurvesGeometry resample_to_count(const CurvesGeometry &src_curves,
|
|
const fn::Field<bool> &selection_field,
|
|
const fn::Field<int> &count_field,
|
|
const ResampleCurvesOutputAttributeIDs &output_ids = {});
|
|
|
|
/**
|
|
* Create new curves resampled to make each segment have the length specified by the
|
|
* #segment_length field input, rounded to make the length of each segment the same.
|
|
* The accuracy will depend on the curve's resolution parameter.
|
|
*/
|
|
CurvesGeometry resample_to_length(const CurvesGeometry &src_curves,
|
|
const fn::Field<bool> &selection_field,
|
|
const fn::Field<float> &segment_length_field,
|
|
const ResampleCurvesOutputAttributeIDs &output_ids = {});
|
|
|
|
/**
|
|
* Evaluate each selected curve to its implicit evaluated points.
|
|
*/
|
|
CurvesGeometry resample_to_evaluated(const CurvesGeometry &src_curves,
|
|
const fn::Field<bool> &selection_field,
|
|
const ResampleCurvesOutputAttributeIDs &output_ids = {});
|
|
|
|
} // namespace blender::geometry
|