IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 31560


Ignore:
Timestamp:
May 23, 2011, 6:01:32 PM (15 years ago)
Author:
eugene
Message:

fix changing shape of points (force symmetry about center pixel, consistency of size for different point types; consistency of shapes between plotting devices)

Location:
trunk/Ohana/src/kapa2/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/kapa2/src/DrawObjects.c

    r29539 r31560  
    11# include "Ximage.h"
    22
    3 # 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)))
    4 # 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)))
    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)))
    6 # 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))
     3# define DrawLine(X1,Y1,X2,Y2) (XDrawLine (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
     4# define DrawRectangle(X1,Y1,X2,Y2) (XDrawRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
     5# define FillRectangle(X1,Y1,X2,Y2) (XFillRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2)))
     6# 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))
    77
    88# define CONNECT 0
    99# define HISTOGRAM 1
    1010# define POINTS 2
     11
     12# define XCENTER 0.0
     13# define YCENTER 0.0
     14# define CAPSTYLE CapButt
     15# define JOINSTYLE JoinMiter
    1116
    1217static Graphic *graphic;
     
    3439  // this function calls all of the supporting Draw... functions below
    3540  graphic = GetGraphic();
    36 
    37   lweight = MAX (0, MIN (10, object[0].lweight));
     41 
     42  lweight = MAX (1, MIN (10, object[0].lweight));
     43
     44  /** some notes on drawing lines in X:
     45
     46      "In general, drawing a thin line will be faster than drawing a wide line of width
     47      one. However, because of their different drawing algorithms, thin lines may not mix
     48      well aesthetically with wide lines. If it is desirable to obtain precise and uniform
     49      results across all displays, a client should always use a line-width of one rather
     50      than a line-width of zero."  -- http://www.hpc.unimelb.edu.au/nec/g1ae02e/chap7.html
     51
     52  */
    3853
    3954  /* set line type */
    4055  switch (object[0].ltype) {
    4156    case 0:
    42       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
     57      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE);
    4358      break;
    4459    case 1:
    4560      XSetDashes (graphic->display, graphic->gc, 100, dash, 2);
    46       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
     61      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CAPSTYLE, JOINSTYLE);
    4762      break;
    4863    case 2:
    4964      XSetDashes (graphic->display, graphic->gc, 10, dot, 2);
    50       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
     65      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CAPSTYLE, JOINSTYLE);
    5166      break;
    5267    default:
    53       XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
     68      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE);
    5469      break;
    5570  }
     
    7691  }
    7792
    78   XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CapNotLast, JoinMiter);
     93  XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CAPSTYLE, JOINSTYLE);
    7994  XSetForeground (graphic->display, graphic->gc, graphic->fore);
    8095  return (TRUE);
     
    111126  for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
    112127  if (i >= object[0].Npts) return;
    113   sx0 = x[i]*mxi + y[i]*mxj + bx;
    114   sy0 = x[i]*myi + y[i]*myj + by;
     128  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     129  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    115130
    116131  for (i++; i < object[0].Npts; i++) {
    117132    if (!(finite(x[i]) && finite(y[i]))) continue;
    118     sx1 = x[i]*mxi + y[i]*mxj + bx;
    119     sy1 = x[i]*myi + y[i]*myj + by;
     133    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     134    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    120135   
    121136    ClipLine (sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);
     
    213228
    214229  /* first valid data point */
    215   sx0 = x[i]*mxi + y[i]*mxj + bx;
    216   sy0 = x[i]*myi + y[i]*myj + by;
     230  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     231  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    217232  sx0 = MIN (MAX (sx0, X0), X1);
    218233  sy0 = MAX (MIN (sy0, Y0), Y1);
     
    223238
    224239  /* second valid data point */
    225   sx1 = x[i]*mxi + y[i]*mxj + bx;
    226   sy1 = x[i]*myi + y[i]*myj + by;
     240  sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     241  sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    227242  sx1 = MIN (MAX (sx1, X0), X1);
    228243  sy1 = MAX (MIN (sy1, Y0), Y1);
     
    246261  for (i++; i < object[0].Npts; i++) {
    247262    if (!(finite(x[i]) && finite(y[i]))) continue;
    248     sx1 = x[i]*mxi + y[i]*mxj + bx;
    249     sy1 = x[i]*myi + y[i]*myj + by;
     263    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     264    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    250265    sx1 = MIN (MAX (sx1, X0), X1);
    251266    sy1 = MAX (MIN (sy1, Y0), Y1);
     
    298313
    299314  /* first valid data point */
    300   sx0 = x[i]*mxi + y[i]*mxj + bx;
    301   sy0 = x[i]*myi + y[i]*myj + by;
     315  sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     316  sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    302317  sx0 = MIN (MAX (sx0, X0), X1);
    303318  sy0 = MAX (MIN (sy0, Y0), Y1);
     
    308323
    309324  /* second valid data point */
    310   sx1 = x[i]*mxi + y[i]*mxj + bx;
    311   sy1 = x[i]*myi + y[i]*myj + by;
     325  sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     326  sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    312327  sx1 = MIN (MAX (sx1, X0), X1);
    313328  sy1 = MAX (MIN (sy1, Y0), Y1);
     
    330345  for (i++; i < object[0].Npts; i++) {
    331346    if (!(finite(x[i]) && finite(y[i]))) continue;
    332     sx1 = x[i]*mxi + y[i]*mxj + bx;
    333     sy1 = x[i]*myi + y[i]*myj + by;
     347    sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     348    sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    334349    sx1 = MIN (MAX (sx1, X0), X1);
    335350    sy1 = MAX (MIN (sy1, Y0), Y1);
     
    356371  float *x, *y, *z;
    357372  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    358   double sx, sy, d, sx1, sy1, sx2, sy2;
     373  int sx, sy, sx1, sy1, sx2, sy2, d, D;
    359374 
    360375  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    375390    d = 0.5 * (graphic->dx + graphic->dy) * 0.01;
    376391    x = object[0].x; y = object[0].y; z = object[0].z;
     392
    377393    if (object[0].ptype == 0) { /* filled box */
    378394      for (i = 0; i < object[0].Npts; i++) {
    379395        if (!(finite(x[i]) && finite(y[i]))) continue;
    380         sx = x[i]*mxi + y[i]*mxj + bx;
    381         sy = x[i]*myi + y[i]*myj + by;
    382         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    383             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    384         {
    385           FillRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
     396        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     397        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     398        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     399            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     400        {
     401          D = d*z[i];
     402          FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1);
    386403        }
    387404      }
     
    390407      for (i = 0; i < object[0].Npts; i++) {
    391408        if (!(finite(x[i]) && finite(y[i]))) continue;
    392         sx = x[i]*mxi + y[i]*mxj + bx;
    393         sy = x[i]*myi + y[i]*myj + by;
    394         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    395             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    396         {
    397           DrawRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
     409        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     410        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     411        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     412            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     413        {
     414          D = d*z[i];
     415          DrawRectangle (sx - D, sy - D, 2*D, 2*D);
    398416        }
    399417      }
     
    402420      for (i = 0; i < object[0].Npts; i++) {
    403421        if (!(finite(x[i]) && finite(y[i]))) continue;
    404         sx = x[i]*mxi + y[i]*mxj + bx;
    405         sy = x[i]*myi + y[i]*myj + by;
    406         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    407             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    408         {
    409           DrawLine (sx - d*z[i], sy, sx + d*z[i] + 1, sy);
    410           DrawLine (sx, sy - d*z[i], sx, sy + d*z[i] + 1);
     422        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     423        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     424        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     425            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     426        {
     427          D = d*z[i];
     428          DrawLine (sx - D, sy, sx + D + 1, sy);
     429          DrawLine (sx, sy - D, sx, sy + D + 1);
    411430        }
    412431      }
     
    415434      for (i = 0; i < object[0].Npts; i++) {
    416435        if (!(finite(x[i]) && finite(y[i]))) continue;
    417         sx = x[i]*mxi + y[i]*mxj + bx;
    418         sy = x[i]*myi + y[i]*myj + by;
    419         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    420             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    421         {
    422           DrawLine (sx + d*z[i] + 1, sy - d*z[i] - 1, sx - d*z[i], sy + d*z[i]);
    423           DrawLine (sx - d*z[i], sy - d*z[i], sx + d*z[i] + 1, sy + d*z[i] + 1);
     436        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     437        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     438        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     439            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     440        {
     441          D = d*z[i];
     442          DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1);
     443          DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1);
    424444        }
    425445      }
     
    429449      for (i = 0; i < object[0].Npts; i++) {
    430450        if (!(finite(x[i]) && finite(y[i]))) continue;
    431         sx = x[i]*mxi + y[i]*mxj + bx;
    432         sy = x[i]*myi + y[i]*myj + by;
    433         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    434             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    435         {
    436           points[0].x = sx - d*z[i];  points[0].y = sy + 0.58*d*z[i]; 
    437           points[1].x = sx + d*z[i];  points[1].y = sy + 0.58*d*z[i]; 
    438           points[2].x = sx;           points[2].y = sy - 1.15*d*z[i]; 
    439           points[3].x = sx - d*z[i];  points[3].y = sy + 0.58*d*z[i]; 
     451        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     452        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     453        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     454            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     455        {
     456          D = d*z[i];
     457          points[0].x = sx - D;  points[0].y = sy + 0.58*D; 
     458          points[1].x = sx + D;  points[1].y = sy + 0.58*D; 
     459          points[2].x = sx;      points[2].y = sy - 1.15*D; 
     460          points[3].x = sx - D;  points[3].y = sy + 0.58*D; 
    440461          XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
    441462        }
     
    445466      for (i = 0; i < object[0].Npts; i++) {
    446467        if (!(finite(x[i]) && finite(y[i]))) continue;
    447         sx = x[i]*mxi + y[i]*mxj + bx;
    448         sy = x[i]*myi + y[i]*myj + by;
    449         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    450             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    451         {
    452           DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    453           DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
    454           DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
     468        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     469        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     470        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     471            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     472        {
     473          D = d*z[i];
     474          DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D);
     475          DrawLine (sx + D, sy + 0.58*D, sx,     sy - 1.15*D);
     476          DrawLine (sx,     sy - 1.15*D, sx - D, sy + 0.58*D);
    455477        }
    456478      }
     
    459481      for (i = 0; i < object[0].Npts; i++) {
    460482        if (!(finite(x[i]) && finite(y[i]))) continue;
    461         sx = x[i]*mxi + y[i]*mxj + bx;
    462         sy = x[i]*myi + y[i]*myj + by;
    463         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    464             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    465         {
    466           DrawLine (sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
    467           DrawLine (sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
    468           DrawLine (sx, sy, sx,          sy - 1.15*d*z[i]);
     483        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     484        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     485        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     486            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     487        {
     488          D = d*z[i];
     489          DrawLine (sx, sy, sx - D, sy - 0.58*D);
     490          DrawLine (sx, sy, sx + D, sy - 0.58*D);
     491          DrawLine (sx, sy, sx,     sy + 1.15*D);
    469492        }
    470493      }
     
    473496      for (i = 0; i < object[0].Npts; i++) {
    474497        if (!(finite(x[i]) && finite(y[i]))) continue;
    475         sx = x[i]*mxi + y[i]*mxj + bx;
    476         sy = x[i]*myi + y[i]*myj + by;
    477         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    478             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    479         {
    480           DrawCircle (sx, sy, d*z[i]);
     498        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     499        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     500        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     501            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     502        {
     503          D = d*z[i];
     504          DrawCircle (sx, sy, D);
    481505        }
    482506      }
     
    485509      for (i = 0; i < object[0].Npts; i++) {
    486510        if (!(finite(x[i]) && finite(y[i]))) continue;
    487         sx = x[i]*mxi + y[i]*mxj + bx;
    488         sy = x[i]*myi + y[i]*myj + by;
    489         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    490             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    491         {
    492           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]);
    493           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]);
    494           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]);
    495           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]);
    496           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]);
     511        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     512        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     513        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     514            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     515        {
     516          D = d*z[i];
     517          DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D);
     518          DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D);
     519          DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D);
     520          DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D);
     521          DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D);
    497522        }
    498523      }
     
    501526      for (i = 0; i < object[0].Npts; i++) {
    502527        if (!(finite(x[i]) && finite(y[i]))) continue;
    503         sx = x[i]*mxi + y[i]*mxj + bx;
    504         sy = x[i]*myi + y[i]*myj + by;
    505         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    506             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    507         {
    508           DrawLine (sx -      d*z[i], sy,               sx - 0.50*d*z[i], sy + 0.87*d*z[i]);
    509           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]);
    510           DrawLine (sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx +      d*z[i], sy);
    511 
    512           DrawLine (sx +      d*z[i], sy,               sx + 0.50*d*z[i], sy - 0.87*d*z[i]);
    513           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]);
    514           DrawLine (sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx -      d*z[i], sy);
     528        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     529        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     530        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     531            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     532        {
     533          D = d*z[i];
     534          DrawLine (sx -      D, sy,          sx - 0.50*D, sy + 0.87*D);
     535          DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D);
     536          DrawLine (sx + 0.50*D, sy + 0.87*D, sx +      D, sy);
     537
     538          DrawLine (sx +      D, sy,          sx + 0.50*D, sy - 0.87*D);
     539          DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D);
     540          DrawLine (sx - 0.50*D, sy - 0.87*D, sx -      D, sy);
    515541        }
    516542      }
     
    525551      for (i = 0; i + 1 < object[0].Npts; i+=2) {
    526552        if (!(finite(x[i]) && finite(y[i]))) continue;
    527         sx1 = x[i]*mxi + y[i]*mxj + bx;
    528         sy1 = x[i]*myi + y[i]*myj + by;
     553        sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     554        sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
    529555        if (!(finite(x[i+1]) && finite(y[i+1]))) continue;
    530         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    531         sy2 = x[i+1]*myi + y[i+1]*myj + by;
     556        sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER;
     557        sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER;
    532558        ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
    533559      }
     
    535561  }
    536562  /**** points are not scaled by object.z ***/
     563  /** some rules on how the points are drawn:
     564      1) the smallest point is always a dot (single pixel)
     565      2) the point shape should be invarient on position
     566      3) center of point is always center of a pixel
     567   **/
    537568  else {
    538     d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003;
     569    d = (int)(object[0].size * hypot((float)graphic->dx, (float)graphic->dy) * 0.003);
    539570    x = object[0].x; y = object[0].y;
    540     if (object[0].ptype == 0) { /* filled box */
    541       for (i = 0; i < object[0].Npts; i++) {
    542         if (!(finite(x[i]) && finite(y[i]))) continue;
    543         sx = x[i]*mxi + y[i]*mxj + bx;
    544         sy = x[i]*myi + y[i]*myj + by;
    545         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    546             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    547         {
    548           FillRectangle (sx - d, sy - d, 2*d, 2*d);
    549         }
    550       }
    551     }
    552     if (object[0].ptype == 1) {         /* open box */
    553       for (i = 0; i < object[0].Npts; i++) {
    554         if (!(finite(x[i]) && finite(y[i]))) continue;
    555         sx = x[i]*mxi + y[i]*mxj + bx;
    556         sy = x[i]*myi + y[i]*myj + by;
     571
     572    if (object[0].ptype == 0) { /* filled box : OK */
     573      for (i = 0; i < object[0].Npts; i++) {
     574        if (!(finite(x[i]) && finite(y[i]))) continue;
     575        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     576        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     577        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     578            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     579        {
     580          FillRectangle (sx - d, sy - d, 2*d + 1, 2*d + 1);
     581        }
     582      }
     583    }
     584    if (object[0].ptype == 1) { /* open box : OK*/
     585      for (i = 0; i < object[0].Npts; i++) {
     586        if (!(finite(x[i]) && finite(y[i]))) continue;
     587        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     588        sy = x[i]*myi + y[i]*myj + by + YCENTER;
    557589        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    558590            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     
    562594      }
    563595    }
    564     if (object[0].ptype == 2) { /* cross */
    565       for (i = 0; i < object[0].Npts; i++) {
    566         if (!(finite(x[i]) && finite(y[i]))) continue;
    567         sx = x[i]*mxi + y[i]*mxj + bx;
    568         sy = x[i]*myi + y[i]*myj + by;
    569         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    570             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    571         {
    572           DrawLine (sx - d, sy, sx + d + 1, sy);
     596    if (object[0].ptype == 2) { /* cross : OK*/
     597      for (i = 0; i < object[0].Npts; i++) {
     598        if (!(finite(x[i]) && finite(y[i]))) continue;
     599        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     600        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     601        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     602            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     603        {
     604          DrawLine (sx - d, sy, sx + d + 1, sy); // DrawLine does NOT draw the end pixel
    573605          DrawLine (sx, sy - d, sx, sy + d + 1);
    574606        }
    575607      }
    576608    }
    577     if (object[0].ptype == 3) {         /* x */
    578       for (i = 0; i < object[0].Npts; i++) {
    579         if (!(finite(x[i]) && finite(y[i]))) continue;
    580         sx = x[i]*mxi + y[i]*mxj + bx;
    581         sy = x[i]*myi + y[i]*myj + by;
     609    if (object[0].ptype == 3) { /* x : OK */
     610      for (i = 0; i < object[0].Npts; i++) {
     611        if (!(finite(x[i]) && finite(y[i]))) continue;
     612        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     613        sy = x[i]*myi + y[i]*myj + by + YCENTER;
    582614        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    583615            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    584616        {
    585617          /* XDrawLine is a little funny, this is needed to fix endpost errors */
    586           DrawLine (sx + d + 1, sy - d - 1, sx - d, sy + d);
     618          DrawLine (sx - d, sy + d, sx + d + 1, sy - d - 1);
    587619          DrawLine (sx - d, sy - d, sx + d + 1, sy + d + 1);
    588620        }
     
    593625      for (i = 0; i < object[0].Npts; i++) {
    594626        if (!(finite(x[i]) && finite(y[i]))) continue;
    595         sx = x[i]*mxi + y[i]*mxj + bx;
    596         sy = x[i]*myi + y[i]*myj + by;
     627        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     628        sy = x[i]*myi + y[i]*myj + by + YCENTER;
    597629        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    598630            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     
    609641      for (i = 0; i < object[0].Npts; i++) {
    610642        if (!(finite(x[i]) && finite(y[i]))) continue;
    611         sx = x[i]*mxi + y[i]*mxj + bx;
    612         sy = x[i]*myi + y[i]*myj + by;
     643        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     644        sy = x[i]*myi + y[i]*myj + by + YCENTER;
    613645        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    614646            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     
    623655      for (i = 0; i < object[0].Npts; i++) {
    624656        if (!(finite(x[i]) && finite(y[i]))) continue;
    625         sx = x[i]*mxi + y[i]*mxj + bx;
    626         sy = x[i]*myi + y[i]*myj + by;
    627         if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    628             (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    629         {
    630           DrawLine (sx, sy, sx - d, sy + 0.58*d);
    631           DrawLine (sx, sy, sx + d, sy + 0.58*d);
    632           DrawLine (sx, sy, sx,     sy - 1.15*d);
     657        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     658        sy = x[i]*myi + y[i]*myj + by + YCENTER;
     659        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     660            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     661        {
     662          DrawLine (sx, sy, sx - d, sy - 0.58*d);
     663          DrawLine (sx, sy, sx + d, sy - 0.58*d);
     664          DrawLine (sx, sy, sx,     sy + 1.15*d);
    633665        }
    634666      }
     
    637669      for (i = 0; i < object[0].Npts; i++) {
    638670        if (!(finite(x[i]) && finite(y[i]))) continue;
    639         sx = x[i]*mxi + y[i]*mxj + bx;
    640         sy = x[i]*myi + y[i]*myj + by;
     671        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     672        sy = x[i]*myi + y[i]*myj + by + YCENTER;
    641673        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    642674            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     
    649681      for (i = 0; i < object[0].Npts; i++) {
    650682        if (!(finite(x[i]) && finite(y[i]))) continue;
    651         sx = x[i]*mxi + y[i]*mxj + bx;
    652         sy = x[i]*myi + y[i]*myj + by;
     683        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     684        sy = x[i]*myi + y[i]*myj + by + YCENTER;
    653685        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    654686            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     
    665697      for (i = 0; i < object[0].Npts; i++) {
    666698        if (!(finite(x[i]) && finite(y[i]))) continue;
    667         sx = x[i]*mxi + y[i]*mxj + bx;
    668         sy = x[i]*myi + y[i]*myj + by;
     699        sx = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     700        sy = x[i]*myi + y[i]*myj + by + YCENTER;
    669701        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    670702            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     
    687719      for (i = 0; i + 1 < object[0].Npts; i+=2) {
    688720        if (!(finite(x[i]) && finite(y[i]))) continue;
    689         sx1 = x[i]*mxi + y[i]*mxj + bx;
    690         sy1 = x[i]*myi + y[i]*myj + by;
    691         sx2 = x[i+1]*mxi + y[i+1]*mxj + bx;
    692         sy2 = x[i+1]*myi + y[i+1]*myj + by;
     721        sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     722        sy1 = x[i]*myi + y[i]*myj + by + YCENTER;
     723        sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER;
     724        sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER;
    693725        ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1);
    694726      }
     
    723755  for (i = 0; i < object[0].Npts; i++) {
    724756    if (!(finite(x[i]) && finite(y[i]) && finite(dxp[i]))) continue;
    725     sx0 = x[i]*mxi + y[i]*mxj + bx;
    726     sy0 = x[i]*myi + y[i]*myj + by;
    727     sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx;
    728     sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by;
     757    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     758    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     759    sx1 = (x[i] + dxp[i])*mxi + y[i]*mxj + bx + XCENTER;
     760    sy1 = (x[i] + dxp[i])*myi + y[i]*myj + by + YCENTER;
    729761    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    730762         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    740772    }
    741773    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    742     sx0 = x[i]*mxi + y[i]*mxj + bx;
    743     sy0 = x[i]*myi + y[i]*myj + by;
    744     sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx;
    745     sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by;
     774    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     775    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     776    sx1 = (x[i] - dxm[i])*mxi + y[i]*mxj + bx + XCENTER;
     777    sy1 = (x[i] - dxm[i])*myi + y[i]*myj + by + YCENTER;
    746778    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    747779         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
     
    785817  for (i = 0; i < object[0].Npts; i++) {
    786818    if (!(finite(x[i]) && finite(y[i]) && finite(dyp[i]))) continue;
    787     sx0 = x[i]*mxi + y[i]*mxj + bx;
    788     sy0 = x[i]*myi + y[i]*myj + by;
     819    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     820    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
    789821    sx1 = sx0 + dyp[i]*mxj;
    790822    sy1 = sy0 + dyp[i]*myj;
     
    802834    }
    803835    if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
    804     sx0 = x[i]*mxi + y[i]*mxj + bx;
    805     sy0 = x[i]*myi + y[i]*myj + by;
    806     sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx;
    807     sy1 = x[i]*myi + (y[i] - dym[i])*myj + by;
     836    sx0 = x[i]*mxi + y[i]*mxj + bx + XCENTER;
     837    sy0 = x[i]*myi + y[i]*myj + by + YCENTER;
     838    sx1 = x[i]*mxi + (y[i] - dym[i])*mxj + bx + XCENTER;
     839    sy1 = x[i]*myi + (y[i] - dym[i])*myj + by + YCENTER;
    808840    if (((sx0 > graph[0].axis[0].fx) && (sx0 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    809841         (sy0 < graph[0].axis[1].fy) && (sy0 > graph[0].axis[1].fy + graph[0].axis[1].dfy)) ||
  • trunk/Ohana/src/kapa2/src/PSObjects.c

    r31160 r31560  
    365365            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    366366          {
    367             DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    368             DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
    369             DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
     367            DrawLine (sx - d*z[i], sy - 0.58*d*z[i], sx + d*z[i], sy - 0.58*d*z[i]);
     368            DrawLine (sx + d*z[i], sy - 0.58*d*z[i], sx,          sy + 1.15*d*z[i]);
     369            DrawLine (sx,          sy + 1.15*d*z[i], sx - d*z[i], sy - 0.58*d*z[i]);
    370370          }
    371371      }
     
    538538            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    539539          {
    540             DrawLine (sx, sy, sx - d, sy - 0.58*d);
    541             DrawLine (sx, sy, sx + d, sy - 0.58*d);
    542             DrawLine (sx, sy, sx,     sy + 1.15*d);
     540            DrawLine (sx, sy, sx - d, sy + 0.58*d);
     541            DrawLine (sx, sy, sx + d, sy + 0.58*d);
     542            DrawLine (sx, sy, sx,     sy - 1.15*d);
    543543          }
    544544      }
  • trunk/Ohana/src/kapa2/src/bDrawObjects.c

    r31160 r31560  
    44# define DrawCircle(BUF,X1,Y1,R) (bDrawCircle (BUF, (X1), (Y1), (R)))
    55# 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)))
    6 # 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)))
    7 # define FillTriangle(BUF,X1,Y1,X2,Y2,X3,Y3) (bDrawTriFill (BUF, (X1), (Y1), (X2), (Y2), (X3), (Y3)))
     6# 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)))
     7# define FillTriangle(BUF,X1,Y1,dX,dY) (bDrawTriFill (BUF, (X1), (Y1), (dX), (dY)))
    88# define OpenTriangle(BUF,X1,Y1,X2,Y2,X3,Y3) (bDrawTriOpen (BUF, (X1), (Y1), (X2), (Y2), (X3), (Y3)))
    99
     
    260260  float *x, *y, *z;
    261261  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    262   double sx, sy, d, sx1, sy1, sx2, sy2;
     262  int sx, sy, sx1, sy1, sx2, sy2, d, D;
    263263
    264264  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     
    288288            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    289289        {
    290           FillRectangle (buffer, sx, sy, 2*d*z[i], 2*d*z[i]);
     290          D = d*z[i];
     291          FillRectangle (buffer, sx, sy, 2*D, 2*D);
    291292        }
    292293      }
     
    300301            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    301302        {
    302           DrawRectangle (buffer, sx, sy, 2*d*z[i], 2*d*z[i]);
     303          D = d*z[i];
     304          DrawRectangle (buffer, sx, sy, 2*D, 2*D);
    303305        }
    304306      }
     
    312314            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    313315        {
    314           DrawLine (buffer, sx - d*z[i], sy, sx + d*z[i], sy);
    315           DrawLine (buffer, sx, sy - d*z[i], sx, sy + d*z[i]);
     316          D = d*z[i];
     317          DrawLine (buffer, sx - D, sy, sx + D, sy);
     318          DrawLine (buffer, sx, sy - D, sx, sy + D);
    316319        }
    317320      }
     
    325328            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    326329        {
    327           DrawLine (buffer, sx + d*z[i], sy - d*z[i], sx - d*z[i], sy + d*z[i]);
    328           DrawLine (buffer, sx - d*z[i], sy - d*z[i], sx + d*z[i], sy + d*z[i]);
     330          D = d*z[i];
     331          DrawLine (buffer, sx + D, sy - D, sx - D, sy + D);
     332          DrawLine (buffer, sx - D, sy - D, sx + D, sy + D);
    329333        }
    330334      }
     
    338342            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    339343        {
    340           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]);
     344          D = d*z[i];
     345          // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D);
     346          FillTriangle (buffer, sx, sy + 0.58*D, D, -1.73*D);
    341347        }
    342348      }
     
    350356            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    351357        {
    352           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]);
     358          D = d*z[i];
     359          OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D);
    353360        }
    354361      }
     
    362369            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    363370        {
    364           DrawLine (buffer, sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
    365           DrawLine (buffer, sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
    366           DrawLine (buffer, sx, sy, sx,          sy - 1.15*d*z[i]);
     371          D = d*z[i];
     372          DrawLine (buffer, sx, sy, sx - D, sy - 0.58*D);
     373          DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D);
     374          DrawLine (buffer, sx, sy, sx,     sy + 1.15*D);
    367375        }
    368376      }
     
    376384            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    377385        {
    378           DrawCircle (buffer, sx, sy, d*z[i]);
     386          D = d*z[i];
     387          DrawCircle (buffer, sx, sy, D);
    379388        }
    380389      }
     
    388397            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    389398        {
    390           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]);
    391           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]);
    392           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]);
    393           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]);
    394           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]);
     399          D = d*z[i];
     400          DrawLine (buffer, sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D);
     401          DrawLine (buffer, sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D);
     402          DrawLine (buffer, sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D);
     403          DrawLine (buffer, sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D);
     404          DrawLine (buffer, sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D);
    395405        }
    396406      }
     
    404414            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    405415        {
    406           DrawLine (buffer, sx -      d*z[i], sy,               sx - 0.50*d*z[i], sy + 0.87*d*z[i]);
    407           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]);
    408           DrawLine (buffer, sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx +      d*z[i], sy);
    409 
    410           DrawLine (buffer, sx +      d*z[i], sy,               sx + 0.50*d*z[i], sy - 0.87*d*z[i]);
    411           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]);
    412           DrawLine (buffer, sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx -      d*z[i], sy);
     416          D = d*z[i];
     417          DrawLine (buffer, sx -      D, sy,          sx - 0.50*D, sy + 0.87*D);
     418          DrawLine (buffer, sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D);
     419          DrawLine (buffer, sx + 0.50*D, sy + 0.87*D, sx +      D, sy);
     420          DrawLine (buffer, sx +      D, sy,          sx + 0.50*D, sy - 0.87*D);
     421          DrawLine (buffer, sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D);
     422          DrawLine (buffer, sx - 0.50*D, sy - 0.87*D, sx -      D, sy);
    413423        }
    414424      }
     
    431441    }
    432442  } else {
    433     d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003;
     443    d = (int)(object[0].size * hypot((float)graphic->dx, (float)graphic->dy) * 0.003);
    434444    x = object[0].x; y = object[0].y;
     445
    435446    if (object[0].ptype == 0) { /* filled box */
    436447      for (i = 0; i < object[0].Npts; i++) {
     
    457468      }
    458469    }
    459     if (object[0].ptype == 2) { /* cross */
     470    if (object[0].ptype == 2) { /* cross : OK */
    460471      for (i = 0; i < object[0].Npts; i++) {
    461472        if (!(finite(x[i]) && finite(y[i]))) continue;
     
    491502            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    492503        {
    493           FillTriangle (buffer, sx - d, sy - 0.58*d, sx + d, sy - 0.58*d, sx, sy + 1.15*d);
     504          FillTriangle (buffer, sx, sy + 0.58*d, d, -1.73*d);
    494505        }
    495506      }
Note: See TracChangeset for help on using the changeset viewer.