/* These functions provide the graphics primitives. ** ** Author: Paul W. Carlson March 1992 ** Changed to be used with gis libes plot routines Olga Waupotitsch, Dec,1993 */ #include "ps_info.h" static int cur_x, cur_y; int draw_line (double x1, double y1, double x2, double y2) { fprintf(PS.fp, "%.1f %.1f %.1f %.1f L\n", x2, y2, x1, y1); return 0; } /* in the following functions x, y coordinates are calculated by calling G_plot_where_xy() and therefore they are integers which need to be divided by 10. to get double with precision until first decimal place */ int start_line (double east, double north) { int x, y; G_plot_where_xy(east, north, &x, &y); fprintf(PS.fp, "%.1f %.1f NM ", (double) x/10. , (double) y/10.); return 0; } int move_local (int x, int y) { cur_x = x; cur_y = y; return 0; } int cont_local (int x2, int y2) { if( ((double) cur_x/10. > PS.map_right && (double) x2/10. > PS.map_right) || (( double) cur_x/10. < PS.map_left && (double) x2/10. < PS.map_left) || (( double) cur_y/10. < PS.map_bot && (double) y2/10. < PS.map_bot) || (( double) cur_y/10. > PS.map_top && (double) y2/10. > PS.map_top) ) { if(sec_draw) return -2; /* when both coordinates are outside window draw is called twice with the same line segment by plot_line in gis_libes if proj=Lat-Lon */ else { fprintf(PS.fp, "%.1f %.1f M", (double) x2/10., (double) y2/10.); sec_draw = 1; return -1; } } if(sec_draw) { /* need to break cont. draw and move to new current point */ /* L is moveto lineto stroke */ fprintf(PS.fp, " D"); /* end line */ /* now start new path */ fprintf(PS.fp, " %.1f %.1f NM ", (double) cur_x/10. , (double) cur_y/10.); } fprintf(PS.fp, "%.1f %.1f LN", (double) x2/10., (double) y2/10.); /* LN is lineto */ move_local (x2, y2); sec_draw = 1; return 0; } int set_line_width (double width) { fprintf(PS.fp, "%.8f W\n", width); return 0; } int set_font_name (char *name) { fprintf(PS.fp, "(%s) FN\n", name); return 0; } int set_font_size (int fontsize) { fprintf(PS.fp, "%d SF\n", fontsize); return 0; } int show_text (double x, double y, char *text) { fprintf(PS.fp, "(%s)\n", text); fprintf(PS.fp, "%.1f %.1f MS\n", x, y); return 0; }