Index: trunk/Ohana/src/kapa2/src/LoadOverlay.c
===================================================================
--- trunk/Ohana/src/kapa2/src/LoadOverlay.c	(revision 15589)
+++ trunk/Ohana/src/kapa2/src/LoadOverlay.c	(revision 15620)
@@ -75,10 +75,11 @@
   j = image[0].overlay[overnum].Nobjects;
   for (i = 0; i < Noverlay; i++, j++) {
-    image[0].overlay[overnum].objects[j].x = overlay[i].x;
-    image[0].overlay[overnum].objects[j].y = overlay[i].y;
-    image[0].overlay[overnum].objects[j].dx = overlay[i].dx;
-    image[0].overlay[overnum].objects[j].dy = overlay[i].dy;
-    image[0].overlay[overnum].objects[j].type = overlay[i].type;
-    image[0].overlay[overnum].objects[j].text = NULL;
+    image[0].overlay[overnum].objects[j].x     = overlay[i].x;
+    image[0].overlay[overnum].objects[j].y     = overlay[i].y;
+    image[0].overlay[overnum].objects[j].dx    = overlay[i].dx;
+    image[0].overlay[overnum].objects[j].dy    = overlay[i].dy;
+    image[0].overlay[overnum].objects[j].angle = overlay[i].angle;
+    image[0].overlay[overnum].objects[j].type  = overlay[i].type;
+    image[0].overlay[overnum].objects[j].text  = NULL;
   }
 
Index: trunk/Ohana/src/kapa2/src/PSOverlay.c
===================================================================
--- trunk/Ohana/src/kapa2/src/PSOverlay.c	(revision 15589)
+++ trunk/Ohana/src/kapa2/src/PSOverlay.c	(revision 15620)
@@ -58,4 +58,5 @@
 	  break;
 	}
+	// XXX add in the rotated ellipse version (rotate in PS space)
 	fprintf (f, " %6.1f %6.1f %6.1f C\n", X, Y, fabs(dX + extra));
 	break;
Index: trunk/Ohana/src/kapa2/src/PaintOverlay.c
===================================================================
--- trunk/Ohana/src/kapa2/src/PaintOverlay.c	(revision 15589)
+++ trunk/Ohana/src/kapa2/src/PaintOverlay.c	(revision 15620)
@@ -5,6 +5,6 @@
   int i;
   int dX, dY, dx, dy;
-  int X, Y, Xmin, Ymin, Xmax, Ymax, Xrange, Yrange;
-  double expand, X0, Y0;
+  int x, y, X, Y, Xmin, Ymin, Xmax, Ymax, Xrange, Yrange;
+  double t, expand, X0, Y0;
  
   XSetForeground (graphic[0].display, graphic[0].gc, image[0].overlay[N].color);
@@ -43,7 +43,9 @@
     switch (image[0].overlay[N].objects[i].type) {
       case KII_OVERLAY_LINE:
+	// the angle makes no sense for a line...
 	XDrawLine (graphic[0].display, graphic[0].window, graphic[0].gc, X, Y, (X+dX), (Y+dY));
 	break;
       case KII_OVERLAY_TEXT:
+	// XXX currently we ignore the rectangle angle
 	XDrawString (graphic[0].display, graphic[0].window, graphic[0].gc, X, Y, image[0].overlay[N].objects[i].text, strlen(image[0].overlay[N].objects[i].text));
 	break;
@@ -51,4 +53,5 @@
 	dx = MAX (abs(dX),2) / 2;
 	dy = MAX (abs(dY),2) / 2;
+	// XXX currently we ignore the rectangle angle
 	XDrawRectangle (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy);
 	break;
@@ -56,5 +59,18 @@
 	dx = MAX (abs(dX),2);
 	dy = MAX (abs(dY),2);
-	XDrawArc (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy, 0, 23040);
+	if (image[0].overlay[N].objects[i].angle == 0.0) {
+	  XDrawArc (graphic[0].display, graphic[0].window, graphic[0].gc, (X - dx), (Y - dy), 2*dx, 2*dy, 0, 23040);
+	} else {
+	  // very stupid rotate ellipse drawing:
+	  double angle = image[0].overlay[N].objects[i].angle * RAD_DEG;
+	  double cs = cos(angle);
+	  double sn = sin(angle);
+	  // XXX dt should be based on the size of the ellipse...
+	  for (t = 0; t < 2*M_PI; t+=0.05) {
+	    x = X + dx*cos(t)*cs + dy*sin(t)*sn;
+	    y = Y - dx*cos(t)*sn + dy*sin(t)*cs;
+	    XDrawPoint (graphic[0].display, graphic[0].window, graphic[0].gc, x, y);
+	  }
+	}
 	break;
       default:
Index: trunk/Ohana/src/kapa2/src/bDrawOverlay.c
===================================================================
--- trunk/Ohana/src/kapa2/src/bDrawOverlay.c	(revision 15589)
+++ trunk/Ohana/src/kapa2/src/bDrawOverlay.c	(revision 15620)
@@ -72,5 +72,19 @@
 	dx = MAX (abs(dX),2);
 	dy = MAX (abs(dY),2);
-	bDrawArc (X, Y, dx, dy, 0, 360);
+	if (image[0].overlay[N].objects[i].angle == 0.0) {
+	  bDrawArc (X, Y, dx, dy, 0, 360);
+	} else {
+	  // very stupid rotate ellipse drawing:
+	  double x, y, t;
+	  double angle = image[0].overlay[N].objects[i].angle * RAD_DEG;
+	  double cs = cos(angle);
+	  double sn = sin(angle);
+	  // XXX dt should be based on the size of the ellipse...
+	  for (t = 0; t < 2*M_PI; t+=0.05) {
+	    x = X + dx*cos(t)*cs + dy*sin(t)*sn;
+	    y = Y - dx*cos(t)*sn + dy*sin(t)*cs;
+	    bDrawPoint (x, y);
+	  }
+	}
 	break;
       default:
