00001 #include <stdio.h>
00002 #include <math.h>
00003 #include "xfig.h"
00004
00005 #define ARROWRATIO 3.0
00006 #define ARROWHW 0.5
00007
00008 void XfigStartCompound(FILE *fptr, int ix1, int iy1, int ix2, int iy2)
00009 {
00010 fprintf(fptr, "%d %d %d %d %d\n", XFIG_COMPOUND,
00011 ix1, iy1, ix2, iy2);
00012 }
00013
00014
00015 void XfigEndCompound(FILE *fptr)
00016 {
00017 fprintf(fptr, "%d\n", - XFIG_COMPOUND);
00018 }
00019
00020
00021 void XfigPolyLine(FILE *fptr, int *x, int *y, int npoints,
00022 int linestyle, int thickness, int color)
00023 {
00024 int i;
00025 fprintf(fptr, "%d %d %d %d %d 0 -1 %d %f 0 0 0\n",
00026 XFIG_POLYLINE, XFIG_POLY_TYPE, linestyle, thickness, color,
00027 XFIG_NOT_FILLED, 0.0);
00028 for (i = 0; i < npoints; i++)
00029 fprintf(fptr, "%d %d\n", x[i], y[i]);
00030 fprintf(fptr, "%d %d\n", XFIG_END_POLY, XFIG_END_POLY);
00031 }
00032
00033
00034 void XfigVector(FILE *fptr, int x, int y, int fx, int fy,
00035 int linestyle, int thickness, int color)
00036 {
00037 double fl, arrowheight;
00038
00039 fprintf(fptr, "%d %d %d %d %d 0 -1 %d %f 0 1 0\n",
00040 XFIG_POLYLINE, XFIG_POLY_TYPE, linestyle, thickness, color,
00041 XFIG_NOT_FILLED, 0.0);
00042 fl = sqrt(fx*fx + fy*fy);
00043 arrowheight = fl/ARROWRATIO;
00044 fprintf(fptr, "-1 -1 %.3f %.3f %.3f\n", 1.0,
00045 ARROWHW*arrowheight, arrowheight);
00046 fprintf(fptr, "%d %d %d %d %d %d\n", x, y, x + fx, y + fy,
00047 XFIG_END_POLY, XFIG_END_POLY);
00048 }
00049
00050
00051 void XfigLine(FILE *fptr, int x, int y, int x1, int y1,
00052 int linestyle, int thickness, int color)
00053 {
00054 fprintf(fptr, "%d %d %d %d %d 0 -1 %d %f 0 0 0\n",
00055 XFIG_POLYLINE, XFIG_POLY_TYPE, linestyle, thickness, color,
00056 XFIG_NOT_FILLED, 0.0);
00057 fprintf(fptr, "%d %d %d %d %d %d\n", x, y, x1, y1,
00058 XFIG_END_POLY, XFIG_END_POLY);
00059 }
00060
00061
00062 void XfigBox(FILE *fptr, int ix1, int iy1, int ix2, int iy2,
00063 int linestyle, int thickness, int color)
00064 {
00065 fprintf(fptr, "%d %d %d %d %d 0 -1 %d %f 0 0 0\n",
00066 XFIG_BOX_TYPE, XFIG_BOX_TYPE,
00067 linestyle, thickness, color, XFIG_NOT_FILLED, 0.0);
00068 fprintf(fptr, "%d %d %d %d %d %d %d %d %d %d %d %d\n",
00069 ix1, iy1, ix1, iy2, ix2, iy2, ix2, iy1, ix1, iy1,
00070 XFIG_END_POLY, XFIG_END_POLY);
00071 }
00072
00073
00074 void XfigCircle(FILE *fptr, int x, int y, int radius,
00075 int linestyle, int thickness, int color)
00076 {
00077 fprintf(fptr, "%d 3 %d %d %d 0 -1 %d %f 1 0.0 %d %d %d %d %d %d %d %d\n",
00078 XFIG_ELLIPSE_TYPE, linestyle, thickness, color, XFIG_BLACK_FILLED,
00079 0.0,
00080 x, y, radius, radius, x, y, x + radius, y);
00081 }
00082
00083
00084 void XfigText(FILE *fptr, int x, int y, int sub_type, int font, int font_size,
00085 int color, float angle, char *text)
00086 {
00087 fprintf(fptr, "%d %d %d %d -1 %d 0 %f %d %d %d %d %d %s\1\n",
00088 XFIG_TEXT_TYPE, sub_type, font, font_size, color, angle,
00089 4, font_size, strlen(text)*font_size, x, y, text);
00090 }
00091