From 82ec99f51b2b3b7a7b36b43b22df07ec503158b8 Mon Sep 17 00:00:00 2001 From: justanothercatgirl Date: Thu, 17 Oct 2024 17:38:07 +0300 Subject: task7 initial commit --- 7_2/include/figure.h | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 7_2/include/figure.h (limited to '7_2/include/figure.h') 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 -- cgit v1.2.3-70-g09d2