IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 3, 2010, 8:45:22 AM (16 years ago)
Author:
eugene
Message:

updates from trunk

Location:
branches/simmosaic_branches
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/simmosaic_branches

  • branches/simmosaic_branches/Ohana

  • branches/simmosaic_branches/Ohana/src/kapa2/src/DrawObjects.c

    r13320 r27839  
    11# include "Ximage.h"
     2
    23# 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)))
    34# 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)))
     
    1011
    1112static Graphic *graphic;
    12 
    13 void ClipLine (double x0, double y0, double x1, double y1, double X0, double Y0, double X1, double Y1);
    1413
    1514/* draw all objects for this Graph */
     
    4039  /* set line type */
    4140  switch (object[0].ltype) {
    42   case 0:
    43     XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
    44     break;
    45   case 1:
    46     XSetDashes (graphic->display, graphic->gc, 100, dash, 2);
    47     XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
    48     break;
    49   case 2:
    50     XSetDashes (graphic->display, graphic->gc, 10, dot, 2);
    51     XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
    52     break;
    53   default:
    54     XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
    55     break;
     41    case 0:
     42      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
     43      break;
     44    case 1:
     45      XSetDashes (graphic->display, graphic->gc, 100, dash, 2);
     46      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
     47      break;
     48    case 2:
     49      XSetDashes (graphic->display, graphic->gc, 10, dot, 2);
     50      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CapNotLast, JoinMiter);
     51      break;
     52    default:
     53      XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter);
     54      break;
    5655  }
    5756
     
    5958
    6059  switch (object[0].style) {
    61   case CONNECT:
    62     DrawConnect (graph, object);
    63     break;
    64   case HISTOGRAM:
    65     DrawHistogram (graph, object);
    66     break;
    67   case POINTS:
    68     DrawPoints (graph, object);
    69     break;
     60    case CONNECT:
     61      DrawConnect (graph, object);
     62      break;
     63    case HISTOGRAM:
     64      DrawHistogram (graph, object);
     65      break;
     66    case POINTS:
     67      DrawPoints (graph, object);
     68      break;
    7069  }
    7170   
     
    181180
    182181/******/
     182/* simplify the code abit by finding triplets, watch out for a histogram of 2 points */
    183183void DrawHistogram (KapaGraphWidget *graph, Gobjects *object) {
    184184
     
    186186  float *x, *y;
    187187  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
    188   double sx0, sy0, sx1, sy1, sxa;
     188  double sx0, sy0, sx1, sy1, sxa, sya, sxo, syo;
    189189  double X0, X1, Y0, Y1;
    190190
     
    211211  for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
    212212  if (i >= object[0].Npts) return;
     213
     214  /* first valid data point */
    213215  sx0 = x[i]*mxi + y[i]*mxj + bx;
    214216  sy0 = x[i]*myi + y[i]*myj + by;
    215217  sx0 = MIN (MAX (sx0, X0), X1);
    216218  sy0 = MAX (MIN (sy0, Y0), Y1);
     219 
     220  /* find the second valid datapoint */
     221  for (i++; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
     222  if (i >= object[0].Npts) return;
     223
     224  /* second valid data point */
     225  sx1 = x[i]*mxi + y[i]*mxj + bx;
     226  sy1 = x[i]*myi + y[i]*myj + by;
     227  sx1 = MIN (MAX (sx1, X0), X1);
     228  sy1 = MAX (MIN (sy1, Y0), Y1);
     229 
     230  /* connect first point to second point */
     231  sxa = sx0 - 0.5*(sx1 - sx0);
     232  sya = MAX (sy0, Y0);
     233  DrawLine (sx0, sy0, sxa, sy0);
     234  DrawLine (sxa, sy0, sxa, sya);
     235 
     236  /* draw segment equal distance behind first point and down to x-axis */
     237  sxa = 0.5*(sx0 + sx1);
     238  DrawLine (sx0, sy0, sxa, sy0);
     239  DrawLine (sxa, sy0, sxa, sy1);
     240  DrawLine (sxa, sy1, sx1, sy1);
     241  sx0 = sx1;
     242  sy0 = sy1;
     243 
     244  /* continue with rest of points */
     245  sxo = syo = 0;
     246  for (i++; i < object[0].Npts; i++) {
     247    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;
     250    sx1 = MIN (MAX (sx1, X0), X1);
     251    sy1 = MAX (MIN (sy1, Y0), Y1);
     252    sxa = 0.5*(sx0 + sx1);
     253    DrawLine (sx0, sy0, sxa, sy0);
     254    DrawLine (sxa, sy0, sxa, sy1);
     255    DrawLine (sxa, sy1, sx1, sy1);
     256    sxo = sx0; syo = sy0;
     257    sx0 = sx1; sy0 = sy1;
     258  }
     259 
     260  /* draw segment equal distance after last point and down to x-axis */
     261  sxa = sx1 + 0.5*(sx1 - sxo);
     262  sya = MAX (sy1, Y0);
     263  DrawLine (sx1, sy1, sxa, sy1);
     264  DrawLine (sxa, sy1, sxa, sya);
     265}
     266
     267# if (0)
     268void FillHistogram (KapaGraphWidget *graph, Gobjects *object) {
     269
     270  int i;
     271  float *x, *y;
     272  double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by;
     273  double sx0, sy0, sx1, sy1, sxa, sya, sxo, syo;
     274  double X0, X1, Y0, Y1;
     275
     276  mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0);
     277  mxj = graph[0].axis[1].dfx / (object[0].y1 - object[0].y0);
     278  myi = graph[0].axis[0].dfy / (object[0].x1 - object[0].x0);
     279  myj = graph[0].axis[1].dfy / (object[0].y1 - object[0].y0);
     280 
     281  bxi  =  graph[0].axis[0].fx - object[0].x0*graph[0].axis[0].dfx/(object[0].x1 - object[0].x0);
     282  bxj  =  -object[0].y0*graph[0].axis[1].dfx/(object[0].y1 - object[0].y0);
     283  byi  =  -object[0].x0*graph[0].axis[0].dfy/(object[0].x1 - object[0].x0);
     284  byj  =  graph[0].axis[1].fy - object[0].y0*graph[0].axis[1].dfy/(object[0].y1 - object[0].y0);
     285 
     286  bx = bxi + bxj;
     287  by = byi + byj;
     288 
     289  X0 = graph[0].axis[0].fx;
     290  X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx;
     291  Y0 = graph[0].axis[1].fy;
     292  Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy;
     293
     294  /* find the first valid datapoint */
     295  x = object[0].x; y = object[0].y;
     296  for (i = 0; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
     297  if (i >= object[0].Npts) return;
     298
     299  /* first valid data point */
     300  sx0 = x[i]*mxi + y[i]*mxj + bx;
     301  sy0 = x[i]*myi + y[i]*myj + by;
     302  sx0 = MIN (MAX (sx0, X0), X1);
     303  sy0 = MAX (MIN (sy0, Y0), Y1);
     304 
     305  /* find the second valid datapoint */
     306  for (i++; (i < object[0].Npts) && !(finite(x[i]) && finite(y[i])); i++);
     307  if (i >= object[0].Npts) return;
     308
     309  /* second valid data point */
     310  sx1 = x[i]*mxi + y[i]*mxj + bx;
     311  sy1 = x[i]*myi + y[i]*myj + by;
     312  sx1 = MIN (MAX (sx1, X0), X1);
     313  sy1 = MAX (MIN (sy1, Y0), Y1);
     314 
     315  /* connect first point to second point */
     316  sxa = sx0 - 0.5*(sx1 - sx0);
     317  sya = MAX (sy0, Y0);
     318  DrawLine (sx0, sy0, sxa, sy0);
     319  DrawLine (sxa, sy0, sxa, sya);
     320 
     321  /* draw segment equal distance behind first point and down to x-axis */
     322  sxa = 0.5*(sx0 + sx1);
     323  DrawLine (sx0, sy0, sxa, sy0);
     324  DrawLine (sxa, sy0, sxa, sy1);
     325  DrawLine (sxa, sy1, sx1, sy1);
     326  sx0 = sx1;
     327  sy0 = sy1;
    217328 
    218329  /* continue with rest of points */
     
    227338    DrawLine (sxa, sy0, sxa, sy1);
    228339    DrawLine (sxa, sy1, sx1, sy1);
     340    sxo = sx0; syo = sy0;
    229341    sx0 = sx1; sy0 = sy1;
    230342  }
     343 
     344  /* draw segment equal distance after last point and down to x-axis */
     345  sxa = sx1 + 0.5*(sx1 - sxo);
     346  sya = MAX (sy1, Y0);
     347  DrawLine (sx1, sy1, sxa, sy1);
     348  DrawLine (sxa, sy1, sxa, sya);
    231349}
     350# endif
    232351
    233352/******/
     
    263382        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    264383            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    265           {
    266             FillRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
    267           }
     384        {
     385          FillRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
     386        }
    268387      }
    269388    }
     
    275394        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    276395            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    277           {
    278             DrawRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
    279           }
     396        {
     397          DrawRectangle (sx - d*z[i], sy - d*z[i], 2*d*z[i], 2*d*z[i]);
     398        }
    280399      }
    281400    }
     
    287406        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    288407            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    289           {
    290             DrawLine (sx - d*z[i], sy, sx + d*z[i] + 1, sy);
    291             DrawLine (sx, sy - d*z[i], sx, sy + d*z[i] + 1);
    292           }
     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);
     411        }
    293412      }
    294413    }
     
    300419        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    301420            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    302           {
    303             DrawLine (sx + d*z[i] + 1, sy - d*z[i] - 1, sx - d*z[i], sy + d*z[i]);
    304             DrawLine (sx - d*z[i], sy - d*z[i], sx + d*z[i] + 1, sy + d*z[i] + 1);
    305           }
     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);
     424        }
    306425      }
    307426    }
     
    314433        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    315434            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    316           {
    317             points[0].x = sx - d*z[i];  points[0].y = sy + 0.58*d*z[i]; 
    318             points[1].x = sx + d*z[i];  points[1].y = sy + 0.58*d*z[i]; 
    319             points[2].x = sx;           points[2].y = sy - 1.15*d*z[i]; 
    320             points[3].x = sx - d*z[i];  points[3].y = sy + 0.58*d*z[i]; 
    321             XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
    322           }
     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]; 
     440          XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
     441        }
    323442      }
    324443    }
     
    330449        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    331450            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    332           {
    333             DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]);
    334             DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx,          sy - 1.15*d*z[i]);
    335             DrawLine (sx,          sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]);
    336           }
     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]);
     455        }
    337456      }
    338457    }
     
    344463        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    345464            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    346           {
    347             DrawLine (sx, sy, sx - d*z[i], sy + 0.58*d*z[i]);
    348             DrawLine (sx, sy, sx + d*z[i], sy + 0.58*d*z[i]);
    349             DrawLine (sx, sy, sx,          sy - 1.15*d*z[i]);
    350           }
     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]);
     469        }
    351470      }
    352471    }
     
    358477        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    359478            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    360           {
    361             DrawCircle (sx, sy, d*z[i]);
    362           }
     479        {
     480          DrawCircle (sx, sy, d*z[i]);
     481        }
     482      }
     483    }
     484    if (object[0].ptype == 8) { /* pentagon */
     485      for (i = 0; i < object[0].Npts; i++) {
     486        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]);
     497        }
     498      }
     499    }
     500    if (object[0].ptype == 9) { /* hexagon */
     501      for (i = 0; i < object[0].Npts; i++) {
     502        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);
     515        }
    363516      }
    364517    }
     
    386539        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    387540            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    388           {
    389             FillRectangle (sx - d, sy - d, 2*d, 2*d);
    390           }
     541        {
     542          FillRectangle (sx - d, sy - d, 2*d, 2*d);
     543        }
    391544      }
    392545    }
     
    398551        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    399552            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    400           {
    401             DrawRectangle (sx - d, sy - d, 2*d, 2*d);
    402           }
     553        {
     554          DrawRectangle (sx - d, sy - d, 2*d, 2*d);
     555        }
    403556      }
    404557    }
     
    410563        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    411564            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    412           {
    413             DrawLine (sx - d, sy, sx + d + 1, sy);
    414             DrawLine (sx, sy - d, sx, sy + d + 1);
    415           }
     565        {
     566          DrawLine (sx - d, sy, sx + d + 1, sy);
     567          DrawLine (sx, sy - d, sx, sy + d + 1);
     568        }
    416569      }
    417570    }
     
    423576        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    424577            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    425           {
    426             /* XDrawLine is a little funny, this is needed to fix endpost errors */
    427             DrawLine (sx + d + 1, sy - d - 1, sx - d, sy + d);
    428             DrawLine (sx - d, sy - d, sx + d + 1, sy + d + 1);
    429           }
     578        {
     579          /* XDrawLine is a little funny, this is needed to fix endpost errors */
     580          DrawLine (sx + d + 1, sy - d - 1, sx - d, sy + d);
     581          DrawLine (sx - d, sy - d, sx + d + 1, sy + d + 1);
     582        }
    430583      }
    431584    }
     
    438591        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    439592            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    440           {
    441             points[0].x = sx - d;  points[0].y = sy + 0.58*d; 
    442             points[1].x = sx + d;  points[1].y = sy + 0.58*d; 
    443             points[2].x = sx;      points[2].y = sy - 1.15*d; 
    444             points[3].x = sx - d;  points[3].y = sy + 0.58*d; 
    445             XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
    446           }
     593        {
     594          points[0].x = sx - d;  points[0].y = sy + 0.58*d; 
     595          points[1].x = sx + d;  points[1].y = sy + 0.58*d; 
     596          points[2].x = sx;      points[2].y = sy - 1.15*d; 
     597          points[3].x = sx - d;  points[3].y = sy + 0.58*d; 
     598          XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin);
     599        }
    447600      }
    448601    }
     
    454607        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    455608            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    456           {
    457             DrawLine (sx - d, sy + 0.58*d, sx + d, sy + 0.58*d);
    458             DrawLine (sx + d, sy + 0.58*d, sx,     sy - 1.15*d);
    459             DrawLine (sx,     sy - 1.15*d, sx - d, sy + 0.58*d);
    460           }
     609        {
     610          DrawLine (sx - d, sy + 0.58*d, sx + d, sy + 0.58*d);
     611          DrawLine (sx + d, sy + 0.58*d, sx,     sy - 1.15*d);
     612          DrawLine (sx,     sy - 1.15*d, sx - d, sy + 0.58*d);
     613        }
    461614      }
    462615    }
     
    468621        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    469622            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    470           {
    471             DrawLine (sx, sy, sx - d, sy + 0.58*d);
    472             DrawLine (sx, sy, sx + d, sy + 0.58*d);
    473             DrawLine (sx, sy, sx,     sy - 1.15*d);
    474           }
     623        {
     624          DrawLine (sx, sy, sx - d, sy + 0.58*d);
     625          DrawLine (sx, sy, sx + d, sy + 0.58*d);
     626          DrawLine (sx, sy, sx,     sy - 1.15*d);
     627        }
    475628      }
    476629    }
     
    482635        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    483636            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
    484           {
    485             DrawCircle (sx, sy, d);
    486           }
     637        {
     638          DrawCircle (sx, sy, d);
     639        }
     640      }
     641    }
     642    if (object[0].ptype == 8) { /* pentagon */
     643      for (i = 0; i < object[0].Npts; i++) {
     644        if (!(finite(x[i]) && finite(y[i]))) continue;
     645        sx = x[i]*mxi + y[i]*mxj + bx;
     646        sy = x[i]*myi + y[i]*myj + by;
     647        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     648            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     649        {
     650          DrawLine (sx + 0.00*d, sy - 1.00*d, sx + 0.95*d, sy - 0.31*d);
     651          DrawLine (sx + 0.95*d, sy - 0.31*d, sx + 0.58*d, sy + 0.81*d);
     652          DrawLine (sx + 0.58*d, sy + 0.81*d, sx - 0.58*d, sy + 0.81*d);
     653          DrawLine (sx - 0.58*d, sy + 0.81*d, sx - 0.95*d, sy - 0.31*d);
     654          DrawLine (sx - 0.95*d, sy - 0.31*d, sx + 0.00*d, sy - 1.00*d);
     655        }
     656      }
     657    }
     658    if (object[0].ptype == 9) { /* pentagon */
     659      for (i = 0; i < object[0].Npts; i++) {
     660        if (!(finite(x[i]) && finite(y[i]))) continue;
     661        sx = x[i]*mxi + y[i]*mxj + bx;
     662        sy = x[i]*myi + y[i]*myj + by;
     663        if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
     664            (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy))
     665        {
     666          DrawLine (sx - 1.00*d, sy + 0.00*d, sx - 0.50*d, sy + 0.87*d);
     667          DrawLine (sx - 0.50*d, sy + 0.87*d, sx + 0.50*d, sy + 0.87*d);
     668          DrawLine (sx + 0.50*d, sy + 0.87*d, sx + 1.00*d, sy + 0.00*d);
     669          DrawLine (sx + 1.00*d, sy + 0.00*d, sx + 0.50*d, sy - 0.87*d);
     670          DrawLine (sx + 0.50*d, sy - 0.87*d, sx - 0.50*d, sy - 0.87*d);
     671          DrawLine (sx - 0.50*d, sy - 0.87*d, sx - 1.00*d, sy + 0.00*d);
     672        }
    487673      }
    488674    }
     
    534720        ((sx1 > graph[0].axis[0].fx) && (sx1 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    535721         (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy)))
    536       {
    537         DrawLine (sx0, sy0, sx1, sy1);
    538         if (bar) {
    539           sx10 = sy1 - sz;
    540           sx11 = sy1 + sz;
    541           DrawLine (sx1, sx10, sx1, sx11);
    542         }
    543       }
     722    {
     723      DrawLine (sx0, sy0, sx1, sy1);
     724      if (bar) {
     725        sx10 = sy1 - sz;
     726        sx11 = sy1 + sz;
     727        DrawLine (sx1, sx10, sx1, sx11);
     728      }
     729    }
    544730    if (!(finite(x[i]) && finite(y[i]) && finite(dxm[i]))) continue;
    545731    sx0 = x[i]*mxi + y[i]*mxj + bx;
     
    551737        ((sx1 > graph[0].axis[0].fx) && (sx1 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    552738         (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy)))
    553       {
    554         DrawLine (sx0, sy0, sx1, sy1);
    555         if (bar) {
    556           sx10 = sy1 - sz;
    557           sx11 = sy1 + sz;
    558           DrawLine (sx1, sx10, sx1, sx11);
    559         }
    560       }
     739    {
     740      DrawLine (sx0, sy0, sx1, sy1);
     741      if (bar) {
     742        sx10 = sy1 - sz;
     743        sx11 = sy1 + sz;
     744        DrawLine (sx1, sx10, sx1, sx11);
     745      }
     746    }
    561747  }
    562748}
     
    596782        ((sx1 > graph[0].axis[0].fx) && (sx1 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    597783         (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy)))
    598       {
    599         DrawLine (sx0, sy0, sx1, sy1);
    600         if (bar) {
    601           sx10 = sx1 - sz;
    602           sx11 = sx1 + sz;
    603           DrawLine (sx10, sy1, sx11, sy1);
    604         }
    605       }
     784    {
     785      DrawLine (sx0, sy0, sx1, sy1);
     786      if (bar) {
     787        sx10 = sx1 - sz;
     788        sx11 = sx1 + sz;
     789        DrawLine (sx10, sy1, sx11, sy1);
     790      }
     791    }
    606792    if (!(finite(x[i]) && finite(y[i]) && finite(dym[i]))) continue;
    607793    sx0 = x[i]*mxi + y[i]*mxj + bx;
     
    613799        ((sx1 > graph[0].axis[0].fx) && (sx1 < graph[0].axis[0].fx + graph[0].axis[0].dfx) &&
    614800         (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy)))
    615       {
    616         DrawLine (sx0, sy0, sx1, sy1);
    617         if (bar) {
    618           sx10 = sx1 - sz;
    619           sx11 = sx1 + sz;
    620           DrawLine (sx10, sy1, sx11, sy1);
    621         }
    622       }
     801    {
     802      DrawLine (sx0, sy0, sx1, sy1);
     803      if (bar) {
     804        sx10 = sx1 - sz;
     805        sx11 = sx1 + sz;
     806        DrawLine (sx10, sy1, sx11, sy1);
     807      }
     808    }
    623809  }
    624810}
Note: See TracChangeset for help on using the changeset viewer.