r112: *** empty log message ***
[ctsim.git] / libctgraphics / sgp.cpp
index 55d3c0e151188e3bc26b0f66b3536be8fe28a003..cc87671d0c45388327cba801bc1c69b2a0cce518 100644 (file)
@@ -7,7 +7,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: sgp.cpp,v 1.2 2000/06/19 19:04:05 kevin Exp $
+**  $Id: sgp.cpp,v 1.3 2000/06/19 19:16:17 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -448,6 +448,83 @@ sgp2_point_rel (double x, double y)
 }
 
 
+/* NAME
+ *   sgp2_draw_rect                            Draw box in graphics mode
+ *
+ * SYNOPSIS
+ *   drawbox (xmin, ymin, xmax, ymax)
+ *   double xmin, ymin                 Lower left corner of box
+ *   double xmax, ymax                 Upper left corner of box
+ *
+ * NOTES
+ *   This routine leaves the current position of graphic cursor at lower
+ *   left corner of box.
+ */
+
+void
+sgp2_draw_rect(double xmin, double ymin, double xmax, double ymax)
+{
+       sgp2_move_abs (xmin, ymin);
+       sgp2_line_abs (xmax, ymin);
+       sgp2_line_abs (xmax, ymax);
+       sgp2_line_abs (xmin, ymax);
+       sgp2_line_abs (xmin, ymin);
+}
+
+/* FUNCTION
+ * sgp2_circle - draw circle of radius r at current center             
+ */
+
+void 
+sgp2_draw_circle (const double r)
+{
+       sgp2_draw_arc (0.0, 7.0, r);
+}
+
+/*==============================================================*/
+/* draw arc around current center.  pass angles and radius     */
+/*==============================================================*/
+
+void 
+sgp2_draw_arc (double start, double stop, const double r)
+{
+       double c, s, theta, angle;
+       float x, y, xp, yp;
+
+       if ((stop-start) > 2 * PI)
+           stop = start + 2 * PI;
+       if ((start-stop) > 2 * PI)
+           stop = start + 2 * PI;
+       while (start >= stop)
+           stop += 2*PI;
+
+       x = r * cos ((double) start);
+       y = r * sin ((double) start);
+       sgp2_move_rel (x, y);          /* move from center to start of arc */
+
+       theta = 5 * PI / 180;
+       c = cos(theta);
+       s = sin(theta);
+
+       for (angle = start; angle < stop - theta; angle += theta) {
+           xp = c * x - s * y;
+           yp = s * x + c * y;
+           sgp2_line_rel (xp - x, yp - y);
+           x = xp; y = yp;
+       }
+
+       c = cos (stop - angle);
+       s = sin (stop - angle);
+       xp = c * x - s * y;
+       yp = s * x + c * y;
+       sgp2_line_rel (xp - x, yp - y);
+
+       x = r * cos ((double) stop);
+       y = r * sin ((double) stop);
+       sgp2_move_rel (-x, -y);         /* move back to center of circle */
+}
+
+
 /*----------------------------------------------------------------------*/
 /*                  Current Transformation Matrix Routine              */
 /*----------------------------------------------------------------------*/