Changeset 39926 for trunk/Ohana/src/kapa2
- Timestamp:
- Jan 6, 2017, 11:30:10 AM (10 years ago)
- Location:
- trunk
- Files:
-
- 10 edited
-
. (modified) (1 prop)
-
Ohana (modified) (1 prop)
-
Ohana/src/kapa2/include/prototypes.h (modified) (3 diffs)
-
Ohana/src/kapa2/src/DrawFrame.c (modified) (2 diffs)
-
Ohana/src/kapa2/src/DrawObjects.c (modified) (18 diffs)
-
Ohana/src/kapa2/src/LoadObject.c (modified) (1 diff)
-
Ohana/src/kapa2/src/PSFrame.c (modified) (2 diffs)
-
Ohana/src/kapa2/src/PSObjects.c (modified) (4 diffs)
-
Ohana/src/kapa2/src/bDrawFrame.c (modified) (2 diffs)
-
Ohana/src/kapa2/src/bDrawObjects.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk
-
Property svn:mergeinfo
set to
/branches/czw_branch/20160809 merged eligible
-
Property svn:mergeinfo
set to
-
trunk/Ohana
-
trunk/Ohana/src/kapa2/include/prototypes.h
r39457 r39926 32 32 void DrawLabelsRaw PROTO((Graphic *graphic, KapaGraphWidget *graph, int color)); 33 33 void DrawTextlines PROTO((KapaGraphWidget *graph)); 34 void DrawConnect PROTO(( KapaGraphWidget *graph, Gobjects *objects));35 void DrawHistogram PROTO(( KapaGraphWidget *graph, Gobjects *objects));36 int DrawObjectN PROTO(( KapaGraphWidget *graph, Gobjects *objects));37 void DrawPoints PROTO(( KapaGraphWidget *graph, Gobjects *objects));38 void ClipLine PROTO(( double x0, double y0, double x1, double y1, double X0, double Y0, double X1, double Y1));39 void DrawXErrors PROTO(( KapaGraphWidget *graph, Gobjects *objects));40 void DrawYErrors PROTO(( KapaGraphWidget *graph, Gobjects *objects));34 void DrawConnect PROTO((Graphic *graphic, KapaGraphWidget *graph, Gobjects *objects)); 35 void DrawHistogram PROTO((Graphic *graphic, KapaGraphWidget *graph, Gobjects *objects)); 36 int DrawObjectN PROTO((Graphic *graphic, KapaGraphWidget *graph, Gobjects *objects)); 37 void DrawPoints PROTO((Graphic *graphic, KapaGraphWidget *graph, Gobjects *objects)); 38 void ClipLine PROTO((Graphic *graphic, double x0, double y0, double x1, double y1, double X0, double Y0, double X1, double Y1)); 39 void DrawXErrors PROTO((Graphic *graphic, KapaGraphWidget *graph, Gobjects *objects)); 40 void DrawYErrors PROTO((Graphic *graphic, KapaGraphWidget *graph, Gobjects *objects)); 41 41 void DrawTick PROTO((Graphic *graphic, Axis *axis, int P, TickMarkData *tick, int naxis)); 42 42 void AxisTickScale PROTO((Axis *axis, double *range, double *major, double *minor, int *nsignif)); … … 115 115 void PSLabels PROTO((KapaGraphWidget *graph, FILE *f)); 116 116 void PSTextlines PROTO((KapaGraphWidget *graph, FILE *f)); 117 int PSObjectsN PROTO((KapaGraphWidget *graph, Gobjects *objects, FILE *f)); 117 118 void PSConnect PROTO((KapaGraphWidget *graph, Gobjects *objects, FILE *f)); 118 119 void PSHistogram PROTO((KapaGraphWidget *graph, Gobjects *objects, FILE *f)); … … 135 136 void bDrawLabels PROTO((bDrawBuffer *buffer, KapaGraphWidget *graph)); 136 137 void bDrawTextlines PROTO((bDrawBuffer *buffer, KapaGraphWidget *graph)); 138 int bDrawObjectsN PROTO((bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object)); 137 139 void bDrawConnect PROTO((bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object)); 138 140 void bDrawHistogram PROTO((bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object)); -
trunk/Ohana/src/kapa2/src/DrawFrame.c
r39594 r39926 12 12 13 13 graphic = GetGraphic(); 14 15 P = 0.5 * (1 + 0.25*graph[0].axis[0].lweight) * (hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy) + hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy)); 14 16 15 17 /* each axis is drawn independently, but ticks and labels are placed according to perpendicular distance. */ … … 30 32 dfy = graph[0].axis[i].dfy + 2*dy; 31 33 32 P = hypot (graph[0].axis[(i+1)%2].dfx, graph[0].axis[(i+1)%2].dfy);33 P *= (1 + 0.25*lweight);34 // P = hypot (graph[0].axis[(i+1)%2].dfx, graph[0].axis[(i+1)%2].dfy); 35 // P *= (1 + 0.25*lweight); 34 36 35 37 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CapNotLast, JoinMiter); -
trunk/Ohana/src/kapa2/src/DrawObjects.c
r39594 r39926 8 8 # define FillCircle(X,Y,R) (XFillArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R+1), abs(2*R+1), 0, 23040)) 9 9 10 # define CONNECT 011 # define HISTOGRAM 112 # define POINTS 213 14 10 # define XCENTER 0.0 15 11 # define YCENTER 0.0 … … 17 13 # define JOINSTYLE JoinMiter 18 14 19 static Graphic *graphic; 15 // XXX this is not thread safe, but that is OK 16 // static Graphic *graphic; 20 17 21 18 /* draw all objects for this Graph */ … … 24 21 int i; 25 22 23 // the functions below use this global value 24 Graphic *graphic = GetGraphic(); 25 26 // this function calls all of the supporting Draw... functions below 26 27 for (i = 0; i < graph[0].Nobjects; i++) { 27 28 if (DEBUG) fprintf (stderr, "object: %d\n", i); 28 29 if (DEBUG) fprintf (stderr, "Npts: %d\n", graph[0].objects[i].Npts); 29 DrawObjectN (graph , &graph[0].objects[i]);30 DrawObjectN (graphic, graph, &graph[0].objects[i]); 30 31 } 32 XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CAPSTYLE, JOINSTYLE); 33 XSetForeground (graphic->display, graphic->gc, graphic->fore); 31 34 return (TRUE); 32 35 } 33 36 34 37 /* Draw a specific object in the graph */ 35 int DrawObjectN ( KapaGraphWidget *graph, Gobjects *object) {38 int DrawObjectN (Graphic *graphic, KapaGraphWidget *graph, Gobjects *object) { 36 39 37 40 static char dot[2] = {2,3}; … … 41 44 int lweight; 42 45 43 // this function calls all of the supporting Draw... functions below44 graphic = GetGraphic();45 46 46 lweight = MAX (1, MIN (10, object[0].lweight)); 47 47 … … 58 58 /* set line type */ 59 59 switch (object[0].ltype) { 60 case 0: 61 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE); 62 break; 63 case 1: 60 case KAPA_LINE_DOT: 64 61 XSetDashes (graphic->display, graphic->gc, 1, dot, 2); 65 XSetLineAttributes (graphic->display, graphic->gc, lweight, Line OnOffDash, CAPSTYLE, JOINSTYLE);66 break; 67 case 2:62 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineDoubleDash, CAPSTYLE, JOINSTYLE); 63 break; 64 case KAPA_LINE_DASH_SHORT: 68 65 XSetDashes (graphic->display, graphic->gc, 1, short_dash, 2); 69 XSetLineAttributes (graphic->display, graphic->gc, lweight, Line OnOffDash, CAPSTYLE, JOINSTYLE);70 break; 71 case 3:66 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineDoubleDash, CAPSTYLE, JOINSTYLE); 67 break; 68 case KAPA_LINE_DASH_LONG: 72 69 XSetDashes (graphic->display, graphic->gc, 1, long_dash, 2); 73 XSetLineAttributes (graphic->display, graphic->gc, lweight, Line OnOffDash, CAPSTYLE, JOINSTYLE);74 break; 75 case 4:70 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineDoubleDash, CAPSTYLE, JOINSTYLE); 71 break; 72 case KAPA_LINE_DOT_DASH: 76 73 XSetDashes (graphic->display, graphic->gc, 1, dot_dash, 4); 77 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineOnOffDash, CAPSTYLE, JOINSTYLE); 78 break; 74 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineDoubleDash, CAPSTYLE, JOINSTYLE); 75 break; 76 case KAPA_LINE_SOLID: 79 77 default: 80 78 XSetLineAttributes (graphic->display, graphic->gc, lweight, LineSolid, CAPSTYLE, JOINSTYLE); … … 88 86 89 87 switch (object[0].style) { 90 case CONNECT: 91 DrawConnect (graph, object); 92 break; 93 case HISTOGRAM: 94 DrawHistogram (graph, object); 95 break; 96 case POINTS: 97 DrawPoints (graph, object); 88 case KAPA_PLOT_CONNECT: 89 DrawConnect (graphic, graph, object); 90 break; 91 case KAPA_PLOT_HISTOGRAM: 92 DrawHistogram (graphic, graph, object); 93 break; 94 case KAPA_PLOT_POINTS: 95 default: 96 DrawPoints (graphic, graph, object); 98 97 break; 99 98 } 100 99 101 100 if (object[0].etype & 0x01) { 102 DrawYErrors (graph , object);101 DrawYErrors (graphic, graph, object); 103 102 } 104 103 if (object[0].etype & 0x02) { 105 DrawXErrors (graph, object); 106 } 107 108 XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CAPSTYLE, JOINSTYLE); 109 XSetForeground (graphic->display, graphic->gc, graphic->fore); 104 DrawXErrors (graphic, graph, object); 105 } 110 106 return (TRUE); 111 107 } 112 108 113 109 /******/ 114 void DrawConnect ( KapaGraphWidget *graph, Gobjects *object) {110 void DrawConnect (Graphic *graphic, KapaGraphWidget *graph, Gobjects *object) { 115 111 116 112 int i; … … 149 145 sy1 = x[i]*myi + y[i]*myj + by + YCENTER; 150 146 151 ClipLine ( sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);147 ClipLine (graphic, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1); 152 148 /* DrawLine (sx0, sy0, sx1, sy1); */ 153 149 sx0 = sx1; sy0 = sy1; … … 156 152 } 157 153 158 void ClipLine ( double x0, double y0, double x1, double y1, double X0, double Y1, double X1, double Y0) {154 void ClipLine (Graphic *graphic, double x0, double y0, double x1, double y1, double X0, double Y1, double X1, double Y0) { 159 155 160 156 /* skip line segement if both points are beyond box */ … … 212 208 /* simplify the code abit by finding triplets, watch out for a histogram of 2 points */ 213 209 # if (1) 214 void DrawHistogram ( KapaGraphWidget *graph, Gobjects *object) {210 void DrawHistogram (Graphic *graphic, KapaGraphWidget *graph, Gobjects *object) { 215 211 216 212 int i; … … 298 294 # else 299 295 300 void DrawHistogram ( KapaGraphWidget *graph, Gobjects *object) {296 void DrawHistogram (Graphic *graphic, KapaGraphWidget *graph, Gobjects *object) { 301 297 302 298 int i; … … 407 403 408 404 /******/ 409 void DrawPoints ( KapaGraphWidget *graph, Gobjects *object) {405 void DrawPoints (Graphic *graphic, KapaGraphWidget *graph, Gobjects *object) { 410 406 411 407 int i; … … 427 423 by = byi + byj; 428 424 429 Graphic *graphic = GetGraphic(); 430 431 /**** points are scaled by object.z ***/ 425 /**** point sizes are scaled by object.size, colors by object.color ***/ 432 426 int scaleSize = (object[0].size < 0); 433 427 int scaleColor = (object[0].color < 0); … … 437 431 x = object[0].x; y = object[0].y; z = object[0].z; 438 432 439 if (object[0].ptype == 0) { /* filled box */ 440 for (i = 0; i < object[0].Npts; i++) { 441 if (!(finite(x[i]) && finite(y[i]))) continue; 442 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 443 sy = x[i]*myi + y[i]*myj + by + YCENTER; 444 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 445 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 446 if (scaleColor) { 447 if (!finite(z[i])) continue; 448 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 449 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 450 } 451 D = scaleSize ? dz*z[i] : ds; 452 FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1); 453 } 433 switch (object[0].ptype) { 434 case KAPA_POINT_BOX_OPEN: /* open box */ 435 for (i = 0; i < object[0].Npts; i++) { 436 if (!(finite(x[i]) && finite(y[i]))) continue; 437 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 438 sy = x[i]*myi + y[i]*myj + by + YCENTER; 439 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 440 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 441 if (scaleColor) { 442 if (!finite(z[i])) continue; 443 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 444 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 445 } 446 D = scaleSize ? dz*z[i] : ds; 447 DrawRectangle (sx - D, sy - D, 2*D, 2*D); 448 } 449 } 450 break; 451 case KAPA_POINT_CROSS: /* cross */ 452 for (i = 0; i < object[0].Npts; i++) { 453 if (!(finite(x[i]) && finite(y[i]))) continue; 454 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 455 sy = x[i]*myi + y[i]*myj + by + YCENTER; 456 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 457 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 458 if (scaleColor) { 459 if (!finite(z[i])) continue; 460 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 461 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 462 } 463 D = scaleSize ? dz*z[i] : ds; 464 DrawLine (sx - D, sy, sx + D + 1, sy); 465 DrawLine (sx, sy - D, sx, sy + D + 1); 466 } 467 } 468 break; 469 case KAPA_POINT_X: /* x */ 470 for (i = 0; i < object[0].Npts; i++) { 471 if (!(finite(x[i]) && finite(y[i]))) continue; 472 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 473 sy = x[i]*myi + y[i]*myj + by + YCENTER; 474 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 475 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 476 if (scaleColor) { 477 if (!finite(z[i])) continue; 478 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 479 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 480 } 481 D = scaleSize ? dz*z[i] : ds; 482 DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1); 483 DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1); 484 } 485 } 486 break; 487 case KAPA_POINT_TRIANGLE_SOLID: /* filled triangle */ 488 for (i = 0; i < object[0].Npts; i++) { 489 if (!(finite(x[i]) && finite(y[i]))) continue; 490 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 491 sy = x[i]*myi + y[i]*myj + by + YCENTER; 492 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 493 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 494 if (scaleColor) { 495 if (!finite(z[i])) continue; 496 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 497 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 498 } 499 D = scaleSize ? dz*z[i] : ds; 500 501 XPoint points[4]; 502 points[0].x = sx - D; points[0].y = sy + 0.58*D; 503 points[1].x = sx + D; points[1].y = sy + 0.58*D; 504 points[2].x = sx; points[2].y = sy - 1.15*D; 505 points[3].x = sx - D; points[3].y = sy + 0.58*D; 506 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 507 } 508 } 509 break; 510 case KAPA_POINT_TRIANGLE_SOLID_DOWN: /* filled triangle (down) */ 511 for (i = 0; i < object[0].Npts; i++) { 512 if (!(finite(x[i]) && finite(y[i]))) continue; 513 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 514 sy = x[i]*myi + y[i]*myj + by + YCENTER; 515 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 516 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 517 if (scaleColor) { 518 if (!finite(z[i])) continue; 519 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 520 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 521 } 522 D = scaleSize ? dz*z[i] : ds; 523 524 XPoint points[4]; 525 points[0].x = sx - D; points[0].y = sy - 0.58*D; 526 points[1].x = sx + D; points[1].y = sy - 0.58*D; 527 points[2].x = sx; points[2].y = sy + 1.15*D; 528 points[3].x = sx - D; points[3].y = sy - 0.58*D; 529 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 530 } 531 } 532 break; 533 case KAPA_POINT_TRIANGLE_OPEN: /* open triangle */ 534 for (i = 0; i < object[0].Npts; i++) { 535 if (!(finite(x[i]) && finite(y[i]))) continue; 536 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 537 sy = x[i]*myi + y[i]*myj + by + YCENTER; 538 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 539 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 540 if (scaleColor) { 541 if (!finite(z[i])) continue; 542 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 543 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 544 } 545 D = scaleSize ? dz*z[i] : ds; 546 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 547 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 548 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 549 } 550 } 551 break; 552 case KAPA_POINT_TRIANGLE_OPEN_DOWN: /* upside-down open triangle */ 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 + XCENTER; 556 sy = x[i]*myi + y[i]*myj + by + YCENTER; 557 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 558 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 559 if (scaleColor) { 560 if (!finite(z[i])) continue; 561 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 562 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 563 } 564 D = scaleSize ? dz*z[i] : ds; 565 DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D); 566 DrawLine (sx + D, sy - 0.58*D, sx, sy + 1.15*D); 567 DrawLine (sx, sy + 1.15*D, sx - D, sy - 0.58*D); 568 } 569 } 570 break; 571 case KAPA_POINT_Y: /* Y */ 572 for (i = 0; i < object[0].Npts; i++) { 573 if (!(finite(x[i]) && finite(y[i]))) continue; 574 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 575 sy = x[i]*myi + y[i]*myj + by + YCENTER; 576 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 577 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 578 if (scaleColor) { 579 if (!finite(z[i])) continue; 580 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 581 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 582 } 583 D = scaleSize ? dz*z[i] : ds; 584 DrawLine (sx, sy, sx - D, sy - 0.58*D); 585 DrawLine (sx, sy, sx + D, sy - 0.58*D); 586 DrawLine (sx, sy, sx, sy + 1.15*D); 587 } 588 } 589 break; 590 case KAPA_POINT_Y_DOWN: /* upside-down Y */ 591 for (i = 0; i < object[0].Npts; i++) { 592 if (!(finite(x[i]) && finite(y[i]))) continue; 593 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 594 sy = x[i]*myi + y[i]*myj + by + YCENTER; 595 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 596 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 597 if (scaleColor) { 598 if (!finite(z[i])) continue; 599 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 600 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 601 } 602 D = scaleSize ? dz*z[i] : ds; 603 DrawLine (sx, sy, sx - D, sy + 0.58*D); 604 DrawLine (sx, sy, sx + D, sy + 0.58*D); 605 DrawLine (sx, sy, sx, sy - 1.15*D); 606 } 607 } 608 break; 609 case KAPA_POINT_CIRCLE_OPEN: /* 0 */ 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; 614 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 615 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 616 if (scaleColor) { 617 if (!finite(z[i])) continue; 618 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 619 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 620 } 621 D = scaleSize ? dz*z[i] : ds; 622 DrawCircle (sx, sy, D); 623 } 624 } 625 break; 626 case KAPA_POINT_CIRCLE_SOLID: /* filled 0 */ 627 for (i = 0; i < object[0].Npts; i++) { 628 if (!(finite(x[i]) && finite(y[i]))) continue; 629 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 630 sy = x[i]*myi + y[i]*myj + by + YCENTER; 631 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 632 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 633 if (scaleColor) { 634 if (!finite(z[i])) continue; 635 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 636 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 637 } 638 D = scaleSize ? dz*z[i] : ds; 639 FillCircle (sx, sy, D); 640 DrawCircle (sx, sy, D); 641 } 642 } 643 break; 644 case KAPA_POINT_PENTAGON: /* pentagon */ 645 for (i = 0; i < object[0].Npts; i++) { 646 if (!(finite(x[i]) && finite(y[i]))) continue; 647 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 648 sy = x[i]*myi + y[i]*myj + by + YCENTER; 649 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 650 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 651 if (scaleColor) { 652 if (!finite(z[i])) continue; 653 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 654 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 655 } 656 D = scaleSize ? dz*z[i] : ds; 657 DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 658 DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 659 DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 660 DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 661 DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 662 } 663 } 664 break; 665 case KAPA_POINT_HEXAGON: /* hexagon */ 666 for (i = 0; i < object[0].Npts; i++) { 667 if (!(finite(x[i]) && finite(y[i]))) continue; 668 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 669 sy = x[i]*myi + y[i]*myj + by + YCENTER; 670 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 671 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 672 if (scaleColor) { 673 if (!finite(z[i])) continue; 674 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 675 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 676 } 677 D = scaleSize ? dz*z[i] : ds; 678 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 679 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 680 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 681 682 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 683 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 684 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 685 } 686 } 687 break; 688 case KAPA_POINT_PAIR_CONNECT: { /* connect pairs of points */ 689 double X0 = graph[0].axis[0].fx; 690 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 691 double Y0 = graph[0].axis[1].fy; 692 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 693 694 for (i = 0; i + 1 < object[0].Npts; i+=2) { 695 if (!(finite(x[i]) && finite(y[i]))) continue; 696 sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER; 697 sy1 = x[i]*myi + y[i]*myj + by + YCENTER; 698 if (!(finite(x[i+1]) && finite(y[i+1]))) continue; 699 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER; 700 sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER; 701 ClipLine (graphic, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 702 } 703 break; 454 704 } 455 } 456 if (object[0].ptype == 1) { /* open box */ 457 for (i = 0; i < object[0].Npts; i++) { 458 if (!(finite(x[i]) && finite(y[i]))) continue; 459 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 460 sy = x[i]*myi + y[i]*myj + by + YCENTER; 461 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 462 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 463 if (scaleColor) { 464 if (!finite(z[i])) continue; 465 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 466 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 467 } 468 D = scaleSize ? dz*z[i] : ds; 469 DrawRectangle (sx - D, sy - D, 2*D, 2*D); 470 } 471 } 472 } 473 if (object[0].ptype == 2) { /* cross */ 474 for (i = 0; i < object[0].Npts; i++) { 475 if (!(finite(x[i]) && finite(y[i]))) continue; 476 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 477 sy = x[i]*myi + y[i]*myj + by + YCENTER; 478 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 479 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 480 if (scaleColor) { 481 if (!finite(z[i])) continue; 482 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 483 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 484 } 485 D = scaleSize ? dz*z[i] : ds; 486 DrawLine (sx - D, sy, sx + D + 1, sy); 487 DrawLine (sx, sy - D, sx, sy + D + 1); 488 } 489 } 490 } 491 if (object[0].ptype == 3) { /* x */ 492 for (i = 0; i < object[0].Npts; i++) { 493 if (!(finite(x[i]) && finite(y[i]))) continue; 494 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 495 sy = x[i]*myi + y[i]*myj + by + YCENTER; 496 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 497 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 498 if (scaleColor) { 499 if (!finite(z[i])) continue; 500 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 501 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 502 } 503 D = scaleSize ? dz*z[i] : ds; 504 DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1); 505 DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1); 506 } 507 } 508 } 509 if (object[0].ptype == 4) { /* filled triangle */ 510 XPoint points[4]; 511 for (i = 0; i < object[0].Npts; i++) { 512 if (!(finite(x[i]) && finite(y[i]))) continue; 513 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 514 sy = x[i]*myi + y[i]*myj + by + YCENTER; 515 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 516 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 517 if (scaleColor) { 518 if (!finite(z[i])) continue; 519 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 520 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 521 } 522 D = scaleSize ? dz*z[i] : ds; 523 points[0].x = sx - D; points[0].y = sy + 0.58*D; 524 points[1].x = sx + D; points[1].y = sy + 0.58*D; 525 points[2].x = sx; points[2].y = sy - 1.15*D; 526 points[3].x = sx - D; points[3].y = sy + 0.58*D; 527 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 528 } 529 } 530 } 531 if (object[0].ptype == 5) { /* open triangle */ 532 for (i = 0; i < object[0].Npts; i++) { 533 if (!(finite(x[i]) && finite(y[i]))) continue; 534 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 535 sy = x[i]*myi + y[i]*myj + by + YCENTER; 536 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 537 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 538 if (scaleColor) { 539 if (!finite(z[i])) continue; 540 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 541 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 542 } 543 D = scaleSize ? dz*z[i] : ds; 544 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 545 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 546 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 547 } 548 } 549 } 550 if (object[0].ptype == 6) { /* Y */ 551 for (i = 0; i < object[0].Npts; i++) { 552 if (!(finite(x[i]) && finite(y[i]))) continue; 553 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 554 sy = x[i]*myi + y[i]*myj + by + YCENTER; 555 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 556 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 557 if (scaleColor) { 558 if (!finite(z[i])) continue; 559 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 560 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 561 } 562 D = scaleSize ? dz*z[i] : ds; 563 DrawLine (sx, sy, sx - D, sy - 0.58*D); 564 DrawLine (sx, sy, sx + D, sy - 0.58*D); 565 DrawLine (sx, sy, sx, sy + 1.15*D); 566 } 567 } 568 } 569 if (object[0].ptype == 7) { /* 0 */ 570 for (i = 0; i < object[0].Npts; i++) { 571 if (!(finite(x[i]) && finite(y[i]))) continue; 572 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 573 sy = x[i]*myi + y[i]*myj + by + YCENTER; 574 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 575 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 576 if (scaleColor) { 577 if (!finite(z[i])) continue; 578 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 579 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 580 } 581 D = scaleSize ? dz*z[i] : ds; 582 DrawCircle (sx, sy, D); 583 } 584 } 585 } 586 if (object[0].ptype == 8) { /* pentagon */ 587 for (i = 0; i < object[0].Npts; i++) { 588 if (!(finite(x[i]) && finite(y[i]))) continue; 589 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 590 sy = x[i]*myi + y[i]*myj + by + YCENTER; 591 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 592 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 593 if (scaleColor) { 594 if (!finite(z[i])) continue; 595 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 596 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 597 } 598 D = scaleSize ? dz*z[i] : ds; 599 DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 600 DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 601 DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 602 DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 603 DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 604 } 605 } 606 } 607 if (object[0].ptype == 9) { /* hexagon */ 608 for (i = 0; i < object[0].Npts; i++) { 609 if (!(finite(x[i]) && finite(y[i]))) continue; 610 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 611 sy = x[i]*myi + y[i]*myj + by + YCENTER; 612 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 613 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 614 if (scaleColor) { 615 if (!finite(z[i])) continue; 616 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 617 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 618 } 619 D = scaleSize ? dz*z[i] : ds; 620 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 621 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 622 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 623 624 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 625 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 626 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 627 } 628 } 629 } 630 if (object[0].ptype == 10) { /* filled 0 */ 631 for (i = 0; i < object[0].Npts; i++) { 632 if (!(finite(x[i]) && finite(y[i]))) continue; 633 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 634 sy = x[i]*myi + y[i]*myj + by + YCENTER; 635 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 636 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 637 if (scaleColor) { 638 if (!finite(z[i])) continue; 639 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 640 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 641 } 642 D = scaleSize ? dz*z[i] : ds; 643 FillCircle (sx, sy, D); 644 } 645 } 646 } 647 if (object[0].ptype == 12) { /* filled triangle (down) */ 648 XPoint points[4]; 649 for (i = 0; i < object[0].Npts; i++) { 650 if (!(finite(x[i]) && finite(y[i]))) continue; 651 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 652 sy = x[i]*myi + y[i]*myj + by + YCENTER; 653 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 654 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 655 if (scaleColor) { 656 if (!finite(z[i])) continue; 657 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 658 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 659 } 660 D = scaleSize ? dz*z[i] : ds; 661 points[0].x = sx - D; points[0].y = sy - 0.58*D; 662 points[1].x = sx + D; points[1].y = sy - 0.58*D; 663 points[2].x = sx; points[2].y = sy + 1.15*D; 664 points[3].x = sx - D; points[3].y = sy - 0.58*D; 665 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 666 } 667 } 668 } 669 if (object[0].ptype == 14) { /* upside-down filled triangle */ 670 XPoint points[4]; 671 for (i = 0; i < object[0].Npts; i++) { 672 if (!(finite(x[i]) && finite(y[i]))) continue; 673 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 674 sy = x[i]*myi + y[i]*myj + by + YCENTER; 675 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 676 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 677 if (scaleColor) { 678 if (!finite(z[i])) continue; 679 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 680 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 681 } 682 D = scaleSize ? dz*z[i] : ds; 683 points[0].x = sx - D; points[0].y = sy - 0.58*D; 684 points[1].x = sx + D; points[1].y = sy - 0.58*D; 685 points[2].x = sx; points[2].y = sy + 1.15*D; 686 points[3].x = sx - D; points[3].y = sy - 0.58*D; 687 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 688 } 689 } 690 } 691 if (object[0].ptype == 15) { /* upside-down open triangle */ 692 for (i = 0; i < object[0].Npts; i++) { 693 if (!(finite(x[i]) && finite(y[i]))) continue; 694 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 695 sy = x[i]*myi + y[i]*myj + by + YCENTER; 696 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 697 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 698 if (scaleColor) { 699 if (!finite(z[i])) continue; 700 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 701 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 702 } 703 D = scaleSize ? dz*z[i] : ds; 704 DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D); 705 DrawLine (sx + D, sy - 0.58*D, sx, sy + 1.15*D); 706 DrawLine (sx, sy + 1.15*D, sx - D, sy - 0.58*D); 707 } 708 } 709 } 710 if (object[0].ptype == 16) { /* upside-down Y */ 711 for (i = 0; i < object[0].Npts; i++) { 712 if (!(finite(x[i]) && finite(y[i]))) continue; 713 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 714 sy = x[i]*myi + y[i]*myj + by + YCENTER; 715 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 716 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 717 if (scaleColor) { 718 if (!finite(z[i])) continue; 719 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 720 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 721 } 722 D = scaleSize ? dz*z[i] : ds; 723 DrawLine (sx, sy, sx - D, sy + 0.58*D); 724 DrawLine (sx, sy, sx + D, sy + 0.58*D); 725 DrawLine (sx, sy, sx, sy - 1.15*D); 726 } 727 } 728 } 729 if (object[0].ptype == 100) { /* connect a pair of points */ 730 731 double X0 = graph[0].axis[0].fx; 732 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 733 double Y0 = graph[0].axis[1].fy; 734 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 735 736 for (i = 0; i + 1 < object[0].Npts; i+=2) { 737 if (!(finite(x[i]) && finite(y[i]))) continue; 738 sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER; 739 sy1 = x[i]*myi + y[i]*myj + by + YCENTER; 740 if (!(finite(x[i+1]) && finite(y[i+1]))) continue; 741 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER; 742 sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER; 743 ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 744 } 705 case KAPA_POINT_BOX_SOLID: /* filled box */ 706 default: 707 for (i = 0; i < object[0].Npts; i++) { 708 if (!(finite(x[i]) && finite(y[i]))) continue; 709 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 710 sy = x[i]*myi + y[i]*myj + by + YCENTER; 711 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 712 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 713 if (scaleColor) { 714 if (!finite(z[i])) continue; 715 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 716 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 717 } 718 D = scaleSize ? dz*z[i] : ds; 719 FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1); 720 } 721 } 722 break; 745 723 } 746 724 } 747 725 748 726 /******/ 749 void DrawXErrors ( KapaGraphWidget *graph, Gobjects *object) {727 void DrawXErrors (Graphic *graphic, KapaGraphWidget *graph, Gobjects *object) { 750 728 751 729 int i, bar, dz, ds, D; … … 800 778 (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy))) 801 779 { 802 ClipLine ( sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);780 ClipLine (graphic, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1); 803 781 if (bar) { 804 782 sx10 = sy1 - sz; 805 783 sx11 = sy1 + sz; 806 ClipLine ( sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);784 ClipLine (graphic, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1); 807 785 } 808 786 } … … 819 797 (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy))) 820 798 { 821 ClipLine ( sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);799 ClipLine (graphic, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1); 822 800 if (bar) { 823 801 sx10 = sy1 - sz; 824 802 sx11 = sy1 + sz; 825 ClipLine ( sx1, sx10, sx1, sx11, X0, Y0, X1, Y1);803 ClipLine (graphic, sx1, sx10, sx1, sx11, X0, Y0, X1, Y1); 826 804 } 827 805 } … … 830 808 831 809 /******/ 832 void DrawYErrors ( KapaGraphWidget *graph, Gobjects *object) {810 void DrawYErrors (Graphic *graphic, KapaGraphWidget *graph, Gobjects *object) { 833 811 834 812 int i, bar, dz, ds, D; … … 883 861 (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy))) 884 862 { 885 ClipLine ( sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);863 ClipLine (graphic, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1); 886 864 if (bar) { 887 865 sx10 = sx1 - sz; 888 866 sx11 = sx1 + sz; 889 ClipLine ( sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);867 ClipLine (graphic, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1); 890 868 } 891 869 } … … 904 882 (sy1 < graph[0].axis[1].fy) && (sy1 > graph[0].axis[1].fy + graph[0].axis[1].dfy))) 905 883 { 906 ClipLine ( sx0, sy0, sx1, sy1, X0, Y0, X1, Y1);884 ClipLine (graphic, sx0, sy0, sx1, sy1, X0, Y0, X1, Y1); 907 885 if (bar) { 908 886 sx10 = sx1 - sz; 909 887 sx11 = sx1 + sz; 910 ClipLine ( sx10, sy1, sx11, sy1, X0, Y0, X1, Y1);888 ClipLine (graphic, sx10, sy1, sx11, sy1, X0, Y0, X1, Y1); 911 889 } 912 890 } -
trunk/Ohana/src/kapa2/src/LoadObject.c
r31665 r39926 102 102 if (DEBUG) fprintf (stderr, "loaded %d objects, using object %d\n", graph[0].objects[N].Npts, N); 103 103 104 if (USE_XWINDOW) DrawObjectN (graph, &graph[0].objects[graph[0].Nobjects-1]); 104 if (USE_XWINDOW) { 105 Graphic *graphic = GetGraphic(); 106 DrawObjectN (graphic, graph, &graph[0].objects[graph[0].Nobjects-1]); 107 } 105 108 FlushDisplay (); 106 109 -
trunk/Ohana/src/kapa2/src/PSFrame.c
r38986 r39926 11 11 12 12 graphic = GetGraphic(); 13 14 P = 0.5 * (1 + 0.25*graph[0].axis[0].lweight) * (hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy) + hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy)); 13 15 14 16 /* each axis is drawn independently */ … … 30 32 dfy = -graph[0].axis[i].dfy + 2*dy; 31 33 32 P = hypot (graph[0].axis[(i+1)%2].dfx, graph[0].axis[(i+1)%2].dfy);33 P *= (1 + 0.25*lweight);34 // P = hypot (graph[0].axis[(i+1)%2].dfx, graph[0].axis[(i+1)%2].dfy); 35 // P *= (1 + 0.25*lweight); 34 36 35 37 fprintf (f, "%.1f setlinewidth\n", lweight); -
trunk/Ohana/src/kapa2/src/PSObjects.c
r38153 r39926 7 7 # define FillCircle(X1,Y1,R) (fprintf (f, " %6.2f %6.2f %6.2f FC\n", (X1), (graphic->dy - Y1), (R))) 8 8 # define FillTriangle(X1,Y1,X2,Y2, X3, Y3) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f %6.2f %6.2f TF\n", (X1), (graphic->dy-Y1), (X2), (graphic->dy-Y2), (X3), (graphic->dy-Y3))) 9 # define CONNECT 0 10 # define HISTOGRAM 1 11 # define POINTS 2 12 9 10 # define CAPSTYLE 1 /* CapButt */ 11 # define JOINSTYLE 0 /* JoinMiter */ 12 13 // XXX this is not thread safe, but that is OK 13 14 static Graphic *graphic; 14 15 … … 16 17 17 18 int i; 18 double lweight; 19 static char dash[] = "5"; 20 static char dot[] = "3"; 21 19 20 // the functions below use this global value 22 21 graphic = GetGraphic(); 23 22 23 // this function calls all of the supporting Draw... functions below 24 24 for (i = 0; i < graph[0].Nobjects; i++) { 25 switch (graph[0].objects[i].ltype) { 26 case 0: 27 break; 28 case 1: 29 fprintf (f, "[%s] 0 setdash\n", dash); 30 break; 31 case 2: 25 PSObjectsN (graph, &graph[0].objects[i], f); 26 } 27 // reset to default color and style 28 fprintf (f, "[] 0 setdash\n"); 29 fprintf (f, "0.00 0.00 0.00 setrgbcolor\n"); 30 31 return (TRUE); 32 } 33 34 int PSObjectsN (KapaGraphWidget *graph, Gobjects *object, FILE *f) { 35 36 static char short_dash[] = "4 4"; 37 static char long_dash[] = "8 8"; 38 static char dot_dash[] = "2 4 4 4"; 39 static char dot[] = "2 3"; 40 41 double lweight = MAX (0, MIN (10, object->lweight)); 42 fprintf (f, "%.1f setlinewidth\n", lweight); 43 fprintf (f, "%d setlinecap %d setlinejoin\n", CAPSTYLE, JOINSTYLE); 44 45 switch (object->ltype) { 46 case KAPA_LINE_DOT: 32 47 fprintf (f, "[%s] 0 setdash\n", dot); 33 48 break; 49 case KAPA_LINE_DASH_SHORT: 50 fprintf (f, "[%s] 0 setdash\n", short_dash); 51 break; 52 case KAPA_LINE_DASH_LONG: 53 fprintf (f, "[%s] 0 setdash\n", long_dash); 54 break; 55 case KAPA_LINE_DOT_DASH: 56 fprintf (f, "[%s] 0 setdash\n", dot_dash); 57 break; 58 case KAPA_LINE_SOLID: // no need to call 'setdash' as solid is the default 34 59 default: 35 60 break; 36 }61 } 37 62 38 lweight = MAX (0, MIN (10, graph[0].objects[i].lweight)); 39 fprintf (f, "%.1f setlinewidth\n", lweight); 40 41 if (graph[0].objects[i].color >= 0) { 42 fprintf (f, "%s setrgbcolor\n", KapaColorRGBString(graph[0].objects[i].color)); 43 } 44 45 switch (graph[0].objects[i].style) { 46 case CONNECT: 47 PSConnect (graph, &graph[0].objects[i], f); 48 break; 49 case HISTOGRAM: 50 PSHistogram (graph, &graph[0].objects[i], f); 51 break; 52 case POINTS: 53 PSPoints (graph, &graph[0].objects[i], f); 54 break; 55 } 56 57 if (graph[0].objects[i].etype & 0x01) { 58 PSYErrors (graph, &graph[0].objects[i], f); 59 } 60 if (graph[0].objects[i].etype & 0x02) { 61 PSXErrors (graph, &graph[0].objects[i], f); 62 } 63 fprintf (f, "[] 0 setdash\n"); 64 fprintf (f, "0.00 0.00 0.00 setrgbcolor\n"); 63 if (object->color >= 0) { 64 fprintf (f, "%s setrgbcolor\n", KapaColorRGBString(object->color)); 65 } 66 67 switch (object->style) { 68 case KAPA_PLOT_CONNECT: 69 PSConnect (graph, object, f); 70 break; 71 case KAPA_PLOT_HISTOGRAM: 72 PSHistogram (graph, object, f); 73 break; 74 case KAPA_PLOT_POINTS: 75 default: 76 PSPoints (graph, object, f); 77 break; 78 } 79 80 if (object->etype & 0x01) { 81 PSYErrors (graph, object, f); 82 } 83 if (object->etype & 0x02) { 84 PSXErrors (graph, object, f); 65 85 } 66 86 return (TRUE); … … 303 323 } 304 324 305 // black, I think306 325 // fprintf (f, "0.00 0.00 0.00 setrgbcolor\n"); 307 326 308 /**** point s are scaled by object.z***/327 /**** point sizes are scaled by object.size, colors by object.color ***/ 309 328 int scaleSize = (object[0].size < 0); 310 329 int scaleColor = (object[0].color < 0); … … 314 333 x = object[0].x; y = object[0].y; z = object[0].z; 315 334 316 if (object[0].ptype == 0) { /* filled box */ 317 for (i = 0; i < object[0].Npts; i++) { 318 if (!(finite(x[i]) && finite(y[i]))) continue; 319 sx = x[i]*mxi + y[i]*mxj + bx; 320 sy = x[i]*myi + y[i]*myj + by; 321 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 322 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 323 { 324 if (scaleColor) { 325 if (!finite(z[i])) continue; 326 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 327 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 328 } 329 D = scaleSize ? dz*z[i] : ds; 330 FillRectangle (sx, sy, 2*D, 2*D); 331 } 335 switch (object[0].ptype) { 336 case KAPA_POINT_BOX_OPEN: /* open box */ 337 for (i = 0; i < object[0].Npts; i++) { 338 if (!(finite(x[i]) && finite(y[i]))) continue; 339 sx = x[i]*mxi + y[i]*mxj + bx; 340 sy = x[i]*myi + y[i]*myj + by; 341 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 342 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 343 if (scaleColor) { 344 if (!finite(z[i])) continue; 345 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 346 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 347 } 348 D = scaleSize ? dz*z[i] : ds; 349 DrawRectangle (sx, sy, 2*D, 2*D); 350 } 351 } 352 break; 353 case KAPA_POINT_CROSS: /* cross */ 354 for (i = 0; i < object[0].Npts; i++) { 355 if (!(finite(x[i]) && finite(y[i]))) continue; 356 sx = x[i]*mxi + y[i]*mxj + bx; 357 sy = x[i]*myi + y[i]*myj + by; 358 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 359 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 360 if (scaleColor) { 361 if (!finite(z[i])) continue; 362 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 363 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 364 } 365 D = scaleSize ? dz*z[i] : ds; 366 DrawLine (sx - D, sy, sx + D, sy); 367 DrawLine (sx, sy - D, sx, sy + D); 368 } 369 } 370 break; 371 case KAPA_POINT_X: /* x */ 372 for (i = 0; i < object[0].Npts; i++) { 373 if (!(finite(x[i]) && finite(y[i]))) continue; 374 sx = x[i]*mxi + y[i]*mxj + bx; 375 sy = x[i]*myi + y[i]*myj + by; 376 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 377 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 378 if (scaleColor) { 379 if (!finite(z[i])) continue; 380 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 381 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 382 } 383 D = scaleSize ? dz*z[i] : ds; 384 DrawLine (sx + D, sy - D, sx - D, sy + D); 385 DrawLine (sx - D, sy - D, sx + D, sy + D); 386 } 387 } 388 break; 389 case KAPA_POINT_TRIANGLE_SOLID: /* filled triangle */ 390 for (i = 0; i < object[0].Npts; i++) { 391 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 if (scaleColor) { 397 if (!finite(z[i])) continue; 398 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 399 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 400 } 401 D = scaleSize ? dz*z[i] : ds; 402 FillTriangle (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 403 } 404 } 405 break; 406 case KAPA_POINT_TRIANGLE_SOLID_DOWN: /* open triangle */ 407 for (i = 0; i < object[0].Npts; i++) { 408 if (!(finite(x[i]) && finite(y[i]))) continue; 409 sx = x[i]*mxi + y[i]*mxj + bx; 410 sy = x[i]*myi + y[i]*myj + by; 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 if (scaleColor) { 414 if (!finite(z[i])) continue; 415 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 416 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 417 } 418 D = scaleSize ? dz*z[i] : ds; 419 FillTriangle (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D); 420 } 421 } 422 break; 423 case KAPA_POINT_TRIANGLE_OPEN: /* open triangle */ 424 for (i = 0; i < object[0].Npts; i++) { 425 if (!(finite(x[i]) && finite(y[i]))) continue; 426 sx = x[i]*mxi + y[i]*mxj + bx; 427 sy = x[i]*myi + y[i]*myj + by; 428 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 429 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 430 if (scaleColor) { 431 if (!finite(z[i])) continue; 432 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 433 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 434 } 435 D = scaleSize ? dz*z[i] : ds; 436 DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D); 437 DrawLine (sx + D, sy - 0.58*D, sx, sy + 1.15*D); 438 DrawLine (sx, sy + 1.15*D, sx - D, sy - 0.58*D); 439 } 440 } 441 break; 442 case KAPA_POINT_TRIANGLE_OPEN_DOWN: /* upside-down open triangle */ 443 for (i = 0; i < object[0].Npts; i++) { 444 if (!(finite(x[i]) && finite(y[i]))) continue; 445 sx = x[i]*mxi + y[i]*mxj + bx; 446 sy = x[i]*myi + y[i]*myj + by; 447 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 448 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 449 if (scaleColor) { 450 if (!finite(z[i])) continue; 451 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 452 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 453 } 454 D = scaleSize ? dz*z[i] : ds; 455 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 456 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 457 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 458 } 459 } 460 break; 461 case KAPA_POINT_Y: /* Y */ 462 for (i = 0; i < object[0].Npts; i++) { 463 if (!(finite(x[i]) && finite(y[i]))) continue; 464 sx = x[i]*mxi + y[i]*mxj + bx; 465 sy = x[i]*myi + y[i]*myj + by; 466 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 467 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 468 if (scaleColor) { 469 if (!finite(z[i])) continue; 470 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 471 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 472 } 473 D = scaleSize ? dz*z[i] : ds; 474 DrawLine (sx, sy, sx - D, sy + 0.58*D); 475 DrawLine (sx, sy, sx + D, sy + 0.58*D); 476 DrawLine (sx, sy, sx, sy - 1.15*D); 477 } 478 } 479 break; 480 case KAPA_POINT_Y_DOWN: /* upside-down Y */ 481 for (i = 0; i < object[0].Npts; i++) { 482 if (!(finite(x[i]) && finite(y[i]))) continue; 483 sx = x[i]*mxi + y[i]*mxj + bx; 484 sy = x[i]*myi + y[i]*myj + by; 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 if (scaleColor) { 488 if (!finite(z[i])) continue; 489 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 490 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 491 } 492 D = scaleSize ? dz*z[i] : ds; 493 DrawLine (sx, sy, sx - D, sy - 0.58*D); 494 DrawLine (sx, sy, sx + D, sy - 0.58*D); 495 DrawLine (sx, sy, sx, sy + 1.15*D); 496 } 497 } 498 break; 499 case KAPA_POINT_CIRCLE_OPEN: /* 0 */ 500 for (i = 0; i < object[0].Npts; i++) { 501 if (!(finite(x[i]) && finite(y[i]))) continue; 502 sx = x[i]*mxi + y[i]*mxj + bx; 503 sy = x[i]*myi + y[i]*myj + by; 504 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 505 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 506 if (scaleColor) { 507 if (!finite(z[i])) continue; 508 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 509 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 510 } 511 D = scaleSize ? dz*z[i] : ds; 512 DrawCircle (sx, sy, D); 513 } 514 } 515 break; 516 case KAPA_POINT_CIRCLE_SOLID: /* filled 0 */ 517 for (i = 0; i < object[0].Npts; i++) { 518 if (!(finite(x[i]) && finite(y[i]))) continue; 519 sx = x[i]*mxi + y[i]*mxj + bx; 520 sy = x[i]*myi + y[i]*myj + by; 521 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 522 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 523 if (scaleColor) { 524 if (!finite(z[i])) continue; 525 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 526 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 527 } 528 D = scaleSize ? dz*z[i] : ds; 529 FillCircle (sx, sy, D); 530 } 531 } 532 break; 533 case KAPA_POINT_PENTAGON: /* pentagon */ 534 for (i = 0; i < object[0].Npts; i++) { 535 if (!(finite(x[i]) && finite(y[i]))) continue; 536 sx = x[i]*mxi + y[i]*mxj + bx; 537 sy = x[i]*myi + y[i]*myj + by; 538 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 539 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 540 if (scaleColor) { 541 if (!finite(z[i])) continue; 542 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 543 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 544 } 545 D = scaleSize ? dz*z[i] : ds; 546 DrawLine (sx + 0.00*D, sy + 1.00*D, sx + 0.95*D, sy + 0.31*D); 547 DrawLine (sx + 0.95*D, sy + 0.31*D, sx + 0.58*D, sy - 0.81*D); 548 DrawLine (sx + 0.58*D, sy - 0.81*D, sx - 0.58*D, sy - 0.81*D); 549 DrawLine (sx - 0.58*D, sy - 0.81*D, sx - 0.95*D, sy + 0.31*D); 550 DrawLine (sx - 0.95*D, sy + 0.31*D, sx + 0.00*D, sy + 1.00*D); 551 } 552 } 553 break; 554 case KAPA_POINT_HEXAGON: /* hexagon */ 555 for (i = 0; i < object[0].Npts; i++) { 556 if (!(finite(x[i]) && finite(y[i]))) continue; 557 sx = x[i]*mxi + y[i]*mxj + bx; 558 sy = x[i]*myi + y[i]*myj + by; 559 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 560 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 561 if (scaleColor) { 562 if (!finite(z[i])) continue; 563 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 564 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 565 } 566 D = scaleSize ? dz*z[i] : ds; 567 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 568 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 569 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 570 571 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 572 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 573 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 574 } 575 } 576 break; 577 case KAPA_POINT_PAIR_CONNECT: { /* connect pairs of points */ 578 double X0 = graph[0].axis[0].fx; 579 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 580 double Y0 = graph[0].axis[1].fy; 581 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 582 583 for (i = 0; i + 1 < object[0].Npts; i+=2) { 584 if (!(finite(x[i]) && finite(y[i]))) continue; 585 sx1 = x[i]*mxi + y[i]*mxj + bx; 586 sy1 = x[i]*myi + y[i]*myj + by; 587 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 588 sy2 = x[i+1]*myi + y[i+1]*myj + by; 589 ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f); 590 } 591 break; 332 592 } 333 } 334 if (object[0].ptype == 1) { /* open box */ 335 for (i = 0; i < object[0].Npts; i++) { 336 if (!(finite(x[i]) && finite(y[i]))) continue; 337 sx = x[i]*mxi + y[i]*mxj + bx; 338 sy = x[i]*myi + y[i]*myj + by; 339 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 340 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 341 { 342 if (scaleColor) { 343 if (!finite(z[i])) continue; 344 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 345 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 346 } 347 D = scaleSize ? dz*z[i] : ds; 348 DrawRectangle (sx, sy, 2*D, 2*D); 349 } 350 } 351 } 352 if (object[0].ptype == 2) { /* cross */ 353 for (i = 0; i < object[0].Npts; i++) { 354 if (!(finite(x[i]) && finite(y[i]))) continue; 355 sx = x[i]*mxi + y[i]*mxj + bx; 356 sy = x[i]*myi + y[i]*myj + by; 357 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 358 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 359 { 360 if (scaleColor) { 361 if (!finite(z[i])) continue; 362 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 363 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 364 } 365 D = scaleSize ? dz*z[i] : ds; 366 DrawLine (sx - D, sy, sx + D, sy); 367 DrawLine (sx, sy - D, sx, sy + D); 368 } 369 } 370 } 371 if (object[0].ptype == 3) { /* x */ 372 for (i = 0; i < object[0].Npts; i++) { 373 if (!(finite(x[i]) && finite(y[i]))) continue; 374 sx = x[i]*mxi + y[i]*mxj + bx; 375 sy = x[i]*myi + y[i]*myj + by; 376 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 377 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 378 { 379 if (scaleColor) { 380 if (!finite(z[i])) continue; 381 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 382 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 383 } 384 D = scaleSize ? dz*z[i] : ds; 385 DrawLine (sx + D, sy - D, sx - D, sy + D); 386 DrawLine (sx - D, sy - D, sx + D, sy + D); 387 } 388 } 389 } 390 if (object[0].ptype == 4) { /* filled triangle */ 391 for (i = 0; i < object[0].Npts; i++) { 392 if (!(finite(x[i]) && finite(y[i]))) continue; 393 sx = x[i]*mxi + y[i]*mxj + bx; 394 sy = x[i]*myi + y[i]*myj + by; 395 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 396 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 397 { 398 if (scaleColor) { 399 if (!finite(z[i])) continue; 400 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 401 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 402 } 403 D = scaleSize ? dz*z[i] : ds; 404 FillTriangle (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 405 } 406 } 407 } 408 if (object[0].ptype == 14) { /* filled triangle */ 409 for (i = 0; i < object[0].Npts; i++) { 410 if (!(finite(x[i]) && finite(y[i]))) continue; 411 sx = x[i]*mxi + y[i]*mxj + bx; 412 sy = x[i]*myi + y[i]*myj + by; 413 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 414 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 415 { 416 if (scaleColor) { 417 if (!finite(z[i])) continue; 418 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 419 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 420 } 421 D = scaleSize ? dz*z[i] : ds; 422 FillTriangle (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D); 423 } 424 } 425 } 426 if (object[0].ptype == 5) { /* open triangle */ 427 for (i = 0; i < object[0].Npts; i++) { 428 if (!(finite(x[i]) && finite(y[i]))) continue; 429 sx = x[i]*mxi + y[i]*mxj + bx; 430 sy = x[i]*myi + y[i]*myj + by; 431 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 432 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 433 { 434 if (scaleColor) { 435 if (!finite(z[i])) continue; 436 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 437 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 438 } 439 D = scaleSize ? dz*z[i] : ds; 440 DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D); 441 DrawLine (sx + D, sy - 0.58*D, sx, sy + 1.15*D); 442 DrawLine (sx, sy + 1.15*D, sx - D, sy - 0.58*D); 443 } 444 } 445 } 446 if (object[0].ptype == 15) { /* upside-down open triangle */ 447 for (i = 0; i < object[0].Npts; i++) { 448 if (!(finite(x[i]) && finite(y[i]))) continue; 449 sx = x[i]*mxi + y[i]*mxj + bx; 450 sy = x[i]*myi + y[i]*myj + by; 451 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 452 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 453 { 454 if (scaleColor) { 455 if (!finite(z[i])) continue; 456 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 457 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 458 } 459 D = scaleSize ? dz*z[i] : ds; 460 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 461 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 462 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 463 } 464 } 465 } 466 if (object[0].ptype == 6) { /* Y */ 467 for (i = 0; i < object[0].Npts; i++) { 468 if (!(finite(x[i]) && finite(y[i]))) continue; 469 sx = x[i]*mxi + y[i]*mxj + bx; 470 sy = x[i]*myi + y[i]*myj + by; 471 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 472 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 473 { 474 if (scaleColor) { 475 if (!finite(z[i])) continue; 476 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 477 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 478 } 479 D = scaleSize ? dz*z[i] : ds; 480 DrawLine (sx, sy, sx - D, sy + 0.58*D); 481 DrawLine (sx, sy, sx + D, sy + 0.58*D); 482 DrawLine (sx, sy, sx, sy - 1.15*D); 483 } 484 } 485 } 486 if (object[0].ptype == 16) { /* Y */ 487 for (i = 0; i < object[0].Npts; i++) { 488 if (!(finite(x[i]) && finite(y[i]))) continue; 489 sx = x[i]*mxi + y[i]*mxj + bx; 490 sy = x[i]*myi + y[i]*myj + by; 491 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 492 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 493 { 494 if (scaleColor) { 495 if (!finite(z[i])) continue; 496 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 497 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 498 } 499 D = scaleSize ? dz*z[i] : ds; 500 DrawLine (sx, sy, sx - D, sy - 0.58*D); 501 DrawLine (sx, sy, sx + D, sy - 0.58*D); 502 DrawLine (sx, sy, sx, sy + 1.15*D); 503 } 504 } 505 } 506 if (object[0].ptype == 7) { /* 0 */ 507 for (i = 0; i < object[0].Npts; i++) { 508 if (!(finite(x[i]) && finite(y[i]))) continue; 509 sx = x[i]*mxi + y[i]*mxj + bx; 510 sy = x[i]*myi + y[i]*myj + by; 511 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 512 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 513 { 514 if (scaleColor) { 515 if (!finite(z[i])) continue; 516 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 517 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 518 } 519 D = scaleSize ? dz*z[i] : ds; 520 DrawCircle (sx, sy, D); 521 } 522 } 523 } 524 if (object[0].ptype == 8) { /* pentagon */ 525 for (i = 0; i < object[0].Npts; i++) { 526 if (!(finite(x[i]) && finite(y[i]))) continue; 527 sx = x[i]*mxi + y[i]*mxj + bx; 528 sy = x[i]*myi + y[i]*myj + by; 529 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 530 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 531 { 532 if (scaleColor) { 533 if (!finite(z[i])) continue; 534 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 535 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 536 } 537 D = scaleSize ? dz*z[i] : ds; 538 DrawLine (sx + 0.00*D, sy + 1.00*D, sx + 0.95*D, sy + 0.31*D); 539 DrawLine (sx + 0.95*D, sy + 0.31*D, sx + 0.58*D, sy - 0.81*D); 540 DrawLine (sx + 0.58*D, sy - 0.81*D, sx - 0.58*D, sy - 0.81*D); 541 DrawLine (sx - 0.58*D, sy - 0.81*D, sx - 0.95*D, sy + 0.31*D); 542 DrawLine (sx - 0.95*D, sy + 0.31*D, sx + 0.00*D, sy + 1.00*D); 543 } 544 } 545 } 546 if (object[0].ptype == 9) { /* hexagon */ 547 for (i = 0; i < object[0].Npts; i++) { 548 if (!(finite(x[i]) && finite(y[i]))) continue; 549 sx = x[i]*mxi + y[i]*mxj + bx; 550 sy = x[i]*myi + y[i]*myj + by; 551 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 552 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 553 { 554 if (scaleColor) { 555 if (!finite(z[i])) continue; 556 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 557 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 558 } 559 D = scaleSize ? dz*z[i] : ds; 560 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 561 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 562 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 563 564 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 565 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 566 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 567 } 568 } 569 } 570 if (object[0].ptype == 10) { /* 0 */ 571 for (i = 0; i < object[0].Npts; i++) { 572 if (!(finite(x[i]) && finite(y[i]))) continue; 573 sx = x[i]*mxi + y[i]*mxj + bx; 574 sy = x[i]*myi + y[i]*myj + by; 575 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 576 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 577 { 578 if (scaleColor) { 579 if (!finite(z[i])) continue; 580 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 581 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 582 } 583 D = scaleSize ? dz*z[i] : ds; 584 FillCircle (sx, sy, D); 585 } 586 } 587 } 588 if (object[0].ptype == 100) { /* connect a pair of points */ 589 double X0 = graph[0].axis[0].fx; 590 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 591 double Y0 = graph[0].axis[1].fy; 592 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 593 594 for (i = 0; i + 1 < object[0].Npts; i+=2) { 595 if (!(finite(x[i]) && finite(y[i]))) continue; 596 sx1 = x[i]*mxi + y[i]*mxj + bx; 597 sy1 = x[i]*myi + y[i]*myj + by; 598 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 599 sy2 = x[i+1]*myi + y[i+1]*myj + by; 600 ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f); 601 } 602 } 603 593 case KAPA_POINT_BOX_SOLID: /* filled box */ 594 default: 595 for (i = 0; i < object[0].Npts; i++) { 596 if (!(finite(x[i]) && finite(y[i]))) continue; 597 sx = x[i]*mxi + y[i]*mxj + bx; 598 sy = x[i]*myi + y[i]*myj + by; 599 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 600 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 601 if (scaleColor) { 602 if (!finite(z[i])) continue; 603 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 604 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 605 } 606 D = scaleSize ? dz*z[i] : ds; 607 FillRectangle (sx, sy, 2*D, 2*D); 608 } 609 } 610 break; 611 } 604 612 free (pixel1); 605 613 free (pixel2); -
trunk/Ohana/src/kapa2/src/bDrawFrame.c
r38986 r39926 11 11 12 12 // don't need graphic, unlink DrawFrame 13 14 P = 0.5 * (1 + 0.25*graph[0].axis[0].lweight) * (hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy) + hypot (graph[0].axis[0].dfx, graph[0].axis[0].dfy)); 13 15 14 16 /* each axis is drawn independently */ … … 28 30 dfx = graph[0].axis[i].dfx + 2*dx; 29 31 dfy = graph[0].axis[i].dfy + 2*dy; 30 P = hypot (graph[0].axis[(i+1)%2].dfx, graph[0].axis[(i+1)%2].dfy); 31 P *= (1 + 0.25*lweight); 32 33 // P = hypot (graph[0].axis[(i+1)%2].dfx, graph[0].axis[(i+1)%2].dfy); 34 // P *= (1 + 0.25*lweight); 32 35 33 36 bDrawSetStyle (buffer, color, lweight, 0); -
trunk/Ohana/src/kapa2/src/bDrawObjects.c
r38153 r39926 18 18 19 19 int i; 20 int type; 21 int weight; 22 bDrawColor color; 23 bDrawColor black; 24 20 21 // the functions below use this global value 25 22 graphic = GetGraphic(); 26 23 27 black = KapaColorByName ("black");24 // this function calls all of the supporting bDraw... functions below 28 25 for (i = 0; i < graph[0].Nobjects; i++) { 29 30 weight = MAX (0, MIN (10, graph[0].objects[i].lweight)); 31 type = graph[0].objects[i].ltype; 32 color = graph[0].objects[i].color; 33 bDrawSetStyle (buffer, color, weight, type); 34 35 switch (graph[0].objects[i].style) { 36 case CONNECT: 37 bDrawConnect (buffer, graph, &graph[0].objects[i]); 38 break; 39 case HISTOGRAM: 40 bDrawHistogram (buffer, graph, &graph[0].objects[i]); 41 break; 42 case POINTS: 43 bDrawPoints (buffer, graph, &graph[0].objects[i]); 44 break; 45 } 46 47 if (graph[0].objects[i].etype & 0x01) { 48 bDrawYErrors (buffer, graph, &graph[0].objects[i]); 49 } 50 if (graph[0].objects[i].etype & 0x02) { 51 bDrawXErrors (buffer, graph, &graph[0].objects[i]); 52 } 53 } 26 bDrawObjectsN (buffer, graph, &graph[0].objects[i]); 27 } 28 bDrawColor black = KapaColorByName ("black"); 54 29 bDrawSetStyle (buffer, black, 0, 0); 30 return (TRUE); 31 } 32 33 int bDrawObjectsN (bDrawBuffer *buffer, KapaGraphWidget *graph, Gobjects *object) { 34 35 int weight = MAX (0, MIN (10, object->lweight)); 36 bDrawSetStyle (buffer, object->color, weight, object->ltype); 37 38 switch (object->style) { 39 case KAPA_PLOT_CONNECT: 40 bDrawConnect (buffer, graph, object); 41 break; 42 case KAPA_PLOT_HISTOGRAM: 43 bDrawHistogram (buffer, graph, object); 44 break; 45 case KAPA_PLOT_POINTS: 46 default: 47 bDrawPoints (buffer, graph, object); 48 break; 49 } 50 51 if (object->etype & 0x01) { 52 bDrawYErrors (buffer, graph, object); 53 } 54 if (object->etype & 0x02) { 55 bDrawXErrors (buffer, graph, object); 56 } 57 55 58 return (TRUE); 56 59 } … … 298 301 x = object[0].x; y = object[0].y; z = object[0].z; 299 302 300 if (object[0].ptype == 0) { /* filled box */ 301 for (i = 0; i < object[0].Npts; i++) { 302 if (!(finite(x[i]) && finite(y[i]))) continue; 303 sx = x[i]*mxi + y[i]*mxj + bx; 304 sy = x[i]*myi + y[i]*myj + by; 305 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 306 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 307 { 308 if (scaleColor) { 309 if (!finite(z[i])) continue; 310 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 311 buffer->bColor_R = pixel1[pixel]; 312 buffer->bColor_G = pixel2[pixel]; 313 buffer->bColor_B = pixel3[pixel]; 314 } 315 D = scaleSize ? dz*z[i] : ds; 316 FillRectangle (buffer, sx, sy, 2*D, 2*D); 317 // plot range saturated by bDrawRectFill 318 } 303 switch (object[0].ptype) { 304 case KAPA_POINT_BOX_OPEN: /* open box */ 305 for (i = 0; i < object[0].Npts; i++) { 306 if (!(finite(x[i]) && finite(y[i]))) continue; 307 sx = x[i]*mxi + y[i]*mxj + bx; 308 sy = x[i]*myi + y[i]*myj + by; 309 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 310 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 311 if (scaleColor) { 312 if (!finite(z[i])) continue; 313 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 314 buffer->bColor_R = pixel1[pixel]; 315 buffer->bColor_G = pixel2[pixel]; 316 buffer->bColor_B = pixel3[pixel]; 317 } 318 D = scaleSize ? dz*z[i] : ds; 319 DrawRectangle (buffer, sx, sy, 2*D, 2*D); 320 // plot range saturated by bDrawRectOpen 321 } 322 } 323 break; 324 case KAPA_POINT_CROSS: /* cross */ 325 for (i = 0; i < object[0].Npts; i++) { 326 if (!(finite(x[i]) && finite(y[i]))) continue; 327 sx = x[i]*mxi + y[i]*mxj + bx; 328 sy = x[i]*myi + y[i]*myj + by; 329 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 330 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 331 if (scaleColor) { 332 if (!finite(z[i])) continue; 333 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 334 buffer->bColor_R = pixel1[pixel]; 335 buffer->bColor_G = pixel2[pixel]; 336 buffer->bColor_B = pixel3[pixel]; 337 } 338 D = scaleSize ? dz*z[i] : ds; 339 DrawLine (buffer, sx - D, sy, sx + D, sy); 340 DrawLine (buffer, sx, sy - D, sx, sy + D); 341 // out-of-range points skipped by bDrawPoint 342 } 343 } 344 break; 345 case KAPA_POINT_X: /* x */ 346 for (i = 0; i < object[0].Npts; i++) { 347 if (!(finite(x[i]) && finite(y[i]))) continue; 348 sx = x[i]*mxi + y[i]*mxj + bx; 349 sy = x[i]*myi + y[i]*myj + by; 350 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 351 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 352 if (scaleColor) { 353 if (!finite(z[i])) continue; 354 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 355 buffer->bColor_R = pixel1[pixel]; 356 buffer->bColor_G = pixel2[pixel]; 357 buffer->bColor_B = pixel3[pixel]; 358 } 359 D = scaleSize ? dz*z[i] : ds; 360 DrawLine (buffer, sx + D, sy - D, sx - D, sy + D); 361 DrawLine (buffer, sx - D, sy - D, sx + D, sy + D); 362 // out-of-range points skipped by bDrawPoint 363 } 364 } 365 break; 366 case KAPA_POINT_TRIANGLE_SOLID: /* filled triangle */ 367 for (i = 0; i < object[0].Npts; i++) { 368 if (!(finite(x[i]) && finite(y[i]))) continue; 369 sx = x[i]*mxi + y[i]*mxj + bx; 370 sy = x[i]*myi + y[i]*myj + by; 371 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 372 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 373 if (scaleColor) { 374 if (!finite(z[i])) continue; 375 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 376 buffer->bColor_R = pixel1[pixel]; 377 buffer->bColor_G = pixel2[pixel]; 378 buffer->bColor_B = pixel3[pixel]; 379 } 380 D = scaleSize ? dz*z[i] : ds; 381 // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 382 FillTriangle (buffer, sx, sy + 0.58*D, D, -1.73*D); 383 // out-of-range points skipped by bDrawPoint 384 } 385 } 386 break; 387 case KAPA_POINT_TRIANGLE_SOLID_DOWN: /* open triangle */ 388 for (i = 0; i < object[0].Npts; i++) { 389 if (!(finite(x[i]) && finite(y[i]))) continue; 390 sx = x[i]*mxi + y[i]*mxj + bx; 391 sy = x[i]*myi + y[i]*myj + by; 392 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 393 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 394 if (scaleColor) { 395 if (!finite(z[i])) continue; 396 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 397 buffer->bColor_R = pixel1[pixel]; 398 buffer->bColor_G = pixel2[pixel]; 399 buffer->bColor_B = pixel3[pixel]; 400 } 401 D = scaleSize ? dz*z[i] : ds; 402 // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 403 FillTriangle (buffer, sx, sy - 0.58*D, D, +1.73*D); 404 // out-of-range points skipped by bDrawPoint 405 } 406 } 407 break; 408 case KAPA_POINT_TRIANGLE_OPEN: /* open triangle */ 409 for (i = 0; i < object[0].Npts; i++) { 410 if (!(finite(x[i]) && finite(y[i]))) continue; 411 sx = x[i]*mxi + y[i]*mxj + bx; 412 sy = x[i]*myi + y[i]*myj + by; 413 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 414 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 415 if (scaleColor) { 416 if (!finite(z[i])) continue; 417 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 418 buffer->bColor_R = pixel1[pixel]; 419 buffer->bColor_G = pixel2[pixel]; 420 buffer->bColor_B = pixel3[pixel]; 421 } 422 D = scaleSize ? dz*z[i] : ds; 423 OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D); 424 // out-of-range points skipped by bDrawPoint 425 } 426 } 427 break; 428 case KAPA_POINT_TRIANGLE_OPEN_DOWN: /* upside-down open triangle */ 429 for (i = 0; i < object[0].Npts; i++) { 430 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 if (scaleColor) { 436 if (!finite(z[i])) continue; 437 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 438 buffer->bColor_R = pixel1[pixel]; 439 buffer->bColor_G = pixel2[pixel]; 440 buffer->bColor_B = pixel3[pixel]; 441 } 442 D = scaleSize ? dz*z[i] : ds; 443 OpenTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 444 // out-of-range points skipped by bDrawPoint 445 } 446 } 447 break; 448 case KAPA_POINT_Y: /* Y */ 449 for (i = 0; i < object[0].Npts; i++) { 450 if (!(finite(x[i]) && finite(y[i]))) continue; 451 sx = x[i]*mxi + y[i]*mxj + bx; 452 sy = x[i]*myi + y[i]*myj + by; 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 if (scaleColor) { 456 if (!finite(z[i])) continue; 457 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 458 buffer->bColor_R = pixel1[pixel]; 459 buffer->bColor_G = pixel2[pixel]; 460 buffer->bColor_B = pixel3[pixel]; 461 } 462 D = scaleSize ? dz*z[i] : ds; 463 DrawLine (buffer, sx, sy, sx - D, sy - 0.58*D); 464 DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D); 465 DrawLine (buffer, sx, sy, sx, sy + 1.15*D); 466 // out-of-range points skipped by bDrawPoint 467 } 468 } 469 break; 470 case KAPA_POINT_Y_DOWN: /* upside-down Y */ 471 for (i = 0; i < object[0].Npts; i++) { 472 if (!(finite(x[i]) && finite(y[i]))) continue; 473 sx = x[i]*mxi + y[i]*mxj + bx; 474 sy = x[i]*myi + y[i]*myj + by; 475 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 476 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 477 if (scaleColor) { 478 if (!finite(z[i])) continue; 479 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 480 buffer->bColor_R = pixel1[pixel]; 481 buffer->bColor_G = pixel2[pixel]; 482 buffer->bColor_B = pixel3[pixel]; 483 } 484 D = scaleSize ? dz*z[i] : ds; 485 DrawLine (buffer, sx, sy, sx - D, sy + 0.58*D); 486 DrawLine (buffer, sx, sy, sx + D, sy + 0.58*D); 487 DrawLine (buffer, sx, sy, sx, sy - 1.15*D); 488 // out-of-range points skipped by bDrawPoint 489 } 490 } 491 break; 492 case KAPA_POINT_CIRCLE_OPEN: /* 0 */ 493 for (i = 0; i < object[0].Npts; i++) { 494 if (!(finite(x[i]) && finite(y[i]))) continue; 495 sx = x[i]*mxi + y[i]*mxj + bx; 496 sy = x[i]*myi + y[i]*myj + by; 497 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 498 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 499 if (scaleColor) { 500 if (!finite(z[i])) continue; 501 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 502 buffer->bColor_R = pixel1[pixel]; 503 buffer->bColor_G = pixel2[pixel]; 504 buffer->bColor_B = pixel3[pixel]; 505 } 506 D = scaleSize ? dz*z[i] : ds; 507 DrawCircle (buffer, sx, sy, D); 508 // out-of-range points skipped by bDrawPoint 509 } 510 } 511 break; 512 case KAPA_POINT_CIRCLE_SOLID: /* filled 0 */ 513 for (i = 0; i < object[0].Npts; i++) { 514 if (!(finite(x[i]) && finite(y[i]))) continue; 515 sx = x[i]*mxi + y[i]*mxj + bx; 516 sy = x[i]*myi + y[i]*myj + by; 517 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 518 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 519 if (scaleColor) { 520 if (!finite(z[i])) continue; 521 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 522 buffer->bColor_R = pixel1[pixel]; 523 buffer->bColor_G = pixel2[pixel]; 524 buffer->bColor_B = pixel3[pixel]; 525 } 526 D = scaleSize ? dz*z[i] : ds; 527 FillCircle (buffer, sx, sy, D); 528 // out-of-range points skipped by bDrawLineHorizontal 529 } 530 } 531 break; 532 case KAPA_POINT_PENTAGON: /* pentagon */ 533 for (i = 0; i < object[0].Npts; i++) { 534 if (!(finite(x[i]) && finite(y[i]))) continue; 535 sx = x[i]*mxi + y[i]*mxj + bx; 536 sy = x[i]*myi + y[i]*myj + by; 537 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 538 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 539 if (scaleColor) { 540 if (!finite(z[i])) continue; 541 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 542 buffer->bColor_R = pixel1[pixel]; 543 buffer->bColor_G = pixel2[pixel]; 544 buffer->bColor_B = pixel3[pixel]; 545 } 546 D = scaleSize ? dz*z[i] : ds; 547 DrawLine (buffer, sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 548 DrawLine (buffer, sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 549 DrawLine (buffer, sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 550 DrawLine (buffer, sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 551 DrawLine (buffer, sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 552 // out-of-range points skipped by bDrawPoint 553 } 554 } 555 break; 556 case KAPA_POINT_HEXAGON: /* hexagon */ 557 for (i = 0; i < object[0].Npts; i++) { 558 if (!(finite(x[i]) && finite(y[i]))) continue; 559 sx = x[i]*mxi + y[i]*mxj + bx; 560 sy = x[i]*myi + y[i]*myj + by; 561 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 562 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 563 if (scaleColor) { 564 if (!finite(z[i])) continue; 565 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 566 buffer->bColor_R = pixel1[pixel]; 567 buffer->bColor_G = pixel2[pixel]; 568 buffer->bColor_B = pixel3[pixel]; 569 } 570 D = scaleSize ? dz*z[i] : ds; 571 DrawLine (buffer, sx - D, sy, sx - 0.50*D, sy + 0.87*D); 572 DrawLine (buffer, sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 573 DrawLine (buffer, sx + 0.50*D, sy + 0.87*D, sx + D, sy); 574 DrawLine (buffer, sx + D, sy, sx + 0.50*D, sy - 0.87*D); 575 DrawLine (buffer, sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 576 DrawLine (buffer, sx - 0.50*D, sy - 0.87*D, sx - D, sy); 577 // out-of-range points skipped by bDrawPoint 578 } 579 } 580 break; 581 case KAPA_POINT_PAIR_CONNECT: { /* connect pairs of points */ 582 583 double X0 = graph[0].axis[0].fx; 584 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 585 double Y0 = graph[0].axis[1].fy; 586 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 587 588 for (i = 0; i + 1 < object[0].Npts; i+=2) { 589 if (!(finite(x[i]) && finite(y[i]))) continue; 590 sx1 = x[i]*mxi + y[i]*mxj + bx; 591 sy1 = x[i]*myi + y[i]*myj + by; 592 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 593 sy2 = x[i+1]*myi + y[i+1]*myj + by; 594 bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 595 } 596 break; 319 597 } 320 } 321 if (object[0].ptype == 1) { /* open box */ 322 for (i = 0; i < object[0].Npts; i++) { 323 if (!(finite(x[i]) && finite(y[i]))) continue; 324 sx = x[i]*mxi + y[i]*mxj + bx; 325 sy = x[i]*myi + y[i]*myj + by; 326 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 327 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 328 { 329 if (scaleColor) { 330 if (!finite(z[i])) continue; 331 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 332 buffer->bColor_R = pixel1[pixel]; 333 buffer->bColor_G = pixel2[pixel]; 334 buffer->bColor_B = pixel3[pixel]; 335 } 336 D = scaleSize ? dz*z[i] : ds; 337 DrawRectangle (buffer, sx, sy, 2*D, 2*D); 338 // plot range saturated by bDrawRectOpen 339 } 340 } 341 } 342 if (object[0].ptype == 2) { /* cross */ 343 for (i = 0; i < object[0].Npts; i++) { 344 if (!(finite(x[i]) && finite(y[i]))) continue; 345 sx = x[i]*mxi + y[i]*mxj + bx; 346 sy = x[i]*myi + y[i]*myj + by; 347 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 348 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 349 { 350 if (scaleColor) { 351 if (!finite(z[i])) continue; 352 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 353 buffer->bColor_R = pixel1[pixel]; 354 buffer->bColor_G = pixel2[pixel]; 355 buffer->bColor_B = pixel3[pixel]; 356 } 357 D = scaleSize ? dz*z[i] : ds; 358 DrawLine (buffer, sx - D, sy, sx + D, sy); 359 DrawLine (buffer, sx, sy - D, sx, sy + D); 360 // out-of-range points skipped by bDrawPoint 361 } 362 } 363 } 364 if (object[0].ptype == 3) { /* x */ 365 for (i = 0; i < object[0].Npts; i++) { 366 if (!(finite(x[i]) && finite(y[i]))) continue; 367 sx = x[i]*mxi + y[i]*mxj + bx; 368 sy = x[i]*myi + y[i]*myj + by; 369 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 370 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 371 { 372 if (scaleColor) { 373 if (!finite(z[i])) continue; 374 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 375 buffer->bColor_R = pixel1[pixel]; 376 buffer->bColor_G = pixel2[pixel]; 377 buffer->bColor_B = pixel3[pixel]; 378 } 379 D = scaleSize ? dz*z[i] : ds; 380 DrawLine (buffer, sx + D, sy - D, sx - D, sy + D); 381 DrawLine (buffer, sx - D, sy - D, sx + D, sy + D); 382 // out-of-range points skipped by bDrawPoint 383 } 384 } 385 } 386 if (object[0].ptype == 4) { /* filled triangle */ 387 for (i = 0; i < object[0].Npts; i++) { 388 if (!(finite(x[i]) && finite(y[i]))) continue; 389 sx = x[i]*mxi + y[i]*mxj + bx; 390 sy = x[i]*myi + y[i]*myj + by; 391 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 392 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 393 { 394 if (scaleColor) { 395 if (!finite(z[i])) continue; 396 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 397 buffer->bColor_R = pixel1[pixel]; 398 buffer->bColor_G = pixel2[pixel]; 399 buffer->bColor_B = pixel3[pixel]; 400 } 401 D = scaleSize ? dz*z[i] : ds; 402 // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 403 FillTriangle (buffer, sx, sy + 0.58*D, D, -1.73*D); 404 // out-of-range points skipped by bDrawPoint 405 } 406 } 407 } 408 if (object[0].ptype == 14) { /* filled triangle */ 409 for (i = 0; i < object[0].Npts; i++) { 410 if (!(finite(x[i]) && finite(y[i]))) continue; 411 sx = x[i]*mxi + y[i]*mxj + bx; 412 sy = x[i]*myi + y[i]*myj + by; 413 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 414 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 415 { 416 if (scaleColor) { 417 if (!finite(z[i])) continue; 418 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 419 buffer->bColor_R = pixel1[pixel]; 420 buffer->bColor_G = pixel2[pixel]; 421 buffer->bColor_B = pixel3[pixel]; 422 } 423 D = scaleSize ? dz*z[i] : ds; 424 // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 425 FillTriangle (buffer, sx, sy - 0.58*D, D, +1.73*D); 426 // out-of-range points skipped by bDrawPoint 427 } 428 } 429 } 430 if (object[0].ptype == 5) { /* open triangle */ 431 for (i = 0; i < object[0].Npts; i++) { 432 if (!(finite(x[i]) && finite(y[i]))) continue; 433 sx = x[i]*mxi + y[i]*mxj + bx; 434 sy = x[i]*myi + y[i]*myj + by; 435 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 436 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 437 { 438 if (scaleColor) { 439 if (!finite(z[i])) continue; 440 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 441 buffer->bColor_R = pixel1[pixel]; 442 buffer->bColor_G = pixel2[pixel]; 443 buffer->bColor_B = pixel3[pixel]; 444 } 445 D = scaleSize ? dz*z[i] : ds; 446 OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D); 447 // out-of-range points skipped by bDrawPoint 448 } 449 } 450 } 451 if (object[0].ptype == 15) { /* open triangle */ 452 for (i = 0; i < object[0].Npts; i++) { 453 if (!(finite(x[i]) && finite(y[i]))) continue; 454 sx = x[i]*mxi + y[i]*mxj + bx; 455 sy = x[i]*myi + y[i]*myj + by; 456 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 457 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 458 { 459 if (scaleColor) { 460 if (!finite(z[i])) continue; 461 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 462 buffer->bColor_R = pixel1[pixel]; 463 buffer->bColor_G = pixel2[pixel]; 464 buffer->bColor_B = pixel3[pixel]; 465 } 466 D = scaleSize ? dz*z[i] : ds; 467 OpenTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 468 // out-of-range points skipped by bDrawPoint 469 } 470 } 471 } 472 if (object[0].ptype == 6) { /* Y */ 473 for (i = 0; i < object[0].Npts; i++) { 474 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 if (scaleColor) { 481 if (!finite(z[i])) continue; 482 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 483 buffer->bColor_R = pixel1[pixel]; 484 buffer->bColor_G = pixel2[pixel]; 485 buffer->bColor_B = pixel3[pixel]; 486 } 487 D = scaleSize ? dz*z[i] : ds; 488 DrawLine (buffer, sx, sy, sx - D, sy - 0.58*D); 489 DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D); 490 DrawLine (buffer, sx, sy, sx, sy + 1.15*D); 491 // out-of-range points skipped by bDrawPoint 492 } 493 } 494 } 495 if (object[0].ptype == 16) { /* Y */ 496 for (i = 0; i < object[0].Npts; i++) { 497 if (!(finite(x[i]) && finite(y[i]))) continue; 498 sx = x[i]*mxi + y[i]*mxj + bx; 499 sy = x[i]*myi + y[i]*myj + by; 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 if (scaleColor) { 504 if (!finite(z[i])) continue; 505 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 506 buffer->bColor_R = pixel1[pixel]; 507 buffer->bColor_G = pixel2[pixel]; 508 buffer->bColor_B = pixel3[pixel]; 509 } 510 D = scaleSize ? dz*z[i] : ds; 511 DrawLine (buffer, sx, sy, sx - D, sy + 0.58*D); 512 DrawLine (buffer, sx, sy, sx + D, sy + 0.58*D); 513 DrawLine (buffer, sx, sy, sx, sy - 1.15*D); 514 // out-of-range points skipped by bDrawPoint 515 } 516 } 517 } 518 if (object[0].ptype == 7) { /* 0 */ 519 for (i = 0; i < object[0].Npts; i++) { 520 if (!(finite(x[i]) && finite(y[i]))) continue; 521 sx = x[i]*mxi + y[i]*mxj + bx; 522 sy = x[i]*myi + y[i]*myj + by; 523 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 524 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 525 { 526 if (scaleColor) { 527 if (!finite(z[i])) continue; 528 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 529 buffer->bColor_R = pixel1[pixel]; 530 buffer->bColor_G = pixel2[pixel]; 531 buffer->bColor_B = pixel3[pixel]; 532 } 533 D = scaleSize ? dz*z[i] : ds; 534 DrawCircle (buffer, sx, sy, D); 535 // out-of-range points skipped by bDrawPoint 536 } 537 } 538 } 539 if (object[0].ptype == 8) { /* pentagon */ 540 for (i = 0; i < object[0].Npts; i++) { 541 if (!(finite(x[i]) && finite(y[i]))) continue; 542 sx = x[i]*mxi + y[i]*mxj + bx; 543 sy = x[i]*myi + y[i]*myj + by; 544 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 545 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 546 { 547 if (scaleColor) { 548 if (!finite(z[i])) continue; 549 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 550 buffer->bColor_R = pixel1[pixel]; 551 buffer->bColor_G = pixel2[pixel]; 552 buffer->bColor_B = pixel3[pixel]; 553 } 554 D = scaleSize ? dz*z[i] : ds; 555 DrawLine (buffer, sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 556 DrawLine (buffer, sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 557 DrawLine (buffer, sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 558 DrawLine (buffer, sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 559 DrawLine (buffer, sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 560 // out-of-range points skipped by bDrawPoint 561 } 562 } 563 } 564 if (object[0].ptype == 9) { /* hexagon */ 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 if (scaleColor) { 573 if (!finite(z[i])) continue; 574 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 575 buffer->bColor_R = pixel1[pixel]; 576 buffer->bColor_G = pixel2[pixel]; 577 buffer->bColor_B = pixel3[pixel]; 578 } 579 D = scaleSize ? dz*z[i] : ds; 580 DrawLine (buffer, sx - D, sy, sx - 0.50*D, sy + 0.87*D); 581 DrawLine (buffer, sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 582 DrawLine (buffer, sx + 0.50*D, sy + 0.87*D, sx + D, sy); 583 DrawLine (buffer, sx + D, sy, sx + 0.50*D, sy - 0.87*D); 584 DrawLine (buffer, sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 585 DrawLine (buffer, sx - 0.50*D, sy - 0.87*D, sx - D, sy); 586 // out-of-range points skipped by bDrawPoint 587 } 588 } 589 } 590 if (object[0].ptype == 10) { /* filled circle */ 591 for (i = 0; i < object[0].Npts; i++) { 592 if (!(finite(x[i]) && finite(y[i]))) continue; 593 sx = x[i]*mxi + y[i]*mxj + bx; 594 sy = x[i]*myi + y[i]*myj + by; 595 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 596 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 597 { 598 if (scaleColor) { 599 if (!finite(z[i])) continue; 600 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 601 buffer->bColor_R = pixel1[pixel]; 602 buffer->bColor_G = pixel2[pixel]; 603 buffer->bColor_B = pixel3[pixel]; 604 } 605 D = scaleSize ? dz*z[i] : ds; 606 FillCircle (buffer, sx, sy, D); 607 // out-of-range points skipped by bDrawLineHorizontal 608 } 609 } 610 } 611 if (object[0].ptype == 12) { /* filled triangle (down) */ 612 for (i = 0; i < object[0].Npts; i++) { 613 if (!(finite(x[i]) && finite(y[i]))) continue; 614 sx = x[i]*mxi + y[i]*mxj + bx; 615 sy = x[i]*myi + y[i]*myj + by; 616 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 617 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 618 { 619 if (scaleColor) { 620 if (!finite(z[i])) continue; 621 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 622 buffer->bColor_R = pixel1[pixel]; 623 buffer->bColor_G = pixel2[pixel]; 624 buffer->bColor_B = pixel3[pixel]; 625 } 626 D = scaleSize ? dz*z[i] : ds; 627 // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 628 FillTriangle (buffer, sx, sy + 0.58*D, D, 1.73*D); 629 // out-of-range points skipped by bDrawPoint 630 } 631 } 632 } 633 if (object[0].ptype == 100) { /* connect a pair of points */ 634 635 double X0 = graph[0].axis[0].fx; 636 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 637 double Y0 = graph[0].axis[1].fy; 638 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 639 640 for (i = 0; i + 1 < object[0].Npts; i+=2) { 641 if (!(finite(x[i]) && finite(y[i]))) continue; 642 sx1 = x[i]*mxi + y[i]*mxj + bx; 643 sy1 = x[i]*myi + y[i]*myj + by; 644 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 645 sy2 = x[i+1]*myi + y[i+1]*myj + by; 646 bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 647 } 648 } 649 598 case KAPA_POINT_BOX_SOLID: /* filled box */ 599 for (i = 0; i < object[0].Npts; i++) { 600 if (!(finite(x[i]) && finite(y[i]))) continue; 601 sx = x[i]*mxi + y[i]*mxj + bx; 602 sy = x[i]*myi + y[i]*myj + by; 603 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 604 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 605 if (scaleColor) { 606 if (!finite(z[i])) continue; 607 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 608 buffer->bColor_R = pixel1[pixel]; 609 buffer->bColor_G = pixel2[pixel]; 610 buffer->bColor_B = pixel3[pixel]; 611 } 612 D = scaleSize ? dz*z[i] : ds; 613 FillRectangle (buffer, sx, sy, 2*D, 2*D); 614 // plot range saturated by bDrawRectFill 615 } 616 } 617 break; 618 } 650 619 free (pixel1); 651 620 free (pixel2);
Note:
See TracChangeset
for help on using the changeset viewer.
