Changeset 31665
- Timestamp:
- Jun 22, 2011, 12:36:53 AM (15 years ago)
- Location:
- trunk/Ohana/src/kapa2
- Files:
-
- 7 edited
- 1 copied
-
src/DrawObjects.c (modified) (4 diffs)
-
src/LoadObject.c (modified) (2 diffs)
-
src/PNGit.c (modified) (4 diffs)
-
src/PSObjects.c (modified) (4 diffs)
-
src/PSit.c (modified) (1 diff)
-
src/SetChannel.c (modified) (1 diff)
-
src/bDrawObjects.c (modified) (3 diffs)
-
test/zcplot.sh (copied) (copied from branches/eam_branches/ipp-20110505/Ohana/src/kapa2/test/zcplot.sh )
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/kapa2/src/DrawObjects.c
r31560 r31665 5 5 # define FillRectangle(X1,Y1,X2,Y2) (XFillRectangle (graphic->display, graphic->window, graphic->gc, (int)(X1), (int)(Y1), (int)(X2), (int)(Y2))) 6 6 # define DrawCircle(X,Y,R) (XDrawArc (graphic->display, graphic->window, graphic->gc, (int)(X-R), (int)(Y-R), abs(2*R), abs(2*R), 0, 23040)) 7 # 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)) 7 8 8 9 # define CONNECT 0 … … 70 71 } 71 72 72 XSetForeground (graphic->display, graphic->gc, graphic->color[object[0].color]); 73 // negative color values mean "scale color with object.z" 74 if (object[0].color >= 0) { 75 XSetForeground (graphic->display, graphic->gc, graphic->color[object[0].color]); 76 } 73 77 74 78 switch (object[0].style) { … … 371 375 float *x, *y, *z; 372 376 double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by; 373 int sx, sy, sx1, sy1, sx2, sy2, d , D;377 int sx, sy, sx1, sy1, sx2, sy2, ds, dz, D; 374 378 375 379 mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0); … … 386 390 by = byi + byj; 387 391 392 Graphic *graphic = GetGraphic(); 393 388 394 /**** points are scaled by object.z ***/ 389 if (object[0].size < 0) { 390 d = 0.5 * (graphic->dx + graphic->dy) * 0.01; 391 x = object[0].x; y = object[0].y; z = object[0].z; 392 393 if (object[0].ptype == 0) { /* filled box */ 394 for (i = 0; i < object[0].Npts; i++) { 395 if (!(finite(x[i]) && finite(y[i]))) continue; 396 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 397 sy = x[i]*myi + y[i]*myj + by + YCENTER; 398 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 399 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 400 { 401 D = d*z[i]; 402 FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1); 403 } 404 } 405 } 406 if (object[0].ptype == 1) { /* open box */ 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 + XCENTER; 410 sy = x[i]*myi + y[i]*myj + by + YCENTER; 411 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 412 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 413 { 414 D = d*z[i]; 415 DrawRectangle (sx - D, sy - D, 2*D, 2*D); 416 } 417 } 418 } 419 if (object[0].ptype == 2) { /* cross */ 420 for (i = 0; i < object[0].Npts; i++) { 421 if (!(finite(x[i]) && finite(y[i]))) continue; 422 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 423 sy = x[i]*myi + y[i]*myj + by + YCENTER; 424 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 425 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 426 { 427 D = d*z[i]; 428 DrawLine (sx - D, sy, sx + D + 1, sy); 429 DrawLine (sx, sy - D, sx, sy + D + 1); 430 } 431 } 432 } 433 if (object[0].ptype == 3) { /* x */ 434 for (i = 0; i < object[0].Npts; i++) { 435 if (!(finite(x[i]) && finite(y[i]))) continue; 436 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 437 sy = x[i]*myi + y[i]*myj + by + YCENTER; 438 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 439 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 440 { 441 D = d*z[i]; 442 DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1); 443 DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1); 444 } 445 } 446 } 447 if (object[0].ptype == 4) { /* filled triangle */ 448 XPoint points[4]; 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 + XCENTER; 452 sy = x[i]*myi + y[i]*myj + by + YCENTER; 453 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 454 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 455 { 456 D = d*z[i]; 457 points[0].x = sx - D; points[0].y = sy + 0.58*D; 458 points[1].x = sx + D; points[1].y = sy + 0.58*D; 459 points[2].x = sx; points[2].y = sy - 1.15*D; 460 points[3].x = sx - D; points[3].y = sy + 0.58*D; 461 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 462 } 463 } 464 } 465 if (object[0].ptype == 5) { /* open triangle */ 466 for (i = 0; i < object[0].Npts; i++) { 467 if (!(finite(x[i]) && finite(y[i]))) continue; 468 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 469 sy = x[i]*myi + y[i]*myj + by + YCENTER; 470 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 471 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 472 { 473 D = d*z[i]; 474 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 475 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 476 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 477 } 478 } 479 } 480 if (object[0].ptype == 6) { /* 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 + XCENTER; 484 sy = x[i]*myi + y[i]*myj + by + YCENTER; 485 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 486 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 487 { 488 D = d*z[i]; 489 DrawLine (sx, sy, sx - D, sy - 0.58*D); 490 DrawLine (sx, sy, sx + D, sy - 0.58*D); 491 DrawLine (sx, sy, sx, sy + 1.15*D); 492 } 493 } 494 } 495 if (object[0].ptype == 7) { /* 0 */ 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 + XCENTER; 499 sy = x[i]*myi + y[i]*myj + by + YCENTER; 500 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 501 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 502 { 503 D = d*z[i]; 504 DrawCircle (sx, sy, D); 505 } 506 } 507 } 508 if (object[0].ptype == 8) { /* pentagon */ 509 for (i = 0; i < object[0].Npts; i++) { 510 if (!(finite(x[i]) && finite(y[i]))) continue; 511 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 512 sy = x[i]*myi + y[i]*myj + by + YCENTER; 513 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 514 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 515 { 516 D = d*z[i]; 517 DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 518 DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 519 DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 520 DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 521 DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 522 } 523 } 524 } 525 if (object[0].ptype == 9) { /* hexagon */ 526 for (i = 0; i < object[0].Npts; i++) { 527 if (!(finite(x[i]) && finite(y[i]))) continue; 528 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 529 sy = x[i]*myi + y[i]*myj + by + YCENTER; 530 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 531 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 532 { 533 D = d*z[i]; 534 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 535 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 536 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 537 538 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 539 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 540 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 541 } 542 } 543 } 544 if (object[0].ptype == 100) { /* connect a pair of points */ 545 546 double X0 = graph[0].axis[0].fx; 547 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 548 double Y0 = graph[0].axis[1].fy; 549 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 550 551 for (i = 0; i + 1 < object[0].Npts; i+=2) { 552 if (!(finite(x[i]) && finite(y[i]))) continue; 553 sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER; 554 sy1 = x[i]*myi + y[i]*myj + by + YCENTER; 555 if (!(finite(x[i+1]) && finite(y[i+1]))) continue; 556 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER; 557 sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER; 558 ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 559 } 560 } 561 } 562 /**** points are not scaled by object.z ***/ 563 /** some rules on how the points are drawn: 564 1) the smallest point is always a dot (single pixel) 565 2) the point shape should be invarient on position 566 3) center of point is always center of a pixel 567 **/ 568 else { 569 d = (int)(object[0].size * hypot((float)graphic->dx, (float)graphic->dy) * 0.003); 570 x = object[0].x; y = object[0].y; 571 572 if (object[0].ptype == 0) { /* filled box : OK */ 573 for (i = 0; i < object[0].Npts; i++) { 574 if (!(finite(x[i]) && finite(y[i]))) continue; 575 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 576 sy = x[i]*myi + y[i]*myj + by + YCENTER; 577 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 578 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 579 { 580 FillRectangle (sx - d, sy - d, 2*d + 1, 2*d + 1); 581 } 582 } 583 } 584 if (object[0].ptype == 1) { /* open box : OK*/ 585 for (i = 0; i < object[0].Npts; i++) { 586 if (!(finite(x[i]) && finite(y[i]))) continue; 587 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 588 sy = x[i]*myi + y[i]*myj + by + YCENTER; 589 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 590 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 591 { 592 DrawRectangle (sx - d, sy - d, 2*d, 2*d); 593 } 594 } 595 } 596 if (object[0].ptype == 2) { /* cross : OK*/ 597 for (i = 0; i < object[0].Npts; i++) { 598 if (!(finite(x[i]) && finite(y[i]))) continue; 599 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 600 sy = x[i]*myi + y[i]*myj + by + YCENTER; 601 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 602 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 603 { 604 DrawLine (sx - d, sy, sx + d + 1, sy); // DrawLine does NOT draw the end pixel 605 DrawLine (sx, sy - d, sx, sy + d + 1); 606 } 607 } 608 } 609 if (object[0].ptype == 3) { /* x : OK */ 610 for (i = 0; i < object[0].Npts; i++) { 611 if (!(finite(x[i]) && finite(y[i]))) continue; 612 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 613 sy = x[i]*myi + y[i]*myj + by + YCENTER; 614 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 615 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 616 { 617 /* XDrawLine is a little funny, this is needed to fix endpost errors */ 618 DrawLine (sx - d, sy + d, sx + d + 1, sy - d - 1); 619 DrawLine (sx - d, sy - d, sx + d + 1, sy + d + 1); 620 } 621 } 622 } 623 if (object[0].ptype == 4) { /* filled triangle */ 624 XPoint points[4]; 625 for (i = 0; i < object[0].Npts; i++) { 626 if (!(finite(x[i]) && finite(y[i]))) continue; 627 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 628 sy = x[i]*myi + y[i]*myj + by + YCENTER; 629 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 630 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 631 { 632 points[0].x = sx - d; points[0].y = sy + 0.58*d; 633 points[1].x = sx + d; points[1].y = sy + 0.58*d; 634 points[2].x = sx; points[2].y = sy - 1.15*d; 635 points[3].x = sx - d; points[3].y = sy + 0.58*d; 636 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 637 } 638 } 639 } 640 if (object[0].ptype == 5) { /* open triangle */ 641 for (i = 0; i < object[0].Npts; i++) { 642 if (!(finite(x[i]) && finite(y[i]))) continue; 643 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 644 sy = x[i]*myi + y[i]*myj + by + YCENTER; 645 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 646 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 647 { 648 DrawLine (sx - d, sy + 0.58*d, sx + d, sy + 0.58*d); 649 DrawLine (sx + d, sy + 0.58*d, sx, sy - 1.15*d); 650 DrawLine (sx, sy - 1.15*d, sx - d, sy + 0.58*d); 651 } 652 } 653 } 654 if (object[0].ptype == 6) { /* Y */ 655 for (i = 0; i < object[0].Npts; i++) { 656 if (!(finite(x[i]) && finite(y[i]))) continue; 657 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 658 sy = x[i]*myi + y[i]*myj + by + YCENTER; 659 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 660 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 661 { 662 DrawLine (sx, sy, sx - d, sy - 0.58*d); 663 DrawLine (sx, sy, sx + d, sy - 0.58*d); 664 DrawLine (sx, sy, sx, sy + 1.15*d); 665 } 666 } 667 } 668 if (object[0].ptype == 7) { /* 0 */ 669 for (i = 0; i < object[0].Npts; i++) { 670 if (!(finite(x[i]) && finite(y[i]))) continue; 671 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 672 sy = x[i]*myi + y[i]*myj + by + YCENTER; 673 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 674 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 675 { 676 DrawCircle (sx, sy, d); 677 } 678 } 679 } 680 if (object[0].ptype == 8) { /* pentagon */ 681 for (i = 0; i < object[0].Npts; i++) { 682 if (!(finite(x[i]) && finite(y[i]))) continue; 683 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 684 sy = x[i]*myi + y[i]*myj + by + YCENTER; 685 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 686 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 687 { 688 DrawLine (sx + 0.00*d, sy - 1.00*d, sx + 0.95*d, sy - 0.31*d); 689 DrawLine (sx + 0.95*d, sy - 0.31*d, sx + 0.58*d, sy + 0.81*d); 690 DrawLine (sx + 0.58*d, sy + 0.81*d, sx - 0.58*d, sy + 0.81*d); 691 DrawLine (sx - 0.58*d, sy + 0.81*d, sx - 0.95*d, sy - 0.31*d); 692 DrawLine (sx - 0.95*d, sy - 0.31*d, sx + 0.00*d, sy - 1.00*d); 693 } 694 } 695 } 696 if (object[0].ptype == 9) { /* pentagon */ 697 for (i = 0; i < object[0].Npts; i++) { 698 if (!(finite(x[i]) && finite(y[i]))) continue; 699 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 700 sy = x[i]*myi + y[i]*myj + by + YCENTER; 701 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 702 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 703 { 704 DrawLine (sx - 1.00*d, sy + 0.00*d, sx - 0.50*d, sy + 0.87*d); 705 DrawLine (sx - 0.50*d, sy + 0.87*d, sx + 0.50*d, sy + 0.87*d); 706 DrawLine (sx + 0.50*d, sy + 0.87*d, sx + 1.00*d, sy + 0.00*d); 707 DrawLine (sx + 1.00*d, sy + 0.00*d, sx + 0.50*d, sy - 0.87*d); 708 DrawLine (sx + 0.50*d, sy - 0.87*d, sx - 0.50*d, sy - 0.87*d); 709 DrawLine (sx - 0.50*d, sy - 0.87*d, sx - 1.00*d, sy + 0.00*d); 710 } 711 } 712 } 713 if (object[0].ptype == 100) { 714 double X0 = graph[0].axis[0].fx; 715 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 716 double Y0 = graph[0].axis[1].fy; 717 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 718 719 for (i = 0; i + 1 < object[0].Npts; i+=2) { 720 if (!(finite(x[i]) && finite(y[i]))) continue; 721 sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER; 722 sy1 = x[i]*myi + y[i]*myj + by + YCENTER; 723 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER; 724 sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER; 725 ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 726 } 395 int scaleSize = (object[0].size < 0); 396 int scaleColor = (object[0].color < 0); 397 398 ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size; 399 dz = 0.5 * (graphic->dx + graphic->dy) * 0.010; 400 x = object[0].x; y = object[0].y; z = object[0].z; 401 402 if (object[0].ptype == 0) { /* filled box */ 403 for (i = 0; i < object[0].Npts; i++) { 404 if (!(finite(x[i]) && finite(y[i]))) continue; 405 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 406 sy = x[i]*myi + y[i]*myj + by + YCENTER; 407 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 408 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 409 if (scaleColor) { 410 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 411 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 412 } 413 D = scaleSize ? dz*z[i] : ds; 414 FillRectangle (sx - D, sy - D, 2*D + 1, 2*D + 1); 415 } 416 } 417 } 418 if (object[0].ptype == 1) { /* open box */ 419 for (i = 0; i < object[0].Npts; i++) { 420 if (!(finite(x[i]) && finite(y[i]))) continue; 421 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 422 sy = x[i]*myi + y[i]*myj + by + YCENTER; 423 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 424 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 425 if (scaleColor) { 426 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 427 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 428 } 429 D = scaleSize ? dz*z[i] : ds; 430 DrawRectangle (sx - D, sy - D, 2*D, 2*D); 431 } 432 } 433 } 434 if (object[0].ptype == 2) { /* cross */ 435 for (i = 0; i < object[0].Npts; i++) { 436 if (!(finite(x[i]) && finite(y[i]))) continue; 437 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 438 sy = x[i]*myi + y[i]*myj + by + YCENTER; 439 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 440 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 441 if (scaleColor) { 442 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 443 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 444 } 445 D = scaleSize ? dz*z[i] : ds; 446 DrawLine (sx - D, sy, sx + D + 1, sy); 447 DrawLine (sx, sy - D, sx, sy + D + 1); 448 } 449 } 450 } 451 if (object[0].ptype == 3) { /* x */ 452 for (i = 0; i < object[0].Npts; i++) { 453 if (!(finite(x[i]) && finite(y[i]))) continue; 454 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 455 sy = x[i]*myi + y[i]*myj + by + YCENTER; 456 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 457 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 458 if (scaleColor) { 459 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 460 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 461 } 462 D = scaleSize ? dz*z[i] : ds; 463 DrawLine (sx - D, sy + D, sx + D + 1, sy - D - 1); 464 DrawLine (sx - D, sy - D, sx + D + 1, sy + D + 1); 465 } 466 } 467 } 468 if (object[0].ptype == 4) { /* filled triangle */ 469 XPoint points[4]; 470 for (i = 0; i < object[0].Npts; i++) { 471 if (!(finite(x[i]) && finite(y[i]))) continue; 472 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 473 sy = x[i]*myi + y[i]*myj + by + YCENTER; 474 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 475 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 476 if (scaleColor) { 477 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 478 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 479 } 480 D = scaleSize ? dz*z[i] : ds; 481 points[0].x = sx - D; points[0].y = sy + 0.58*D; 482 points[1].x = sx + D; points[1].y = sy + 0.58*D; 483 points[2].x = sx; points[2].y = sy - 1.15*D; 484 points[3].x = sx - D; points[3].y = sy + 0.58*D; 485 XFillPolygon (graphic->display, graphic->window, graphic->gc, points, 4, Convex, CoordModeOrigin); 486 } 487 } 488 } 489 if (object[0].ptype == 5) { /* open 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 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 498 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 499 } 500 D = scaleSize ? dz*z[i] : ds; 501 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 502 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 503 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 504 } 505 } 506 } 507 if (object[0].ptype == 6) { /* Y */ 508 for (i = 0; i < object[0].Npts; i++) { 509 if (!(finite(x[i]) && finite(y[i]))) continue; 510 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 511 sy = x[i]*myi + y[i]*myj + by + YCENTER; 512 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 513 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 514 if (scaleColor) { 515 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 516 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 517 } 518 D = scaleSize ? dz*z[i] : ds; 519 DrawLine (sx, sy, sx - D, sy - 0.58*D); 520 DrawLine (sx, sy, sx + D, sy - 0.58*D); 521 DrawLine (sx, sy, sx, sy + 1.15*D); 522 } 523 } 524 } 525 if (object[0].ptype == 7) { /* 0 */ 526 for (i = 0; i < object[0].Npts; i++) { 527 if (!(finite(x[i]) && finite(y[i]))) continue; 528 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 529 sy = x[i]*myi + y[i]*myj + by + YCENTER; 530 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 531 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 532 if (scaleColor) { 533 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 534 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 535 } 536 D = scaleSize ? dz*z[i] : ds; 537 DrawCircle (sx, sy, D); 538 } 539 } 540 } 541 if (object[0].ptype == 8) { /* pentagon */ 542 for (i = 0; i < object[0].Npts; i++) { 543 if (!(finite(x[i]) && finite(y[i]))) continue; 544 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 545 sy = x[i]*myi + y[i]*myj + by + YCENTER; 546 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 547 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 548 if (scaleColor) { 549 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 550 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 551 } 552 D = scaleSize ? dz*z[i] : ds; 553 DrawLine (sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 554 DrawLine (sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 555 DrawLine (sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 556 DrawLine (sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 557 DrawLine (sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 558 } 559 } 560 } 561 if (object[0].ptype == 9) { /* hexagon */ 562 for (i = 0; i < object[0].Npts; i++) { 563 if (!(finite(x[i]) && finite(y[i]))) continue; 564 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 565 sy = x[i]*myi + y[i]*myj + by + YCENTER; 566 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 567 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 568 if (scaleColor) { 569 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 570 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 571 } 572 D = scaleSize ? dz*z[i] : ds; 573 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 574 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 575 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 576 577 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 578 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 579 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 580 } 581 } 582 } 583 if (object[0].ptype == 10) { /* filled 0 */ 584 for (i = 0; i < object[0].Npts; i++) { 585 if (!(finite(x[i]) && finite(y[i]))) continue; 586 sx = x[i]*mxi + y[i]*mxj + bx + XCENTER; 587 sy = x[i]*myi + y[i]*myj + by + YCENTER; 588 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 589 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) { 590 if (scaleColor) { 591 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 592 XSetForeground (graphic->display, graphic->gc, graphic->cmap[pixel].pixel); 593 } 594 D = scaleSize ? dz*z[i] : ds; 595 FillCircle (sx, sy, D); 596 } 597 } 598 } 599 if (object[0].ptype == 100) { /* connect a pair of points */ 600 601 double X0 = graph[0].axis[0].fx; 602 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 603 double Y0 = graph[0].axis[1].fy; 604 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 605 606 for (i = 0; i + 1 < object[0].Npts; i+=2) { 607 if (!(finite(x[i]) && finite(y[i]))) continue; 608 sx1 = x[i]*mxi + y[i]*mxj + bx + XCENTER; 609 sy1 = x[i]*myi + y[i]*myj + by + YCENTER; 610 if (!(finite(x[i+1]) && finite(y[i+1]))) continue; 611 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx + XCENTER; 612 sy2 = x[i+1]*myi + y[i+1]*myj + by + YCENTER; 613 ClipLine (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 727 614 } 728 615 } -
trunk/Ohana/src/kapa2/src/LoadObject.c
r29539 r31665 38 38 graph[0].objects[N].lweight, graph[0].objects[N].size); 39 39 40 /* force valid ranges */ 41 if ((graph[0].objects[N].color > KapaColormapSize()) || (graph[0].objects[N].color < 0)) 42 graph[0].objects[N].color = 0; 40 // limit color ranges (negative is allowed for ptype == 2 --> color scaled by z 41 if (graph[0].objects[N].color >= KapaColormapSize()) { 42 graph[0].objects[N].color = KapaColormapSize() - 1; 43 } 44 if ((graph[0].objects[N].style != 2) && (graph[0].objects[N].color < 0)) { 45 graph[0].objects[N].color = 0; 46 } 43 47 44 48 KiiScanMessage (sock, "%lf %lf %lf %lf", … … 64 68 REALLOCATE (graph[0].objects, Gobjects, MAX (1, graph[0].Nobjects)); 65 69 } 66 if ( graph[0].objects[N].size < 0.0) {70 if ((graph[0].objects[N].size < 0.0) || (graph[0].objects[N].color < 0.0)) { 67 71 if (!LoadVectorData (sock, graph, N, "z")) { 68 72 FreeObjectData (&graph[0].objects[N]); -
trunk/Ohana/src/kapa2/src/PNGit.c
r29938 r31665 1 1 # include "Ximage.h" 2 3 /* I almost have PNG images + plots working. I need to do a few more things:4 1) decide on the dimensions of the output image/plot file -- like the jpeg covering the pixels? adjust the box to include the full plot box?5 2) update bDraw to either write palette values (as now) or RGB values into the buffer6 3) decision on output based on the existence of images or not7 */8 2 9 3 int PNGcommand (int sock) { … … 22 16 png_structp png_ptr; 23 17 png_infop info_ptr; 24 int i, status, Npalette, Nsection;18 int status, Npalette; 25 19 bDrawBuffer *buffer = NULL; 26 20 Graphic *graphic = NULL; 27 21 png_color *palette = NULL; 28 Section *section;29 22 30 23 graphic = GetGraphic(); … … 68 61 palette = KapaPNGPalette (&Npalette); 69 62 63 /* before we allowed colormap-scaled points, we had the option of writing an image using a 64 limited palette. we could get smart and check all objects to see if any of them use 65 scaled colors and choose a limited palette if not. but maybe that is not worth the effort. 66 */ 67 68 # if (0) 70 69 // do we have an image in any of the sections? 71 Nsection = GetNumberOfSections ();70 int Nsection = GetNumberOfSections (); 72 71 int haveImage = FALSE; 72 int i; 73 73 for (i = 0; !haveImage && (i < Nsection); i++) { 74 section = GetSectionByNumber (i);74 Section *section = GetSectionByNumber (i); 75 75 haveImage = (section->image != NULL); 76 76 } 77 # else 78 int haveImage = TRUE; 79 # endif 77 80 78 81 /* see docs for write-row-callback to provide progress info */ 79 82 if (haveImage) { 80 // png_set_IHDR (png_ptr, info_ptr, graphic->dx, graphic->dy, 16, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);81 83 png_set_IHDR (png_ptr, info_ptr, graphic->dx, graphic->dy, 8, PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); 82 84 png_set_sRGB (png_ptr, info_ptr, PNG_sRGB_INTENT_ABSOLUTE); … … 95 97 if (haveImage) { 96 98 buffer = bDrawIt (palette, Npalette, 3); 97 // bDrawImage (buffer, graphic);98 99 } else { 99 100 buffer = bDrawIt (palette, Npalette, 1); -
trunk/Ohana/src/kapa2/src/PSObjects.c
r31560 r31665 2 2 3 3 # define DrawLine(X1,Y1,X2,Y2) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f L\n", X1, graphic->dy - Y1, X2, graphic->dy - Y2)) 4 # define DrawCircle(X1,Y1,R) (fprintf (f, " %6.2f %6.2f %6.2f C\n", (X1), (graphic->dy - Y1), (R)))5 4 # define DrawRectangle(X,Y,dX,dY) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f B\n", (dX), (dY), (X-0.5*dX), (graphic->dy-Y-0.5*dY))) 6 5 # define FillRectangle(X,Y,dX,dY) (fprintf (f, " %6.2f %6.2f %6.2f %6.2f F\n", (dX), (dY), (X-0.5*dX), (graphic->dy-Y-0.5*dY))) 6 # define DrawCircle(X1,Y1,R) (fprintf (f, " %6.2f %6.2f %6.2f C\n", (X1), (graphic->dy - Y1), (R))) 7 # define FillCircle(X1,Y1,R) (fprintf (f, " %6.2f %6.2f %6.2f FC\n", (X1), (graphic->dy - Y1), (R))) 7 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))) 8 9 # define CONNECT 0 … … 37 38 lweight = MAX (0, MIN (10, graph[0].objects[i].lweight)); 38 39 fprintf (f, "%.1f setlinewidth\n", lweight); 39 fprintf (f, "%s setrgbcolor\n", KapaColorRGBString(graph[0].objects[i].color)); 40 41 if (graph[0].objects[i].color >= 0) { 42 fprintf (f, "%s setrgbcolor\n", KapaColorRGBString(graph[0].objects[i].color)); 43 } 40 44 41 45 switch (graph[0].objects[i].style) { … … 270 274 float *x, *y, *z; 271 275 double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by; 272 double sx, sy, d, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1; 276 double sx, sy, sx1, sy1, sx2, sy2, ds, dz, D; 277 float *pixel1, *pixel2, *pixel3; 273 278 274 279 mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0); … … 285 290 by = byi + byj; 286 291 287 /* below here, code is identical with DrawObjects */ 292 Graphic *graphic = GetGraphic(); 293 294 ALLOCATE (pixel1, float, graphic[0].Npixels); 295 ALLOCATE (pixel2, float, graphic[0].Npixels); 296 ALLOCATE (pixel3, float, graphic[0].Npixels); 297 298 /** cmap[i].pixel must be defined even if X is not used **/ 299 for (i = 0; i < graphic[0].Npixels; i++) { /* set up pixel array */ 300 pixel1[i] = graphic[0].cmap[i].red / (float) 0xffff; 301 pixel2[i] = graphic[0].cmap[i].green / (float) 0xffff; 302 pixel3[i] = graphic[0].cmap[i].blue / (float) 0xffff; 303 } 304 305 // black, I think 306 // fprintf (f, "0.00 0.00 0.00 setrgbcolor\n"); 307 288 308 /**** points are scaled by object.z ***/ 289 if (object[0].size < 0) { 290 d = 0.5 * (graphic->dx + graphic->dy) * 0.01; 291 x = object[0].x; y = object[0].y; z = object[0].z; 292 if (object[0].ptype == 0) { /* filled box */ 293 for (i = 0; i < object[0].Npts; i++) { 294 if (!(finite(x[i]) && finite(y[i]))) continue; 295 sx = x[i]*mxi + y[i]*mxj + bx; 296 sy = x[i]*myi + y[i]*myj + by; 297 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 298 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 299 { 300 FillRectangle (sx, sy, 2*d*z[i], 2*d*z[i]); 301 } 302 } 303 } 304 if (object[0].ptype == 1) { /* 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 { 312 DrawRectangle (sx, sy, 2*d*z[i], 2*d*z[i]); 313 } 314 } 315 } 316 if (object[0].ptype == 2) { /* cross */ 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 DrawLine (sx - d*z[i], sy, sx + d*z[i], sy); 325 DrawLine (sx, sy - d*z[i], sx, sy + d*z[i]); 326 } 327 } 328 } 329 if (object[0].ptype == 3) { /* x */ 330 for (i = 0; i < object[0].Npts; i++) { 331 if (!(finite(x[i]) && finite(y[i]))) continue; 332 sx = x[i]*mxi + y[i]*mxj + bx; 333 sy = x[i]*myi + y[i]*myj + by; 334 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 335 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 336 { 337 DrawLine (sx + d*z[i], sy - d*z[i], sx - d*z[i], sy + d*z[i]); 338 DrawLine (sx - d*z[i], sy - d*z[i], sx + d*z[i], sy + d*z[i]); 339 } 340 } 341 } 342 if (object[0].ptype == 4) { /* filled triangle */ 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 FillTriangle (sx - d*z[i], sy - 0.58*d*z[i], sx + d*z[i], sy - 0.58*d*z[i], sx, sy + 1.15*d*z[i]); 351 /* 352 DrawLine (sx - d*z[i], sy + 0.58*d*z[i], sx + d*z[i], sy + 0.58*d*z[i]); 353 DrawLine (sx + d*z[i], sy + 0.58*d*z[i], sx, sy - 1.15*d*z[i]); 354 DrawLine (sx, sy - 1.15*d*z[i], sx - d*z[i], sy + 0.58*d*z[i]); 355 */ 356 } 357 } 358 } 359 if (object[0].ptype == 5) { /* open triangle */ 360 for (i = 0; i < object[0].Npts; i++) { 361 if (!(finite(x[i]) && finite(y[i]))) continue; 362 sx = x[i]*mxi + y[i]*mxj + bx; 363 sy = x[i]*myi + y[i]*myj + by; 364 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 365 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 366 { 367 DrawLine (sx - d*z[i], sy - 0.58*d*z[i], sx + d*z[i], sy - 0.58*d*z[i]); 368 DrawLine (sx + d*z[i], sy - 0.58*d*z[i], sx, sy + 1.15*d*z[i]); 369 DrawLine (sx, sy + 1.15*d*z[i], sx - d*z[i], sy - 0.58*d*z[i]); 370 } 371 } 372 } 373 if (object[0].ptype == 6) { /* Y */ 374 for (i = 0; i < object[0].Npts; i++) { 375 if (!(finite(x[i]) && finite(y[i]))) continue; 376 sx = x[i]*mxi + y[i]*mxj + bx; 377 sy = x[i]*myi + y[i]*myj + by; 378 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 379 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 380 { 381 DrawLine (sx, sy, sx - d*z[i], sy + 0.58*d*z[i]); 382 DrawLine (sx, sy, sx + d*z[i], sy + 0.58*d*z[i]); 383 DrawLine (sx, sy, sx, sy - 1.15*d*z[i]); 384 } 385 } 386 } 387 if (object[0].ptype == 7) { /* 0 */ 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 { 395 DrawCircle (sx, sy, d*z[i]); 396 } 397 } 398 } 399 if (object[0].ptype == 8) { /* pentagon */ 400 for (i = 0; i < object[0].Npts; i++) { 401 if (!(finite(x[i]) && finite(y[i]))) continue; 402 sx = x[i]*mxi + y[i]*mxj + bx; 403 sy = x[i]*myi + y[i]*myj + by; 404 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 405 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 406 { 407 DrawLine (sx + 0.00*d*z[i], sy + 1.00*d*z[i], sx + 0.95*d*z[i], sy + 0.31*d*z[i]); 408 DrawLine (sx + 0.95*d*z[i], sy + 0.31*d*z[i], sx + 0.58*d*z[i], sy - 0.81*d*z[i]); 409 DrawLine (sx + 0.58*d*z[i], sy - 0.81*d*z[i], sx - 0.58*d*z[i], sy - 0.81*d*z[i]); 410 DrawLine (sx - 0.58*d*z[i], sy - 0.81*d*z[i], sx - 0.95*d*z[i], sy + 0.31*d*z[i]); 411 DrawLine (sx - 0.95*d*z[i], sy + 0.31*d*z[i], sx + 0.00*d*z[i], sy + 1.00*d*z[i]); 412 } 413 } 414 } 415 if (object[0].ptype == 9) { /* hexagon */ 416 for (i = 0; i < object[0].Npts; i++) { 417 if (!(finite(x[i]) && finite(y[i]))) continue; 418 sx = x[i]*mxi + y[i]*mxj + bx; 419 sy = x[i]*myi + y[i]*myj + by; 420 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 421 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 422 { 423 DrawLine (sx - d*z[i], sy, sx - 0.50*d*z[i], sy + 0.87*d*z[i]); 424 DrawLine (sx - 0.50*d*z[i], sy + 0.87*d*z[i], sx + 0.50*d*z[i], sy + 0.87*d*z[i]); 425 DrawLine (sx + 0.50*d*z[i], sy + 0.87*d*z[i], sx + d*z[i], sy); 426 427 DrawLine (sx + d*z[i], sy, sx + 0.50*d*z[i], sy - 0.87*d*z[i]); 428 DrawLine (sx + 0.50*d*z[i], sy - 0.87*d*z[i], sx - 0.50*d*z[i], sy - 0.87*d*z[i]); 429 DrawLine (sx - 0.50*d*z[i], sy - 0.87*d*z[i], sx - d*z[i], sy); 430 } 431 } 432 } 433 if (object[0].ptype == 100) { /* connect a pair of points */ 434 X0 = graph[0].axis[0].fx; 435 X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 436 Y0 = graph[0].axis[1].fy; 437 Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 438 439 for (i = 0; i + 1 < object[0].Npts; i+=2) { 440 if (!(finite(x[i]) && finite(y[i]))) continue; 441 sx1 = x[i]*mxi + y[i]*mxj + bx; 442 sy1 = x[i]*myi + y[i]*myj + by; 443 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 444 sy2 = x[i+1]*myi + y[i+1]*myj + by; 445 ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f); 446 } 447 } 448 } else { 449 d = object[0].size * 0.5 * (graphic->dx + graphic->dy) * 0.003; 450 x = object[0].x; y = object[0].y; 451 if (object[0].ptype == 0) { /* filled box */ 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 FillRectangle (sx, sy, 2*d, 2*d); 460 } 461 } 462 } 463 if (object[0].ptype == 1) { /* open box */ 464 for (i = 0; i < object[0].Npts; i++) { 465 if (!(finite(x[i]) && finite(y[i]))) continue; 466 sx = x[i]*mxi + y[i]*mxj + bx; 467 sy = x[i]*myi + y[i]*myj + by; 468 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 469 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 470 { 471 DrawRectangle (sx, sy, 2*d, 2*d); 472 } 473 } 474 } 475 if (object[0].ptype == 2) { /* cross */ 476 for (i = 0; i < object[0].Npts; i++) { 477 if (!(finite(x[i]) && finite(y[i]))) continue; 478 sx = x[i]*mxi + y[i]*mxj + bx; 479 sy = x[i]*myi + y[i]*myj + by; 480 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 481 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 482 { 483 DrawLine (sx - d, sy, sx + d, sy); 484 DrawLine (sx, sy - d, sx, sy + d); 485 } 486 } 487 } 488 if (object[0].ptype == 3) { /* x */ 489 for (i = 0; i < object[0].Npts; i++) { 490 if (!(finite(x[i]) && finite(y[i]))) continue; 491 sx = x[i]*mxi + y[i]*mxj + bx; 492 sy = x[i]*myi + y[i]*myj + by; 493 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 494 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 495 { 496 DrawLine (sx + d, sy - d, sx - d, sy + d); 497 DrawLine (sx - d, sy - d, sx + d, sy + d); 498 } 499 } 500 } 501 if (object[0].ptype == 4) { /* filled triangle */ 502 for (i = 0; i < object[0].Npts; i++) { 503 if (!(finite(x[i]) && finite(y[i]))) continue; 504 sx = x[i]*mxi + y[i]*mxj + bx; 505 sy = x[i]*myi + y[i]*myj + by; 506 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 507 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 508 { 509 /* 510 DrawLine (sx - d, sy + 0.58*d, sx + d, sy + 0.58*d); 511 DrawLine (sx + d, sy + 0.58*d, sx, sy - 1.15*d); 512 DrawLine (sx, sy - 1.15*d, sx - d, sy + 0.58*d); 513 */ 514 FillTriangle (sx - d, sy - 0.58*d, sx + d, sy - 0.58*d, sx, sy + 1.15*d); 515 } 516 } 517 } 518 if (object[0].ptype == 5) { /* open triangle */ 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 DrawLine (sx - d, sy - 0.58*d, sx + d, sy - 0.58*d); 527 DrawLine (sx + d, sy - 0.58*d, sx, sy + 1.15*d); 528 DrawLine (sx, sy + 1.15*d, sx - d, sy - 0.58*d); 529 } 530 } 531 } 532 if (object[0].ptype == 6) { /* Y */ 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 { 540 DrawLine (sx, sy, sx - d, sy + 0.58*d); 541 DrawLine (sx, sy, sx + d, sy + 0.58*d); 542 DrawLine (sx, sy, sx, sy - 1.15*d); 543 } 544 } 545 } 546 if (object[0].ptype == 7) { /* 0 */ 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 DrawCircle (sx, sy, d); 555 } 556 } 557 } 558 if (object[0].ptype == 8) { /* pentagon */ 559 for (i = 0; i < object[0].Npts; i++) { 560 if (!(finite(x[i]) && finite(y[i]))) continue; 561 sx = x[i]*mxi + y[i]*mxj + bx; 562 sy = x[i]*myi + y[i]*myj + by; 563 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 564 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 565 { 566 DrawLine (sx + 0.00*d, sy + 1.00*d, sx + 0.95*d, sy + 0.31*d); 567 DrawLine (sx + 0.95*d, sy + 0.31*d, sx + 0.58*d, sy - 0.81*d); 568 DrawLine (sx + 0.58*d, sy - 0.81*d, sx - 0.58*d, sy - 0.81*d); 569 DrawLine (sx - 0.58*d, sy - 0.81*d, sx - 0.95*d, sy + 0.31*d); 570 DrawLine (sx - 0.95*d, sy + 0.31*d, sx + 0.00*d, sy + 1.00*d); 571 } 572 } 573 } 574 if (object[0].ptype == 9) { /* pentagon */ 575 for (i = 0; i < object[0].Npts; i++) { 576 if (!(finite(x[i]) && finite(y[i]))) continue; 577 sx = x[i]*mxi + y[i]*mxj + bx; 578 sy = x[i]*myi + y[i]*myj + by; 579 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 580 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 581 { 582 DrawLine (sx - 1.00*d, sy + 0.00*d, sx - 0.50*d, sy + 0.87*d); 583 DrawLine (sx - 0.50*d, sy + 0.87*d, sx + 0.50*d, sy + 0.87*d); 584 DrawLine (sx + 0.50*d, sy + 0.87*d, sx + 1.00*d, sy + 0.00*d); 585 DrawLine (sx + 1.00*d, sy + 0.00*d, sx + 0.50*d, sy - 0.87*d); 586 DrawLine (sx + 0.50*d, sy - 0.87*d, sx - 0.50*d, sy - 0.87*d); 587 DrawLine (sx - 0.50*d, sy - 0.87*d, sx - 1.00*d, sy + 0.00*d); 588 } 589 } 590 } 591 if (object[0].ptype == 100) { 592 X0 = graph[0].axis[0].fx; 593 X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 594 Y0 = graph[0].axis[1].fy; 595 Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 596 597 for (i = 0; i + 1 < object[0].Npts; i+=2) { 598 if (!(finite(x[i]) && finite(y[i]))) continue; 599 sx1 = x[i]*mxi + y[i]*mxj + bx; 600 sy1 = x[i]*myi + y[i]*myj + by; 601 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 602 sy2 = x[i+1]*myi + y[i+1]*myj + by; 603 ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f); 604 } 605 } 606 } 309 int scaleSize = (object[0].size < 0); 310 int scaleColor = (object[0].color < 0); 311 312 ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size; 313 dz = 0.5 * (graphic->dx + graphic->dy) * 0.010; 314 x = object[0].x; y = object[0].y; z = object[0].z; 315 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 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 326 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 327 } 328 D = scaleSize ? dz*z[i] : ds; 329 FillRectangle (sx, sy, 2*D, 2*D); 330 } 331 } 332 } 333 if (object[0].ptype == 1) { /* open box */ 334 for (i = 0; i < object[0].Npts; i++) { 335 if (!(finite(x[i]) && finite(y[i]))) continue; 336 sx = x[i]*mxi + y[i]*mxj + bx; 337 sy = x[i]*myi + y[i]*myj + by; 338 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 339 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 340 { 341 if (scaleColor) { 342 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 343 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 344 } 345 D = scaleSize ? dz*z[i] : ds; 346 DrawRectangle (sx, sy, 2*D, 2*D); 347 } 348 } 349 } 350 if (object[0].ptype == 2) { /* cross */ 351 for (i = 0; i < object[0].Npts; i++) { 352 if (!(finite(x[i]) && finite(y[i]))) continue; 353 sx = x[i]*mxi + y[i]*mxj + bx; 354 sy = x[i]*myi + y[i]*myj + by; 355 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 356 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 357 { 358 if (scaleColor) { 359 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 360 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 361 } 362 D = scaleSize ? dz*z[i] : ds; 363 DrawLine (sx - D, sy, sx + D, sy); 364 DrawLine (sx, sy - D, sx, sy + D); 365 } 366 } 367 } 368 if (object[0].ptype == 3) { /* x */ 369 for (i = 0; i < object[0].Npts; i++) { 370 if (!(finite(x[i]) && finite(y[i]))) continue; 371 sx = x[i]*mxi + y[i]*mxj + bx; 372 sy = x[i]*myi + y[i]*myj + by; 373 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 374 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 375 { 376 if (scaleColor) { 377 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 378 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 379 } 380 D = scaleSize ? dz*z[i] : ds; 381 DrawLine (sx + D, sy - D, sx - D, sy + D); 382 DrawLine (sx - D, sy - D, sx + D, sy + D); 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 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 396 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 397 } 398 D = scaleSize ? dz*z[i] : ds; 399 FillTriangle (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 400 /* 401 DrawLine (sx - D, sy + 0.58*D, sx + D, sy + 0.58*D); 402 DrawLine (sx + D, sy + 0.58*D, sx, sy - 1.15*D); 403 DrawLine (sx, sy - 1.15*D, sx - D, sy + 0.58*D); 404 */ 405 } 406 } 407 } 408 if (object[0].ptype == 5) { /* 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 { 416 if (scaleColor) { 417 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 418 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 419 } 420 D = scaleSize ? dz*z[i] : ds; 421 DrawLine (sx - D, sy - 0.58*D, sx + D, sy - 0.58*D); 422 DrawLine (sx + D, sy - 0.58*D, sx, sy + 1.15*D); 423 DrawLine (sx, sy + 1.15*D, sx - D, sy - 0.58*D); 424 } 425 } 426 } 427 if (object[0].ptype == 6) { /* Y */ 428 for (i = 0; i < object[0].Npts; i++) { 429 if (!(finite(x[i]) && finite(y[i]))) continue; 430 sx = x[i]*mxi + y[i]*mxj + bx; 431 sy = x[i]*myi + y[i]*myj + by; 432 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 433 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 434 { 435 if (scaleColor) { 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, sy, sx - D, sy + 0.58*D); 441 DrawLine (sx, sy, sx + D, sy + 0.58*D); 442 DrawLine (sx, sy, sx, sy - 1.15*D); 443 } 444 } 445 } 446 if (object[0].ptype == 7) { /* 0 */ 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 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 456 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 457 } 458 D = scaleSize ? dz*z[i] : ds; 459 DrawCircle (sx, sy, D); 460 } 461 } 462 } 463 if (object[0].ptype == 8) { /* pentagon */ 464 for (i = 0; i < object[0].Npts; i++) { 465 if (!(finite(x[i]) && finite(y[i]))) continue; 466 sx = x[i]*mxi + y[i]*mxj + bx; 467 sy = x[i]*myi + y[i]*myj + by; 468 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 469 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 470 { 471 if (scaleColor) { 472 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 473 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 474 } 475 D = scaleSize ? dz*z[i] : ds; 476 DrawLine (sx + 0.00*D, sy + 1.00*D, sx + 0.95*D, sy + 0.31*D); 477 DrawLine (sx + 0.95*D, sy + 0.31*D, sx + 0.58*D, sy - 0.81*D); 478 DrawLine (sx + 0.58*D, sy - 0.81*D, sx - 0.58*D, sy - 0.81*D); 479 DrawLine (sx - 0.58*D, sy - 0.81*D, sx - 0.95*D, sy + 0.31*D); 480 DrawLine (sx - 0.95*D, sy + 0.31*D, sx + 0.00*D, sy + 1.00*D); 481 } 482 } 483 } 484 if (object[0].ptype == 9) { /* hexagon */ 485 for (i = 0; i < object[0].Npts; i++) { 486 if (!(finite(x[i]) && finite(y[i]))) continue; 487 sx = x[i]*mxi + y[i]*mxj + bx; 488 sy = x[i]*myi + y[i]*myj + by; 489 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 490 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 491 { 492 if (scaleColor) { 493 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 494 fprintf (f, "%4.2f %4.2f %4.2f setrgbcolor\n", pixel1[pixel], pixel2[pixel], pixel3[pixel]); 495 } 496 D = scaleSize ? dz*z[i] : ds; 497 DrawLine (sx - D, sy, sx - 0.50*D, sy + 0.87*D); 498 DrawLine (sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 499 DrawLine (sx + 0.50*D, sy + 0.87*D, sx + D, sy); 500 501 DrawLine (sx + D, sy, sx + 0.50*D, sy - 0.87*D); 502 DrawLine (sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 503 DrawLine (sx - 0.50*D, sy - 0.87*D, sx - D, sy); 504 } 505 } 506 } 507 if (object[0].ptype == 10) { /* 0 */ 508 for (i = 0; i < object[0].Npts; i++) { 509 if (!(finite(x[i]) && finite(y[i]))) continue; 510 sx = x[i]*mxi + y[i]*mxj + bx; 511 sy = x[i]*myi + y[i]*myj + by; 512 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 513 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 514 { 515 if (scaleColor) { 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 FillCircle (sx, sy, D); 521 } 522 } 523 } 524 if (object[0].ptype == 100) { /* connect a pair of points */ 525 double X0 = graph[0].axis[0].fx; 526 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 527 double Y0 = graph[0].axis[1].fy; 528 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 529 530 for (i = 0; i + 1 < object[0].Npts; i+=2) { 531 if (!(finite(x[i]) && finite(y[i]))) continue; 532 sx1 = x[i]*mxi + y[i]*mxj + bx; 533 sy1 = x[i]*myi + y[i]*myj + by; 534 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 535 sy2 = x[i+1]*myi + y[i+1]*myj + by; 536 ClipLinePS (sx1, sy1, sx2, sy2, X0, Y0, X1, Y1, f); 537 } 538 } 539 540 free (pixel1); 541 free (pixel2); 542 free (pixel3); 607 543 } 608 544 -
trunk/Ohana/src/kapa2/src/PSit.c
r29938 r31665 76 76 fprintf (f, " 0 exch rlineto -1 mul 0 rlineto closepath fill stroke } def\n"); 77 77 fprintf (f, "/C {0 360 arc stroke} def\n"); 78 fprintf (f, "/FC {0 360 arc fill stroke} def\n"); 79 fprintf (f, "/RGB {setrgbcolor} def\n"); 78 80 fprintf (f, "/L {newpath moveto lineto stroke} def\n\n"); 79 81 fprintf (f, "/TF {newpath moveto lineto lineto fill stroke} def\n\n"); -
trunk/Ohana/src/kapa2/src/SetChannel.c
r16011 r31665 39 39 Graphic *graphic; 40 40 Section *section; 41 KapaImageWidget *image;42 41 char colormap[256]; 43 42 int status; 44 43 44 KiiScanMessage (sock, "%s", colormap); 45 status = SetColormap (colormap); 46 if (!status) { 47 fprintf (stderr, "unknown colormap %s\n", colormap); 48 return (TRUE); 49 } 50 45 51 graphic = GetGraphic (); 46 52 section = GetActiveSection(); 47 if (section->image == NULL) { 48 section->image = InitImageWidget (); 49 SetSectionSizes (section); 53 if (section->image) { 54 // section->image = InitImageWidget (); 55 // SetSectionSizes (section); 56 // image = section->image; 57 SetColorScale (graphic, section->image); 58 if (!USE_XWINDOW) return (TRUE); 59 Remap (graphic, section->image); 50 60 } 51 image = section->image;52 61 53 KiiScanMessage (sock, "%s", colormap);54 55 status = SetColormap (colormap);56 if (!status) fprintf (stderr, "unknown colormap %s\n", colormap);57 58 SetColorScale (graphic, image);59 if (!USE_XWINDOW) return (TRUE);60 61 Remap (graphic, image);62 62 Refresh (); 63 63 XFlush (graphic[0].display); -
trunk/Ohana/src/kapa2/src/bDrawObjects.c
r31560 r31665 2 2 3 3 # define DrawLine(BUF,X1,Y1,X2,Y2) (bDrawLine (BUF, (X1), (Y1), (X2), (Y2))) 4 # define DrawCircle(BUF,X1,Y1,R) (bDrawCircle (BUF, (X1), (Y1), (R)))5 4 # define DrawRectangle(BUF,X,Y,dX,dY) (bDrawRectOpen (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX), (Y+0.5*dY))) 6 5 # define FillRectangle(BUF,X,Y,dX,dY) (bDrawRectFill (BUF, (X-0.5*dX), (Y-0.5*dY), (X+0.5*dX+1), (Y+0.5*dY+1))) 6 # define DrawCircle(BUF,X1,Y1,R) (bDrawCircle (BUF, (X1), (Y1), (R))) 7 # define FillCircle(BUF,X1,Y1,R) (bDrawCircleFill (BUF, (X1), (Y1), (R))) 7 8 # define FillTriangle(BUF,X1,Y1,dX,dY) (bDrawTriFill (BUF, (X1), (Y1), (dX), (dY))) 8 9 # define OpenTriangle(BUF,X1,Y1,X2,Y2,X3,Y3) (bDrawTriOpen (BUF, (X1), (Y1), (X2), (Y2), (X3), (Y3))) … … 260 261 float *x, *y, *z; 261 262 double mxi, mxj, myi, myj, bxi, bxj, byi, byj, bx, by; 262 int sx, sy, sx1, sy1, sx2, sy2, d, D; 263 int sx, sy, sx1, sy1, sx2, sy2, ds, dz, D; 264 unsigned char *pixel1, *pixel2, *pixel3; 263 265 264 266 mxi = graph[0].axis[0].dfx / (object[0].x1 - object[0].x0); … … 275 277 by = byi + byj; 276 278 277 /* below here, code is identical with DrawObjects */ 279 Graphic *graphic = GetGraphic(); 280 281 ALLOCATE (pixel1, unsigned char, graphic[0].Npixels); 282 ALLOCATE (pixel2, unsigned char, graphic[0].Npixels); 283 ALLOCATE (pixel3, unsigned char, graphic[0].Npixels); 284 285 /** cmap[i].pixel must be defined even if X is not used **/ 286 for (i = 0; i < graphic[0].Npixels; i++) { /* set up pixel array */ 287 pixel1[i] = graphic[0].cmap[i].red >> 8; 288 pixel2[i] = graphic[0].cmap[i].green >> 8; 289 pixel3[i] = graphic[0].cmap[i].blue >> 8; 290 } 291 278 292 /**** points are scaled by object.z ***/ 279 if (object[0].size < 0) { 280 d = 0.5 * (graphic->dx + graphic->dy) * 0.01; 281 x = object[0].x; y = object[0].y; z = object[0].z; 282 if (object[0].ptype == 0) { /* filled box */ 283 for (i = 0; i < object[0].Npts; i++) { 284 if (!(finite(x[i]) && finite(y[i]))) continue; 285 sx = x[i]*mxi + y[i]*mxj + bx; 286 sy = x[i]*myi + y[i]*myj + by; 287 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 288 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 289 { 290 D = d*z[i]; 291 FillRectangle (buffer, sx, sy, 2*D, 2*D); 292 } 293 } 294 } 295 if (object[0].ptype == 1) { /* open box */ 296 for (i = 0; i < object[0].Npts; i++) { 297 if (!(finite(x[i]) && finite(y[i]))) continue; 298 sx = x[i]*mxi + y[i]*mxj + bx; 299 sy = x[i]*myi + y[i]*myj + by; 300 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 301 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 302 { 303 D = d*z[i]; 304 DrawRectangle (buffer, sx, sy, 2*D, 2*D); 305 } 306 } 307 } 308 if (object[0].ptype == 2) { /* cross */ 309 for (i = 0; i < object[0].Npts; i++) { 310 if (!(finite(x[i]) && finite(y[i]))) continue; 311 sx = x[i]*mxi + y[i]*mxj + bx; 312 sy = x[i]*myi + y[i]*myj + by; 313 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 314 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 315 { 316 D = d*z[i]; 317 DrawLine (buffer, sx - D, sy, sx + D, sy); 318 DrawLine (buffer, sx, sy - D, sx, sy + D); 319 } 320 } 321 } 322 if (object[0].ptype == 3) { /* x */ 323 for (i = 0; i < object[0].Npts; i++) { 324 if (!(finite(x[i]) && finite(y[i]))) continue; 325 sx = x[i]*mxi + y[i]*mxj + bx; 326 sy = x[i]*myi + y[i]*myj + by; 327 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 328 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 329 { 330 D = d*z[i]; 331 DrawLine (buffer, sx + D, sy - D, sx - D, sy + D); 332 DrawLine (buffer, sx - D, sy - D, sx + D, sy + D); 333 } 334 } 335 } 336 if (object[0].ptype == 4) { /* filled triangle */ 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 { 344 D = d*z[i]; 345 // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 346 FillTriangle (buffer, sx, sy + 0.58*D, D, -1.73*D); 347 } 348 } 349 } 350 if (object[0].ptype == 5) { /* open triangle */ 351 for (i = 0; i < object[0].Npts; i++) { 352 if (!(finite(x[i]) && finite(y[i]))) continue; 353 sx = x[i]*mxi + y[i]*mxj + bx; 354 sy = x[i]*myi + y[i]*myj + by; 355 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 356 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 357 { 358 D = d*z[i]; 359 OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D); 360 } 361 } 362 } 363 if (object[0].ptype == 6) { /* Y */ 364 for (i = 0; i < object[0].Npts; i++) { 365 if (!(finite(x[i]) && finite(y[i]))) continue; 366 sx = x[i]*mxi + y[i]*mxj + bx; 367 sy = x[i]*myi + y[i]*myj + by; 368 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 369 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 370 { 371 D = d*z[i]; 372 DrawLine (buffer, sx, sy, sx - D, sy - 0.58*D); 373 DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D); 374 DrawLine (buffer, sx, sy, sx, sy + 1.15*D); 375 } 376 } 377 } 378 if (object[0].ptype == 7) { /* 0 */ 379 for (i = 0; i < object[0].Npts; i++) { 380 if (!(finite(x[i]) && finite(y[i]))) continue; 381 sx = x[i]*mxi + y[i]*mxj + bx; 382 sy = x[i]*myi + y[i]*myj + by; 383 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 384 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 385 { 386 D = d*z[i]; 387 DrawCircle (buffer, sx, sy, D); 388 } 389 } 390 } 391 if (object[0].ptype == 8) { /* pentagon */ 392 for (i = 0; i < object[0].Npts; i++) { 393 if (!(finite(x[i]) && finite(y[i]))) continue; 394 sx = x[i]*mxi + y[i]*mxj + bx; 395 sy = x[i]*myi + y[i]*myj + by; 396 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 397 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 398 { 399 D = d*z[i]; 400 DrawLine (buffer, sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 401 DrawLine (buffer, sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 402 DrawLine (buffer, sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 403 DrawLine (buffer, sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 404 DrawLine (buffer, sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 405 } 406 } 407 } 408 if (object[0].ptype == 9) { /* hexagon */ 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 D = d*z[i]; 417 DrawLine (buffer, sx - D, sy, sx - 0.50*D, sy + 0.87*D); 418 DrawLine (buffer, sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 419 DrawLine (buffer, sx + 0.50*D, sy + 0.87*D, sx + D, sy); 420 DrawLine (buffer, sx + D, sy, sx + 0.50*D, sy - 0.87*D); 421 DrawLine (buffer, sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 422 DrawLine (buffer, sx - 0.50*D, sy - 0.87*D, sx - D, sy); 423 } 424 } 425 } 426 if (object[0].ptype == 100) { /* connect a pair of points */ 427 428 double X0 = graph[0].axis[0].fx; 429 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 430 double Y0 = graph[0].axis[1].fy; 431 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 432 433 for (i = 0; i + 1 < object[0].Npts; i+=2) { 434 if (!(finite(x[i]) && finite(y[i]))) continue; 435 sx1 = x[i]*mxi + y[i]*mxj + bx; 436 sy1 = x[i]*myi + y[i]*myj + by; 437 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 438 sy2 = x[i+1]*myi + y[i+1]*myj + by; 439 bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 440 } 441 } 442 } else { 443 d = (int)(object[0].size * hypot((float)graphic->dx, (float)graphic->dy) * 0.003); 444 x = object[0].x; y = object[0].y; 445 446 if (object[0].ptype == 0) { /* filled box */ 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 FillRectangle (buffer, sx, sy, 2*d, 2*d); 455 } 456 } 457 } 458 if (object[0].ptype == 1) { /* open box */ 459 for (i = 0; i < object[0].Npts; i++) { 460 if (!(finite(x[i]) && finite(y[i]))) continue; 461 sx = x[i]*mxi + y[i]*mxj + bx; 462 sy = x[i]*myi + y[i]*myj + by; 463 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 464 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 465 { 466 DrawRectangle (buffer, sx, sy, 2*d, 2*d); 467 } 468 } 469 } 470 if (object[0].ptype == 2) { /* cross : OK */ 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 { 478 DrawLine (buffer, sx - d, sy, sx + d, sy); 479 DrawLine (buffer, sx, sy - d, sx, sy + d); 480 } 481 } 482 } 483 if (object[0].ptype == 3) { /* x */ 484 for (i = 0; i < object[0].Npts; i++) { 485 if (!(finite(x[i]) && finite(y[i]))) continue; 486 sx = x[i]*mxi + y[i]*mxj + bx; 487 sy = x[i]*myi + y[i]*myj + by; 488 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 489 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 490 { 491 DrawLine (buffer, sx + d, sy - d, sx - d, sy + d); 492 DrawLine (buffer, sx - d, sy - d, sx + d, sy + d); 493 } 494 } 495 } 496 if (object[0].ptype == 4) { /* filled triangle */ 497 for (i = 0; i < object[0].Npts; i++) { 498 if (!(finite(x[i]) && finite(y[i]))) continue; 499 sx = x[i]*mxi + y[i]*mxj + bx; 500 sy = x[i]*myi + y[i]*myj + by; 501 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 502 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 503 { 504 FillTriangle (buffer, sx, sy + 0.58*d, d, -1.73*d); 505 } 506 } 507 } 508 if (object[0].ptype == 5) { /* open triangle */ 509 for (i = 0; i < object[0].Npts; i++) { 510 if (!(finite(x[i]) && finite(y[i]))) continue; 511 sx = x[i]*mxi + y[i]*mxj + bx; 512 sy = x[i]*myi + y[i]*myj + by; 513 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 514 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 515 { 516 OpenTriangle (buffer, sx - d, sy + 0.58*d, sx + d, sy + 0.58*d, sx, sy - 1.15*d); 517 } 518 } 519 } 520 if (object[0].ptype == 6) { /* Y */ 521 for (i = 0; i < object[0].Npts; i++) { 522 if (!(finite(x[i]) && finite(y[i]))) continue; 523 sx = x[i]*mxi + y[i]*mxj + bx; 524 sy = x[i]*myi + y[i]*myj + by; 525 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 526 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 527 { 528 DrawLine (buffer, sx, sy, sx - d, sy - 0.58*d); 529 DrawLine (buffer, sx, sy, sx + d, sy - 0.58*d); 530 DrawLine (buffer, sx, sy, sx, sy + 1.15*d); 531 } 532 } 533 } 534 if (object[0].ptype == 7) { /* 0 */ 535 for (i = 0; i < object[0].Npts; i++) { 536 if (!(finite(x[i]) && finite(y[i]))) continue; 537 sx = x[i]*mxi + y[i]*mxj + bx; 538 sy = x[i]*myi + y[i]*myj + by; 539 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 540 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 541 { 542 DrawCircle (buffer, sx, sy, d); 543 } 544 } 545 } 546 if (object[0].ptype == 8) { /* pentagon */ 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 DrawLine (buffer, sx + 0.00*d, sy - 1.00*d, sx + 0.95*d, sy - 0.31*d); 555 DrawLine (buffer, sx + 0.95*d, sy - 0.31*d, sx + 0.58*d, sy + 0.81*d); 556 DrawLine (buffer, sx + 0.58*d, sy + 0.81*d, sx - 0.58*d, sy + 0.81*d); 557 DrawLine (buffer, sx - 0.58*d, sy + 0.81*d, sx - 0.95*d, sy - 0.31*d); 558 DrawLine (buffer, sx - 0.95*d, sy - 0.31*d, sx + 0.00*d, sy - 1.00*d); 559 } 560 } 561 } 562 if (object[0].ptype == 9) { /* pentagon */ 563 for (i = 0; i < object[0].Npts; i++) { 564 if (!(finite(x[i]) && finite(y[i]))) continue; 565 sx = x[i]*mxi + y[i]*mxj + bx; 566 sy = x[i]*myi + y[i]*myj + by; 567 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 568 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 569 { 570 DrawLine (buffer, sx - 1.00*d, sy + 0.00*d, sx - 0.50*d, sy + 0.87*d); 571 DrawLine (buffer, sx - 0.50*d, sy + 0.87*d, sx + 0.50*d, sy + 0.87*d); 572 DrawLine (buffer, sx + 0.50*d, sy + 0.87*d, sx + 1.00*d, sy + 0.00*d); 573 DrawLine (buffer, sx + 1.00*d, sy + 0.00*d, sx + 0.50*d, sy - 0.87*d); 574 DrawLine (buffer, sx + 0.50*d, sy - 0.87*d, sx - 0.50*d, sy - 0.87*d); 575 DrawLine (buffer, sx - 0.50*d, sy - 0.87*d, sx - 1.00*d, sy + 0.00*d); 576 } 577 } 578 } 579 if (object[0].ptype == 100) { 580 581 double X0 = graph[0].axis[0].fx; 582 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 583 double Y0 = graph[0].axis[1].fy; 584 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 585 586 for (i = 0; i + 1 < object[0].Npts; i+=2) { 587 if (!(finite(x[i]) && finite(y[i]))) continue; 588 sx1 = x[i]*mxi + y[i]*mxj + bx; 589 sy1 = x[i]*myi + y[i]*myj + by; 590 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 591 sy2 = x[i+1]*myi + y[i+1]*myj + by; 592 bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 593 } 594 } 595 } 293 int scaleSize = (object[0].size < 0); 294 int scaleColor = (object[0].color < 0); 295 296 ds = 0.5 * (graphic->dx + graphic->dy) * 0.003 * object[0].size; 297 dz = 0.5 * (graphic->dx + graphic->dy) * 0.010; 298 x = object[0].x; y = object[0].y; z = object[0].z; 299 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 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 310 buffer->bColor_R = pixel1[pixel]; 311 buffer->bColor_G = pixel2[pixel]; 312 buffer->bColor_B = pixel3[pixel]; 313 } 314 D = scaleSize ? dz*z[i] : ds; 315 FillRectangle (buffer, sx, sy, 2*D, 2*D); 316 } 317 } 318 } 319 if (object[0].ptype == 1) { /* open box */ 320 for (i = 0; i < object[0].Npts; i++) { 321 if (!(finite(x[i]) && finite(y[i]))) continue; 322 sx = x[i]*mxi + y[i]*mxj + bx; 323 sy = x[i]*myi + y[i]*myj + by; 324 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 325 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 326 { 327 if (scaleColor) { 328 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 329 buffer->bColor_R = pixel1[pixel]; 330 buffer->bColor_G = pixel2[pixel]; 331 buffer->bColor_B = pixel3[pixel]; 332 } 333 D = scaleSize ? dz*z[i] : ds; 334 DrawRectangle (buffer, sx, sy, 2*D, 2*D); 335 } 336 } 337 } 338 if (object[0].ptype == 2) { /* cross */ 339 for (i = 0; i < object[0].Npts; i++) { 340 if (!(finite(x[i]) && finite(y[i]))) continue; 341 sx = x[i]*mxi + y[i]*mxj + bx; 342 sy = x[i]*myi + y[i]*myj + by; 343 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 344 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 345 { 346 if (scaleColor) { 347 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 348 buffer->bColor_R = pixel1[pixel]; 349 buffer->bColor_G = pixel2[pixel]; 350 buffer->bColor_B = pixel3[pixel]; 351 } 352 D = scaleSize ? dz*z[i] : ds; 353 DrawLine (buffer, sx - D, sy, sx + D, sy); 354 DrawLine (buffer, sx, sy - D, sx, sy + D); 355 } 356 } 357 } 358 if (object[0].ptype == 3) { /* x */ 359 for (i = 0; i < object[0].Npts; i++) { 360 if (!(finite(x[i]) && finite(y[i]))) continue; 361 sx = x[i]*mxi + y[i]*mxj + bx; 362 sy = x[i]*myi + y[i]*myj + by; 363 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 364 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 365 { 366 if (scaleColor) { 367 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 368 buffer->bColor_R = pixel1[pixel]; 369 buffer->bColor_G = pixel2[pixel]; 370 buffer->bColor_B = pixel3[pixel]; 371 } 372 D = scaleSize ? dz*z[i] : ds; 373 DrawLine (buffer, sx + D, sy - D, sx - D, sy + D); 374 DrawLine (buffer, sx - D, sy - D, sx + D, sy + D); 375 } 376 } 377 } 378 if (object[0].ptype == 4) { /* filled triangle */ 379 for (i = 0; i < object[0].Npts; i++) { 380 if (!(finite(x[i]) && finite(y[i]))) continue; 381 sx = x[i]*mxi + y[i]*mxj + bx; 382 sy = x[i]*myi + y[i]*myj + by; 383 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 384 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 385 { 386 if (scaleColor) { 387 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 388 buffer->bColor_R = pixel1[pixel]; 389 buffer->bColor_G = pixel2[pixel]; 390 buffer->bColor_B = pixel3[pixel]; 391 } 392 D = scaleSize ? dz*z[i] : ds; 393 // FillTriangle (buffer, sx - D, sy - 0.58*D, sx + D, sy - 0.58*D, sx, sy + 1.15*D); 394 FillTriangle (buffer, sx, sy + 0.58*D, D, -1.73*D); 395 } 396 } 397 } 398 if (object[0].ptype == 5) { /* open triangle */ 399 for (i = 0; i < object[0].Npts; i++) { 400 if (!(finite(x[i]) && finite(y[i]))) continue; 401 sx = x[i]*mxi + y[i]*mxj + bx; 402 sy = x[i]*myi + y[i]*myj + by; 403 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 404 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 405 { 406 if (scaleColor) { 407 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 408 buffer->bColor_R = pixel1[pixel]; 409 buffer->bColor_G = pixel2[pixel]; 410 buffer->bColor_B = pixel3[pixel]; 411 } 412 D = scaleSize ? dz*z[i] : ds; 413 OpenTriangle (buffer, sx - D, sy + 0.58*D, sx + D, sy + 0.58*D, sx, sy - 1.15*D); 414 } 415 } 416 } 417 if (object[0].ptype == 6) { /* Y */ 418 for (i = 0; i < object[0].Npts; i++) { 419 if (!(finite(x[i]) && finite(y[i]))) continue; 420 sx = x[i]*mxi + y[i]*mxj + bx; 421 sy = x[i]*myi + y[i]*myj + by; 422 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 423 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 424 { 425 if (scaleColor) { 426 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 427 buffer->bColor_R = pixel1[pixel]; 428 buffer->bColor_G = pixel2[pixel]; 429 buffer->bColor_B = pixel3[pixel]; 430 } 431 D = scaleSize ? dz*z[i] : ds; 432 DrawLine (buffer, sx, sy, sx - D, sy - 0.58*D); 433 DrawLine (buffer, sx, sy, sx + D, sy - 0.58*D); 434 DrawLine (buffer, sx, sy, sx, sy + 1.15*D); 435 } 436 } 437 } 438 if (object[0].ptype == 7) { /* 0 */ 439 for (i = 0; i < object[0].Npts; i++) { 440 if (!(finite(x[i]) && finite(y[i]))) continue; 441 sx = x[i]*mxi + y[i]*mxj + bx; 442 sy = x[i]*myi + y[i]*myj + by; 443 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 444 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 445 { 446 if (scaleColor) { 447 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 448 buffer->bColor_R = pixel1[pixel]; 449 buffer->bColor_G = pixel2[pixel]; 450 buffer->bColor_B = pixel3[pixel]; 451 } 452 D = scaleSize ? dz*z[i] : ds; 453 DrawCircle (buffer, sx, sy, D); 454 } 455 } 456 } 457 if (object[0].ptype == 8) { /* pentagon */ 458 for (i = 0; i < object[0].Npts; i++) { 459 if (!(finite(x[i]) && finite(y[i]))) continue; 460 sx = x[i]*mxi + y[i]*mxj + bx; 461 sy = x[i]*myi + y[i]*myj + by; 462 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 463 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 464 { 465 if (scaleColor) { 466 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 467 buffer->bColor_R = pixel1[pixel]; 468 buffer->bColor_G = pixel2[pixel]; 469 buffer->bColor_B = pixel3[pixel]; 470 } 471 D = scaleSize ? dz*z[i] : ds; 472 DrawLine (buffer, sx + 0.00*D, sy - 1.00*D, sx + 0.95*D, sy - 0.31*D); 473 DrawLine (buffer, sx + 0.95*D, sy - 0.31*D, sx + 0.58*D, sy + 0.81*D); 474 DrawLine (buffer, sx + 0.58*D, sy + 0.81*D, sx - 0.58*D, sy + 0.81*D); 475 DrawLine (buffer, sx - 0.58*D, sy + 0.81*D, sx - 0.95*D, sy - 0.31*D); 476 DrawLine (buffer, sx - 0.95*D, sy - 0.31*D, sx + 0.00*D, sy - 1.00*D); 477 } 478 } 479 } 480 if (object[0].ptype == 9) { /* hexagon */ 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 { 488 if (scaleColor) { 489 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 490 buffer->bColor_R = pixel1[pixel]; 491 buffer->bColor_G = pixel2[pixel]; 492 buffer->bColor_B = pixel3[pixel]; 493 } 494 D = scaleSize ? dz*z[i] : ds; 495 DrawLine (buffer, sx - D, sy, sx - 0.50*D, sy + 0.87*D); 496 DrawLine (buffer, sx - 0.50*D, sy + 0.87*D, sx + 0.50*D, sy + 0.87*D); 497 DrawLine (buffer, sx + 0.50*D, sy + 0.87*D, sx + D, sy); 498 DrawLine (buffer, sx + D, sy, sx + 0.50*D, sy - 0.87*D); 499 DrawLine (buffer, sx + 0.50*D, sy - 0.87*D, sx - 0.50*D, sy - 0.87*D); 500 DrawLine (buffer, sx - 0.50*D, sy - 0.87*D, sx - D, sy); 501 } 502 } 503 } 504 if (object[0].ptype == 10) { /* filled circle */ 505 for (i = 0; i < object[0].Npts; i++) { 506 if (!(finite(x[i]) && finite(y[i]))) continue; 507 sx = x[i]*mxi + y[i]*mxj + bx; 508 sy = x[i]*myi + y[i]*myj + by; 509 if ((sx > graph[0].axis[0].fx) && (sx < graph[0].axis[0].fx + graph[0].axis[0].dfx) && 510 (sy < graph[0].axis[1].fy) && (sy > graph[0].axis[1].fy + graph[0].axis[1].dfy)) 511 { 512 if (scaleColor) { 513 int pixel = MIN (graphic->Npixels - 2, MAX (0, z[i]*(graphic->Npixels - 1))); 514 buffer->bColor_R = pixel1[pixel]; 515 buffer->bColor_G = pixel2[pixel]; 516 buffer->bColor_B = pixel3[pixel]; 517 } 518 D = scaleSize ? dz*z[i] : ds; 519 FillCircle (buffer, sx, sy, D); 520 } 521 } 522 } 523 if (object[0].ptype == 100) { /* connect a pair of points */ 524 525 double X0 = graph[0].axis[0].fx; 526 double X1 = graph[0].axis[0].fx + graph[0].axis[0].dfx; 527 double Y0 = graph[0].axis[1].fy; 528 double Y1 = graph[0].axis[1].fy + graph[0].axis[1].dfy; 529 530 for (i = 0; i + 1 < object[0].Npts; i+=2) { 531 if (!(finite(x[i]) && finite(y[i]))) continue; 532 sx1 = x[i]*mxi + y[i]*mxj + bx; 533 sy1 = x[i]*myi + y[i]*myj + by; 534 sx2 = x[i+1]*mxi + y[i+1]*mxj + bx; 535 sy2 = x[i+1]*myi + y[i+1]*myj + by; 536 bDrawClipLine (buffer, sx1, sy1, sx2, sy2, X0, Y0, X1, Y1); 537 } 538 } 539 540 free (pixel1); 541 free (pixel2); 542 free (pixel3); 596 543 } 597 544
Note:
See TracChangeset
for help on using the changeset viewer.
