#pragma once

class Rectangle;
class Point;

template<class T>
class Grid;

class AbstractGeometricItem
{
public:

    struct Bounds
    {
        Bounds(double width, double height)
        : mWidth(width),
          mHeight(height)
        {

        }

        double mWidth{0.0};
        double mHeight{0.0};
    };

    virtual ~AbstractGeometricItem() = default;

    virtual Bounds getSize() const = 0;

    virtual const Point& getLocation() const = 0;

    virtual void sample(Grid<unsigned char>* grid) const = 0;
};
