00001
00017 #include <stdlib.h>
00018 #include <math.h>
00019 #include <grass/gis.h>
00020
00021 static void trans(double *x, double *y, int n_points,
00022 double angle, double scale, double xc, double yc)
00023 {
00024 double m[2][2];
00025 double sin_a = sin(angle);
00026 double cos_a = cos(angle);
00027 int i;
00028
00029 m[0][0] = cos_a * scale;
00030 m[0][1] = -sin_a * scale;
00031 m[1][0] = sin_a * scale;
00032 m[1][1] = cos_a * scale;
00033
00034 for (i = 0; i < n_points; i++) {
00035 double xi = x[i];
00036 double yi = y[i];
00037
00038 x[i] = m[0][0] * xi + m[0][1] * yi + xc;
00039 y[i] = m[1][0] * xi + m[1][1] * yi + yc;
00040 }
00041 }
00042
00053 int G_plot_icon(double xc, double yc, int type, double angle, double scale)
00054 {
00055 int i, np = 0;
00056 double x[10], y[10];
00057
00058 G_debug(2, "G_plot_icon(): xc=%g, yc=%g", xc, yc);
00059
00060
00061 switch (type) {
00062 case G_ICON_CROSS:
00063 x[0] = -0.5;
00064 y[0] = 0.0;
00065 x[1] = 0.5;
00066 y[1] = 0.0;
00067 x[2] = 0.0;
00068 y[2] = -0.5;
00069 x[3] = 0.0;
00070 y[3] = 0.5;
00071 np = 4;
00072 break;
00073 case G_ICON_BOX:
00074 G_debug(1, "box");
00075 x[0] = -0.5;
00076 y[0] = -0.5;
00077 x[1] = 0.5;
00078 y[1] = -0.5;
00079 x[2] = 0.5;
00080 y[2] = -0.5;
00081 x[3] = 0.5;
00082 y[3] = 0.5;
00083 x[4] = 0.5;
00084 y[4] = 0.5;
00085 x[5] = -0.5;
00086 y[5] = 0.5;
00087 x[6] = -0.5;
00088 y[6] = 0.5;
00089 x[7] = -0.5;
00090 y[7] = -0.5;
00091 np = 8;
00092 break;
00093 case G_ICON_ARROW:
00094 x[0] = -1;
00095 y[0] = 0.5;
00096 x[1] = 0;
00097 y[1] = 0.0;
00098 x[2] = -1;
00099 y[2] = -0.5;
00100 x[3] = 0;
00101 y[3] = 0.0;
00102 np = 4;
00103 break;
00104 }
00105
00106 trans(x, y, np, angle, scale, xc, yc);
00107
00108 for (i = 0; i < np; i += 2)
00109 G_plot_line(x[i], y[i], x[i + 1], y[i + 1]);
00110
00111 return (1);
00112 }