/*
* Grace - GRaphing, Advanced Computation and Exploration of data
*
* Home page: http://plasma-gate.weizmann.ac.il/Grace/
*
* Copyright (c) 1991-1995 Paul J Turner, Portland, OR
* Copyright (c) 1996-2001 Grace Development Team
*
* Maintained by Evgeny Stambulchik
*
*
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __DRAW_H_
#define __DRAW_H_
#include "defines.h"
/* bpp that Grace uses internally ( = 256 colors) */
#define GRACE_BPP 8
#define MAXCOLORS (0x01 << GRACE_BPP)
#define MAXPATTERNS 32
#define MAXLINESTYLES 9
#define MAX_LINEWIDTH 20.0 /* max width of drawn lines */
/* polyline drawing modes */
#define POLYLINE_OPEN 0
#define POLYLINE_CLOSED 1
/* polygon fill type */
#define FILLRULE_WINDING 0
#define FILLRULE_EVENODD 1
/* arc fill modes */
#define ARCFILL_CHORD 0
#define ARCFILL_PIESLICE 1
/* pixmap transparency types */
#define PIXMAP_TRANSPARENT 0
#define PIXMAP_OPAQUE 1
/* line cap parameter */
#define LINECAP_BUTT 0
#define LINECAP_ROUND 1
#define LINECAP_PROJ 2
/* line join type */
#define LINEJOIN_MITER 0
#define LINEJOIN_ROUND 1
#define LINEJOIN_BEVEL 2
/* Text string justifications */
/* Horizontal */
#define JUST_LEFT 0
#define JUST_RIGHT 1
#define JUST_CENTER 2
/* Vertical */
#define JUST_BLINE 0
#define JUST_BOTTOM 4
#define JUST_TOP 8
#define JUST_MIDDLE 12
/* Drawing properties */
typedef struct {
Pen pen;
int bgcolor;
int bgfilled;
int lines;
double linew;
int linecap;
int linejoin;
double charsize;
int font;
int fillrule;
} DrawProps;
typedef struct {
int red;
int green;
int blue;
} RGB;
typedef struct {
double red;
double green;
double blue;
} fRGB;
typedef struct {
double y;
double i;
double q;
} YIQ;
#define BAD_COLOR -1
#define COLOR_NONE 0
#define COLOR_AUX 1
#define COLOR_MAIN 2
typedef struct {
RGB rgb;
char *cname;
int ctype;
int tstamp;
} CMap_entry;
#define BBOX_TYPE_GLOB 0
#define BBOX_TYPE_TEMP 1
typedef struct {
int active;
view v;
view fv;
} BBox_type;
/* The default max drawing path limit */
#define MAX_DRAWING_PATH 20000
void setpen(Pen pen);
Pen getpen(void);
void setcolor(int color);
int getcolor(void);
void setbgcolor(int bgcolor);
int getbgcolor(void);
void setbgfill(int flag);
int getbgfill(void);
void setlinestyle(int lines);
int getlinestyle(void);
void setlinewidth(double linew);
double getlinewidth(void);
void setpattern(int pattern);
int getpattern(void);
void setcharsize(double charsize);
double getcharsize(void);
void setfont(int font);
int getfont(void);
void setfillrule(int rule);
int getfillrule(void);
void setlinecap(int type);
int getlinecap(void);
void setlinejoin(int type);
int getlinejoin(void);
void symplus(VPoint vp, double s);
void symx(VPoint vp, double s);
void symsplat(VPoint vp, double s);
void leavegraphics(void);
void DrawRect(VPoint vp1, VPoint vp2);
void FillRect(VPoint vp1, VPoint vp2);
void DrawLine(VPoint vp1, VPoint vp2);
void DrawPolyline(VPoint *vps, int n, int mode);
void DrawPolygon(VPoint *vps, int n);
void DrawArc(VPoint vp1, VPoint vp2, int angle1, int angle2);
void DrawFilledArc(VPoint vp1, VPoint vp2, int angle1, int angle2, int mode);
void DrawEllipse(VPoint vp1, VPoint vp2);
void DrawFilledEllipse(VPoint vp1, VPoint vp2);
void DrawCircle(VPoint vp, double radius);
void DrawFilledCircle(VPoint vp, double radius);
void WriteString(VPoint vp, int rot, int just, char *theString);
int is_wpoint_inside(WPoint *wp, world *w);
int is_vpoint_inside(view v, VPoint vp, double epsilon);
void setclipping(int fl);
int doclipping(void);
int is_validVPoint(VPoint vp);
int is_validWPoint(WPoint wp);
VPoint *line_intersect(VPoint vp1, VPoint vp2, VPoint vp1p, VPoint vp2p, int mode);
int clip_line(VPoint vp1, VPoint vp2, VPoint *vp1c, VPoint *vp2c);
int intersect_polygon(VPoint *vps, int n, VPoint vp1p, VPoint vp2p);
int clip_polygon(VPoint *vps, int n);
int is_valid_color(RGB rgb);
int find_color(RGB rgb);
int get_color_by_name(char *cname);
int realloc_color(int n);
int store_color(int n, CMap_entry cmap);
int add_color(CMap_entry cmap);
RGB *get_rgb(unsigned int cindex);
RGB *get_srgb(unsigned int cindex);
fRGB *get_frgb(unsigned int cindex);
fRGB *get_fsrgb(unsigned int cindex);
CMap_entry *get_cmap_entry(unsigned int cindex);
char *get_colorname(unsigned int cindex);
int get_colortype(unsigned int cindex);
YIQ RGB2YIQ(RGB rgb);
double get_colorintensity(int cindex);
void initialize_cmap(void);
void reverse_video(void);
int is_video_reversed(void);
char *scale_types(int it);
int isvalid_viewport(view v);
double fscale(double wc, int scale);
double ifscale(double vc, int scale);
int polar2xy(double phi, double rho, double *x, double *y);
void xy2polar(double x, double y, double *phi, double *rho);
double xy_xconv(double wx);
double xy_yconv(double wy);
VPoint Wpoint2Vpoint(WPoint wp);
int world2view(double x, double y, double *xv, double *yv);
void view2world(double xv, double yv, double *xw, double *yw);
int definewindow(world w, view v, int gtype,
int xscale, int yscale,
int xinv, int yinv);
void reset_bbox(int type);
void reset_bboxes(void);
void freeze_bbox(int type);
view get_bbox(int type);
int is_valid_bbox(view v);
view merge_bboxes(view v1, view v2);
void update_bbox(int type, VPoint vp);
void update_bboxes(VPoint vp);
void melt_bbox(int type);
void activate_bbox(int type, int status);
int view_extend(view *v, double w);
int update_bboxes_with_view(view *v);
int update_bboxes_with_vpoints(VPoint *vps, int n, double lw);
int VPoints2bbox(VPoint *vp1, VPoint *vp2, view *bb);
void set_draw_mode(int mode);
int get_draw_mode(void);
int number_of_colors(void);
int number_of_patterns(void);
int number_of_linestyles(void);
void vpswap(VPoint *vp1, VPoint *vp2);
int points_overlap(VPoint vp1, VPoint vp2);
void set_max_path_limit(int limit);
int get_max_path_limit(void);
#endif /* __DRAW_H_ */
syntax highlighted by Code2HTML, v. 0.9.1