Changeset 3961


Ignore:
Timestamp:
Sep 26, 2013 11:16:53 PM (10 years ago)
Author:
ldelgass
Message:

Add volume blendmode option for VTK volume renderer. Also, don't change field
active scalar if requested field not found in dataset (previously, active
scalar field would be cleared to NULL if field not found).

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

Legend:

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

    r3873 r3961  
    392392    bool found = false;
    393393    if (_dataSet != NULL) {
    394         if (_dataSet->GetPointData() != NULL) {
    395             if (_dataSet->GetPointData()->SetActiveScalars(name) >= 0) {
    396                 TRACE("Set active point data scalars to %s", name);
    397                 found = true;
    398             }
    399         }
    400         if (_dataSet->GetCellData() != NULL) {
    401             if (_dataSet->GetCellData()->SetActiveScalars(name) >= 0) {
    402                 TRACE("Set active cell data scalars to %s", name);
    403                 found = true;
     394        if (!hasField(name)) {
     395            ERROR("No field named %s in %s", name, getName().c_str());
     396        } else {
     397            if (_dataSet->GetPointData() != NULL) {
     398                if (_dataSet->GetPointData()->SetActiveScalars(name) >= 0) {
     399                    TRACE("Set active point data scalars for %s to %s", getName().c_str(), name);
     400                    found = true;
     401                }
     402            }
     403            if (_dataSet->GetCellData() != NULL) {
     404                if (_dataSet->GetCellData()->SetActiveScalars(name) >= 0) {
     405                    TRACE("Set active cell data scalars for %s to %s", getName().c_str(), name);
     406                    found = true;
     407                }
    404408            }
    405409        }
     
    408412    if (_dataSet->GetPointData() != NULL) {
    409413        if (_dataSet->GetPointData()->GetScalars() != NULL) {
    410             TRACE("Point data scalars: %s", _dataSet->GetPointData()->GetScalars()->GetName());
     414            TRACE("Point data scalars for %s: %s", getName().c_str(), _dataSet->GetPointData()->GetScalars()->GetName());
    411415        } else {
    412             TRACE("NULL point data scalars");
     416            TRACE("NULL point data scalars for %s", getName().c_str());
    413417        }
    414418    }
    415419    if (_dataSet->GetCellData() != NULL) {
    416420        if (_dataSet->GetCellData()->GetScalars() != NULL) {
    417             TRACE("Cell data scalars: %s", _dataSet->GetCellData()->GetScalars()->GetName());
     421            TRACE("Cell data scalars for %s: %s", getName().c_str(), _dataSet->GetCellData()->GetScalars()->GetName());
    418422        } else {
    419             TRACE("NULL cell data scalars");
     423            TRACE("NULL cell data scalars for %s", getName().c_str());
    420424        }
    421425    }
  • trunk/packages/vizservers/vtkvis/Image.h

    r3773 r3961  
    7070            return;
    7171
    72         TRACE("slice # %d, (%d,%d), whole z: (%d,%d)",
     72        TRACE("before slice # %d, (%d,%d), whole z: (%d,%d)",
    7373              actor->GetSliceNumber(), actor->GetSliceNumberMin(), actor->GetSliceNumberMax(),
    7474              actor->GetZSlice(), actor->GetWholeZMin(), actor->GetWholeZMax());
    7575
    7676        actor->SetZSlice(z);
     77
     78        TRACE("after slice # %d, (%d,%d), whole z: (%d,%d)",
     79              actor->GetSliceNumber(), actor->GetSliceNumberMin(), actor->GetSliceNumberMax(),
     80              actor->GetZSlice(), actor->GetWholeZMin(), actor->GetWholeZMax());
    7781    }
    7882
  • trunk/packages/vizservers/vtkvis/Renderer.h

    r3861 r3961  
    940940    // Volumes
    941941
     942    void setVolumeBlendMode(const DataSetId& id, Volume::BlendMode mode);
     943
    942944    void setVolumeSampleDistance(const DataSetId& id, double distance);
    943945
  • trunk/packages/vizservers/vtkvis/RendererCmd.cpp

    r3928 r3961  
    1179211792
    1179311793static int
     11794VolumeBlendModeOp(ClientData clientData, Tcl_Interp *interp, int objc,
     11795                  Tcl_Obj *const *objv)
     11796{
     11797    Volume::BlendMode mode;
     11798    const char *string = Tcl_GetString(objv[2]);
     11799    char c = string[0];
     11800    if ((c == 'c') && (strcmp(string, "composite") == 0)) {
     11801        mode = Volume::BLEND_COMPOSITE;
     11802    } else if ((c == 'm') && (strcmp(string, "max_intensity") == 0)) {
     11803        mode = Volume::BLEND_MAX_INTENSITY;
     11804    } else if ((c == 'm') && (strcmp(string, "min_intensity") == 0)) {
     11805        mode = Volume::BLEND_MIN_INTENSITY;
     11806    } else if ((c == 'a') && (strcmp(string, "additive") == 0)) {
     11807        mode = Volume::BLEND_ADDITIVE;
     11808    } else {
     11809        Tcl_AppendResult(interp, "bad blendmode option \"", string,
     11810                         "\": should be copmosite, max_intensity, min_intensity,  or additive", (char*)NULL);
     11811        return TCL_ERROR;
     11812    }
     11813    if (objc == 4) {
     11814        const char *dataSetName = Tcl_GetString(objv[3]);
     11815        g_renderer->setVolumeBlendMode(dataSetName, mode);
     11816    } else {
     11817        g_renderer->setVolumeBlendMode("all", mode);
     11818    }
     11819    return TCL_OK;
     11820}
     11821
     11822static int
    1179411823VolumeColorMapOp(ClientData clientData, Tcl_Interp *interp, int objc,
    1179511824                 Tcl_Obj *const *objv)
     
    1203512064static Rappture::CmdSpec volumeOps[] = {
    1203612065    {"add",          1, VolumeAddOp,        2, 3, "?dataSetName?"},
     12066    {"blendmode",    1, VolumeBlendModeOp,  3, 4, "blendMode ?dataSetName?"},
    1203712067    {"colormap",     1, VolumeColorMapOp,   3, 4, "colorMapName ?dataSetName?"},
    1203812068    {"delete",       1, VolumeDeleteOp,     2, 3, "?dataSetName?"},
  • trunk/packages/vizservers/vtkvis/RendererGraphicsObjs.cpp

    r3861 r3961  
    41824182}
    41834183
     4184void Renderer::setVolumeBlendMode(const DataSetId& id, Volume::BlendMode mode)
     4185{
     4186    VolumeHashmap::iterator itr;
     4187
     4188    bool doAll = false;
     4189
     4190    if (id.compare("all") == 0) {
     4191        itr = _volumes.begin();
     4192        if (itr == _volumes.end())
     4193            return;
     4194        doAll = true;
     4195    } else {
     4196        itr = _volumes.find(id);
     4197    }
     4198    if (itr == _volumes.end()) {
     4199        ERROR("Volume not found: %s", id.c_str());
     4200        return;
     4201    }
     4202
     4203    do {
     4204        itr->second->setBlendMode(mode);
     4205    } while (doAll && ++itr != _volumes.end());
     4206
     4207    _needsRedraw = true;
     4208}
     4209
    41844210/**
    41854211 * \brief Set the sample rate for the volume shader
  • trunk/packages/vizservers/vtkvis/Volume.cpp

    r3866 r3961  
    290290    }
    291291}
     292
     293/**
     294 * \brief Set Volume renderer blending mode
     295 */
     296void Volume::setBlendMode(BlendMode mode)
     297{
     298    if (_volumeMapper != NULL) {
     299        vtkVolumeMapper *mapper = vtkVolumeMapper::SafeDownCast(_volumeMapper);
     300        if (mapper == NULL) {
     301            TRACE("Mapper does not support BlendMode");
     302            return;
     303        }
     304        switch (mode) {
     305        case BLEND_COMPOSITE:
     306            mapper->SetBlendModeToComposite();
     307            break;
     308        case BLEND_MAX_INTENSITY:
     309            mapper->SetBlendModeToMaximumIntensity();
     310            break;
     311        case BLEND_MIN_INTENSITY:
     312            mapper->SetBlendModeToMinimumIntensity();
     313            break;
     314        case BLEND_ADDITIVE:
     315            mapper->SetBlendModeToAdditive();
     316            break;
     317        default:
     318            ERROR("Unknown BlendMode");
     319        }
     320    }
     321}
  • trunk/packages/vizservers/vtkvis/Volume.h

    r3621 r3961  
    2929public:
    3030    enum BlendMode {
    31         COMPOSITE = 0,
    32         MAX_INTENSITY,
    33         MIN_INTENSITY
     31        BLEND_COMPOSITE = 0,
     32        BLEND_MAX_INTENSITY,
     33        BLEND_MIN_INTENSITY,
     34        BLEND_ADDITIVE
    3435    };
    3536
     
    6061    void setSampleDistance(float d);
    6162
     63    void setBlendMode(BlendMode mode);
     64
    6265private:
    6366    virtual void initProp();
  • trunk/packages/vizservers/vtkvis/protocol.txt

    r3861 r3961  
    892892
    893893volume add <?datasetName?>
     894volume blendmode <mode> <?dataSetName?>
     895       blendmode = composite|max_intensity|min_intensity|additive
    894896volume colormap <colorMapName> <?datasetName?>
    895897volume delete <?datasetName?>
Note: See TracChangeset for help on using the changeset viewer.