/** * \file icon.c * * \brief GIS Library - Plot icon * * (C) 2001-2008 by the GRASS Development Team * * This program is free software under the GNU General Public License * (>=v2). Read the file COPYING that comes with GRASS for details. * * \author GRASS GIS Development Team * * \date 1999-2008 */ #include #include #include static void trans(double *x, double *y, int n_points, double angle, double scale, double xc, double yc) { double m[2][2]; double sin_a = sin(angle); double cos_a = cos(angle); int i; m[0][0] = cos_a * scale; m[0][1] = -sin_a * scale; m[1][0] = sin_a * scale; m[1][1] = cos_a * scale; for (i = 0; i < n_points; i++) { double xi = x[i]; double yi = y[i]; x[i] = m[0][0] * xi + m[0][1] * yi + xc; y[i] = m[1][0] * xi + m[1][1] * yi + yc; } } /** * \brief Plot icon * * \param[in] xc,yc icon coordinates * \param[in] type icon type * \param[in] angle rotation angle [rad] * \param[in] scale scale factor * * \return 1 */ int G_plot_icon(double xc, double yc, int type, double angle, double scale) { int i, np = 0; double x[10], y[10]; G_debug(2, "G_plot_icon(): xc=%g, yc=%g", xc, yc); /* diamond, box */ switch (type) { case G_ICON_CROSS: x[0] = -0.5; y[0] = 0.0; x[1] = 0.5; y[1] = 0.0; x[2] = 0.0; y[2] = -0.5; x[3] = 0.0; y[3] = 0.5; np = 4; break; case G_ICON_BOX: G_debug(1, "box"); x[0] = -0.5; y[0] = -0.5; x[1] = 0.5; y[1] = -0.5; x[2] = 0.5; y[2] = -0.5; x[3] = 0.5; y[3] = 0.5; x[4] = 0.5; y[4] = 0.5; x[5] = -0.5; y[5] = 0.5; x[6] = -0.5; y[6] = 0.5; x[7] = -0.5; y[7] = -0.5; np = 8; break; case G_ICON_ARROW: x[0] = -1; y[0] = 0.5; x[1] = 0; y[1] = 0.0; x[2] = -1; y[2] = -0.5; x[3] = 0; y[3] = 0.0; np = 4; break; } trans(x, y, np, angle, scale, xc, yc); for (i = 0; i < np; i += 2) G_plot_line(x[i], y[i], x[i + 1], y[i + 1]); return (1); }