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