diff --git a/GeoModelCore/GeoModelKernel/GeoModelKernel/GeoTransform.h b/GeoModelCore/GeoModelKernel/GeoModelKernel/GeoTransform.h index c1eed73f9df22f8b0275e6c08817f225085a4a82..d036550654e5b20853f0539c85f879397e16d60c 100644 --- a/GeoModelCore/GeoModelKernel/GeoModelKernel/GeoTransform.h +++ b/GeoModelCore/GeoModelKernel/GeoModelKernel/GeoTransform.h @@ -24,21 +24,21 @@ class GeoTransform : public GeoGraphNode { GeoTransform(const GeoTrf::Transform3D& transform); - /// Gets the total transformation. - virtual GeoTrf::Transform3D getTransform(const GeoVAlignmentStore* store=nullptr) const; + /// Gets the total transformation. + virtual GeoTrf::Transform3D getTransform(const GeoVAlignmentStore* store=nullptr) const; - /// Gets the default transformation (no alignment correction) - GeoTrf::Transform3D getDefTransform(const GeoVAlignmentStore* store=nullptr) const; + /// Gets the default transformation (no alignment correction) + const GeoTrf::Transform3D& getDefTransform(const GeoVAlignmentStore* store=nullptr) const; - /// Executes a GeoNodeAction. - virtual void exec(GeoNodeAction *action) const override final; + /// Executes a GeoNodeAction. + virtual void exec(GeoNodeAction *action) const override final; protected: - virtual ~GeoTransform() = default; + virtual ~GeoTransform() = default; private: - // The Euclidean (Rigid Body) transform. - GeoTrf::Transform3D m_transform{GeoTrf::Transform3D::Identity()}; + // The Euclidean (Rigid Body) transform. + GeoTrf::Transform3D m_transform{GeoTrf::Transform3D::Identity()}; }; #endif diff --git a/GeoModelCore/GeoModelKernel/src/GeoAlignableTransform.cxx b/GeoModelCore/GeoModelKernel/src/GeoAlignableTransform.cxx index e0bddc96885bc2bb6d7c7312f8e9de6e757e46e3..e5c08560f6c06140fd153d6d733af841a993ab1c 100755 --- a/GeoModelCore/GeoModelKernel/src/GeoAlignableTransform.cxx +++ b/GeoModelCore/GeoModelKernel/src/GeoAlignableTransform.cxx @@ -24,16 +24,16 @@ GeoTrf::Transform3D GeoAlignableTransform::getTransform(const GeoVAlignmentStore { if(store) { const GeoTrf::Transform3D* delta = store->getDelta(this); - return GeoTransform::getTransform(nullptr) * (!delta ? GeoTrf::Transform3D::Identity() : *delta); + return getDefTransform(store) * (!delta ? GeoTrf::Transform3D::Identity() : *delta); } - else { + else if (m_delta) { std::scoped_lock<std::mutex> guard(m_deltaMutex); - return GeoTransform::getTransform(nullptr) * (!m_delta ? GeoTrf::Transform3D::Identity() : *m_delta); + return getDefTransform(store) * (*m_delta); } + return getDefTransform(store); } -void GeoAlignableTransform::setDelta(const GeoTrf::Transform3D& delta, GeoVAlignmentStore* store) -{ +void GeoAlignableTransform::setDelta(const GeoTrf::Transform3D& delta, GeoVAlignmentStore* store) { if(!store) { { std::scoped_lock<std::mutex> guard(m_deltaMutex); diff --git a/GeoModelCore/GeoModelKernel/src/GeoTransform.cxx b/GeoModelCore/GeoModelKernel/src/GeoTransform.cxx index c37e7e13c12cf6371f5739f71e05470adc6a8e4b..d9543ee348bacca073c136faf8dca9d0e8b2196c 100755 --- a/GeoModelCore/GeoModelKernel/src/GeoTransform.cxx +++ b/GeoModelCore/GeoModelKernel/src/GeoTransform.cxx @@ -15,7 +15,7 @@ GeoTrf::Transform3D GeoTransform::getTransform(const GeoVAlignmentStore* /*store return m_transform; } -GeoTrf::Transform3D GeoTransform::getDefTransform(const GeoVAlignmentStore* /*store*/) const { +const GeoTrf::Transform3D& GeoTransform::getDefTransform(const GeoVAlignmentStore* /*store*/) const { return m_transform; }