From b8384700daae7b46bd54162b062cf00afc7b5bc6 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 5 May 2025 16:18:07 +0200 Subject: [PATCH] Points: Add method PointKernel::moveGeometry This allows to more efficiently transform a point cloud if only a translation but no rotation is needed --- src/Mod/Points/App/Points.cpp | 15 +++++++++++++++ src/Mod/Points/App/Points.h | 1 + 2 files changed, 16 insertions(+) diff --git a/src/Mod/Points/App/Points.cpp b/src/Mod/Points/App/Points.cpp index e603bb6a17..169f29491a 100644 --- a/src/Mod/Points/App/Points.cpp +++ b/src/Mod/Points/App/Points.cpp @@ -99,6 +99,21 @@ void PointKernel::transformGeometry(const Base::Matrix4D& rclMat) #endif } +void PointKernel::moveGeometry(const Base::Vector3d& vec) +{ + Base::Vector3f offset = Base::toVector(vec); + std::vector& kernel = getBasicPoints(); +#ifdef _MSC_VER + Concurrency::parallel_for_each(kernel.begin(), kernel.end(), [offset](value_type& value) { + value += offset; + }); +#else + QtConcurrent::blockingMap(kernel, [offset](value_type& value) { + value += offset; + }); +#endif +} + Base::BoundBox3d PointKernel::getBoundBox() const { Base::BoundBox3d bnd; diff --git a/src/Mod/Points/App/Points.h b/src/Mod/Points/App/Points.h index 8ddec22a1e..23e149acfa 100644 --- a/src/Mod/Points/App/Points.h +++ b/src/Mod/Points/App/Points.h @@ -106,6 +106,7 @@ public: double Accuracy, uint16_t flags = 0) const override; void transformGeometry(const Base::Matrix4D& rclMat) override; + void moveGeometry(const Base::Vector3d& vec); Base::BoundBox3d getBoundBox() const override; /** @name I/O */