Cleanup: Remove unnecessary logic for resample curves node
After 2d80f814cc
, we can assume that curves always have at least one
evalauted point, so this complication isn't necessary anymore.
This commit is contained in:
parent
b4fb2a6980
commit
060c5a7fa2
|
@ -56,43 +56,6 @@ static void node_update(bNodeTree *ntree, bNode *node)
|
|||
nodeSetSocketAvailability(ntree, length_socket, mode == GEO_NODE_CURVE_RESAMPLE_LENGTH);
|
||||
}
|
||||
|
||||
/** Returns the number of evaluated points in each curve. Used to deselect curves with none. */
|
||||
class EvaluatedCountFieldInput final : public GeometryFieldInput {
|
||||
public:
|
||||
EvaluatedCountFieldInput() : GeometryFieldInput(CPPType::get<int>(), "Evaluated Point Count")
|
||||
{
|
||||
category_ = Category::Generated;
|
||||
}
|
||||
|
||||
GVArray get_varray_for_context(const GeometryComponent &component,
|
||||
const AttributeDomain domain,
|
||||
IndexMask UNUSED(mask)) const final
|
||||
{
|
||||
if (component.type() == GEO_COMPONENT_TYPE_CURVE && domain == ATTR_DOMAIN_CURVE &&
|
||||
!component.is_empty()) {
|
||||
const CurveComponent &curve_component = static_cast<const CurveComponent &>(component);
|
||||
const Curves &curves_id = *curve_component.get_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
curves.ensure_evaluated_offsets();
|
||||
return VArray<int>::ForFunc(curves.curves_num(), [&](const int64_t index) -> int {
|
||||
return curves.evaluated_points_for_curve(index).size();
|
||||
});
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
uint64_t hash() const override
|
||||
{
|
||||
/* Some random constant hash. */
|
||||
return 234905872379865;
|
||||
}
|
||||
|
||||
bool is_equal_to(const fn::FieldNode &other) const override
|
||||
{
|
||||
return dynamic_cast<const EvaluatedCountFieldInput *>(&other) != nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if the attribute should be copied/interpolated to the result curves.
|
||||
* Don't output attributes that correspond to curve types that have no curves in the result.
|
||||
|
@ -435,8 +398,6 @@ static Curves *resample_to_uniform_count(const CurveComponent &src_component,
|
|||
|
||||
/**
|
||||
* Evaluate each selected curve to its implicit evaluated points.
|
||||
*
|
||||
* \warning Curves with no evaluated points must not be selected.
|
||||
*/
|
||||
static Curves *resample_to_evaluated(const CurveComponent &src_component,
|
||||
const Field<bool> &selection_field)
|
||||
|
@ -584,28 +545,6 @@ static Field<int> get_curve_count_field(GeoNodeExecParams params,
|
|||
return {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a selection field that removes curves without any evaluated points (invalid NURBS curves)
|
||||
* from the original selection provided to the node. This is here to simplify the sampling actual
|
||||
* resampling code.
|
||||
*/
|
||||
static Field<bool> get_selection_field(GeoNodeExecParams params)
|
||||
{
|
||||
static fn::CustomMF_SI_SI_SO<bool, int, bool> get_selection_fn(
|
||||
"Create Curve Selection",
|
||||
[](const bool orig_selection, const int evaluated_points_num) {
|
||||
return orig_selection && evaluated_points_num > 1;
|
||||
},
|
||||
fn::CustomMF_presets::AllSpanOrSingle());
|
||||
|
||||
auto selection_op = std::make_shared<FieldOperation>(
|
||||
FieldOperation(get_selection_fn,
|
||||
{params.extract_input<Field<bool>>("Selection"),
|
||||
Field<int>(std::make_shared<EvaluatedCountFieldInput>())}));
|
||||
|
||||
return Field<bool>(std::move(selection_op));
|
||||
}
|
||||
|
||||
static void node_geo_exec(GeoNodeExecParams params)
|
||||
{
|
||||
GeometrySet geometry_set = params.extract_input<GeometrySet>("Curve");
|
||||
|
@ -613,7 +552,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
const NodeGeometryCurveResample &storage = node_storage(params.node());
|
||||
const GeometryNodeCurveResampleMode mode = (GeometryNodeCurveResampleMode)storage.mode;
|
||||
|
||||
const Field<bool> selection = get_selection_field(params);
|
||||
const Field<bool> selection = params.extract_input<Field<bool>>("Selection");
|
||||
|
||||
switch (mode) {
|
||||
case GEO_NODE_CURVE_RESAMPLE_COUNT:
|
||||
|
|
Loading…
Reference in New Issue