diff --git a/Device/Mask/MaskStack.cpp b/Device/Mask/MaskStack.cpp index 8fe30f58d0243941eee430b0663a2691f515ebc8..e8358f72ddfba8f873cd3c9a54ecb76fe0524e21 100644 --- a/Device/Mask/MaskStack.cpp +++ b/Device/Mask/MaskStack.cpp @@ -31,10 +31,10 @@ MaskPattern* MaskPattern::clone() const return new MaskPattern(shape->clone(), doMask); } + MaskStack::MaskStack(const Scale& xAxis, const Scale& yAxis) : m_xAxis(xAxis.clone()) , m_yAxis(yAxis.clone()) - , m_masked(xAxis.size() * yAxis.size(), false) { } @@ -44,19 +44,25 @@ MaskStack::MaskStack(const MaskStack& other) : m_xAxis(other.m_xAxis->clone()) , m_yAxis(other.m_yAxis->clone()) , m_stack(other.m_stack) - , m_masked(other.m_masked) { } void MaskStack::addMask(const IShape2D& shape, bool mask_value) { m_stack.emplace_back(new MaskPattern(shape.clone(), mask_value)); - process_masks(); } bool MaskStack::isMasked(size_t i_flat) const { - return m_masked[i_flat]; + Bin1D binx = m_xAxis->bin(i_flat % m_xAxis->size()); + Bin1D biny = m_yAxis->bin(i_flat / m_xAxis->size()); + + for (int k = m_stack.size() - 1; k >= 0; --k) { + const MaskPattern* const pat = m_stack[k]; + if (pat->shape->contains(binx, biny)) + return pat->doMask; + } + return false; } bool MaskStack::hasMasks() const @@ -73,25 +79,3 @@ const MaskPattern* MaskStack::patternAt(size_t iMask) const { return m_stack.at(iMask); } - -void MaskStack::process_masks() -{ - m_masked.clear(); - m_masked.resize(m_xAxis->size() * m_yAxis->size(), false); - - if (m_stack.empty()) - return; - - for (size_t i_flat = 0; i_flat < m_masked.size(); ++i_flat) { - Bin1D binx = m_xAxis->bin(i_flat % m_xAxis->size()); - Bin1D biny = m_yAxis->bin(i_flat / m_xAxis->size()); - // setting mask to the data starting from last shape added - for (int k = m_stack.size() - 1; k >= 0; --k) { - const MaskPattern* const pat = m_stack[k]; - if (pat->shape->contains(binx, biny)) { - m_masked[i_flat] = pat->doMask; - break; // i_flat is covered by the shape, stop looking further - } - } - } -} diff --git a/Device/Mask/MaskStack.h b/Device/Mask/MaskStack.h index ada95acc5d4a0ee87de2a74962af4b7d37665cd3..276b5ce4316511f6a1013aea8b642a78e8347e5d 100644 --- a/Device/Mask/MaskStack.h +++ b/Device/Mask/MaskStack.h @@ -56,15 +56,10 @@ public: const MaskPattern* patternAt(size_t iMask) const; private: - void process_masks(); - //... primary data: const Scale* m_xAxis; const Scale* m_yAxis; CloneableVector<MaskPattern> m_stack; - - //... cached secondary data: - std::vector<bool> m_masked; }; #endif // BORNAGAIN_DEVICE_MASK_MASKSTACK_H