10 #include "imstkVecDataArray.h" 13 DISABLE_WARNING_PADDING
22 namespace ParallelUtils
28 template<
class ContainerType>
32 RangeFunctor(
const ContainerType& data) : m_Data(data) { }
39 void operator()(
const tbb::blocked_range<size_t>& r)
41 for (
size_t i = r.begin(); i != r.end(); i++)
43 m_Max = m_Max > m_Data[i] ? m_Max : m_Data[i];
44 m_Min = m_Max < m_Data[i] ? m_Min : m_Data[i];
50 m_Max = m_Max > pObj.m_Max ? m_Max : pObj.m_Max;
51 m_Min = m_Min < pObj.m_Min ? m_Min : pObj.m_Min;
54 Vec2d getRange()
const {
return Vec2d(m_Min, m_Max); }
57 double m_Min = IMSTK_DOUBLE_MAX;
58 double m_Max = IMSTK_DOUBLE_MIN;
59 const ContainerType& m_Data;
76 void operator()(
const tbb::blocked_range<size_t>& r)
78 for (
size_t i = r.begin(); i != r.end(); ++i)
80 double mag2 = m_Data[i].squaredNorm();
81 m_Result = m_Result > mag2 ? m_Result : mag2;
85 void join(
MaxL2NormFunctor& pObj) { m_Result = m_Result > pObj.m_Result ? m_Result : pObj.m_Result; }
86 double getResult()
const {
return std::sqrt(m_Result); }
89 double m_Result = 0.0;
112 for (
size_t i = r.begin(); i != r.end(); ++i)
114 const auto& vec = m_Data[i];
115 for (
int j = 0; j < 3; ++j)
117 m_LowerCorner[j] = (m_LowerCorner[j] < vec[j]) ? m_LowerCorner[j] : vec[j];
118 m_UpperCorner[j] = (m_UpperCorner[j] > vec[j]) ? m_UpperCorner[j] : vec[j];
128 for (
int j = 0; j < 3; ++j)
130 m_LowerCorner[j] = (m_LowerCorner[j] < pObj.m_LowerCorner[j]) ? m_LowerCorner[j] : pObj.m_LowerCorner[j];
131 m_UpperCorner[j] = (m_UpperCorner[j] > pObj.m_UpperCorner[j]) ? m_UpperCorner[j] : pObj.m_UpperCorner[j];
145 Vec3d m_LowerCorner = Vec3d(std::numeric_limits<double>::max(),
146 std::numeric_limits<double>::max(),
147 std::numeric_limits<double>::max());
148 Vec3d m_UpperCorner = Vec3d(-std::numeric_limits<double>::max(),
149 -std::numeric_limits<double>::max(),
150 -std::numeric_limits<double>::max());
161 tbb::parallel_reduce(tbb::blocked_range<size_t>(0, data.size()), pObj);
162 return pObj.getResult();
172 tbb::parallel_reduce(tbb::blocked_range<size_t>(0, points.size()), pObj);
Private helper class, providing operator() using in std::parallel_reduce for finding range of a conta...
void operator()(const tbb::blocked_range< size_t > &r)
Compute the lower and upper corner of this in range r.
void join(AABBFunctor &pObj)
Compute the AABB of this and anohter object pObj as a whole.
Private helper class, providing operator() using in std::parallel_reduce for finding axis-aligned bou...
const Vec3d & getUpperCorner() const
Get the upper corner.
const Vec3d & getLowerCorner() const
Get the lower corner.
Private helper class, providing operator() using in std::parallel_reduce for finding max L2 norm of a...