Skip to content
Snippets Groups Projects
quad_tree.h 828 B
Newer Older
Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed
#pragma once
#include "triangle.h"
#include <memory>
#include <vector>
#include "box.h"
#include <set>
Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed

Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed
const int POINT_NOT_IN_QUADTREE = -1;
const int QUADTREE_MAX_DEPTH = 5;
Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed
#define QUADTREE_NODE_MAX_SHAPE 4

class QuadTree
{
Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed
    Box b;
    int level;
    std::vector<Triangle> triangles;
Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed

    std::vector<QuadTree> children;
    QuadTree(Box b, int level);
    void collectUniqueTriangleFragments(const Triangle &t, std::set<int> &seen, std::vector<Triangle> &result) const;
    void split();
    void addNonIntersectingTriangle(const Triangle &t);
Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed

    std::vector<Triangle> visibleSurface(std::set<int> &seen) const;
public:
    QuadTree(Box b);
    void addTriangle(const Triangle &triangle);
    std::vector<Triangle> visibleSurface() const;
    // returns triangle id
    int pointIntersection(const Point &p) const;
Brandon Lai-Cheong's avatar
Brandon Lai-Cheong committed
};