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