#pragma once #define PGM_IP const int8_t * class Shape { private: int scalex, scaley; int angle; int ox, oy; protected: virtual int GetXYZ(uint8_t n, int* x, int* y, int* z) = 0; virtual void LineTo(int x, int y); public: void SetTransform(int ox, int oy, int scalex, int scaley, uint8_t angle); void Trace(void); }; class ContiguousShape : public Shape { private: PGM_IP data; uint8_t npoints; protected: virtual int GetXYZ(uint8_t n, int* x, int* y, int* z); public: ContiguousShape(PGM_IP data, int npoints); }; extern ContiguousShape box; extern ContiguousShape star; #define SINSUBDIVS 8 class SinShape : public Shape { private: uint8_t npoints; uint8_t step; public: void SetHalfPeriods(uint8_t n); protected: virtual int GetXYZ(uint8_t n, int* x, int* y, int* z); virtual void LineTo(int x, int y); }; extern SinShape sinus; class GridShape : public Shape { protected: virtual int GetXYZ(uint8_t n, int* x, int* y, int* z); }; extern GridShape grid;