Ignore:
Timestamp:
Sep 8, 2011 4:33:52 PM (13 years ago)
Author:
ldelgass
Message:

Add constant color, colormode options for pseudocolor: color by scalar, vector
magnitude, vector component, or constant. Add 'normscale' command to glyphs to
toggle clamping/normalizing data values to [0,1] range before applying scale
factor.

Location:
trunk/packages/vizservers/vtkvis
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/vtkvis/CmdProc.cpp

    r2123 r2492  
    33 * Copyright (C) 2011, Purdue Research Foundation
    44 *
    5  * Author: ?
     5 * Author: George A. Howlett <gah@purdue.edu>
    66 */
    77
  • trunk/packages/vizservers/vtkvis/CmdProc.h

    r2123 r2492  
    33 * Copyright (C) 2011, Purdue Research Foundation
    44 *
    5  * Author: ?
     5 * Author: George A. Howlett <gah@purdue.edu>
    66 */
    77
  • trunk/packages/vizservers/vtkvis/PPMWriter.cpp

    r2260 r2492  
    33 * Copyright (C) 2011, Purdue Research Foundation
    44 *
    5  * Author: ?
     5 * Author: George A. Howlett <gah@purdue.edu>
    66 */
    77
  • trunk/packages/vizservers/vtkvis/PPMWriter.h

    r2100 r2492  
    33 * Copyright (C) 2011, Purdue Research Foundation
    44 *
    5  * Author: ?
     5 * Author: George A. Howlett <gah@purdue.edu>
    66 */
    77
  • trunk/packages/vizservers/vtkvis/RpGlyphs.cpp

    r2467 r2492  
    3535    _dataScale(1.0),
    3636    _scaleFactor(1.0),
     37    _normalizeScale(true),
    3738    _colorMode(COLOR_BY_SCALAR),
    3839    _colorMap(NULL)
     
    230231    // Normalize sizes to [0,1] * ScaleFactor
    231232#ifdef HAVE_GLYPH3D_MAPPER
    232     _glyphMapper->ClampingOn();
     233    _glyphMapper->SetClamping(_normalizeScale ? 1 : 0);
    233234    _glyphMapper->SetScaleFactor(_scaleFactor * _dataScale);
    234235    _glyphMapper->ScalingOn();
    235236#else
    236     _glyphGenerator->ClampingOn();
     237    _glyphGenerator->SetClamping(_normalizeScale ? 1 : 0);
    237238    _glyphGenerator->SetScaleFactor(_scaleFactor * _dataScale);
    238239    _glyphGenerator->ScalingOn();
     
    258259    _pdMapper->Update();
    259260#endif
     261}
     262
     263/**
     264 * \brief Control if field data range is normalized to [0,1] before
     265 * applying scale factor
     266 */
     267void Glyphs::setNormalizeScale(bool normalize)
     268{
     269    if (_normalizeScale != normalize) {
     270        _normalizeScale = normalize;
     271#ifdef HAVE_GLYPH3D_MAPPER
     272        if (_glyphMapper != NULL) {
     273            _glyphMapper->SetClamping(_normalizeScale ? 1 : 0);
     274        }
     275#else
     276        if (_glyphGenerator != NULL) {
     277            _glyphGenerator->SetClamping(_normalizeScale ? 1 : 0);
     278        }
     279#endif
     280    }
    260281}
    261282
  • trunk/packages/vizservers/vtkvis/RpGlyphs.h

    r2467 r2492  
    7777    void setScalingMode(ScalingMode mode);
    7878
     79    void setNormalizeScale(bool normalize);
     80
    7981    void setColorMode(ColorMode mode);
    8082
     
    116118    double _dataScale;
    117119    double _scaleFactor;
     120    bool _normalizeScale;
    118121    ColorMode _colorMode;
    119122    ColorMap *_colorMap;
  • trunk/packages/vizservers/vtkvis/RpPseudoColor.cpp

    r2459 r2492  
    3131PseudoColor::PseudoColor() :
    3232    VtkGraphicsObject(),
     33    _colorMode(COLOR_BY_SCALAR),
    3334    _colorMap(NULL)
    3435{
     
    4546}
    4647
     48void PseudoColor::setDataSet(DataSet *dataSet,
     49                             bool useCumulative,
     50                             double scalarRange[2],
     51                             double vectorMagnitudeRange[2],
     52                             double vectorComponentRange[3][2])
     53{
     54    if (_dataSet != dataSet) {
     55        _dataSet = dataSet;
     56
     57        if (useCumulative) {
     58            _dataRange[0] = scalarRange[0];
     59            _dataRange[1] = scalarRange[1];
     60            _vectorMagnitudeRange[0] = vectorMagnitudeRange[0];
     61            _vectorMagnitudeRange[1] = vectorMagnitudeRange[1];
     62            for (int i = 0; i < 3; i++) {
     63                _vectorComponentRange[i][0] = vectorComponentRange[i][0];
     64                _vectorComponentRange[i][1] = vectorComponentRange[i][1];
     65            }
     66        } else {
     67            _dataSet->getScalarRange(_dataRange);
     68            _dataSet->getVectorRange(_vectorMagnitudeRange);
     69            for (int i = 0; i < 3; i++) {
     70                _dataSet->getVectorRange(_vectorComponentRange[i], i);
     71            }
     72        }
     73
     74        update();
     75    }
     76}
     77
    4778/**
    4879 * \brief Internal method to set up pipeline after a state change
     
    6091        // Map scalars through lookup table regardless of type
    6192        _dsMapper->SetColorModeToMapScalars();
     93        //_dsMapper->InterpolateScalarsBeforeMappingOn();
    6294    }
    6395
     
    150182        setColorMap(ColorMap::getDefault());
    151183    }
    152     //_dsMapper->InterpolateScalarsBeforeMappingOn();
     184
     185    setColorMode(_colorMode);
    153186
    154187    initProp();
     
    165198        _dataRange[0] = scalarRange[0];
    166199        _dataRange[1] = scalarRange[1];
     200        _vectorMagnitudeRange[0] = vectorMagnitudeRange[0];
     201        _vectorMagnitudeRange[1] = vectorMagnitudeRange[1];
     202        for (int i = 0; i < 3; i++) {
     203            _vectorComponentRange[i][0] = vectorComponentRange[i][0];
     204            _vectorComponentRange[i][1] = vectorComponentRange[i][1];
     205        }
    167206    } else if (_dataSet != NULL) {
    168207        _dataSet->getScalarRange(_dataRange);
    169     }
    170 
    171     if (_lut != NULL) {
    172         _lut->SetRange(_dataRange);
     208        _dataSet->getVectorRange(_vectorMagnitudeRange);
     209        for (int i = 0; i < 3; i++) {
     210            _dataSet->getVectorRange(_vectorComponentRange[i], i);
     211        }
     212    }
     213
     214    // Need to update color map ranges and/or active vector field
     215    setColorMode(_colorMode);
     216}
     217
     218void PseudoColor::setColorMode(ColorMode mode)
     219{
     220    _colorMode = mode;
     221    if (_dataSet == NULL || _dsMapper == NULL)
     222        return;
     223
     224    vtkDataSet *ds = _dataSet->getVtkDataSet();
     225
     226    switch (mode) {
     227    case COLOR_BY_SCALAR: {
     228        _dsMapper->ScalarVisibilityOn();
     229        _dsMapper->SetScalarModeToDefault();
     230        if (_lut != NULL) {
     231            _lut->SetRange(_dataRange);
     232        }
     233    }
     234        break;
     235    case COLOR_BY_VECTOR_MAGNITUDE: {
     236        _dsMapper->ScalarVisibilityOn();
     237        _dsMapper->SetScalarModeToUsePointFieldData();
     238        if (ds->GetPointData() != NULL &&
     239            ds->GetPointData()->GetVectors() != NULL) {
     240            _dsMapper->SelectColorArray(ds->GetPointData()->GetVectors()->GetName());
     241        }
     242        if (_lut != NULL) {
     243            _lut->SetRange(_vectorMagnitudeRange);
     244            _lut->SetVectorModeToMagnitude();
     245        }
     246    }
     247        break;
     248    case COLOR_BY_VECTOR_X:
     249        _dsMapper->ScalarVisibilityOn();
     250        _dsMapper->SetScalarModeToUsePointFieldData();
     251        if (ds->GetPointData() != NULL &&
     252            ds->GetPointData()->GetVectors() != NULL) {
     253            _dsMapper->SelectColorArray(ds->GetPointData()->GetVectors()->GetName());
     254        }
     255        if (_lut != NULL) {
     256            _lut->SetRange(_vectorComponentRange[0]);
     257            _lut->SetVectorModeToComponent();
     258            _lut->SetVectorComponent(0);
     259        }
     260        break;
     261    case COLOR_BY_VECTOR_Y:
     262        _dsMapper->ScalarVisibilityOn();
     263        _dsMapper->SetScalarModeToUsePointFieldData();
     264        if (ds->GetPointData() != NULL &&
     265            ds->GetPointData()->GetVectors() != NULL) {
     266            _dsMapper->SelectColorArray(ds->GetPointData()->GetVectors()->GetName());
     267        }
     268        if (_lut != NULL) {
     269            _lut->SetRange(_vectorComponentRange[1]);
     270            _lut->SetVectorModeToComponent();
     271            _lut->SetVectorComponent(1);
     272        }
     273        break;
     274    case COLOR_BY_VECTOR_Z:
     275        _dsMapper->ScalarVisibilityOn();
     276        _dsMapper->SetScalarModeToUsePointFieldData();
     277        if (ds->GetPointData() != NULL &&
     278            ds->GetPointData()->GetVectors() != NULL) {
     279            _dsMapper->SelectColorArray(ds->GetPointData()->GetVectors()->GetName());
     280        }
     281        if (_lut != NULL) {
     282            _lut->SetRange(_vectorComponentRange[2]);
     283            _lut->SetVectorModeToComponent();
     284            _lut->SetVectorComponent(2);
     285        }
     286        break;
     287    case COLOR_CONSTANT:
     288    default:
     289        _dsMapper->ScalarVisibilityOff();
     290        break;
    173291    }
    174292}
     
    201319
    202320    _lut->DeepCopy(cmap->getLookupTable());
    203     _lut->SetRange(_dataRange);
     321
     322    switch (_colorMode) {
     323    case COLOR_CONSTANT:
     324    case COLOR_BY_SCALAR:
     325        _lut->SetRange(_dataRange);
     326        break;
     327    case COLOR_BY_VECTOR_MAGNITUDE:
     328        _lut->SetVectorModeToMagnitude();
     329        _lut->SetRange(_vectorMagnitudeRange);
     330        break;
     331    case COLOR_BY_VECTOR_X:
     332        _lut->SetVectorModeToComponent();
     333        _lut->SetVectorComponent(0);
     334        _lut->SetRange(_vectorComponentRange[0]);
     335        break;
     336    case COLOR_BY_VECTOR_Y:
     337        _lut->SetVectorModeToComponent();
     338        _lut->SetVectorComponent(1);
     339        _lut->SetRange(_vectorComponentRange[1]);
     340        break;
     341    case COLOR_BY_VECTOR_Z:
     342        _lut->SetVectorModeToComponent();
     343        _lut->SetVectorComponent(2);
     344        _lut->SetRange(_vectorComponentRange[2]);
     345        break;
     346    default:
     347         break;
     348    }
    204349}
    205350
  • trunk/packages/vizservers/vtkvis/RpPseudoColor.h

    r2459 r2492  
    2626class PseudoColor : public VtkGraphicsObject {
    2727public:
     28    enum ColorMode {
     29        COLOR_BY_SCALAR,
     30        COLOR_BY_VECTOR_MAGNITUDE,
     31        COLOR_BY_VECTOR_X,
     32        COLOR_BY_VECTOR_Y,
     33        COLOR_BY_VECTOR_Z,
     34        COLOR_CONSTANT
     35    };
     36
    2837    PseudoColor();
    2938    virtual ~PseudoColor();
     
    3443    }
    3544
     45    virtual void setDataSet(DataSet *dataSet,
     46                            bool useCumulative,
     47                            double scalarRange[2],
     48                            double vectorMagnitudeRange[2],
     49                            double vectorComponentRange[3][2]);
     50
    3651    virtual void setClippingPlanes(vtkPlaneCollection *planes);
     52
     53    void setColorMode(ColorMode mode);
    3754
    3855    void setColorMap(ColorMap *colorMap);
     
    5673    virtual void update();
    5774
     75    ColorMode _colorMode;
    5876    ColorMap *_colorMap;
     77    double _vectorMagnitudeRange[2];
     78    double _vectorComponentRange[3][2];
    5979
    6080    vtkSmartPointer<vtkLookupTable> _lut;
  • trunk/packages/vizservers/vtkvis/RpVtkRenderer.cpp

    r2480 r2492  
    30013001
    30023002/**
     3003 * \brief Controls if field data range is normalized to [0,1] before
     3004 * applying scale factor for the given DataSet
     3005 */
     3006void Renderer::setGlyphsNormalizeScale(const DataSetId& id, bool normalize)
     3007{
     3008    GlyphsHashmap::iterator itr;
     3009
     3010    bool doAll = false;
     3011
     3012    if (id.compare("all") == 0) {
     3013        itr = _glyphs.begin();
     3014        doAll = true;
     3015    } else {
     3016        itr = _glyphs.find(id);
     3017    }
     3018    if (itr == _glyphs.end()) {
     3019        ERROR("Glyphs not found: %s", id.c_str());
     3020        return;
     3021    }
     3022
     3023    do {
     3024        itr->second->setNormalizeScale(normalize);
     3025    } while (doAll && ++itr != _glyphs.end());
     3026
     3027    _renderer->ResetCameraClippingRange();
     3028    _needsRedraw = true;
     3029}
     3030
     3031/**
    30033032 * \brief Set the shape of Glyphs for the given DataSet
    30043033 */
     
    55545583
    55555584/**
     5585 * \brief Set the RGB color for the specified DataSet
     5586 */
     5587void Renderer::setPseudoColorColor(const DataSetId& id, float color[3])
     5588{
     5589    PseudoColorHashmap::iterator itr;
     5590
     5591    bool doAll = false;
     5592
     5593    if (id.compare("all") == 0) {
     5594        itr = _pseudoColors.begin();
     5595        doAll = true;
     5596    } else {
     5597        itr = _pseudoColors.find(id);
     5598    }
     5599    if (itr == _pseudoColors.end()) {
     5600        ERROR("PseudoColor not found: %s", id.c_str());
     5601        return;
     5602    }
     5603
     5604    do {
     5605        itr->second->setColor(color);
     5606    } while (doAll && ++itr != _pseudoColors.end());
     5607
     5608    _needsRedraw = true;
     5609}
     5610
     5611/**
    55565612 * \brief Associate an existing named color map with a PseudoColor for the given DataSet
    55575613 */
     
    55855641
    55865642        itr->second->setColorMap(cmap);
     5643    } while (doAll && ++itr != _pseudoColors.end());
     5644
     5645    _needsRedraw = true;
     5646}
     5647
     5648/**
     5649 * \brief Set the color mode for the specified DataSet
     5650 */
     5651void Renderer::setPseudoColorColorMode(const DataSetId& id, PseudoColor::ColorMode mode)
     5652{
     5653    PseudoColorHashmap::iterator itr;
     5654
     5655    bool doAll = false;
     5656
     5657    if (id.compare("all") == 0) {
     5658        itr = _pseudoColors.begin();
     5659        doAll = true;
     5660    } else {
     5661        itr = _pseudoColors.find(id);
     5662    }
     5663    if (itr == _pseudoColors.end()) {
     5664        ERROR("PseudoColor not found: %s", id.c_str());
     5665        return;
     5666    }
     5667
     5668    do {
     5669        itr->second->setColorMode(mode);
    55875670    } while (doAll && ++itr != _pseudoColors.end());
    55885671
  • trunk/packages/vizservers/vtkvis/RpVtkRenderer.h

    r2478 r2492  
    375375    void setGlyphsScalingMode(const DataSetId& id, Glyphs::ScalingMode mode);
    376376
     377    void setGlyphsNormalizeScale(const DataSetId& id, bool normalize);
     378
    377379    void setGlyphsScaleFactor(const DataSetId& id, double scale);
    378380
     
    557559    void setPseudoColorScale(const DataSetId& id, double scale[3]);
    558560
     561    void setPseudoColorColor(const DataSetId& id, float color[3]);
     562
    559563    void setPseudoColorEdgeVisibility(const DataSetId& id, bool state);
    560564
     
    572576
    573577    void setPseudoColorColorMap(const DataSetId& id, const ColorMapId& colorMapId);
     578
     579    void setPseudoColorColorMode(const DataSetId& id, PseudoColor::ColorMode mode);
    574580
    575581    // Streamlines
  • trunk/packages/vizservers/vtkvis/RpVtkRendererCmd.cpp

    r2478 r2492  
    18341834
    18351835static int
     1836GlyphsNormalizeScaleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     1837                       Tcl_Obj *const *objv)
     1838{
     1839    bool normalize;
     1840    if (GetBooleanFromObj(interp, objv[2], &normalize) != TCL_OK) {
     1841        return TCL_ERROR;
     1842    }
     1843    if (objc == 4) {
     1844        const char *name = Tcl_GetString(objv[3]);
     1845        g_renderer->setGlyphsNormalizeScale(name, normalize);
     1846    } else {
     1847        g_renderer->setGlyphsNormalizeScale("all", normalize);
     1848    }
     1849    return TCL_OK;
     1850}
     1851
     1852static int
    18361853GlyphsOpacityOp(ClientData clientData, Tcl_Interp *interp, int objc,
    18371854                Tcl_Obj *const *objv)
     
    20402057    {"linecolor", 5, GlyphsLineColorOp, 5, 6, "r g b ?dataSetName?"},
    20412058    {"linewidth", 5, GlyphsLineWidthOp, 3, 4, "width ?dataSetName?"},
     2059    {"normscale", 1, GlyphsNormalizeScaleOp, 3, 4, "bool ?dataSetName?"},
    20422060    {"opacity",   2, GlyphsOpacityOp, 3, 4, "value ?dataSetName?"},
    20432061    {"orient",    2, GlyphsOrientOp, 6, 7, "qw qx qy qz ?dataSetName?"},
     
    35323550
    35333551static int
     3552PseudoColorColorOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3553                   Tcl_Obj *const *objv)
     3554{
     3555    float color[3];
     3556    if (GetFloatFromObj(interp, objv[2], &color[0]) != TCL_OK ||
     3557        GetFloatFromObj(interp, objv[3], &color[1]) != TCL_OK ||
     3558        GetFloatFromObj(interp, objv[4], &color[2]) != TCL_OK) {
     3559        return TCL_ERROR;
     3560    }
     3561    if (objc == 6) {
     3562        const char *name = Tcl_GetString(objv[5]);
     3563        g_renderer->setPseudoColorColor(name, color);
     3564    } else {
     3565        g_renderer->setPseudoColorColor("all", color);
     3566    }
     3567    return TCL_OK;
     3568}
     3569
     3570static int
    35343571PseudoColorColorMapOp(ClientData clientData, Tcl_Interp *interp, int objc,
    35353572                      Tcl_Obj *const *objv)
     
    35413578    } else {
    35423579        g_renderer->setPseudoColorColorMap("all", colorMapName);
     3580    }
     3581    return TCL_OK;
     3582}
     3583
     3584static int
     3585PseudoColorColorModeOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3586                       Tcl_Obj *const *objv)
     3587{
     3588    PseudoColor::ColorMode mode;
     3589    const char *str = Tcl_GetString(objv[2]);
     3590    if (str[0] == 'c' && strcmp(str, "ccolor") == 0) {
     3591        mode = PseudoColor::COLOR_CONSTANT;
     3592    } else if (str[0] == 's' && strcmp(str, "scalar") == 0) {
     3593        mode = PseudoColor::COLOR_BY_SCALAR;
     3594    } else if (str[0] == 'v' && strcmp(str, "vmag") == 0) {
     3595        mode = PseudoColor::COLOR_BY_VECTOR_MAGNITUDE;
     3596    } else if (str[0] == 'v' && strcmp(str, "vx") == 0) {
     3597        mode = PseudoColor::COLOR_BY_VECTOR_X;
     3598    } else if (str[0] == 'v' && strcmp(str, "vy") == 0) {
     3599        mode = PseudoColor::COLOR_BY_VECTOR_Y;
     3600    } else if (str[0] == 'v' && strcmp(str, "vz") == 0) {
     3601        mode = PseudoColor::COLOR_BY_VECTOR_Z;
     3602    } else {
     3603        Tcl_AppendResult(interp, "bad color mode option \"", str,
     3604                         "\": should be one of: 'scalar', 'vmag', 'vx', 'vy', 'vz', 'ccolor'", (char*)NULL);
     3605        return TCL_ERROR;
     3606    }
     3607    if (objc == 4) {
     3608        const char *name = Tcl_GetString(objv[3]);
     3609        g_renderer->setPseudoColorColorMode(name, mode);
     3610    } else {
     3611        g_renderer->setPseudoColorColorMode("all", mode);
    35433612    }
    35443613    return TCL_OK;
     
    37393808static Rappture::CmdSpec pseudoColorOps[] = {
    37403809    {"add",       1, PseudoColorAddOp, 2, 3, "?dataSetName?"},
    3741     {"colormap",  1, PseudoColorColorMapOp, 3, 4, "colorMapName ?dataSetName?"},
     3810    {"ccolor",    2, PseudoColorColorOp, 5, 6, "r g b ?dataSetName?"},
     3811    {"colormap",  7, PseudoColorColorMapOp, 3, 4, "colorMapName ?dataSetNme?"},
     3812    {"colormode", 7, PseudoColorColorModeOp, 3, 4, "mode ?dataSetNme?"},
    37423813    {"delete",    1, PseudoColorDeleteOp, 2, 3, "?dataSetName?"},
    37433814    {"edges",     1, PseudoColorEdgeVisibilityOp, 3, 4, "bool ?dataSetName?"},
  • trunk/packages/vizservers/vtkvis/vtkRpCubeAxesActor2D.cpp

    r2423 r2492  
    22
    33  Program:   Visualization Toolkit
    4   Module:    vtkCubeAxesActor2D.cxx
     4  Module:    vtkCubeAxesActor2D.cpp
    55
    66  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
Note: See TracChangeset for help on using the changeset viewer.