- Timestamp:
- Jan 3, 2013, 1:32:43 PM (12 years ago)
- Location:
- branches/Rappture 1.2/packages/vizservers/vtkvis
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/Rappture 1.2/packages/vizservers/vtkvis/RpVtkRenderer.cpp
r3224 r3230 26 26 #ifdef USE_CUSTOM_AXES 27 27 #include "vtkRpCubeAxesActor.h" 28 #include "vtkRpCubeAxesActor2D.h"29 28 #else 30 29 #include <vtkCubeAxesActor.h> 31 #include <vtkCubeAxesActor2D.h>32 30 #endif 33 31 #include <vtkDataSetReader.h> … … 423 421 { 424 422 TRACE("Resetting axes"); 425 if (_cubeAxesActor == NULL 426 #ifndef USE_VTK6 427 || _cubeAxesActor2D == NULL 428 #endif 429 ) { 423 424 if (_cubeAxesActor == NULL) { 430 425 initAxes(); 431 426 } 427 432 428 if (_cameraMode == IMAGE) { 433 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)434 429 _cubeAxesActor->SetUse2DMode(1); 435 #else436 if (_renderer->HasViewProp(_cubeAxesActor)) {437 TRACE("Removing 3D axes");438 _renderer->RemoveViewProp(_cubeAxesActor);439 }440 if (!_renderer->HasViewProp(_cubeAxesActor2D)) {441 TRACE("Adding 2D axes");442 _renderer->AddViewProp(_cubeAxesActor2D);443 }444 #endif445 430 } else { 446 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)447 431 _cubeAxesActor->SetUse2DMode(0); 448 #else449 if (_renderer->HasViewProp(_cubeAxesActor2D)) {450 TRACE("Removing 2D axes");451 _renderer->RemoveViewProp(_cubeAxesActor2D);452 }453 if (!_renderer->HasViewProp(_cubeAxesActor)) {454 TRACE("Adding 3D axes");455 _renderer->AddViewProp(_cubeAxesActor);456 }457 #endif458 432 } 459 433 … … 461 435 return; 462 436 } 463 464 double unscaledBounds[6];465 collectUnscaledBounds(unscaledBounds, false);466 437 467 438 if (bounds == NULL) { … … 469 440 collectBounds(newBounds, false); 470 441 471 double sx = (newBounds[1] == newBounds[0]) ? 1.0 : (unscaledBounds[1] - unscaledBounds[0]) / (newBounds[1] - newBounds[0]); 472 double sy = (newBounds[3] == newBounds[2]) ? 1.0 : (unscaledBounds[3] - unscaledBounds[2]) / (newBounds[3] - newBounds[2]); 473 double sz = (newBounds[5] == newBounds[4]) ? 1.0 : (unscaledBounds[5] - unscaledBounds[4]) / (newBounds[5] - newBounds[4]); 474 475 setAxisBounds(newBounds); 476 setAxisScale(sx, sy, sz); 442 setAxesBounds(newBounds); 477 443 } else { 478 double sx = (bounds[1] == bounds[0]) ? 1.0 : (unscaledBounds[1] - unscaledBounds[0]) / (bounds[1] - bounds[0]); 479 double sy = (bounds[3] == bounds[2]) ? 1.0 : (unscaledBounds[3] - unscaledBounds[2]) / (bounds[3] - bounds[2]); 480 double sz = (bounds[5] == bounds[4]) ? 1.0 : (unscaledBounds[5] - unscaledBounds[4]) / (bounds[5] - bounds[4]); 481 482 setAxisBounds(bounds); 483 setAxisScale(sx, sy, sz); 484 } 444 setAxesBounds(bounds); 445 } 446 447 setAxesRanges(); 485 448 } 486 449 … … 491 454 * the axes are drawn 492 455 */ 493 void Renderer::setAx isBounds(double bounds[6])456 void Renderer::setAxesBounds(double bounds[6]) 494 457 { 495 458 _cubeAxesActor->SetBounds(bounds); 459 496 460 TRACE("Axis bounds: %g %g %g %g %g %g", 497 461 bounds[0], … … 501 465 bounds[4], 502 466 bounds[5]); 503 } 504 505 /** 506 * \brief Set scaling factors to convert world coordinates to axis 507 * label values in X, Y, Z 508 */ 509 void Renderer::setAxisScale(double sx, double sy, double sz) 510 { 467 468 _needsRedraw = true; 469 } 470 471 void Renderer::setAxesAutoRange(bool state) 472 { 473 _axesRangeMode[X_AXIS] = state ? RANGE_AUTO : RANGE_EXPLICIT; 474 _axesRangeMode[Y_AXIS] = state ? RANGE_AUTO : RANGE_EXPLICIT; 475 _axesRangeMode[Z_AXIS] = state ? RANGE_AUTO : RANGE_EXPLICIT; 476 477 TRACE("Set axes range to %s", (state ? "auto" : "explicit")); 478 479 setAxesRanges(); 480 481 _needsRedraw = true; 482 } 483 484 void Renderer::setAxisAutoRange(Axis axis, bool state) 485 { 486 _axesRangeMode[axis] = state ? RANGE_AUTO : RANGE_EXPLICIT; 487 488 TRACE("Set axis %d range to %s", axis, (state ? "auto" : "explicit")); 489 490 setAxesRanges(); 491 492 _needsRedraw = true; 493 } 494 495 void Renderer::setAxesRange(double min, double max) 496 { 497 setAxisRange(X_AXIS, min, max); 498 setAxisRange(Y_AXIS, min, max); 499 setAxisRange(Z_AXIS, min, max); 500 } 501 502 void Renderer::setAxisRange(Axis axis, double min, double max) 503 { 504 switch (axis) { 505 case X_AXIS: 506 _axesRangeMode[X_AXIS] = RANGE_EXPLICIT; 507 _cubeAxesActor->SetXAxisRange(min, max); 508 break; 509 case Y_AXIS: 510 _axesRangeMode[Y_AXIS] = RANGE_EXPLICIT; 511 _cubeAxesActor->SetYAxisRange(min, max); 512 break; 513 case Z_AXIS: 514 _axesRangeMode[Z_AXIS] = RANGE_EXPLICIT; 515 _cubeAxesActor->SetZAxisRange(min, max); 516 break; 517 default: 518 break; 519 } 520 521 TRACE("Set axis %d range to: %g, %g", axis, min, max); 522 523 _needsRedraw = true; 524 } 525 526 void Renderer::setAxesRanges() 527 { 528 computeAxesScale(); 529 511 530 double bounds[6]; 512 531 _cubeAxesActor->GetBounds(bounds); 532 513 533 double ranges[6]; 514 ranges[0] = bounds[0] * sx; 515 ranges[1] = bounds[1] * sx; 516 ranges[2] = bounds[2] * sy; 517 ranges[3] = bounds[3] * sy; 518 ranges[4] = bounds[4] * sz; 519 ranges[5] = bounds[5] * sz; 520 _cubeAxesActor->SetXAxisRange(&bounds[0]); 521 _cubeAxesActor->SetYAxisRange(&bounds[2]); 522 _cubeAxesActor->SetZAxisRange(&bounds[4]); 523 TRACE("Setting axis scale to: %g, %g, %g", sx, sy, sz); 534 if (_axesRangeMode[X_AXIS] != RANGE_EXPLICIT) { 535 ranges[0] = bounds[0] * _axesScale[X_AXIS]; 536 ranges[1] = bounds[1] * _axesScale[X_AXIS]; 537 _cubeAxesActor->SetXAxisRange(&ranges[0]); 538 } else { 539 _cubeAxesActor->GetXAxisRange(&ranges[0]); 540 } 541 if (_axesRangeMode[Y_AXIS] != RANGE_EXPLICIT) { 542 ranges[2] = bounds[2] * _axesScale[Y_AXIS]; 543 ranges[3] = bounds[3] * _axesScale[Y_AXIS]; 544 _cubeAxesActor->SetYAxisRange(&ranges[2]); 545 } else { 546 _cubeAxesActor->GetYAxisRange(&ranges[2]); 547 } 548 549 if (_axesRangeMode[Z_AXIS] != RANGE_EXPLICIT) { 550 ranges[4] = bounds[4] * _axesScale[Z_AXIS]; 551 ranges[5] = bounds[5] * _axesScale[Z_AXIS]; 552 _cubeAxesActor->SetZAxisRange(&ranges[4]); 553 } else { 554 _cubeAxesActor->GetZAxisRange(&ranges[4]); 555 } 556 524 557 TRACE("Axis ranges: %g %g %g %g %g %g", 525 558 ranges[0], … … 529 562 ranges[4], 530 563 ranges[5]); 564 565 _needsRedraw = true; 566 } 567 568 void Renderer::computeAxesScale() 569 { 570 if (_axesRangeMode[X_AXIS] != RANGE_AUTO && 571 _axesRangeMode[Y_AXIS] != RANGE_AUTO && 572 _axesRangeMode[Z_AXIS] != RANGE_AUTO) 573 return; 574 575 double bounds[6]; 576 if (_cameraMode == IMAGE) { 577 collectBounds(bounds, false); 578 } else 579 _cubeAxesActor->GetBounds(bounds); 580 581 double unscaledBounds[6]; 582 collectUnscaledBounds(unscaledBounds, false); 583 584 if (_axesRangeMode[X_AXIS] == RANGE_AUTO) { 585 double sx = (bounds[1] == bounds[0]) ? 1.0 : (unscaledBounds[1] - unscaledBounds[0]) / (bounds[1] - bounds[0]); 586 _axesScale[X_AXIS] = sx; 587 TRACE("Setting X axis scale to: %g", sx); 588 } 589 if (_axesRangeMode[Y_AXIS] == RANGE_AUTO) { 590 double sy = (bounds[3] == bounds[2]) ? 1.0 : (unscaledBounds[3] - unscaledBounds[2]) / (bounds[3] - bounds[2]); 591 _axesScale[Y_AXIS] = sy; 592 TRACE("Setting Y axis scale to: %g", sy); 593 } 594 if (_axesRangeMode[Y_AXIS] == RANGE_AUTO) { 595 double sz = (bounds[5] == bounds[4]) ? 1.0 : (unscaledBounds[5] - unscaledBounds[4]) / (bounds[5] - bounds[4]); 596 _axesScale[Z_AXIS] = sz; 597 TRACE("Setting Z axis scale to: %g", sz); 598 } 599 } 600 601 /** 602 * \brief Set scaling factor to convert world coordinates to axis 603 * label values in X, Y, Z 604 */ 605 void Renderer::setAxesScale(double scale) 606 { 607 _axesRangeMode[X_AXIS] = RANGE_SCALE_BOUNDS; 608 _axesRangeMode[Y_AXIS] = RANGE_SCALE_BOUNDS; 609 _axesRangeMode[Z_AXIS] = RANGE_SCALE_BOUNDS; 610 611 _axesScale[X_AXIS] = scale; 612 _axesScale[Y_AXIS] = scale; 613 _axesScale[Z_AXIS] = scale; 614 615 TRACE("Setting axes scale to: %g", scale); 616 617 setAxesRanges(); 618 } 619 620 void Renderer::setAxisScale(Axis axis, double scale) 621 { 622 _axesRangeMode[axis] = RANGE_SCALE_BOUNDS; 623 _axesScale[axis] = scale; 624 625 TRACE("Setting axis %d scale to: %g", axis, scale); 626 627 setAxesRanges(); 628 } 629 630 /** 631 * \brief Set an origin point within the axes bounds where the axes will intersect 632 * 633 * \param x X coordinate of origin 634 * \param y Y coordinate of origin 635 * \param z Z coordinate of origin 636 * \param useCustom Flag indicating if custom origin is to be used/enabled 637 */ 638 void Renderer::setAxesOrigin(double x, double y, double z, bool useCustom) 639 { 640 _cubeAxesActor->SetAxisOrigin(x, y, z); 641 _cubeAxesActor->SetUseAxisOrigin((useCustom ? 1 : 0)); 642 643 _needsRedraw = true; 531 644 } 532 645 … … 549 662 _cubeAxesActor->SetCornerOffset(0); 550 663 _cubeAxesActor->SetFlyModeToStaticTriad(); 551 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES) 664 552 665 _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL); 553 666 _cubeAxesActor->SetDrawXInnerGridlines(0); … … 568 681 // Set font pixel size for 3D 569 682 _cubeAxesActor->SetScreenSize(8.0); 570 #endif 683 571 684 _cubeAxesActor->SetBounds(0, 1, 0, 1, 0, 1); 572 685 _cubeAxesActor->SetXAxisRange(0, 1); 573 686 _cubeAxesActor->SetYAxisRange(0, 1); 574 687 _cubeAxesActor->SetZAxisRange(0, 1); 575 576 #ifdef USE_CUSTOM_AXES 577 if (_cubeAxesActor2D == NULL) 578 _cubeAxesActor2D = vtkSmartPointer<vtkRpCubeAxesActor2D>::New(); 579 #elif !defined(USE_VTK6) 580 if (_cubeAxesActor2D == NULL) 581 _cubeAxesActor2D = vtkSmartPointer<vtkCubeAxesActor2D>::New(); 582 #endif 688 for (int axis = 0; axis < 3; axis++) { 689 _axesAutoBounds[axis] = true; 690 _axesRangeMode[axis] = RANGE_AUTO; 691 _axesScale[axis] = 1.0; 692 } 583 693 584 694 double axesColor[] = {1,1,1}; 585 695 setAxesColor(axesColor); 586 696 587 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)588 697 if (!_renderer->HasViewProp(_cubeAxesActor)) 589 698 _renderer->AddViewProp(_cubeAxesActor); … … 594 703 _cubeAxesActor->SetUse2DMode(0); 595 704 } 596 #else597 _cubeAxesActor2D->SetCamera(_renderer->GetActiveCamera());598 _cubeAxesActor2D->ZAxisVisibilityOff();599 _cubeAxesActor2D->SetCornerOffset(0);600 _cubeAxesActor2D->SetFlyModeToClosestTriad();601 602 _cubeAxesActor2D->ScalingOff();603 _cubeAxesActor2D->SetShowActualBounds(1);604 _cubeAxesActor2D->SetFontFactor(1.25);605 // Use "nice" range and number of ticks/labels606 _cubeAxesActor2D->GetXAxisActor2D()->AdjustLabelsOn();607 _cubeAxesActor2D->GetYAxisActor2D()->AdjustLabelsOn();608 _cubeAxesActor2D->GetZAxisActor2D()->AdjustLabelsOn();609 610 #ifdef USE_CUSTOM_AXES611 _cubeAxesActor2D->SetAxisTitleTextProperty(NULL);612 _cubeAxesActor2D->SetAxisLabelTextProperty(NULL);613 //_cubeAxesActor2D->GetXAxisActor2D()->SizeFontRelativeToAxisOn();614 _cubeAxesActor2D->GetXAxisActor2D()->GetTitleTextProperty()->BoldOn();615 _cubeAxesActor2D->GetXAxisActor2D()->GetTitleTextProperty()->ItalicOff();616 _cubeAxesActor2D->GetXAxisActor2D()->GetTitleTextProperty()->ShadowOn();617 _cubeAxesActor2D->GetXAxisActor2D()->GetLabelTextProperty()->BoldOff();618 _cubeAxesActor2D->GetXAxisActor2D()->GetLabelTextProperty()->ItalicOff();619 _cubeAxesActor2D->GetXAxisActor2D()->GetLabelTextProperty()->ShadowOff();620 621 //_cubeAxesActor2D->GetYAxisActor2D()->SizeFontRelativeToAxisOn();622 _cubeAxesActor2D->GetYAxisActor2D()->GetTitleTextProperty()->BoldOn();623 _cubeAxesActor2D->GetYAxisActor2D()->GetTitleTextProperty()->ItalicOff();624 _cubeAxesActor2D->GetYAxisActor2D()->GetTitleTextProperty()->ShadowOn();625 _cubeAxesActor2D->GetYAxisActor2D()->GetLabelTextProperty()->BoldOff();626 _cubeAxesActor2D->GetYAxisActor2D()->GetLabelTextProperty()->ItalicOff();627 _cubeAxesActor2D->GetYAxisActor2D()->GetLabelTextProperty()->ShadowOff();628 629 //_cubeAxesActor2D->GetZAxisActor2D()->SizeFontRelativeToAxisOn();630 _cubeAxesActor2D->GetZAxisActor2D()->GetTitleTextProperty()->BoldOn();631 _cubeAxesActor2D->GetZAxisActor2D()->GetTitleTextProperty()->ItalicOff();632 _cubeAxesActor2D->GetZAxisActor2D()->GetTitleTextProperty()->ShadowOn();633 _cubeAxesActor2D->GetZAxisActor2D()->GetLabelTextProperty()->BoldOff();634 _cubeAxesActor2D->GetZAxisActor2D()->GetLabelTextProperty()->ItalicOff();635 _cubeAxesActor2D->GetZAxisActor2D()->GetLabelTextProperty()->ShadowOff();636 #else637 _cubeAxesActor2D->GetAxisTitleTextProperty()->BoldOn();638 _cubeAxesActor2D->GetAxisTitleTextProperty()->ItalicOff();639 _cubeAxesActor2D->GetAxisTitleTextProperty()->ShadowOn();640 _cubeAxesActor2D->GetAxisLabelTextProperty()->BoldOff();641 _cubeAxesActor2D->GetAxisLabelTextProperty()->ItalicOff();642 _cubeAxesActor2D->GetAxisLabelTextProperty()->ShadowOff();643 #endif644 645 if (_cameraMode == IMAGE) {646 if (!_renderer->HasViewProp(_cubeAxesActor2D))647 _renderer->AddViewProp(_cubeAxesActor2D);648 } else {649 if (!_renderer->HasViewProp(_cubeAxesActor))650 _renderer->AddViewProp(_cubeAxesActor);651 }652 #endif653 705 } 654 706 … … 664 716 case FLY_STATIC_EDGES: 665 717 _cubeAxesActor->SetFlyModeToStaticEdges(); 666 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)667 718 _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL); 668 #endif669 719 break; 670 720 case FLY_STATIC_TRIAD: 671 721 _cubeAxesActor->SetFlyModeToStaticTriad(); 672 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)673 722 _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL); 674 #endif675 723 break; 676 724 case FLY_OUTER_EDGES: 677 725 _cubeAxesActor->SetFlyModeToOuterEdges(); 678 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)679 726 _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL); 680 #endif681 727 break; 682 728 case FLY_FURTHEST_TRIAD: 683 729 _cubeAxesActor->SetFlyModeToFurthestTriad(); 684 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)685 730 _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_FURTHEST); 686 #endif687 731 break; 688 732 case FLY_CLOSEST_TRIAD: 689 733 default: 690 734 _cubeAxesActor->SetFlyModeToClosestTriad(); 691 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)692 735 _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_CLOSEST); 693 #endif694 736 break; 695 737 } … … 704 746 if (_cubeAxesActor != NULL) { 705 747 _cubeAxesActor->GetProperty()->SetColor(color); 706 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)707 748 for (int i = 0; i < 3; i++) { 708 749 _cubeAxesActor->GetTitleTextProperty(i)->SetColor(color); … … 713 754 _cubeAxesActor->GetXAxesGridlinesProperty()->SetColor(color); 714 755 _cubeAxesActor->GetXAxesInnerGridlinesProperty()->SetColor(color); 756 715 757 _cubeAxesActor->GetYAxesLinesProperty()->SetColor(color); 716 758 _cubeAxesActor->GetYAxesGridlinesProperty()->SetColor(color); 717 759 _cubeAxesActor->GetYAxesInnerGridlinesProperty()->SetColor(color); 760 718 761 _cubeAxesActor->GetZAxesLinesProperty()->SetColor(color); 719 762 _cubeAxesActor->GetZAxesGridlinesProperty()->SetColor(color); 720 763 _cubeAxesActor->GetZAxesInnerGridlinesProperty()->SetColor(color); 721 #endif722 764 _needsRedraw = true; 723 765 } 724 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)725 if (_cubeAxesActor2D != NULL) {726 _cubeAxesActor2D->GetProperty()->SetColor(color);727 #ifdef USE_CUSTOM_AXES728 _cubeAxesActor2D->GetXAxisActor2D()->GetTitleTextProperty()->SetColor(color);729 _cubeAxesActor2D->GetXAxisActor2D()->GetLabelTextProperty()->SetColor(color);730 _cubeAxesActor2D->GetYAxisActor2D()->GetTitleTextProperty()->SetColor(color);731 _cubeAxesActor2D->GetYAxisActor2D()->GetLabelTextProperty()->SetColor(color);732 _cubeAxesActor2D->GetZAxisActor2D()->GetTitleTextProperty()->SetColor(color);733 _cubeAxesActor2D->GetZAxisActor2D()->GetLabelTextProperty()->SetColor(color);734 #else735 _cubeAxesActor2D->GetAxisTitleTextProperty()->SetColor(color);736 _cubeAxesActor2D->GetAxisLabelTextProperty()->SetColor(color);737 #endif738 _needsRedraw = true;739 }740 #endif741 766 } 742 767 … … 750 775 _needsRedraw = true; 751 776 } 752 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)753 if (_cubeAxesActor2D != NULL) {754 _cubeAxesActor2D->SetVisibility((state ? 1 : 0));755 _needsRedraw = true;756 }757 #endif758 777 } 759 778 … … 949 968 _needsRedraw = true; 950 969 } 951 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)952 if (_cubeAxesActor2D != NULL) {953 if (axis == X_AXIS) {954 _cubeAxesActor2D->SetXAxisVisibility((state ? 1 : 0));955 } else if (axis == Y_AXIS) {956 _cubeAxesActor2D->SetYAxisVisibility((state ? 1 : 0));957 } else if (axis == Z_AXIS) {958 _cubeAxesActor2D->SetZAxisVisibility((state ? 1 : 0));959 }960 _needsRedraw = true;961 }962 #endif963 970 } 964 971 … … 1029 1036 _needsRedraw = true; 1030 1037 } 1031 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)1032 if (_cubeAxesActor2D != NULL) {1033 if (axis == X_AXIS) {1034 _cubeAxesActor2D->GetXAxisActor2D()->SetLabelVisibility((state ? 1 : 0));1035 } else if (axis == Y_AXIS) {1036 _cubeAxesActor2D->GetYAxisActor2D()->SetLabelVisibility((state ? 1 : 0));1037 } else if (axis == Z_AXIS) {1038 _cubeAxesActor2D->GetZAxisActor2D()->SetLabelVisibility((state ? 1 : 0));1039 }1040 _needsRedraw = true;1041 }1042 #endif1043 1038 } 1044 1039 … … 1058 1053 _needsRedraw = true; 1059 1054 } 1060 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)1061 if (_cubeAxesActor2D != NULL) {1062 if (axis == X_AXIS) {1063 _cubeAxesActor2D->GetXAxisActor2D()->SetTickVisibility((state ? 1 : 0));1064 } else if (axis == Y_AXIS) {1065 _cubeAxesActor2D->GetYAxisActor2D()->SetTickVisibility((state ? 1 : 0));1066 } else if (axis == Z_AXIS) {1067 _cubeAxesActor2D->GetZAxisActor2D()->SetTickVisibility((state ? 1 : 0));1068 }1069 _needsRedraw = true;1070 }1071 #endif1072 1055 } 1073 1056 … … 1104 1087 _needsRedraw = true; 1105 1088 } 1106 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)1107 if (_cubeAxesActor2D != NULL) {1108 if (axis == X_AXIS) {1109 _cubeAxesActor2D->SetXLabel(title);1110 } else if (axis == Y_AXIS) {1111 _cubeAxesActor2D->SetYLabel(title);1112 } else if (axis == Z_AXIS) {1113 _cubeAxesActor2D->SetZLabel(title);1114 }1115 _needsRedraw = true;1116 }1117 #endif1118 1089 } 1119 1090 … … 2071 2042 } 2072 2043 2044 /** 2045 * \brief Set the camera near/far clipping range based on current scene bounds 2046 */ 2073 2047 void Renderer::resetCameraClippingRange() 2074 2048 { … … 2351 2325 _cameraClipPlanes[3]->SetOrigin(_imgWorldOrigin[0] + plotWidthWorld, 0, 0); 2352 2326 _cameraClipPlanes[3]->SetNormal(-1, 0, 0); 2353 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES) 2327 2354 2328 _cubeAxesActor->SetBounds(_imgWorldOrigin[0], _imgWorldOrigin[0] + plotWidthWorld, 2355 2329 _imgWorldOrigin[1], _imgWorldOrigin[1] + plotHeightWorld, … … 2359 2333 _cubeAxesActor->YAxisVisibilityOn(); 2360 2334 _cubeAxesActor->ZAxisVisibilityOff(); 2361 #else2362 _cubeAxesActor2D->SetBounds(_imgWorldOrigin[0], _imgWorldOrigin[0] + plotWidthWorld,2363 _imgWorldOrigin[1], _imgWorldOrigin[1] + plotHeightWorld,2364 _imgCameraOffset, _imgCameraOffset);2365 _cubeAxesActor2D->XAxisVisibilityOn();2366 _cubeAxesActor2D->YAxisVisibilityOn();2367 _cubeAxesActor2D->ZAxisVisibilityOff();2368 #endif2369 2335 } else if (_imgCameraPlane == PLANE_ZY) { 2370 2336 // ZY plane … … 2384 2350 _cameraClipPlanes[3]->SetOrigin(0, 0, _imgWorldOrigin[0] + plotWidthWorld); 2385 2351 _cameraClipPlanes[3]->SetNormal(0, 0, -1); 2386 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES) 2352 2387 2353 _cubeAxesActor->SetBounds(_imgCameraOffset, _imgCameraOffset, 2388 2354 _imgWorldOrigin[1], _imgWorldOrigin[1] + plotHeightWorld, … … 2391 2357 _cubeAxesActor->YAxisVisibilityOn(); 2392 2358 _cubeAxesActor->ZAxisVisibilityOn(); 2393 #else2394 _cubeAxesActor2D->SetBounds(_imgCameraOffset, _imgCameraOffset,2395 _imgWorldOrigin[1], _imgWorldOrigin[1] + plotHeightWorld,2396 _imgWorldOrigin[0], _imgWorldOrigin[0] + plotWidthWorld);2397 _cubeAxesActor2D->XAxisVisibilityOff();2398 _cubeAxesActor2D->YAxisVisibilityOn();2399 _cubeAxesActor2D->ZAxisVisibilityOn();2400 #endif2401 2359 } else { 2402 2360 // XZ plane … … 2416 2374 _cameraClipPlanes[3]->SetOrigin(_imgWorldOrigin[0] + plotWidthWorld, 0, 0); 2417 2375 _cameraClipPlanes[3]->SetNormal(-1, 0, 0); 2418 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES) 2376 2419 2377 _cubeAxesActor->SetBounds(_imgWorldOrigin[0], _imgWorldOrigin[0] + plotWidthWorld, 2420 2378 _imgCameraOffset, _imgCameraOffset, … … 2423 2381 _cubeAxesActor->YAxisVisibilityOff(); 2424 2382 _cubeAxesActor->ZAxisVisibilityOn(); 2425 #else 2426 _cubeAxesActor2D->SetBounds(_imgWorldOrigin[0], _imgWorldOrigin[0] + plotWidthWorld, 2427 _imgCameraOffset, _imgCameraOffset, 2428 _imgWorldOrigin[1], _imgWorldOrigin[1] + plotHeightWorld); 2429 _cubeAxesActor2D->XAxisVisibilityOn(); 2430 _cubeAxesActor2D->YAxisVisibilityOff(); 2431 _cubeAxesActor2D->ZAxisVisibilityOn(); 2432 #endif 2433 } 2434 2435 #if !defined(USE_CUSTOM_AXES) 2436 double xmin, xmax, ymin, ymax, zmin, zmax; 2437 _cubeAxesActor->GetBounds(xmin, xmax, ymin, ymax, zmin, zmax); 2438 _cubeAxesActor->SetXAxisRange(xmin, xmax); 2439 _cubeAxesActor->SetYAxisRange(ymin, ymax); 2440 _cubeAxesActor->SetZAxisRange(zmin, zmax); 2441 #endif 2383 } 2384 2385 // Fix up axis ranges based on new bounds 2386 setAxesRanges(); 2442 2387 2443 2388 // Compute screen world coordinates -
branches/Rappture 1.2/packages/vizservers/vtkvis/RpVtkRenderer.h
r3224 r3230 17 17 #ifdef USE_CUSTOM_AXES 18 18 #include "vtkRpCubeAxesActor.h" 19 #include "vtkRpCubeAxesActor2D.h"20 19 #else 21 20 #include <vtkCubeAxesActor.h> 22 #include <vtkCubeAxesActor2D.h>23 21 #endif 24 22 #include <vtkScalarBarActor.h> … … 70 68 virtual ~Renderer(); 71 69 70 enum AxisRangeMode { 71 RANGE_AUTO = 0, 72 RANGE_SCALE_BOUNDS, 73 RANGE_EXPLICIT 74 }; 75 72 76 enum AxesFlyMode { 73 77 FLY_OUTER_EDGES = 0, … … 167 171 void setViewAngle(int height); 168 172 173 /// Return the VTK camera object this Renderer uses 169 174 vtkCamera *getVtkCamera() 170 175 { … … 225 230 // Axes 226 231 232 void setAxesOrigin(double x, double y, double z, bool useCustom = true); 233 234 void setAxesBounds(double bounds[6]); 235 236 void setAxesAutoRange(bool state); 237 238 void setAxesScale(double scale); 239 240 void setAxesRange(double min, double max); 241 242 void setAxisAutoRange(Axis axis, bool state); 243 244 void setAxisScale(Axis axis, double scale); 245 246 void setAxisRange(Axis axis, double min, double max); 247 227 248 void setAxesFlyMode(AxesFlyMode mode); 228 249 … … 294 315 295 316 void setAxisLabelFormat(Axis axis, const char *format); 296 297 void setAxisBounds(double bounds[6]);298 299 void setAxisScale(double sx, double sy, double sz);300 317 301 318 // Colormaps … … 777 794 double *offset) const; 778 795 void initCamera(bool initCameraMode = false); 796 779 797 void initAxes(); 780 798 void resetAxes(double bounds[6] = NULL); 799 void setAxesRanges(); 800 void computeAxesScale(); 801 781 802 void setCameraClippingPlanes(); 782 803 … … 802 823 FieldRangeHashmap _vectorCellDataRange; 803 824 FieldRangeHashmap _vectorCompCellDataRange[3]; 825 826 bool _axesAutoBounds[3]; 827 AxisRangeMode _axesRangeMode[3]; 828 double _axesScale[3]; 804 829 805 830 ColorMapHashmap _colorMaps; … … 832 857 vtkSmartPointer<vtkPlaneCollection> _activeClipPlanes; 833 858 #ifdef USE_CUSTOM_AXES 834 vtkSmartPointer<vtkRpCubeAxesActor> _cubeAxesActor; // For 3D view 835 vtkSmartPointer<vtkRpCubeAxesActor2D> _cubeAxesActor2D; // For 2D view 859 vtkSmartPointer<vtkRpCubeAxesActor> _cubeAxesActor; 836 860 #else 837 vtkSmartPointer<vtkCubeAxesActor> _cubeAxesActor; // For 3D view 838 #ifndef USE_VTK6 839 vtkSmartPointer<vtkCubeAxesActor2D> _cubeAxesActor2D; // For 2D view 840 #endif 861 vtkSmartPointer<vtkCubeAxesActor> _cubeAxesActor; 841 862 #endif 842 863 vtkSmartPointer<vtkScalarBarActor> _scalarBarActor; -
branches/Rappture 1.2/packages/vizservers/vtkvis/RpVtkRendererCmd.cpp
r3228 r3230 635 635 636 636 static int 637 AxisAutoRangeOp(ClientData clientData, Tcl_Interp *interp, int objc, 638 Tcl_Obj *const *objv) 639 { 640 bool enableAuto; 641 if (GetBooleanFromObj(interp, objv[3], &enableAuto) != TCL_OK) { 642 return TCL_ERROR; 643 } 644 const char *string = Tcl_GetString(objv[2]); 645 char c = string[0]; 646 if ((c == 'x') && (strcmp(string, "x") == 0)) { 647 g_renderer->setAxisAutoRange(X_AXIS, enableAuto); 648 } else if ((c == 'y') && (strcmp(string, "y") == 0)) { 649 g_renderer->setAxisAutoRange(Y_AXIS, enableAuto); 650 } else if ((c == 'z') && (strcmp(string, "z") == 0)) { 651 g_renderer->setAxisAutoRange(Z_AXIS, enableAuto); 652 } else if ((c == 'a') && (strcmp(string, "all") == 0)) { 653 g_renderer->setAxesAutoRange(enableAuto); 654 } else { 655 Tcl_AppendResult(interp, "bad axis option \"", string, 656 "\": should be axisName", (char*)NULL); 657 return TCL_ERROR; 658 } 659 return TCL_OK; 660 } 661 662 static int 637 663 AxisColorOp(ClientData clientData, Tcl_Interp *interp, int objc, 638 664 Tcl_Obj *const *objv) … … 936 962 937 963 static int 964 AxisOriginOp(ClientData clientData, Tcl_Interp *interp, int objc, 965 Tcl_Obj *const *objv) 966 { 967 double x, y, z; 968 bool useCustom = true; 969 if (Tcl_GetDoubleFromObj(interp, objv[2], &x) != TCL_OK || 970 Tcl_GetDoubleFromObj(interp, objv[3], &y) != TCL_OK || 971 Tcl_GetDoubleFromObj(interp, objv[4], &z) != TCL_OK) { 972 return TCL_ERROR; 973 } 974 if (objc > 5) { 975 if (GetBooleanFromObj(interp, objv[5], &useCustom) != TCL_OK) { 976 return TCL_ERROR; 977 } 978 g_renderer->setAxesOrigin(x, y, z, useCustom); 979 } else { 980 g_renderer->setAxesOrigin(x, y, z); 981 } 982 return TCL_OK; 983 } 984 985 static int 986 AxisRangeOp(ClientData clientData, Tcl_Interp *interp, int objc, 987 Tcl_Obj *const *objv) 988 { 989 double min, max; 990 if (Tcl_GetDoubleFromObj(interp, objv[3], &min) != TCL_OK || 991 Tcl_GetDoubleFromObj(interp, objv[4], &max) != TCL_OK) { 992 return TCL_ERROR; 993 } 994 const char *string = Tcl_GetString(objv[2]); 995 char c = string[0]; 996 if ((c == 'x') && (strcmp(string, "x") == 0)) { 997 g_renderer->setAxisRange(X_AXIS, min, max); 998 } else if ((c == 'y') && (strcmp(string, "y") == 0)) { 999 g_renderer->setAxisRange(Y_AXIS, min, max); 1000 } else if ((c == 'z') && (strcmp(string, "z") == 0)) { 1001 g_renderer->setAxisRange(Z_AXIS, min, max); 1002 } else if ((c == 'a') && (strcmp(string, "all") == 0)) { 1003 g_renderer->setAxesRange(min, max); 1004 } else { 1005 Tcl_AppendResult(interp, "bad axis option \"", string, 1006 "\": should be axisName", (char*)NULL); 1007 return TCL_ERROR; 1008 } 1009 return TCL_OK; 1010 } 1011 1012 static int 1013 AxisScaleOp(ClientData clientData, Tcl_Interp *interp, int objc, 1014 Tcl_Obj *const *objv) 1015 { 1016 double scale; 1017 if (Tcl_GetDoubleFromObj(interp, objv[3], &scale) != TCL_OK) { 1018 return TCL_ERROR; 1019 } 1020 const char *string = Tcl_GetString(objv[2]); 1021 char c = string[0]; 1022 if ((c == 'x') && (strcmp(string, "x") == 0)) { 1023 g_renderer->setAxisScale(X_AXIS, scale); 1024 } else if ((c == 'y') && (strcmp(string, "y") == 0)) { 1025 g_renderer->setAxisScale(Y_AXIS, scale); 1026 } else if ((c == 'z') && (strcmp(string, "z") == 0)) { 1027 g_renderer->setAxisScale(Z_AXIS, scale); 1028 } else if ((c == 'a') && (strcmp(string, "all") == 0)) { 1029 g_renderer->setAxesScale(scale); 1030 } else { 1031 Tcl_AppendResult(interp, "bad axis option \"", string, 1032 "\": should be axisName", (char*)NULL); 1033 return TCL_ERROR; 1034 } 1035 return TCL_OK; 1036 } 1037 1038 static int 938 1039 AxisTicksVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc, 939 1040 Tcl_Obj *const *objv) … … 1141 1242 1142 1243 static Rappture::CmdSpec axisOps[] = { 1244 {"autorange",1, AxisAutoRangeOp, 4, 4, "axis bool"}, 1143 1245 {"color", 1, AxisColorOp, 5, 5, "r g b"}, 1144 1246 {"flymode", 2, AxisFlyModeOp, 3, 3, "mode"}, … … 1155 1257 {"minticks", 1, AxisMinorTicksVisibleOp, 4, 4, "axis bool"}, 1156 1258 {"name", 1, AxisNameOp, 4, 4, "axis title"}, 1259 {"origin", 1, AxisOriginOp, 5, 6, "x y z ?useCustom?"}, 1260 {"range", 1, AxisRangeOp, 5, 5, "axis min max"}, 1261 {"scale", 1, AxisScaleOp, 4, 4, "axis scale"}, 1157 1262 {"tfont", 3, AxisTitleFontOp, 4, 4, "axis font"}, 1158 1263 {"tfsize", 3, AxisTitleFontSizeOp, 4, 4, "axis fontSize"}, -
branches/Rappture 1.2/packages/vizservers/vtkvis/protocol.txt
r3224 r3230 42 42 Force a new image to be rendered - use for advancing animation 43 43 44 axis autorange <axis> <bool> 45 Toggle between automatic and explicit range settings. To set an explicit 46 range use the 'axis range...' command. For scaling based on axis bounds, 47 see 'axis scale...' 48 <axis> = x|y|z|all 44 49 axis color <r> <g> <b> 45 50 Set color of axis lines, labels, titles, ticks … … 68 73 <formatString> = printf style format string 69 74 axis lfsize <axis> <fontSizePts> 70 Set font size of labels in 2D mode - currently relies on patched VTK in runtime 75 Set font size of labels in 2D mode - currently relies on patched VTK in 76 runtime 71 77 <axis> = x|y|z|all 72 78 <fontSizePts> = Font size in points … … 87 93 <axis> = x|y|z|all 88 94 <title> = Title of axis 95 axis origin <x> <y> <z> <?useCustom?> 96 <x>,<y>,<z> = point inside world coordinate bounds of axes box where axes 97 should intersect 98 <useCustom> = Set to false to disable use of custom origin and re-enable 99 automatic origin 100 axis range <axis> <min> <max> 101 Explicitly set min,max range of axis labels. Note that the min and max 102 values themselves may not be given labels if they don't fall on tick 103 divisions -- the min/max determine the value of the axis endpoints. This 104 setting allows labeling axes independently of the world coordinate bounds. 105 <axis> = x|y|z|all 106 <min> = minimum value of axis for labels 107 <max> = maximum value of axis for labels 108 axis scale <axis> <scale> 109 Set axis range to be computed based on scaling the axis bounds by the 110 given scale factor. 111 <axis> = x|y|z|all 112 <scale> = scale factor where range = bounds * scale 89 113 axis tickpos <position> 90 114 Set position of ticks on 3D axes (not implemented for 2D axes) … … 98 122 <fontName> = Arial|Courier|Times 99 123 axis tfsize <axis> <fontSizePts> 100 Set font size of title in 2D mode - currently relies on patched VTK in runtime 124 Set font size of title in 2D mode - currently relies on patched VTK in 125 runtime 101 126 <axis> = x|y|z|all 102 127 <fontSizePts> = Font size in points
Note: See TracChangeset
for help on using the changeset viewer.