Changeset 3230 for branches


Ignore:
Timestamp:
Jan 3, 2013, 1:32:43 PM (12 years ago)
Author:
ldelgass
Message:

Add commands to set axes ranges explicitly or by scaling the world coordinate
bounds by a fixed factor (ranges can also be set to be computed automatically
based on actor bounds and scaling -- this is the default). Also add command
to set axes origin (in world coordinates within the bounds).

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  
    2626#ifdef USE_CUSTOM_AXES
    2727#include "vtkRpCubeAxesActor.h"
    28 #include "vtkRpCubeAxesActor2D.h"
    2928#else
    3029#include <vtkCubeAxesActor.h>
    31 #include <vtkCubeAxesActor2D.h>
    3230#endif
    3331#include <vtkDataSetReader.h>
     
    423421{
    424422    TRACE("Resetting axes");
    425     if (_cubeAxesActor == NULL
    426 #ifndef USE_VTK6
    427         || _cubeAxesActor2D == NULL
    428 #endif
    429        ) {
     423
     424    if (_cubeAxesActor == NULL) {
    430425        initAxes();
    431426    }
     427
    432428    if (_cameraMode == IMAGE) {
    433 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    434429        _cubeAxesActor->SetUse2DMode(1);
    435 #else
    436         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 #endif
    445430    } else {
    446 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    447431        _cubeAxesActor->SetUse2DMode(0);
    448 #else
    449         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 #endif
    458432    }
    459433
     
    461435        return;
    462436    }
    463 
    464     double unscaledBounds[6];
    465     collectUnscaledBounds(unscaledBounds, false);
    466437
    467438    if (bounds == NULL) {
     
    469440        collectBounds(newBounds, false);
    470441
    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);
    477443    } 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();
    485448}
    486449
     
    491454 * the axes are drawn
    492455 */
    493 void Renderer::setAxisBounds(double bounds[6])
     456void Renderer::setAxesBounds(double bounds[6])
    494457{
    495458    _cubeAxesActor->SetBounds(bounds);
     459
    496460    TRACE("Axis bounds: %g %g %g %g %g %g",
    497461              bounds[0],
     
    501465              bounds[4],
    502466              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
     471void 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
     484void 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
     495void 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
     502void 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
     526void Renderer::setAxesRanges()
     527{
     528    computeAxesScale();
     529
    511530    double bounds[6];
    512531    _cubeAxesActor->GetBounds(bounds);
     532
    513533    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
    524557    TRACE("Axis ranges: %g %g %g %g %g %g",
    525558          ranges[0],
     
    529562          ranges[4],
    530563          ranges[5]);
     564
     565    _needsRedraw = true;
     566}
     567
     568void 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 */
     605void 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
     620void 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 */
     638void 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;
    531644}
    532645
     
    549662    _cubeAxesActor->SetCornerOffset(0);
    550663    _cubeAxesActor->SetFlyModeToStaticTriad();
    551 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
     664
    552665    _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL);
    553666    _cubeAxesActor->SetDrawXInnerGridlines(0);
     
    568681    // Set font pixel size for 3D
    569682    _cubeAxesActor->SetScreenSize(8.0);
    570 #endif
     683
    571684    _cubeAxesActor->SetBounds(0, 1, 0, 1, 0, 1);
    572685    _cubeAxesActor->SetXAxisRange(0, 1);
    573686    _cubeAxesActor->SetYAxisRange(0, 1);
    574687    _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    }
    583693
    584694    double axesColor[] = {1,1,1};
    585695    setAxesColor(axesColor);
    586696
    587 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    588697    if (!_renderer->HasViewProp(_cubeAxesActor))
    589698        _renderer->AddViewProp(_cubeAxesActor);
     
    594703        _cubeAxesActor->SetUse2DMode(0);
    595704    }
    596 #else
    597     _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/labels
    606     _cubeAxesActor2D->GetXAxisActor2D()->AdjustLabelsOn();
    607     _cubeAxesActor2D->GetYAxisActor2D()->AdjustLabelsOn();
    608     _cubeAxesActor2D->GetZAxisActor2D()->AdjustLabelsOn();
    609 
    610 #ifdef USE_CUSTOM_AXES
    611     _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 #else
    637     _cubeAxesActor2D->GetAxisTitleTextProperty()->BoldOn();
    638     _cubeAxesActor2D->GetAxisTitleTextProperty()->ItalicOff();
    639     _cubeAxesActor2D->GetAxisTitleTextProperty()->ShadowOn();
    640     _cubeAxesActor2D->GetAxisLabelTextProperty()->BoldOff();
    641     _cubeAxesActor2D->GetAxisLabelTextProperty()->ItalicOff();
    642     _cubeAxesActor2D->GetAxisLabelTextProperty()->ShadowOff();
    643 #endif
    644 
    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 #endif
    653705}
    654706
     
    664716    case FLY_STATIC_EDGES:
    665717        _cubeAxesActor->SetFlyModeToStaticEdges();
    666 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    667718        _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL);
    668 #endif
    669719        break;
    670720    case FLY_STATIC_TRIAD:
    671721        _cubeAxesActor->SetFlyModeToStaticTriad();
    672 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    673722        _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL);
    674 #endif
    675723        break;
    676724    case FLY_OUTER_EDGES:
    677725        _cubeAxesActor->SetFlyModeToOuterEdges();
    678 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    679726        _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_ALL);
    680 #endif
    681727        break;
    682728    case FLY_FURTHEST_TRIAD:
    683729        _cubeAxesActor->SetFlyModeToFurthestTriad();
    684 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    685730        _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_FURTHEST);
    686 #endif
    687731        break;
    688732    case FLY_CLOSEST_TRIAD:
    689733    default:
    690734        _cubeAxesActor->SetFlyModeToClosestTriad();
    691 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    692735        _cubeAxesActor->SetGridLineLocation(VTK_GRID_LINES_CLOSEST);
    693 #endif
    694736        break;
    695737    }
     
    704746    if (_cubeAxesActor != NULL) {
    705747        _cubeAxesActor->GetProperty()->SetColor(color);
    706 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
    707748        for (int i = 0; i < 3; i++) {
    708749            _cubeAxesActor->GetTitleTextProperty(i)->SetColor(color);
     
    713754        _cubeAxesActor->GetXAxesGridlinesProperty()->SetColor(color);
    714755        _cubeAxesActor->GetXAxesInnerGridlinesProperty()->SetColor(color);
     756
    715757        _cubeAxesActor->GetYAxesLinesProperty()->SetColor(color);
    716758        _cubeAxesActor->GetYAxesGridlinesProperty()->SetColor(color);
    717759        _cubeAxesActor->GetYAxesInnerGridlinesProperty()->SetColor(color);
     760
    718761        _cubeAxesActor->GetZAxesLinesProperty()->SetColor(color);
    719762        _cubeAxesActor->GetZAxesGridlinesProperty()->SetColor(color);
    720763        _cubeAxesActor->GetZAxesInnerGridlinesProperty()->SetColor(color);
    721 #endif
    722764        _needsRedraw = true;
    723765    }
    724 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)
    725     if (_cubeAxesActor2D != NULL) {
    726         _cubeAxesActor2D->GetProperty()->SetColor(color);
    727 #ifdef USE_CUSTOM_AXES
    728         _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 #else
    735         _cubeAxesActor2D->GetAxisTitleTextProperty()->SetColor(color);
    736         _cubeAxesActor2D->GetAxisLabelTextProperty()->SetColor(color);
    737 #endif
    738         _needsRedraw = true;
    739     }
    740 #endif
    741766}
    742767
     
    750775        _needsRedraw = true;
    751776    }
    752 #if !defined(USE_VTK6) || defined(USE_CUSTOM_AXES)
    753     if (_cubeAxesActor2D != NULL) {
    754         _cubeAxesActor2D->SetVisibility((state ? 1 : 0));
    755         _needsRedraw = true;
    756     }
    757 #endif
    758777}
    759778
     
    949968        _needsRedraw = true;
    950969    }
    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 #endif
    963970}
    964971
     
    10291036        _needsRedraw = true;
    10301037    }
    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 #endif
    10431038}
    10441039
     
    10581053        _needsRedraw = true;
    10591054    }
    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 #endif
    10721055}
    10731056
     
    11041087        _needsRedraw = true;
    11051088    }
    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 #endif
    11181089}
    11191090
     
    20712042}
    20722043
     2044/**
     2045 * \brief Set the camera near/far clipping range based on current scene bounds
     2046 */
    20732047void Renderer::resetCameraClippingRange()
    20742048{
     
    23512325        _cameraClipPlanes[3]->SetOrigin(_imgWorldOrigin[0] + plotWidthWorld, 0, 0);
    23522326        _cameraClipPlanes[3]->SetNormal(-1, 0, 0);
    2353 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
     2327
    23542328        _cubeAxesActor->SetBounds(_imgWorldOrigin[0], _imgWorldOrigin[0] + plotWidthWorld,
    23552329                                  _imgWorldOrigin[1], _imgWorldOrigin[1] + plotHeightWorld,
     
    23592333        _cubeAxesActor->YAxisVisibilityOn();
    23602334        _cubeAxesActor->ZAxisVisibilityOff();
    2361 #else
    2362         _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 #endif
    23692335    } else if (_imgCameraPlane == PLANE_ZY) {
    23702336        // ZY plane
     
    23842350        _cameraClipPlanes[3]->SetOrigin(0, 0, _imgWorldOrigin[0] + plotWidthWorld);
    23852351        _cameraClipPlanes[3]->SetNormal(0, 0, -1);
    2386 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
     2352
    23872353        _cubeAxesActor->SetBounds(_imgCameraOffset, _imgCameraOffset,
    23882354                                  _imgWorldOrigin[1], _imgWorldOrigin[1] + plotHeightWorld,
     
    23912357        _cubeAxesActor->YAxisVisibilityOn();
    23922358        _cubeAxesActor->ZAxisVisibilityOn();
    2393 #else
    2394         _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 #endif
    24012359    } else {
    24022360        // XZ plane
     
    24162374        _cameraClipPlanes[3]->SetOrigin(_imgWorldOrigin[0] + plotWidthWorld, 0, 0);
    24172375        _cameraClipPlanes[3]->SetNormal(-1, 0, 0);
    2418 #if defined(USE_VTK6) && !defined(USE_CUSTOM_AXES)
     2376
    24192377        _cubeAxesActor->SetBounds(_imgWorldOrigin[0], _imgWorldOrigin[0] + plotWidthWorld,
    24202378                                  _imgCameraOffset, _imgCameraOffset,
     
    24232381        _cubeAxesActor->YAxisVisibilityOff();
    24242382        _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();
    24422387
    24432388    // Compute screen world coordinates
  • branches/Rappture 1.2/packages/vizservers/vtkvis/RpVtkRenderer.h

    r3224 r3230  
    1717#ifdef USE_CUSTOM_AXES
    1818#include "vtkRpCubeAxesActor.h"
    19 #include "vtkRpCubeAxesActor2D.h"
    2019#else
    2120#include <vtkCubeAxesActor.h>
    22 #include <vtkCubeAxesActor2D.h>
    2321#endif
    2422#include <vtkScalarBarActor.h>
     
    7068    virtual ~Renderer();
    7169
     70    enum AxisRangeMode {
     71        RANGE_AUTO = 0,
     72        RANGE_SCALE_BOUNDS,
     73        RANGE_EXPLICIT
     74    };
     75
    7276    enum AxesFlyMode {
    7377        FLY_OUTER_EDGES = 0,
     
    167171    void setViewAngle(int height);
    168172
     173    /// Return the VTK camera object this Renderer uses
    169174    vtkCamera *getVtkCamera()
    170175    {
     
    225230    // Axes
    226231
     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
    227248    void setAxesFlyMode(AxesFlyMode mode);
    228249
     
    294315
    295316    void setAxisLabelFormat(Axis axis, const char *format);
    296 
    297     void setAxisBounds(double bounds[6]);
    298 
    299     void setAxisScale(double sx, double sy, double sz);
    300317
    301318    // Colormaps
     
    777794              double *offset) const;
    778795    void initCamera(bool initCameraMode = false);
     796
    779797    void initAxes();
    780798    void resetAxes(double bounds[6] = NULL);
     799    void setAxesRanges();
     800    void computeAxesScale();
     801
    781802    void setCameraClippingPlanes();
    782803
     
    802823    FieldRangeHashmap _vectorCellDataRange;
    803824    FieldRangeHashmap _vectorCompCellDataRange[3];
     825
     826    bool _axesAutoBounds[3];
     827    AxisRangeMode _axesRangeMode[3];
     828    double _axesScale[3];
    804829
    805830    ColorMapHashmap _colorMaps;
     
    832857    vtkSmartPointer<vtkPlaneCollection> _activeClipPlanes;
    833858#ifdef USE_CUSTOM_AXES
    834     vtkSmartPointer<vtkRpCubeAxesActor> _cubeAxesActor; // For 3D view
    835     vtkSmartPointer<vtkRpCubeAxesActor2D> _cubeAxesActor2D; // For 2D view
     859    vtkSmartPointer<vtkRpCubeAxesActor> _cubeAxesActor;
    836860#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;
    841862#endif
    842863    vtkSmartPointer<vtkScalarBarActor> _scalarBarActor;
  • branches/Rappture 1.2/packages/vizservers/vtkvis/RpVtkRendererCmd.cpp

    r3228 r3230  
    635635
    636636static int
     637AxisAutoRangeOp(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
     662static int
    637663AxisColorOp(ClientData clientData, Tcl_Interp *interp, int objc,
    638664            Tcl_Obj *const *objv)
     
    936962
    937963static int
     964AxisOriginOp(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
     985static int
     986AxisRangeOp(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
     1012static int
     1013AxisScaleOp(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
     1038static int
    9381039AxisTicksVisibleOp(ClientData clientData, Tcl_Interp *interp, int objc,
    9391040                   Tcl_Obj *const *objv)
     
    11411242
    11421243static Rappture::CmdSpec axisOps[] = {
     1244    {"autorange",1, AxisAutoRangeOp, 4, 4, "axis bool"},
    11431245    {"color",    1, AxisColorOp, 5, 5, "r g b"},
    11441246    {"flymode",  2, AxisFlyModeOp, 3, 3, "mode"},
     
    11551257    {"minticks", 1, AxisMinorTicksVisibleOp, 4, 4, "axis bool"},
    11561258    {"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"},
    11571262    {"tfont",    3, AxisTitleFontOp, 4, 4, "axis font"},
    11581263    {"tfsize",   3, AxisTitleFontSizeOp, 4, 4, "axis fontSize"},
  • branches/Rappture 1.2/packages/vizservers/vtkvis/protocol.txt

    r3224 r3230  
    4242         Force a new image to be rendered - use for advancing animation
    4343
     44axis 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
    4449axis color <r> <g> <b>
    4550     Set color of axis lines, labels, titles, ticks
     
    6873     <formatString> = printf style format string
    6974axis 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
    7177     <axis> = x|y|z|all
    7278     <fontSizePts> = Font size in points
     
    8793     <axis> = x|y|z|all
    8894     <title> = Title of axis
     95axis 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
     100axis 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
     108axis 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
    89113axis tickpos <position>
    90114     Set position of ticks on 3D axes (not implemented for 2D axes)
     
    98122     <fontName> = Arial|Courier|Times
    99123axis 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
    101126     <axis> = x|y|z|all
    102127     <fontSizePts> = Font size in points
Note: See TracChangeset for help on using the changeset viewer.