From 4ae04b35faa24b27dd9884eeb40f91bb9dfc4052 Mon Sep 17 00:00:00 2001 From: Niels Dekker Date: Wed, 31 Jan 2024 21:49:31 +0100 Subject: [PATCH] PERF: Make `m_ObjectToWorldTransformInverse->TransformPoint` non-virtual Suppressed the virtual call mechanism for `m_ObjectToWorldTransformInverse->TransformPoint(point)` by explicit qualification with the `TransformType` scope, in the five `SpatialObject` "InWorldSpace" member functions. A performance improvement of more than 13 % was observed, from more than 0.36 sec. (before this commit) to less than 0.31 sec. (after this commit) when calling IsInsideInWorldSpace(point) 2^25 times, using VS2022 Release. --- .../Core/SpatialObjects/include/itkSpatialObject.hxx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Modules/Core/SpatialObjects/include/itkSpatialObject.hxx b/Modules/Core/SpatialObjects/include/itkSpatialObject.hxx index 882b9a786b6..a6ee58b82b5 100644 --- a/Modules/Core/SpatialObjects/include/itkSpatialObject.hxx +++ b/Modules/Core/SpatialObjects/include/itkSpatialObject.hxx @@ -138,7 +138,7 @@ SpatialObject::DerivativeAtInWorldSpace(const PointType & const std::string & name, const DerivativeOffsetType & offset) { - const PointType pnt = m_ObjectToWorldTransformInverse->TransformPoint(point); + const PointType pnt = m_ObjectToWorldTransformInverse->TransformType::TransformPoint(point); this->DerivativeAtInObjectSpace(pnt, order, value, depth, name, offset); } @@ -180,7 +180,7 @@ SpatialObject::IsInsideInWorldSpace(const PointType & point, unsigned int depth, const std::string & name) const { - const PointType pnt = m_ObjectToWorldTransformInverse->TransformPoint(point); + const PointType pnt = m_ObjectToWorldTransformInverse->TransformType::TransformPoint(point); return IsInsideInObjectSpace(pnt, depth, name); } @@ -188,7 +188,7 @@ template bool SpatialObject::IsInsideInWorldSpace(const PointType & point) const { - const PointType pnt = m_ObjectToWorldTransformInverse->TransformPoint(point); + const PointType pnt = m_ObjectToWorldTransformInverse->TransformType::TransformPoint(point); return IsInsideInObjectSpace(pnt); } @@ -239,7 +239,7 @@ SpatialObject::IsEvaluableAtInWorldSpace(const PointType & point, unsigned int depth, const std::string & name) const { - const PointType pnt = m_ObjectToWorldTransformInverse->TransformPoint(point); + const PointType pnt = m_ObjectToWorldTransformInverse->TransformType::TransformPoint(point); return this->IsEvaluableAtInObjectSpace(pnt, depth, name); } @@ -303,7 +303,7 @@ SpatialObject::ValueAtInWorldSpace(const PointType & point, unsigned int depth, const std::string & name) const { - const PointType pnt = m_ObjectToWorldTransformInverse->TransformPoint(point); + const PointType pnt = m_ObjectToWorldTransformInverse->TransformType::TransformPoint(point); return this->ValueAtInObjectSpace(pnt, value, depth, name); }