1 /* $Id: tenm_primitive.h,v 1.6 2003/02/11 11:14:23 oohara Exp $ */ 2 3 #ifndef __TENM_PRIMITIVE_H__ 4 #define __TENM_PRIMITIVE_H__ 5 6 struct _tenm_primitive 7 { 8 int klass; 9 void (*delete)(void *); 10 }; 11 typedef struct _tenm_primitive tenm_primitive; 12 13 /* "parent" must be first to to use inheritance in C (not C++) */ 14 struct _tenm_point 15 { 16 tenm_primitive parent; 17 18 double x; 19 double y; 20 }; 21 typedef struct _tenm_point tenm_point; 22 23 struct _tenm_circle 24 { 25 tenm_primitive parent; 26 27 tenm_point *center; 28 /* radius */ 29 double r; 30 }; 31 typedef struct _tenm_circle tenm_circle; 32 33 struct _tenm_segment 34 { 35 tenm_primitive parent; 36 37 /* each end of the segment */ 38 tenm_point *a; 39 tenm_point *b; 40 }; 41 typedef struct _tenm_segment tenm_segment; 42 43 struct _tenm_polygon 44 { 45 tenm_primitive parent; 46 47 /* number of vertexes */ 48 int n; 49 /* coordinates of vertexes */ 50 tenm_point **v; 51 }; 52 typedef struct _tenm_polygon tenm_polygon; 53 54 /* these values must be one of 3^n so that we can add any two of them 55 * and get a unique number */ 56 #define TENM_POINT 1 57 #define TENM_CIRCLE 3 58 #define TENM_SEGMENT 9 59 #define TENM_POLYGON 27 60 61 tenm_point *tenm_point_new(double x, double y); 62 void tenm_point_delete(tenm_point *p); 63 tenm_circle *tenm_circle_new(double center_x, double center_y, double radius); 64 void tenm_circle_delete(tenm_circle *p); 65 tenm_segment *tenm_segment_new(double a_x, double a_y, double b_x, double b_y); 66 void tenm_segment_delete(tenm_segment *p); 67 tenm_polygon *tenm_polygon_new(int number_vertex, ...); 68 void tenm_polygon_delete(tenm_polygon *p); 69 70 int tenm_move_primitive(tenm_primitive *p, double dx, double dy); 71 72 #endif /* not __TENM_PRIMITIVE_H__ */ 73