diff options
Diffstat (limited to '7_2/include/figure.h')
-rw-r--r-- | 7_2/include/figure.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/7_2/include/figure.h b/7_2/include/figure.h new file mode 100644 index 0000000..393ca00 --- /dev/null +++ b/7_2/include/figure.h @@ -0,0 +1,56 @@ +#ifndef JCG_FIGURE_H +#define JCG_FIGURE_H + +#include "drawable.h" +#include "common.h" + +// любая фигура +// создаётся функциями figure_point, figure_line и т.д. +// у каждой фигуры должен быть способ "нарисоваться" на +// любое "рисовальное" поле, используя функцию drawable.put +struct figure { + enum { + F_NONE, F_POINT, F_RECT, F_LINE, F_CIRCLE + } type; + union { + struct { + vector2 coords; + } point; + struct { + vector2 upleft, downright; + } rect; + struct { + vector2 start, end; + } line; + struct { + vector2 center; + long rad; + } circle; + }; + void (*draw)(const struct figure *self, struct drawable *d); +}; + +// массив функций по типам (lookup table) +extern void (*const draw_lookup[])(const struct figure *, struct drawable *); + +// конструктор 1 +struct figure figure_point(vector2 p); +// конструктор 2 +struct figure figure_rect(vector2 upleft, vector2 downright); +// конструктор 3 +struct figure figure_line(vector2 start, vector2 end); +// конструктор 4 +struct figure figure_circle(vector2 center, long radius); + +// draw для F_POINT +void draw_point(const struct figure *self, struct drawable *d); +// draw для F_RECT +void draw_rect(const struct figure *self, struct drawable *d); +// draw для F_LINE +void draw_line(const struct figure *self, struct drawable *d); +// draw для F_CIRCLE +void draw_circle(const struct figure *self, struct drawable *f); + +void print_figure(const struct figure *self); + +#endif // JCG_FIGURE_H |