00001 #ifndef _OBJECTS_EDITOR
00002 #define _OBJECTS_EDITOR
00003
00004 #include <list>
00005 #include <vector>
00006 #include "complex.h"
00007 using namespace std;
00008
00009 class poly_objekt;
00010
00012 class objekt
00013 {
00014 private:
00016 virtual void check_bounding_box()=0;
00017 protected:
00019 complex top_left;
00021 complex bottom_right;
00023 float red;
00025 float green;
00027 float blue;
00028 public:
00029 objekt(float r, float g, float b);
00030 objekt();
00031 virtual ~objekt() {}
00034 virtual objekt* duplicate()=0;
00036 virtual void draw()=0;
00039 virtual bool test_hit(complex cursor);
00041 void get_bounding_box(complex& top_left, complex& bottom_right);
00045 void rotate(complex stred, float uhol);
00049 void scale(complex stred, float x);
00051 void scale_x(complex stred, float x);
00053 void scale_y(complex stred, float x);
00055 void move(complex m);
00059 void mult_matrix_one(float matrix[6],complex& c);
00062 virtual void mult_matrix(float[6])=0;
00065 virtual void change_color(float r, float g, float b);
00067 virtual void change_color_absolutely(float r, float g, float b);
00068 };
00069
00071 class objekt_group : public objekt
00072 {
00074 list<objekt*> o;
00077 virtual void mult_matrix(float[6]);
00078 public:
00081 virtual objekt* duplicate();
00084 objekt* duplicate(poly_objekt** ob);
00086 virtual void draw();
00089 virtual bool test_hit(complex cursor);
00094 objekt* test_hit_concrete(complex);
00096 void add_obj(objekt*);
00098 void rem_obj(objekt*);
00100 virtual void clean();
00102 void get_o(list<objekt*>& ob_list);
00104 void put_o(list<objekt*>& ob_list);
00107 virtual void change_color(float r, float g, float b);
00109 virtual void change_color_absolutely(float r, float g, float b);
00111 void make_union(objekt_group* og);
00113 virtual void check_bounding_box();
00114
00116 void raise_top(objekt* p_o);
00118 void lower_bottom(objekt* p_o);
00120 void raise_step(objekt* p_o,bool ukoncit=true);
00122 void lower_step(objekt* p_o,bool ukoncit=true);
00124 bool member(objekt*);
00126 ~objekt_group();
00127 };
00128
00130 class poly_objekt : public objekt
00131 {
00133 virtual void check_bounding_box();
00136 virtual void mult_matrix(float[6]);
00137 protected:
00139 vector<complex> points;
00140 public:
00141 poly_objekt(float r, float g, float b);
00144 virtual objekt* duplicate()=0;
00146 virtual void draw()=0;
00151 virtual bool test_hit_drag_points(complex screen_pos, complex** p,float zoom);
00153 virtual void move_point(complex* point,complex m);
00155 virtual void draw_resizeable_points(float zoom);
00156 };
00157
00159 class polygon : public poly_objekt
00160 {
00161 public:
00162 polygon(vector<complex>& p, float r, float g, float b);
00165 virtual objekt* duplicate();
00167 virtual void draw();
00168 };
00169
00171 class rectangle : public poly_objekt
00172 {
00173 public:
00174 rectangle(vector<complex>& p, float r, float g, float b);
00177 virtual objekt* duplicate();
00179 virtual void draw();
00180 };
00181
00183 class line : public poly_objekt
00184 {
00185 public:
00186 line(vector<complex>& p, float r, float g, float b);
00189 virtual objekt* duplicate();
00191 virtual void draw();
00192 };
00193
00195 class ellipse : public poly_objekt
00196 {
00197 public:
00198 ellipse(vector<complex>& p, float r, float g, float b);
00201 virtual objekt* duplicate();
00203 virtual void draw();
00204 virtual bool test_hit_drag_points(complex screen_pos, complex** p,float zoom);
00205 virtual void move_point(complex* point,complex m);
00206 virtual void draw_resizeable_points(float zoom);
00207 };
00208
00210 class ellipse_circle : public ellipse
00211 {
00212 public:
00213 ellipse_circle(vector<complex>& p, float r, float g, float b) : ellipse(p,r,g,b) {}
00214 };
00215
00217 class star : public poly_objekt
00218 {
00219 public:
00220 star(vector<complex>& p, float r, float g, float b);
00223 virtual objekt* duplicate();
00225 virtual void draw();
00230 virtual bool test_hit_drag_points(complex screen_pos, complex** p,float zoom);
00232 virtual void move_point(complex* point,complex m);
00234 virtual void draw_resizeable_points(float zoom);
00235 };
00236
00237 class circle : public objekt
00238 {
00239 complex middle, radius;
00241 virtual void check_bounding_box();
00244 virtual void mult_matrix(float[6]);
00245 public:
00246 circle(complex mid, complex rad, float r, float g, float b);
00249 virtual objekt* duplicate();
00251 virtual void draw();
00252 };
00253
00254 #endif