Index: /trunk/Ohana/src/kapa2/src/DrawObjects.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/DrawObjects.c	(revision 31559)
+++ /trunk/Ohana/src/kapa2/src/DrawObjects.c	(revision 31560)
@@ -1,12 +1,17 @@
 # include "Ximage.h"
 
-# define DrawLine(X1,Y1,X2,Y2) (XDrawLine (graphic->display, graphic->window, graphic->gc, (int)(X1+0.5), (int)(Y1+0.5), (int)(X2+0.5), (int)(Y2+0.5)))
-# define DrawRectangle(X1,Y1,X2,Y2) (XDrawRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1+0.5), (int)(Y1+0.5), (int)(X2+0.5), (int)(Y2+0.5)))
-# define FillRectangle(X1,Y1,X2,Y2) (XFillRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1+0.5), (int)(Y1+0.5), (int)(X2+0.5), (int)(Y2+0.5)))
-# define DrawCircle(X,Y,R) (XDrawArc (graphic->display, graphic->window, graphic->gc, (int)(X-R+0.5), (int)(Y-R+0.5), abs(2*R+0.5), abs(2*R+0.5), 0, 23040))
+# define DrawLine(X1,Y1,X2,Y2) (XDrawLine (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
+# define DrawRectangle(X1,Y1,X2,Y2) (XDrawRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
+# define FillRectangle(X1,Y1,X2,Y2) (XFillRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
+# define DrawCircle(X,Y,R) (XDrawArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R), abs(2*R), 0, 23040))
 
 # define CONNECT 0
 # define HISTOGRAM 1
 # define POINTS 2
+
+# define XCENTER 0.0
+# define YCENTER 0.0
+# define CAPSTYLE CapButt
+# define JOINSTYLE JoinMiter
 
 static Graphic *graphic;
@@ -34,22 +39,32 @@
   // this function calls all of the supporting Draw... functions below
   graphic = GetGraphic();
-
-  lweight = MAX (0, MIN (10, object[0].lweight));
+  
+  lweight = MAX (1, MIN (10, object[0].lweight));
+
+  /** some notes on drawing lines in X:
+
+      "In general, drawing a thin line will be faster than drawing a wide line of width
+      one. However, because of their different drawing algorithms, thin lines may not mix
+      well aesthetically with wide lines. If it is desirable to obtain precise and uniform
+      results across all displays, a client should always use a line-width of one rather
+      than a line-width of zero."  -- http://www.hpc.unimelb.edu.au/nec/g1ae02e/chap7.html
+
+  */
 
   /* set line type */
   switch (object[0].ltype) {
     case 0:
-      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
+      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE);
       break;
     case 1:
       XSetDashes (graphic->display, graphic->gc, 100, dash, 2);
-      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
+      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CAPSTYLE, JOINSTYLE);
       break;
     case 2:
       XSetDashes (graphic->display, graphic->gc, 10, dot, 2);
-      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
+      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CAPSTYLE, JOINSTYLE);
       break;
     default:
-      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
+      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE);
       break;
   }
@@ -76,5 +91,5 @@
   }
 
-  XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CapNotLast, JoinMiter);
+  XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CAPSTYLE, JOINSTYLE);
   XSetForeground (graphic->display, graphic->gc, graphic->fore);
   return (TRUE);
@@ -111,11 +126,11 @@
   for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
   if (i >= object[0].Npts) return;
-  sx0 = x[i]*mxi + y[i]*mxj + bx;
-  sy0 = x[i]*myi + y[i]*myj + by;
+  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
 
   for (i++; i < object[0].Npts; i++) {
     if (!(finite(x[i]) && finite(y[i]))) continue;
-    sx1 = x[i]*mxi + y[i]*mxj + bx;
-    sy1 = x[i]*myi + y[i]*myj + by;
+    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
     
     ClipLine (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
@@ -213,6 +228,6 @@
 
   /* first valid data point */
-  sx0 = x[i]*mxi + y[i]*mxj + bx;
-  sy0 = x[i]*myi + y[i]*myj + by;
+  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
   sx0 = MIN (MAX (sx0, X0), X1);
   sy0 = MAX (MIN (sy0, Y0), Y1);
@@ -223,6 +238,6 @@
 
   /* second valid data point */
-  sx1 = x[i]*mxi + y[i]*mxj + bx;
-  sy1 = x[i]*myi + y[i]*myj + by;
+  sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+  sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
   sx1 = MIN (MAX (sx1, X0), X1);
   sy1 = MAX (MIN (sy1, Y0), Y1);
@@ -246,6 +261,6 @@
   for (i++; i < object[0].Npts; i++) {
     if (!(finite(x[i]) && finite(y[i]))) continue;
-    sx1 = x[i]*mxi + y[i]*mxj + bx;
-    sy1 = x[i]*myi + y[i]*myj + by;
+    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
     sx1 = MIN (MAX (sx1, X0), X1);
     sy1 = MAX (MIN (sy1, Y0), Y1);
@@ -298,6 +313,6 @@
 
   /* first valid data point */
-  sx0 = x[i]*mxi + y[i]*mxj + bx;
-  sy0 = x[i]*myi + y[i]*myj + by;
+  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
   sx0 = MIN (MAX (sx0, X0), X1);
   sy0 = MAX (MIN (sy0, Y0), Y1);
@@ -308,6 +323,6 @@
 
   /* second valid data point */
-  sx1 = x[i]*mxi + y[i]*mxj + bx;
-  sy1 = x[i]*myi + y[i]*myj + by;
+  sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+  sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
   sx1 = MIN (MAX (sx1, X0), X1);
   sy1 = MAX (MIN (sy1, Y0), Y1);
@@ -330,6 +345,6 @@
   for (i++; i < object[0].Npts; i++) {
     if (!(finite(x[i]) && finite(y[i]))) continue;
-    sx1 = x[i]*mxi + y[i]*mxj + bx;
-    sy1 = x[i]*myi + y[i]*myj + by;
+    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
     sx1 = MIN (MAX (sx1, X0), X1);
     sy1 = MAX (MIN (sy1, Y0), Y1);
@@ -356,5 +371,5 @@
   float *x, *y, *z;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
-  double sx, sy, d, sx1, sy1, sx2, sy2;
+  int sx, sy, sx1, sy1, sx2, sy2, d, D;
   
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
@@ -375,13 +390,15 @@
     d = 0.5 * (graphic->dx + graphic->dy) * 0.01;
     x = object[0].x; y = object[0].y; z = object[0].z;
+
     if (object[0].ptype == 0) {	/* filled box */
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  FillRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1);
 	}
       }
@@ -390,10 +407,11 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawRectangle (sx - D, sy - D, 2*D, 2*D);
 	}
       }
@@ -402,11 +420,12 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx - d*z[i], sy, sx + d*z[i] + 1, sy);
-	  DrawLine (sx, sy - d*z[i], sx, sy + d*z[i] + 1);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawLine (sx - D, sy, sx + D + 1, sy);
+	  DrawLine (sx, sy - D, sx, sy + D + 1);
 	}
       }
@@ -415,11 +434,12 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx + d*z[i] + 1, sy - d*z[i] - 1, sx - d*z[i], sy + d*z[i]);
-	  DrawLine (sx - d*z[i], sy - d*z[i], sx + d*z[i] + 1, sy + d*z[i] + 1);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1);
+	  DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1);
 	}
       }
@@ -429,13 +449,14 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  points[0].x = sx - d*z[i];  points[0].y = sy + 0.58*d*z[i];  
-	  points[1].x = sx + d*z[i];  points[1].y = sy + 0.58*d*z[i];  
-	  points[2].x = sx;           points[2].y = sy - 1.15*d*z[i];  
-	  points[3].x = sx - d*z[i];  points[3].y = sy + 0.58*d*z[i];  
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  points[0].x = sx - D;  points[0].y = sy + 0.58*D;  
+	  points[1].x = sx + D;  points[1].y = sy + 0.58*D;  
+	  points[2].x = sx;      points[2].y = sy - 1.15*D;  
+	  points[3].x = sx - D;  points[3].y = sy + 0.58*D;  
 	  XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
 	}
@@ -445,12 +466,13 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
-	  DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
-	  DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D);
+	  DrawLine (sx + D, sy + 0.58*D, sx,     sy - 1.15*D);
+	  DrawLine (sx,     sy - 1.15*D, sx - D, sy + 0.58*D);
 	}
       }
@@ -459,12 +481,13 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
-	  DrawLine (sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
-	  DrawLine (sx, sy, sx,          sy - 1.15*d*z[i]);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawLine (sx, sy, sx - D, sy - 0.58*D);
+	  DrawLine (sx, sy, sx + D, sy - 0.58*D);
+	  DrawLine (sx, sy, sx,     sy + 1.15*D);
 	}
       }
@@ -473,10 +496,11 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawCircle (sx, sy, d*z[i]);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawCircle (sx, sy, D);
 	}
       }
@@ -485,14 +509,15 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx + 0.00*d*z[i], sy - 1.00*d*z[i], sx + 0.95*d*z[i], sy - 0.31*d*z[i]);
-	  DrawLine (sx + 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.58*d*z[i], sy + 0.81*d*z[i]);
-	  DrawLine (sx + 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.58*d*z[i], sy + 0.81*d*z[i]);
-	  DrawLine (sx - 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.95*d*z[i], sy - 0.31*d*z[i]);
-	  DrawLine (sx - 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.00*d*z[i], sy - 1.00*d*z[i]);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D);
+	  DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D);
+	  DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D);
+	  DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D);
+	  DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D);
 	}
       }
@@ -501,16 +526,17 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx -      d*z[i], sy,               sx - 0.50*d*z[i], sy + 0.87*d*z[i]);
-	  DrawLine (sx - 0.50*d*z[i], sy + 0.87*d*z[i], sx + 0.50*d*z[i], sy + 0.87*d*z[i]);
-	  DrawLine (sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx +      d*z[i], sy);
-
-	  DrawLine (sx +      d*z[i], sy,               sx + 0.50*d*z[i], sy - 0.87*d*z[i]);
-	  DrawLine (sx + 0.50*d*z[i], sy - 0.87*d*z[i], sx - 0.50*d*z[i], sy - 0.87*d*z[i]);
-	  DrawLine (sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx -      d*z[i], sy);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  D = d*z[i];
+	  DrawLine (sx -      D, sy,          sx - 0.50*D, sy + 0.87*D);
+	  DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D);
+	  DrawLine (sx + 0.50*D, sy + 0.87*D, sx +      D, sy);
+
+	  DrawLine (sx +      D, sy,          sx + 0.50*D, sy - 0.87*D);
+	  DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D);
+	  DrawLine (sx - 0.50*D, sy - 0.87*D, sx -      D, sy);
 	}
       }
@@ -525,9 +551,9 @@
       for (i = 0; i + 1 < object[0].Npts; i+=2) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx1 = x[i]*mxi + y[i]*mxj + bx;
-	sy1 = x[i]*myi + y[i]*myj + by;
+	sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
 	if (!(finite(x[i+1]) && finite(y[i+1]))) continue;
-	sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
-	sy2 = x[i+1]*myi + y[i+1]*myj + by;
+	sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER;
+	sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER;
 	ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
       }
@@ -535,24 +561,30 @@
   } 
   /**** points are not scaled by object.z ***/
+  /** some rules on how the points are drawn:
+      1) the smallest point is always a dot (single pixel)
+      2) the point shape should be invarient on position
+      3) center of point is always center of a pixel
+   **/
   else {
-    d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003;
+    d = (int)(object[0].size * hypot((float)graphic->dx, (float)graphic->dy) * 0.003);
     x = object[0].x; y = object[0].y;
-    if (object[0].ptype == 0) {	/* filled box */
-      for (i = 0; i < object[0].Npts; i++) {
-	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  FillRectangle (sx - d, sy - d, 2*d, 2*d);
-	}
-      }
-    }
-    if (object[0].ptype == 1) {		/* open box */
-      for (i = 0; i < object[0].Npts; i++) {
-	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
+
+    if (object[0].ptype == 0) {	/* filled box : OK */
+      for (i = 0; i < object[0].Npts; i++) {
+	if (!(finite(x[i]) && finite(y[i]))) continue;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  FillRectangle (sx - d, sy - d, 2*d + 1, 2*d + 1);
+	}
+      }
+    }
+    if (object[0].ptype == 1) { /* open box : OK*/
+      for (i = 0; i < object[0].Npts; i++) {
+	if (!(finite(x[i]) && finite(y[i]))) continue;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
    	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
@@ -562,27 +594,27 @@
       }
     }
-    if (object[0].ptype == 2) { /* cross */
-      for (i = 0; i < object[0].Npts; i++) {
-	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx - d, sy, sx + d + 1, sy);
+    if (object[0].ptype == 2) { /* cross : OK*/
+      for (i = 0; i < object[0].Npts; i++) {
+	if (!(finite(x[i]) && finite(y[i]))) continue;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+ 	  DrawLine (sx - d, sy, sx + d + 1, sy); // DrawLine does NOT draw the end pixel
 	  DrawLine (sx, sy - d, sx, sy + d + 1);
 	}
       }
     }
-    if (object[0].ptype == 3) {		/* x */
-      for (i = 0; i < object[0].Npts; i++) {
-	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
+    if (object[0].ptype == 3) { /* x : OK */
+      for (i = 0; i < object[0].Npts; i++) {
+	if (!(finite(x[i]) && finite(y[i]))) continue;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
 	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
 	  /* XDrawLine is a little funny, this is needed to fix endpost errors */
-	  DrawLine (sx + d + 1, sy - d - 1, sx - d, sy + d);
+	  DrawLine (sx - d, sy + d, sx + d + 1, sy - d - 1);
 	  DrawLine (sx - d, sy - d, sx + d + 1, sy + d + 1);
 	}
@@ -593,6 +625,6 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
 	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
@@ -609,6 +641,6 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
 	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
@@ -623,12 +655,12 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
-	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
-	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
-	{
-	  DrawLine (sx, sy, sx - d, sy + 0.58*d);
-	  DrawLine (sx, sy, sx + d, sy + 0.58*d);
-	  DrawLine (sx, sy, sx,     sy - 1.15*d);
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
+	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
+	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
+	{
+	  DrawLine (sx, sy, sx - d, sy - 0.58*d);
+	  DrawLine (sx, sy, sx + d, sy - 0.58*d);
+	  DrawLine (sx, sy, sx,     sy + 1.15*d);
 	}
       }
@@ -637,6 +669,6 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
 	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
@@ -649,6 +681,6 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
 	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
@@ -665,6 +697,6 @@
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx = x[i]*mxi + y[i]*mxj + bx;
-	sy = x[i]*myi + y[i]*myj + by;
+	sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy = x[i]*myi + y[i]*myj + by + YCENTER;
 	if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
@@ -687,8 +719,8 @@
       for (i = 0; i + 1 < object[0].Npts; i+=2) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
-	sx1 = x[i]*mxi + y[i]*mxj + bx;
-	sy1 = x[i]*myi + y[i]*myj + by;
-	sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
-	sy2 = x[i+1]*myi + y[i+1]*myj + by;
+	sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+	sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
+	sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER;
+	sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER;
 	ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
       }
@@ -723,8 +755,8 @@
   for (i = 0; i < object[0].Npts; i++) {
     if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
-    sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
+    sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx + XCENTER;
+    sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by + YCENTER;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -740,8 +772,8 @@
     }
     if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
-    sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
+    sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx + XCENTER;
+    sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by + YCENTER;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
@@ -785,6 +817,6 @@
   for (i = 0; i < object[0].Npts; i++) {
     if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     sx1 = sx0 + dyp[i]*mxj;
     sy1 = sy0 + dyp[i]*myj;
@@ -802,8 +834,8 @@
     }
     if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
-    sx0 = x[i]*mxi + y[i]*mxj + bx;
-    sy0 = x[i]*myi + y[i]*myj + by;
-    sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
-    sy1 = x[i]*myi + (y[i] - dym[i])*myj + by;
+    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
+    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
+    sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx + XCENTER;
+    sy1 = x[i]*myi + (y[i] - dym[i])*myj + by + YCENTER;
     if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
 	 (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
Index: /trunk/Ohana/src/kapa2/src/PSObjects.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/PSObjects.c	(revision 31559)
+++ /trunk/Ohana/src/kapa2/src/PSObjects.c	(revision 31560)
@@ -365,7 +365,7 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	  {
-	    DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
-	    DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
-	    DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
+	    DrawLine (sx - d*z[i], sy - 0.58*d*z[i], sx + d*z[i], sy - 0.58*d*z[i]);
+	    DrawLine (sx + d*z[i], sy - 0.58*d*z[i], sx,          sy + 1.15*d*z[i]);
+	    DrawLine (sx,          sy + 1.15*d*z[i], sx - d*z[i], sy - 0.58*d*z[i]);
 	  }
       }
@@ -538,7 +538,7 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	  {
-	    DrawLine (sx, sy, sx - d, sy - 0.58*d);
-	    DrawLine (sx, sy, sx + d, sy - 0.58*d);
-	    DrawLine (sx, sy, sx,     sy + 1.15*d);
+	    DrawLine (sx, sy, sx - d, sy + 0.58*d);
+	    DrawLine (sx, sy, sx + d, sy + 0.58*d);
+	    DrawLine (sx, sy, sx,     sy - 1.15*d);
 	  }
       }
Index: /trunk/Ohana/src/kapa2/src/bDrawObjects.c
===================================================================
--- /trunk/Ohana/src/kapa2/src/bDrawObjects.c	(revision 31559)
+++ /trunk/Ohana/src/kapa2/src/bDrawObjects.c	(revision 31560)
@@ -4,6 +4,6 @@
 # define DrawCircle(BUF,X1,Y1,R) (bDrawCircle (BUF, (X1), (Y1), (R)))
 # define DrawRectangle(BUF,X,Y,dX,dY) (bDrawRectOpen (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY)))
-# define FillRectangle(BUF,X,Y,dX,dY) (bDrawRectFill (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY)))
-# define FillTriangle(BUF,X1,Y1,X2,Y2,X3,Y3) (bDrawTriFill (BUF, (X1), (Y1), (X2), (Y2), (X3), (Y3)))
+# define FillRectangle(BUF,X,Y,dX,dY) (bDrawRectFill (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX+1), (Y+0.5*dY+1)))
+# define FillTriangle(BUF,X1,Y1,dX,dY) (bDrawTriFill (BUF, (X1), (Y1), (dX), (dY)))
 # define OpenTriangle(BUF,X1,Y1,X2,Y2,X3,Y3) (bDrawTriOpen (BUF, (X1), (Y1), (X2), (Y2), (X3), (Y3)))
 
@@ -260,5 +260,5 @@
   float *x, *y, *z;
   double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
-  double sx, sy, d, sx1, sy1, sx2, sy2;
+  int sx, sy, sx1, sy1, sx2, sy2, d, D;
 
   mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
@@ -288,5 +288,6 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  FillRectangle (buffer, sx, sy, 2*d*z[i], 2*d*z[i]);
+	  D = d*z[i];
+	  FillRectangle (buffer, sx, sy, 2*D, 2*D);
 	}
       }
@@ -300,5 +301,6 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  DrawRectangle (buffer, sx, sy, 2*d*z[i], 2*d*z[i]);
+	  D = d*z[i];
+	  DrawRectangle (buffer, sx, sy, 2*D, 2*D);
 	}
       }
@@ -312,6 +314,7 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  DrawLine (buffer, sx - d*z[i], sy, sx + d*z[i], sy);
-	  DrawLine (buffer, sx, sy - d*z[i], sx, sy + d*z[i]);
+	  D = d*z[i];
+	  DrawLine (buffer, sx - D, sy, sx + D, sy);
+	  DrawLine (buffer, sx, sy - D, sx, sy + D);
 	}
       }
@@ -325,6 +328,7 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  DrawLine (buffer, sx + d*z[i], sy - d*z[i], sx - d*z[i], sy + d*z[i]);
-	  DrawLine (buffer, sx - d*z[i], sy - d*z[i], sx + d*z[i], sy + d*z[i]);
+	  D = d*z[i];
+	  DrawLine (buffer, sx + D, sy - D, sx - D, sy + D);
+	  DrawLine (buffer, sx - D, sy - D, sx + D, sy + D);
 	}
       }
@@ -338,5 +342,7 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  FillTriangle (buffer, sx - d*z[i], sy - 0.58*d*z[i], sx + d*z[i], sy - 0.58*d*z[i], sx, sy + 1.15*d*z[i]);
+	  D = d*z[i];
+	  // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
+	  FillTriangle (buffer, sx, sy + 0.58*D, D, -1.73*D);
 	}
       }
@@ -350,5 +356,6 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  OpenTriangle (buffer, sx - d*z[i], sy + 0.58*d*z[i], sx, sy - 1.15*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
+	  D = d*z[i];
+	  OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D);
 	}
       }
@@ -362,7 +369,8 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  DrawLine (buffer, sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
-	  DrawLine (buffer, sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
-	  DrawLine (buffer, sx, sy, sx,          sy - 1.15*d*z[i]);
+	  D = d*z[i];
+	  DrawLine (buffer, sx, sy, sx - D, sy - 0.58*D);
+	  DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D);
+	  DrawLine (buffer, sx, sy, sx,     sy + 1.15*D);
 	}
       }
@@ -376,5 +384,6 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  DrawCircle (buffer, sx, sy, d*z[i]);
+	  D = d*z[i];
+	  DrawCircle (buffer, sx, sy, D);
 	}
       }
@@ -388,9 +397,10 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  DrawLine (buffer, sx + 0.00*d*z[i], sy - 1.00*d*z[i], sx + 0.95*d*z[i], sy - 0.31*d*z[i]);
-	  DrawLine (buffer, sx + 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.58*d*z[i], sy + 0.81*d*z[i]);
-	  DrawLine (buffer, sx + 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.58*d*z[i], sy + 0.81*d*z[i]);
-	  DrawLine (buffer, sx - 0.58*d*z[i], sy + 0.81*d*z[i], sx - 0.95*d*z[i], sy - 0.31*d*z[i]);
-	  DrawLine (buffer, sx - 0.95*d*z[i], sy - 0.31*d*z[i], sx + 0.00*d*z[i], sy - 1.00*d*z[i]);
+	  D = d*z[i];
+	  DrawLine (buffer, sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D);
+	  DrawLine (buffer, sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D);
+	  DrawLine (buffer, sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D);
+	  DrawLine (buffer, sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D);
+	  DrawLine (buffer, sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D);
 	}
       }
@@ -404,11 +414,11 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  DrawLine (buffer, sx -      d*z[i], sy,               sx - 0.50*d*z[i], sy + 0.87*d*z[i]);
-	  DrawLine (buffer, sx - 0.50*d*z[i], sy + 0.87*d*z[i], sx + 0.50*d*z[i], sy + 0.87*d*z[i]);
-	  DrawLine (buffer, sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx +      d*z[i], sy);
-
-	  DrawLine (buffer, sx +      d*z[i], sy,               sx + 0.50*d*z[i], sy - 0.87*d*z[i]);
-	  DrawLine (buffer, sx + 0.50*d*z[i], sy - 0.87*d*z[i], sx - 0.50*d*z[i], sy - 0.87*d*z[i]);
-	  DrawLine (buffer, sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx -      d*z[i], sy);
+	  D = d*z[i];
+	  DrawLine (buffer, sx -      D, sy,          sx - 0.50*D, sy + 0.87*D);
+	  DrawLine (buffer, sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D);
+	  DrawLine (buffer, sx + 0.50*D, sy + 0.87*D, sx +      D, sy);
+	  DrawLine (buffer, sx +      D, sy,          sx + 0.50*D, sy - 0.87*D);
+	  DrawLine (buffer, sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D);
+	  DrawLine (buffer, sx - 0.50*D, sy - 0.87*D, sx -      D, sy);
 	}
       }
@@ -431,6 +441,7 @@
     }
   } else {
-    d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003;
+    d = (int)(object[0].size * hypot((float)graphic->dx, (float)graphic->dy) * 0.003);
     x = object[0].x; y = object[0].y;
+
     if (object[0].ptype == 0) {	/* filled box */
       for (i = 0; i < object[0].Npts; i++) {
@@ -457,5 +468,5 @@
       }
     }
-    if (object[0].ptype == 2) { /* cross */
+    if (object[0].ptype == 2) { /* cross : OK */
       for (i = 0; i < object[0].Npts; i++) {
 	if (!(finite(x[i]) && finite(y[i]))) continue;
@@ -491,5 +502,5 @@
 	    (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
 	{
-	  FillTriangle (buffer, sx - d, sy - 0.58*d, sx + d, sy - 0.58*d, sx, sy + 1.15*d);
+	  FillTriangle (buffer, sx, sy + 0.58*d, d, -1.73*d);
 	}
       }
