Commit: c15a761524546faa5b82d7da6e7f614efd2ad89a Author: Hans Goudey Date: Mon Sep 26 13:23:07 2022 -0500 Branches: master https://developer.blender.org/rBc15a761524546faa5b82d7da6e7f614efd2ad89a
Geometry Nodes: Miscellaneous changes in control point neighbors node - Use const and whitespace more consistently - Fix "Offset Valid" output only working on point domain - Use the smallest output array that can contain the result. - Consistent include ordering - Use "data-block" term instead of "object" in tooltip - Remove unnecessary call to set default output values =================================================================== M source/blender/nodes/geometry/nodes/node_geo_input_control_point_neighbors.cc =================================================================== diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_control_point_neighbors.cc b/source/blender/nodes/geometry/nodes/node_geo_input_control_point_neighbors.cc index 33b15e0056e..b5d0c8cdd74 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_input_control_point_neighbors.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_input_control_point_neighbors.cc @@ -2,10 +2,10 @@ #include "BLI_task.hh" -#include "node_geometry_util.hh" - #include "BKE_curves.hh" +#include "node_geometry_util.hh" + namespace blender::nodes::node_geo_input_control_point_neighbors_cc { static void node_declare(NodeDeclarationBuilder &b) @@ -25,7 +25,7 @@ static void node_declare(NodeDeclarationBuilder &b) b.add_output<decl::Int>(N_("Point Index")) .field_source() .description(N_("The index of the control point plus the offset within the entire " - "curves object")); + "curves data-block")); } static int apply_offset_in_cyclic_range(const IndexRange range, @@ -53,33 +53,34 @@ static Array<int> build_parent_curves(const bke::CurvesGeometry &curves) class ControlPointNeighborFieldInput final : public bke::CurvesFieldInput { private: - Field<int> index_; - Field<int> offset_; + const Field<int> index_; + const Field<int> offset_; public: ControlPointNeighborFieldInput(Field<int> index, Field<int> offset) - : CurvesFieldInput(CPPType::get<int>(), "Control Point Neighbors node"), - index_(index), - offset_(offset) + : CurvesFieldInput(CPPType::get<int>(), "Control Point Neighbors"), + index_(std::move(index)), + offset_(std::move(offset)) { category_ = Category::Generated; } GVArray get_varray_for_context(const bke::CurvesGeometry &curves, const eAttrDomain domain, - IndexMask mask) const final + const IndexMask mask) const final { const VArray<bool> cyclic = curves.cyclic(); const Array<int> parent_curves = build_parent_curves(curves); - bke::CurvesFieldContext context{curves, domain}; + + const bke::CurvesFieldContext context{curves, domain}; fn::FieldEvaluator evaluator{context, &mask}; evaluator.add(index_); evaluator.add(offset_); evaluator.evaluate(); const VArray<int> indices = evaluator.get_evaluated<int>(0); const VArray<int> offsets = evaluator.get_evaluated<int>(1); - Array<int> output(curves.points_num()); + Array<int> output(mask.min_array_size()); for (const int i_selection : mask) { const int i_point = std::clamp(indices[i_selection], 0, curves.points_num() - 1); const int i_curve = parent_curves[i_point]; @@ -91,7 +92,7 @@ class ControlPointNeighborFieldInput final : public bke::CurvesFieldInput { curve_points, i_point, offsets[i_selection]); continue; } - output[i_selection] = std::clamp(offset_point, 0, int(curves.points_num() - 1)); + output[i_selection] = std::clamp(offset_point, 0, curves.points_num() - 1); } return VArray<int>::ForContainer(std::move(output)); @@ -100,12 +101,14 @@ class ControlPointNeighborFieldInput final : public bke::CurvesFieldInput { class OffsetValidFieldInput final : public bke::CurvesFieldInput { private: - Field<int> index_; - Field<int> offset_; + const Field<int> index_; + const Field<int> offset_; public: OffsetValidFieldInput(Field<int> index, Field<int> offset) - : CurvesFieldInput(CPPType::get<bool>(), "Offset Valid"), index_(index), offset_(offset) + : CurvesFieldInput(CPPType::get<bool>(), "Offset Valid"), + index_(std::move(index)), + offset_(std::move(offset)) { category_ = Category::Generated; } @@ -114,24 +117,25 @@ class OffsetValidFieldInput final : public bke::CurvesFieldInput { const eAttrDomain domain, const IndexMask mask) const final { - bke::CurvesFieldContext context{curves, ATTR_DOMAIN_POINT}; + const VArray<bool> cyclic = curves.cyclic(); + const Array<int> parent_curves = build_parent_curves(curves); + + const bke::CurvesFieldContext context{curves, domain}; fn::FieldEvaluator evaluator{context, &mask}; evaluator.add(index_); evaluator.add(offset_); evaluator.evaluate(); const VArray<int> indices = evaluator.get_evaluated<int>(0); const VArray<int> offsets = evaluator.get_evaluated<int>(1); - Array<int> parent_curves = build_parent_curves(curves); - VArray<bool> cyclic = curves.cyclic(); - Array<bool> output(curves.points_num()); + Array<bool> output(mask.min_array_size()); for (const int i_selection : mask) { const int i_point = indices[i_selection]; - if (!curves.points_range().contains(i_point)) { output[i_selection] = false; continue; } + const int i_curve = parent_curves[i_point]; const IndexRange curve_points = curves.points_for_curve(i_curve); if (cyclic[i_curve]) { @@ -157,7 +161,6 @@ static void node_geo_exec(GeoNodeExecParams params) Field<bool> valid_field{std::make_shared<OffsetValidFieldInput>(index, offset)}; params.set_output("Is Valid Offset", std::move(valid_field)); } - params.set_default_remaining_outputs(); } } // namespace blender::nodes::node_geo_input_control_point_neighbors_cc _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs