Commit: 5d7f4f2cab20a936df4bcdb60e9a6943d41566d3 Author: Hans Goudey Date: Fri Mar 18 10:30:27 2022 -0500 Branches: master https://developer.blender.org/rB5d7f4f2cab20a936df4bcdb60e9a6943d41566d3
Curves: Port transform node to new data-block Make the new curves' translate and transform functions also affect the handle position attributes. Differential Revision: https://developer.blender.org/D14372 =================================================================== M source/blender/blenkernel/intern/curves_geometry.cc M source/blender/nodes/geometry/nodes/node_geo_transform.cc =================================================================== diff --git a/source/blender/blenkernel/intern/curves_geometry.cc b/source/blender/blenkernel/intern/curves_geometry.cc index 20d6c4e2f09..1fcdcd2f4e9 100644 --- a/source/blender/blenkernel/intern/curves_geometry.cc +++ b/source/blender/blenkernel/intern/curves_geometry.cc @@ -5,6 +5,7 @@ */ #include <mutex> +#include <utility> #include "MEM_guardedalloc.h" @@ -656,9 +657,8 @@ void CurvesGeometry::tag_normals_changed() this->runtime->normal_cache_dirty = true; } -void CurvesGeometry::translate(const float3 &translation) +static void translate_positions(MutableSpan<float3> positions, const float3 &translation) { - MutableSpan<float3> positions = this->positions(); threading::parallel_for(positions.index_range(), 2048, [&](const IndexRange range) { for (float3 &position : positions.slice(range)) { position += translation; @@ -666,9 +666,8 @@ void CurvesGeometry::translate(const float3 &translation) }); } -void CurvesGeometry::transform(const float4x4 &matrix) +static void transform_positions(MutableSpan<float3> positions, const float4x4 &matrix) { - MutableSpan<float3> positions = this->positions(); threading::parallel_for(positions.index_range(), 1024, [&](const IndexRange range) { for (float3 &position : positions.slice(range)) { position = matrix * position; @@ -676,6 +675,32 @@ void CurvesGeometry::transform(const float4x4 &matrix) }); } +void CurvesGeometry::translate(const float3 &translation) +{ + /* Use `as_const` because the non-const functions can add the handle attributes. */ + translate_positions(this->positions(), translation); + if (!std::as_const(*this).handle_positions_left().is_empty()) { + translate_positions(this->handle_positions_left(), translation); + } + if (!std::as_const(*this).handle_positions_right().is_empty()) { + translate_positions(this->handle_positions_right(), translation); + } + this->tag_positions_changed(); +} + +void CurvesGeometry::transform(const float4x4 &matrix) +{ + /* Use `as_const` because the non-const functions can add the handle attributes. */ + transform_positions(this->positions(), matrix); + if (!std::as_const(*this).handle_positions_left().is_empty()) { + transform_positions(this->handle_positions_left(), matrix); + } + if (!std::as_const(*this).handle_positions_right().is_empty()) { + transform_positions(this->handle_positions_right(), matrix); + } + this->tag_positions_changed(); +} + static std::optional<bounds::MinMaxResult<float3>> curves_bounds(const CurvesGeometry &curves) { Span<float3> positions = curves.positions(); diff --git a/source/blender/nodes/geometry/nodes/node_geo_transform.cc b/source/blender/nodes/geometry/nodes/node_geo_transform.cc index 9159ac081e0..a04544e2814 100644 --- a/source/blender/nodes/geometry/nodes/node_geo_transform.cc +++ b/source/blender/nodes/geometry/nodes/node_geo_transform.cc @@ -13,7 +13,6 @@ #include "BKE_curves.hh" #include "BKE_mesh.h" #include "BKE_pointcloud.h" -#include "BKE_spline.hh" #include "BKE_volume.h" #include "DEG_depsgraph_query.h" @@ -127,9 +126,7 @@ static void translate_geometry_set(GeometrySet &geometry, const Depsgraph &depsgraph) { if (Curves *curves = geometry.get_curves_for_write()) { - std::unique_ptr<CurveEval> curve = curves_to_curve_eval(*curves); - curve->translate(translation); - geometry.replace_curves(curve_eval_to_curves(*curve)); + bke::CurvesGeometry::wrap(curves->geometry).translate(translation); } if (Mesh *mesh = geometry.get_mesh_for_write()) { translate_mesh(*mesh, translation); @@ -150,9 +147,7 @@ void transform_geometry_set(GeometrySet &geometry, const Depsgraph &depsgraph) { if (Curves *curves = geometry.get_curves_for_write()) { - std::unique_ptr<CurveEval> curve = curves_to_curve_eval(*curves); - curve->transform(transform); - geometry.replace_curves(curve_eval_to_curves(*curve)); + bke::CurvesGeometry::wrap(curves->geometry).transform(transform); } if (Mesh *mesh = geometry.get_mesh_for_write()) { transform_mesh(*mesh, transform); _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
