From 839fec7cffefce6d8e5a4ef99f3eea80a76cfb4f Mon Sep 17 00:00:00 2001 From: Walter Van Herck <w.van.herck@fz-juelich.de> Date: Thu, 15 Sep 2016 13:29:40 +0200 Subject: [PATCH] Remove translating Transform3D back and forth in FormFactorDecoratorRotation::clone() --- .../FormFactorDecoratorRotation.cpp | 13 +++++++++---- .../FormFactorDecoratorRotation.h | 2 ++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp index 33725b23fbf..768d7fe8cd2 100644 --- a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp +++ b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.cpp @@ -27,12 +27,9 @@ FormFactorDecoratorRotation::FormFactorDecoratorRotation( m_transform = rotation.getTransform3D(); } -// TODO: can we avoid the conversion from IRotation to Transform3D and back? - FormFactorDecoratorRotation* FormFactorDecoratorRotation::clone() const { - std::unique_ptr<IRotation> P_rotation(IRotation::createRotation(m_transform)); - return new FormFactorDecoratorRotation(*mp_form_factor, *P_rotation); + return new FormFactorDecoratorRotation(*mp_form_factor, m_transform); } complex_t FormFactorDecoratorRotation::evaluate(const WavevectorInfo& wavevectors) const @@ -47,6 +44,14 @@ Eigen::Matrix2cd FormFactorDecoratorRotation::evaluatePol(const WavevectorInfo & return mp_form_factor->evaluatePol(rotated_wavevectors); } +FormFactorDecoratorRotation::FormFactorDecoratorRotation(const IFormFactor &form_factor, + const Transform3D &transform) + : IFormFactorDecorator(form_factor) +{ + setName(BornAgain::FormFactorDecoratorRotationType); + m_transform = transform; +} + WavevectorInfo FormFactorDecoratorRotation::rotate_wavevectors( const WavevectorInfo& wavevectors) const { diff --git a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h index 5103f14f6d0..5c810be023a 100644 --- a/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h +++ b/Core/DecoratedFormFactor/FormFactorDecoratorRotation.h @@ -40,6 +40,8 @@ public: private: Transform3D m_transform; + //! Private constructor for cloning. + FormFactorDecoratorRotation(const IFormFactor &form_factor, const Transform3D &transform); WavevectorInfo rotate_wavevectors(const WavevectorInfo& wavevectors) const; }; -- GitLab