#pragma once

#include "Bounds.h"
#include "Point.h"

template<typename T>
class SparseGrid;

class AbstractGeometricItem
{
public:

    enum class Type
    {
        LINE,
        LINE_SEGMENT,
        CURVE,
        RECTANGLE,
        TRIANGLE,
        POINT,
        PATH,
        CIRCLE,
        POLYGON,
        UNKNOWN
    };

    virtual ~AbstractGeometricItem() = default;

    virtual Bounds getBounds() const = 0;

    virtual const Point& getLocation() const = 0;

    virtual void sample(SparseGrid<bool>* grid) const = 0;

    virtual Type getType() const { return Type::UNKNOWN; };
};
