Changeset 39729
- Timestamp:
- Oct 6, 2016, 9:27:41 AM (10 years ago)
- Location:
- branches/czw_branch/20160809/Ohana/src
- Files:
-
- 1 added
- 9 edited
-
kapa2/include/prototypes.h (modified) (2 diffs)
-
kapa2/src/DrawObjects.c (modified) (10 diffs)
-
kapa2/src/PSObjects.c (modified) (4 diffs)
-
kapa2/src/bDrawObjects.c (modified) (2 diffs)
-
libkapa/Makefile (modified) (1 diff)
-
libkapa/include/kapa.h (modified) (3 diffs)
-
libkapa/src/KapaStyles.c (added)
-
libkapa/src/KapaWindow.c (modified) (1 diff)
-
libkapa/src/bDrawFuncs.c (modified) (1 diff)
-
opihi/lib.data/style_args.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/czw_branch/20160809/Ohana/src/kapa2/include/prototypes.h
r39457 r39729 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)); -
branches/czw_branch/20160809/Ohana/src/kapa2/src/DrawObjects.c
r39594 r39729 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 15 // XXX this is not thread safe, but that is OK 19 16 static Graphic *graphic; 20 17 … … 24 21 int i; 25 22 23 // the functions below use this global value 24 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); … … 29 30 DrawObjectN (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 } … … 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:88 case KAPA_PLOT_CONNECT: 91 89 DrawConnect (graph, object); 92 90 break; 93 case HISTOGRAM:91 case KAPA_PLOT_HISTOGRAM: 94 92 DrawHistogram (graph, object); 95 93 break; 96 case POINTS: 94 case KAPA_PLOT_POINTS: 95 default: 97 96 DrawPoints (graph, object); 98 97 break; … … 105 104 DrawXErrors (graph, object); 106 105 } 107 108 XSetLineAttributes (graphic->display, graphic->gc, 0, LineSolid, CAPSTYLE, JOINSTYLE);109 XSetForeground (graphic->display, graphic->gc, graphic->fore);110 106 return (TRUE); 111 107 } … … 429 425 Graphic *graphic = GetGraphic(); 430 426 431 /**** point s are scaled by object.z***/427 /**** point sizes are scaled by object.size, colors by object.color ***/ 432 428 int scaleSize = (object[0].size < 0); 433 429 int scaleColor = (object[0].color < 0); … … 437 433 x = object[0].x; y = object[0].y; z = object[0].z; 438 434 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 } 435 switch (object[0].ptype) { 436 case KAPA_POINT_BOX_OPEN: /* open box */ 437 for (i = 0; i < object[0].Npts; i++) { 438 if (!(finite(x[i]) && finite(y[i]))) continue; 439 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 440 sy = x[i]*myi + y[i]*myj + by + YCENTER; 441 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 442 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 443 if (scaleColor) { 444 if (!finite(z[i])) continue; 445 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 446 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 447 } 448 D = scaleSize ? dz*z[i] : ds; 449 DrawRectangle (sx - D, sy - D, 2*D, 2*D); 450 } 451 } 452 break; 453 case KAPA_POINT_CROSS: /* cross */ 454 for (i = 0; i < object[0].Npts; i++) { 455 if (!(finite(x[i]) && finite(y[i]))) continue; 456 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 457 sy = x[i]*myi + y[i]*myj + by + YCENTER; 458 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 459 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 460 if (scaleColor) { 461 if (!finite(z[i])) continue; 462 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 463 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 464 } 465 D = scaleSize ? dz*z[i] : ds; 466 DrawLine (sx - D, sy, sx + D + 1, sy); 467 DrawLine (sx, sy - D, sx, sy + D + 1); 468 } 469 } 470 break; 471 case KAPA_POINT_X: /* x */ 472 for (i = 0; i < object[0].Npts; i++) { 473 if (!(finite(x[i]) && finite(y[i]))) continue; 474 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 475 sy = x[i]*myi + y[i]*myj + by + YCENTER; 476 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 477 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 478 if (scaleColor) { 479 if (!finite(z[i])) continue; 480 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 481 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 482 } 483 D = scaleSize ? dz*z[i] : ds; 484 DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1); 485 DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1); 486 } 487 } 488 break; 489 case KAPA_POINT_TRIANGLE_SOLID: /* filled triangle */ 490 for (i = 0; i < object[0].Npts; i++) { 491 if (!(finite(x[i]) && finite(y[i]))) continue; 492 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 493 sy = x[i]*myi + y[i]*myj + by + YCENTER; 494 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 495 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 496 if (scaleColor) { 497 if (!finite(z[i])) continue; 498 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 499 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 500 } 501 D = scaleSize ? dz*z[i] : ds; 502 503 XPoint points[4]; 504 points[0].x = sx - D; points[0].y = sy + 0.58*D; 505 points[1].x = sx + D; points[1].y = sy + 0.58*D; 506 points[2].x = sx; points[2].y = sy - 1.15*D; 507 points[3].x = sx - D; points[3].y = sy + 0.58*D; 508 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 509 } 510 } 511 break; 512 case KAPA_POINT_TRIANGLE_SOLID_DOWN: /* filled triangle (down) */ 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 + XCENTER; 516 sy = x[i]*myi + y[i]*myj + by + YCENTER; 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 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 523 } 524 D = scaleSize ? dz*z[i] : ds; 525 526 XPoint points[4]; 527 points[0].x = sx - D; points[0].y = sy - 0.58*D; 528 points[1].x = sx + D; points[1].y = sy - 0.58*D; 529 points[2].x = sx; points[2].y = sy + 1.15*D; 530 points[3].x = sx - D; points[3].y = sy - 0.58*D; 531 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 532 } 533 } 534 break; 535 case KAPA_POINT_TRIANGLE_OPEN: /* open triangle */ 536 for (i = 0; i < object[0].Npts; i++) { 537 if (!(finite(x[i]) && finite(y[i]))) continue; 538 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 539 sy = x[i]*myi + y[i]*myj + by + YCENTER; 540 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 541 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 542 if (scaleColor) { 543 if (!finite(z[i])) continue; 544 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 545 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 546 } 547 D = scaleSize ? dz*z[i] : ds; 548 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 549 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 550 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 551 } 552 } 553 break; 554 case KAPA_POINT_TRIANGLE_OPEN_DOWN: /* upside-down open triangle */ 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 + XCENTER; 558 sy = x[i]*myi + y[i]*myj + by + YCENTER; 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 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 565 } 566 D = scaleSize ? dz*z[i] : ds; 567 DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D); 568 DrawLine (sx + D, sy - 0.58*D, sx, sy + 1.15*D); 569 DrawLine (sx, sy + 1.15*D, sx - D, sy - 0.58*D); 570 } 571 } 572 break; 573 case KAPA_POINT_Y: /* Y */ 574 for (i = 0; i < object[0].Npts; i++) { 575 if (!(finite(x[i]) && finite(y[i]))) continue; 576 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 577 sy = x[i]*myi + y[i]*myj + by + YCENTER; 578 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 579 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 580 if (scaleColor) { 581 if (!finite(z[i])) continue; 582 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 583 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 584 } 585 D = scaleSize ? dz*z[i] : ds; 586 DrawLine (sx, sy, sx - D, sy - 0.58*D); 587 DrawLine (sx, sy, sx + D, sy - 0.58*D); 588 DrawLine (sx, sy, sx, sy + 1.15*D); 589 } 590 } 591 break; 592 case KAPA_POINT_Y_DOWN: /* upside-down Y */ 593 for (i = 0; i < object[0].Npts; i++) { 594 if (!(finite(x[i]) && finite(y[i]))) continue; 595 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 596 sy = x[i]*myi + y[i]*myj + by + YCENTER; 597 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 598 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 599 if (scaleColor) { 600 if (!finite(z[i])) continue; 601 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 602 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 603 } 604 D = scaleSize ? dz*z[i] : ds; 605 DrawLine (sx, sy, sx - D, sy + 0.58*D); 606 DrawLine (sx, sy, sx + D, sy + 0.58*D); 607 DrawLine (sx, sy, sx, sy - 1.15*D); 608 } 609 } 610 break; 611 case KAPA_POINT_CIRCLE_OPEN: /* 0 */ 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 + XCENTER; 615 sy = x[i]*myi + y[i]*myj + by + YCENTER; 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 if (scaleColor) { 619 if (!finite(z[i])) continue; 620 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 621 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 622 } 623 D = scaleSize ? dz*z[i] : ds; 624 DrawCircle (sx, sy, D); 625 } 626 } 627 break; 628 case KAPA_POINT_CIRCLE_SOLID: /* filled 0 */ 629 for (i = 0; i < object[0].Npts; i++) { 630 if (!(finite(x[i]) && finite(y[i]))) continue; 631 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 632 sy = x[i]*myi + y[i]*myj + by + YCENTER; 633 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 634 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 635 if (scaleColor) { 636 if (!finite(z[i])) continue; 637 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 638 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 639 } 640 D = scaleSize ? dz*z[i] : ds; 641 FillCircle (sx, sy, D); 642 DrawCircle (sx, sy, D); 643 } 644 } 645 break; 646 case KAPA_POINT_PENTAGON: /* pentagon */ 647 for (i = 0; i < object[0].Npts; i++) { 648 if (!(finite(x[i]) && finite(y[i]))) continue; 649 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 650 sy = x[i]*myi + y[i]*myj + by + YCENTER; 651 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 652 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 653 if (scaleColor) { 654 if (!finite(z[i])) continue; 655 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 656 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 657 } 658 D = scaleSize ? dz*z[i] : ds; 659 DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 660 DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 661 DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 662 DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 663 DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 664 } 665 } 666 break; 667 case KAPA_POINT_HEXAGON: /* hexagon */ 668 for (i = 0; i < object[0].Npts; i++) { 669 if (!(finite(x[i]) && finite(y[i]))) continue; 670 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 671 sy = x[i]*myi + y[i]*myj + by + YCENTER; 672 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 673 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 674 if (scaleColor) { 675 if (!finite(z[i])) continue; 676 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 677 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 678 } 679 D = scaleSize ? dz*z[i] : ds; 680 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 681 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 682 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 683 684 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 685 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 686 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 687 } 688 } 689 break; 690 case KAPA_POINT_PAIR_CONNECT: { /* connect pairs of points */ 691 double X0 = graph[0].axis[0].fx; 692 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 693 double Y0 = graph[0].axis[1].fy; 694 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 695 696 for (i = 0; i + 1 < object[0].Npts; i+=2) { 697 if (!(finite(x[i]) && finite(y[i]))) continue; 698 sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER; 699 sy1 = x[i]*myi + y[i]*myj + by + YCENTER; 700 if (!(finite(x[i+1]) && finite(y[i+1]))) continue; 701 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER; 702 sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER; 703 ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 704 } 705 break; 454 706 } 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 } 707 case KAPA_POINT_BOX_SOLID: /* filled box */ 708 default: 709 for (i = 0; i < object[0].Npts; i++) { 710 if (!(finite(x[i]) && finite(y[i]))) continue; 711 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 712 sy = x[i]*myi + y[i]*myj + by + YCENTER; 713 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 714 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 715 if (scaleColor) { 716 if (!finite(z[i])) continue; 717 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 718 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 719 } 720 D = scaleSize ? dz*z[i] : ds; 721 FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1); 722 } 723 } 724 break; 745 725 } 746 726 } -
branches/czw_branch/20160809/Ohana/src/kapa2/src/PSObjects.c
r38153 r39729 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); -
branches/czw_branch/20160809/Ohana/src/kapa2/src/bDrawObjects.c
r38153 r39729 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); -
branches/czw_branch/20160809/Ohana/src/libkapa/Makefile
r39590 r39729 34 34 $(SRC)/KapaWindow.$(ARCH).o \ 35 35 $(SRC)/KapaColors.$(ARCH).o \ 36 $(SRC)/KapaStyles.$(ARCH).o \ 36 37 $(SRC)/KapaOpen.$(ARCH).o 37 38 -
branches/czw_branch/20160809/Ohana/src/libkapa/include/kapa.h
r38986 r39729 25 25 typedef struct sockaddr_in KapaSockAddress; 26 26 27 typedef struct { 28 float *data1d; 29 float **data2d; 30 int Nx; 31 int Ny; 32 } KiiImage; 33 34 typedef struct { 35 float x; 36 float y; 37 float dx; 38 float dy; 39 float angle; 40 int type; 41 } KiiOverlayBase; 42 43 typedef struct { 44 float x; 45 float y; 46 float dx; 47 float dy; 48 float angle; 49 int type; 50 char *text; 51 } KiiOverlay; 27 // retain historical numerical definitions: 28 typedef enum { 29 KAPA_LINE_INVALID_MIN = -1, 30 KAPA_LINE_SOLID = 0, 31 KAPA_LINE_DOT = 1, 32 KAPA_LINE_DASH_SHORT = 2, 33 KAPA_LINE_DASH_LONG = 3, 34 KAPA_LINE_DOT_DASH = 4, 35 KAPA_LINE_INVALID_MAX = 5, 36 } KapaLineType; 37 38 // retain historical numerical definitions: 39 typedef enum { 40 KAPA_PLOT_INVALID_MIN = -1, 41 KAPA_PLOT_CONNECT = 0, 42 KAPA_PLOT_HISTOGRAM = 1, 43 KAPA_PLOT_POINTS = 2, 44 KAPA_PLOT_INVALID_MAX = 3, 45 } KapaPlotStyle; 46 47 typedef enum { 48 KAPA_POINT_INVALID_MIN = -1, 49 KAPA_POINT_BOX_SOLID = 0, 50 KAPA_POINT_BOX_OPEN = 1, 51 KAPA_POINT_CROSS = 2, // OR PLUS 52 KAPA_POINT_X = 3, 53 KAPA_POINT_Y = 4, 54 KAPA_POINT_TRIANGLE_SOLID = 5, 55 KAPA_POINT_TRIANGLE_OPEN = 6, 56 KAPA_POINT_CIRCLE_OPEN = 7, 57 KAPA_POINT_PENTAGON = 8, 58 KAPA_POINT_HEXAGON = 9, 59 KAPA_POINT_CIRCLE_SOLID = 10, 60 KAPA_POINT_TRIANGLE_SOLID_DOWN = 11, 61 KAPA_POINT_TRIANGLE_OPEN_DOWN = 12, 62 KAPA_POINT_Y_DOWN = 13, 63 KAPA_POINT_INVALID_MAX = 14, 64 KAPA_POINT_PAIR_CONNECT = 100, // change to a plot style? 65 } KapaPointStyle; 66 // note that PAIR_CONNECT was historically 100 67 52 68 53 69 typedef enum { … … 75 91 KAPA_PS_RAWPAGE 76 92 } KapaPSmode; 93 94 typedef struct { 95 float *data1d; 96 float **data2d; 97 int Nx; 98 int Ny; 99 } KiiImage; 100 101 typedef struct { 102 float x; 103 float y; 104 float dx; 105 float dy; 106 float angle; 107 int type; 108 } KiiOverlayBase; 109 110 typedef struct { 111 float x; 112 float y; 113 float dx; 114 float dy; 115 float angle; 116 int type; 117 char *text; 118 } KiiOverlay; 77 119 78 120 typedef struct { … … 219 261 unsigned long *KapaX11colors (Display *display, Colormap colormap, unsigned long default_color, int *Ncolors); 220 262 263 /* KapaStyles.c */ 264 KapaLineType KapaLineTypeFromString (char *string); 265 KapaPlotStyle KapaPlotStyleFromString (char *string); 266 KapaPointStyle KapaPointStyleFromString (char *string); 267 221 268 /* RotFont.c */ 222 269 void InitRotFonts PROTO((void)); -
branches/czw_branch/20160809/Ohana/src/libkapa/src/KapaWindow.c
r39719 r39729 449 449 return (TRUE); 450 450 } 451 -
branches/czw_branch/20160809/Ohana/src/libkapa/src/bDrawFuncs.c
r36488 r39729 222 222 e = 0; 223 223 for (X = X1, N = 0; X <= X2; X++, N++) { 224 if (buffer->bType == 1) { DashOn = (N % 10) < 5; } 225 if (buffer->bType == 2) { DashOn = (N % 6) < 3; } 224 if (buffer->bType == KAPA_LINE_DOT) { 225 DashOn = (N % 5) == 0 || (N % 5) == 1; 226 } 227 if (buffer->bType == KAPA_LINE_DASH_SHORT) { 228 DashOn = (N % 8) < 4; 229 } 230 if (buffer->bType == KAPA_LINE_DASH_LONG) { 231 DashOn = (N % 16) < 8; 232 } 233 if (buffer->bType == KAPA_LINE_DOT_DASH) { 234 DashOn = ((N % 12) < 2) || ((N % 12 >= 6) && (N % 12 < 10)) ; 235 } 226 236 if (swapcoords) { 227 237 if (DashOn) bDrawPoint (buffer, Y,X); -
branches/czw_branch/20160809/Ohana/src/opihi/lib.data/style_args.c
r13479 r39729 29 29 if ((N = get_argument (*argc, argv, "-lt"))) { 30 30 remove_argument (N, argc, argv); 31 graphmode[0].ltype = atof(argv[N]);31 graphmode[0].ltype = KapaLineTypeFromString(argv[N]); 32 32 remove_argument (N, argc, argv); 33 33 } … … 39 39 if ((N = get_argument (*argc, argv, "-pt"))) { 40 40 remove_argument (N, argc, argv); 41 graphmode[0].ptype = atof(argv[N]);41 graphmode[0].ptype = KapaPointStyleFromString(argv[N]); 42 42 remove_argument (N, argc, argv); 43 43 } … … 63 63 if ((N = get_argument (*argc, argv, "-x"))) { 64 64 remove_argument (N, argc, argv); 65 graphmode[0].style = atof(argv[N]);65 graphmode[0].style = KapaPlotStyleFromString(argv[N]); 66 66 remove_argument (N, argc, argv); 67 67 }
Note:
See TracChangeset
for help on using the changeset viewer.
