#ifndef CT_POINTSATTRIBUTESSCALARMASKT_HPP #define CT_POINTSATTRIBUTESSCALARMASKT_HPP #include "ct_itemdrawable/ct_pointsattributesscalarmaskt.h" template CT_PointsAttributesScalarMaskT::CT_PointsAttributesScalarMaskT() : CT_AbstractPointAttributesScalar(), CT_AbstractAttributesScalar() { m_collection = NULL; m_autoDeleteCollection = true; m_mask = StructMASK(0); m_shiftRight = 0; m_min = StructMASK(0); m_max = StructMASK(0); } template CT_PointsAttributesScalarMaskT::CT_PointsAttributesScalarMaskT(const CT_OutAbstractSingularItemModel *model, const CT_AbstractResult *result, StructMASK mask, quint16 shiftRight, CT_StandardCloudStdVectorT *collection, CT_PCIR pcir, bool autoDeleteCollection) : CT_AbstractPointAttributesScalar(model, result, pcir), CT_AbstractAttributesScalar() { m_collection = collection; m_autoDeleteCollection = autoDeleteCollection; m_mask = mask; m_shiftRight = shiftRight; std::pair< typename std::vector::iterator, typename std::vector::iterator > res = CT_Math::minmax_element(m_collection->begin(), m_collection->end(), (void*)this, CT_PointsAttributesScalarMaskT::staticCompareStruct); m_min = (((*res.first).entire & m_mask) >> m_shiftRight); m_max = (((*res.second).entire & m_mask) >> m_shiftRight); } template CT_PointsAttributesScalarMaskT::CT_PointsAttributesScalarMaskT(const QString &modelName, const CT_AbstractResult *result, StructMASK mask, quint16 shiftRight, CT_StandardCloudStdVectorT *collection, CT_PCIR pcir, bool autoDeleteCollection) : CT_AbstractPointAttributesScalar(modelName, result, pcir), CT_AbstractAttributesScalar() { m_collection = collection; m_autoDeleteCollection = autoDeleteCollection; m_mask = mask; m_shiftRight = shiftRight; std::pair< typename std::vector::iterator, typename std::vector::iterator > res = CT_Math::minmax_element(m_collection->begin(), m_collection->end(), (void*)this, CT_PointsAttributesScalarMaskT::staticCompareStruct); m_min = (((*res.first).entire & m_mask) >> m_shiftRight); m_max = (((*res.second).entire & m_mask) >> m_shiftRight); } template CT_PointsAttributesScalarMaskT::CT_PointsAttributesScalarMaskT(const CT_OutAbstractSingularItemModel *model, const CT_AbstractResult *result, StructMASK mask, quint16 shiftRight, const StructMASK &min, const StructMASK &max, CT_StandardCloudStdVectorT *collection, CT_PCIR pcir, bool autoDeleteCollection) : CT_AbstractPointAttributesScalar(model, result, pcir), CT_AbstractAttributesScalar() { m_collection = collection; m_autoDeleteCollection = autoDeleteCollection; m_mask = mask; m_shiftRight = shiftRight; m_min = min; m_max = max; } template CT_PointsAttributesScalarMaskT::CT_PointsAttributesScalarMaskT(const QString &modelName, const CT_AbstractResult *result, StructMASK mask, quint16 shiftRight, const StructMASK &min, const StructMASK &max, CT_StandardCloudStdVectorT *collection, CT_PCIR pcir, bool autoDeleteCollection) : CT_AbstractPointAttributesScalar(modelName, result, pcir), CT_AbstractAttributesScalar() { m_collection = collection; m_autoDeleteCollection = autoDeleteCollection; m_mask = mask; m_shiftRight = shiftRight; m_min = min; m_max = max; } template CT_PointsAttributesScalarMaskT::~CT_PointsAttributesScalarMaskT() { if(m_autoDeleteCollection) delete m_collection; } template QString CT_PointsAttributesScalarMaskT::getType() const { return staticGetType(); } template QString CT_PointsAttributesScalarMaskT::staticGetType() { QString type = CT_AbstractPointAttributesScalar::staticGetType() + "/CT_PointsAttributesScalarMaskT<" + CT_TypeInfo::name() + ">"; CT_AbstractItemDrawable::addNameTypeCorresp(type, staticName()); return type; } template double CT_PointsAttributesScalarMaskT::dMin() const { return m_min; } template double CT_PointsAttributesScalarMaskT::dMax() const { return m_max; } template double CT_PointsAttributesScalarMaskT::dValueAt(const size_t &index) const { return ((m_collection->tAt(index).entire & m_mask) >> m_shiftRight); } template size_t CT_PointsAttributesScalarMaskT::attributesSize() const { return m_collection->size(); } /*template CT_PointsAttributesScalarMaskT::StructMASK CT_PointsAttributesScalarMaskT::min() const { return m_min; } template CT_PointsAttributesScalarMaskT::StructMASK CT_PointsAttributesScalarMaskT::max() const { return m_max; } template void CT_PointsAttributesScalarMaskT::setMin(const StructMASK &min) { m_min = min; } template void CT_PointsAttributesScalarMaskT::setMax(const StructMASK &max) { m_max = max; }*/ template CT_StandardCloudStdVectorT* CT_PointsAttributesScalarMaskT::collection() const { return m_collection; } template CT_AbstractItemDrawable* CT_PointsAttributesScalarMaskT::copy(const CT_OutAbstractItemModel *model, const CT_AbstractResult *result, CT_ResultCopyModeList copyModeList) { return new CT_PointsAttributesScalarMaskT((const CT_OutAbstractSingularItemModel*)model, result, m_mask, m_shiftRight, m_min, m_max, m_collection, getPointCloudIndexRegistered(), false); } template bool CT_PointsAttributesScalarMaskT::staticCompareStruct(const StructType &a, const StructType &b, void* context) { return (a.entire & ((CT_PointsAttributesScalarMaskT*)context)->m_mask) < (b.entire & ((CT_PointsAttributesScalarMaskT*)context)->m_mask); } #endif // CT_POINTSATTRIBUTESSCALARMASKT_HPP