Program Listing for File TetraederBox.hpp

Return to documentation for file (include/lvr2/reconstruction/TetraederBox.hpp)

#ifndef TETRAEDERBOX_H_
#define TETRAEDERBOX_H_


#include "FastBox.hpp"

namespace lvr2
{

template<typename BaseVecT>
class TetraederBox : public FastBox<BaseVecT>
{
public:

    TetraederBox(BaseVecT center);
    virtual ~TetraederBox();

    virtual void getSurface(
        BaseMesh<BaseVecT>& mesh,
        vector<QueryPoint<BaseVecT>>& query_points,
        uint &globalIndex
    );

//    virtual void getSurface(
//        BaseMesh<BaseVecT>& mesh,
//        vector<QueryPoint<BaseVecT>>& query_points,
//        uint& globalIndex,
//        BoundingBox<BaseVecT>& bb,
//        vector<unsigned int>& duplicates,
//        float comparePrecision
//    );

private:

    int calcPatternIndex(float distances[4])
    {
        int index = 0;
        for(int i = 0; i < 4; i++)
        {
            if(distances[i] > 0) index |= (1 << i);
        }
        return index;
    }

    inline void interpolateIntersections(
            int tetraNumber,
            BaseVecT positions[4],
            float distances[4]
            );

    OptionalVertexHandle    m_intersections[19];
    BaseVecT         m_intersectionPositionsTetraeder[6];

};

} /* namespace lvr */

#include "TetraederBox.tcc"

#endif /* TETRAEDERBOX_H_ */