#include #include using namespace std; namespace icl{ RegionFilter::RegionFilter(Range *valueRange, Range *sizeRange, Range *boundaryLengthRange, Range *formFactorRange, Range *pcaAxisLengthRatioRange, Range *pcaFirstMajorAxisAngleRange): // {{{ open m_poValueRange(valueRange),m_poSizeRange(sizeRange),m_poBoundaryLengthRange(boundaryLengthRange), m_poFormFactorRange(formFactorRange),m_poPcaAxisLengthRationRange(pcaAxisLengthRatioRange), m_poPcaFirstMajorAxisAngleRange(pcaFirstMajorAxisAngleRange){} // }}} RegionFilter::~RegionFilter(){ // {{{ open if(m_poValueRange) delete m_poValueRange; if(m_poSizeRange) delete m_poSizeRange; if(m_poBoundaryLengthRange) delete m_poBoundaryLengthRange; if(m_poFormFactorRange) delete m_poFormFactorRange; if(m_poPcaAxisLengthRationRange) delete m_poPcaAxisLengthRationRange; if(m_poPcaFirstMajorAxisAngleRange) delete m_poPcaFirstMajorAxisAngleRange; } // }}} bool RegionFilter::validate(const Region &d){ // {{{ open if(m_poValueRange && !m_poValueRange->contains(d.getVal())) return false; if(m_poSizeRange && ! m_poSizeRange->contains(d.getSize())) return false; if(m_poBoundaryLengthRange && ! m_poBoundaryLengthRange->contains(d.getBoundaryLength())) return false; if(m_poFormFactorRange && ! m_poFormFactorRange->contains(d.getFormFactor())) return false; if(m_poPcaAxisLengthRationRange || m_poPcaFirstMajorAxisAngleRange){ RegionPCAInfo info = d.getPCAInfo(); if(m_poPcaAxisLengthRationRange){ float frac = iclMax(info.len1 / info.len2, info.len2 / info.len1); if(!m_poPcaAxisLengthRationRange->contains(frac)) return false; } if(m_poPcaFirstMajorAxisAngleRange && !m_poPcaFirstMajorAxisAngleRange->contains(info.arc1)) return false; } return true; } // }}} const Range &RegionFilter::getValueRange(){ // {{{ open static Range s_oInfRange(numeric_limits::min(),numeric_limits::max()); return m_poValueRange ? *m_poValueRange : s_oInfRange; } // }}} const Range &RegionFilter::getSizeRange(){ // {{{ open static Range s_oInfRange(numeric_limits::min(),numeric_limits::max()); return m_poSizeRange ? *m_poSizeRange : s_oInfRange; } // }}} }