/* * $Id: object.h,v 3.26 92/03/24 22:35:34 woo Exp Locker: woo $ */ /* * FIG : Facility for Interactive Generation of figures * * (c) copy right 1985 by Supoj Sutanthavibul (supoj@sally.utexas.edu) * January 1985. * 1st revision : Aug 1985. * 2nd revision : Feb 1988. * * %W% %G% */ #define DEFAULT -1 typedef struct f_pattern { int w, h; int *p; } F_pattern; typedef struct f_pen { int x, y; int *p; } F_pen; typedef struct f_point { int x, y; struct f_point *next; } F_point; typedef struct f_pos { int x, y; } F_pos; typedef struct f_arrow { int type; int style; float thickness; float wid; float ht; } F_arrow; typedef struct f_ellipse { int type; #define T_ELLIPSE_BY_RAD 1 #define T_ELLIPSE_BY_DIA 2 #define T_CIRCLE_BY_RAD 3 #define T_CIRCLE_BY_DIA 4 int style; int thickness; int color; #define BLACK 0 int depth; int direction; float style_val; float angle; struct f_pen *pen; struct f_pattern *area_fill; #define UNFILLED (F_pattern *)0 #define BLACK_FILL (F_pattern *)1 #define DARK_GRAY_FILL (F_pattern *)2 #define MED_GRAY_FILL (F_pattern *)3 #define LIGHT_GRAY_FILL (F_pattern *)4 #define WHITE_FILL (F_pattern *)4 struct f_pos center; struct f_pos radiuses; struct f_pos start; struct f_pos end; struct f_ellipse *next; } F_ellipse; typedef struct f_arc { int type; #define T_3_POINTS_ARC 1 int style; int thickness; int color; int depth; struct f_pen *pen; struct f_pattern *area_fill; float style_val; int direction; struct f_arrow *for_arrow; struct f_arrow *back_arrow; struct {float x, y;} center; struct f_pos point[3]; struct f_arc *next; } F_arc; typedef struct f_line { int type; #define T_POLYLINE 1 #define T_BOX 2 #define T_POLYGON 3 int style; int thickness; int color; int depth; float style_val; struct f_pen *pen; struct f_pattern *area_fill; struct f_arrow *for_arrow; struct f_arrow *back_arrow; struct f_point *points; struct f_line *next; } F_line; typedef struct f_text { int type; #define T_LEFT_JUSTIFIED 0 #define T_CENTER_JUSTIFIED 1 #define T_RIGHT_JUSTIFIED 2 int font; #define DEFAULT_FONT 0 #define ROMAN_FONT 1 #define BOLD_FONT 2 #define ITALIC_FONT 3 #define MODERN_FONT 4 #define TYPEWRITER_FONT 5 int size; /* point size */ int color; int depth; float angle; /* in radian */ int style; #define PLAIN 1 #define ITALIC 2 #define BOLD 4 #define OUTLINE 8 #define SHADOW 16 int height; /* pixels */ int length; /* pixels */ int base_x; int base_y; struct f_pen *pen; char *cstring; struct f_text *next; } F_text; typedef struct f_control { float lx, ly, rx, ry; struct f_control *next; } F_control; #define int_spline(s) (s->type & 0x2) #define normal_spline(s) (!(s->type & 0x2)) #define closed_spline(s) (s->type & 0x1) #define open_spline(s) (!(s->type & 0x1)) typedef struct f_spline { int type; #define T_OPEN_NORMAL 0 #define T_CLOSED_NORMAL 1 #define T_OPEN_INTERPOLATED 2 #define T_CLOSED_INTERPOLATED 3 int style; int thickness; int color; int depth; float style_val; struct f_pen *pen; struct f_pattern *area_fill; struct f_arrow *for_arrow; struct f_arrow *back_arrow; /* For T_OPEN_NORMAL and T_CLOSED_NORMAL points are control points while they are knots for T_OPEN_INTERPOLATED and T_CLOSED_INTERPOLTED whose control points are stored in controls. */ struct f_point *points; struct f_control *controls; struct f_spline *next; } F_spline; typedef struct f_compound { struct f_pos nwcorner; struct f_pos secorner; struct f_line *lines; struct f_ellipse *ellipses; struct f_spline *splines; struct f_text *texts; struct f_arc *arcs; struct f_compound *compounds; struct f_compound *next; } F_compound; #define ARROW_SIZE sizeof(struct f_arrow) #define POINT_SIZE sizeof(struct f_point) #define CONTROL_SIZE sizeof(struct f_control) #define ELLOBJ_SIZE sizeof(struct f_ellipse) #define ARCOBJ_SIZE sizeof(struct f_arc) #define LINOBJ_SIZE sizeof(struct f_line) #define TEXOBJ_SIZE sizeof(struct f_text) #define SPLOBJ_SIZE sizeof(struct f_spline) #define COMOBJ_SIZE sizeof(struct f_compound) /********************** object codes **********************/ #define O_ELLIPSE 1 #define O_POLYLINE 2 #define O_SPLINE 3 #define O_TEXT 4 #define O_ARC 5 #define O_COMPOUND 6 #define O_END_COMPOUND -O_COMPOUND #define O_ALL_OBJECT 99 /************ object styles (except for f_text) ************/ #define SOLID_LINE 0 #define DASH_LINE 1 #define DOTTED_LINE 2 #define CLOSED_PATH 0 #define OPEN_PATH 1