Ignore:
Timestamp:
Apr 16, 2013 12:52:20 AM (7 years ago)
Author:
ldelgass
Message:

Nanovis refactoring to fix problems with scaling and multiple results.
Do rendering in world space to properly place and scale multiple data sets.
Also fix flows to reduce resets of animations. More work toward removing
Cg dependency. Fix panning to convert viewport coords to world coords.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/FlowCmd.cpp

    r3611 r3630  
    104104
    105105Rappture::SwitchSpec FlowParticles::_switches[] = {
    106     {Rappture::SWITCH_CUSTOM, "-axis", "string",
     106    {Rappture::SWITCH_CUSTOM, "-axis", "axis",
    107107     offsetof(FlowParticlesValues, position.axis), 0, 0, &axisSwitch},
    108108    {Rappture::SWITCH_CUSTOM, "-color", "{r g b a}",
     
    197197    }
    198198    flow->data(dataPtr);
    199     NanoVis::eventuallyRedraw(NanoVis::MAP_FLOWS);
     199    Flow::updatePending = true;
     200    NanoVis::eventuallyRedraw();
    200201    return TCL_OK;
    201202}
     
    266267        dataPtr->convert(u2dPtr);
    267268        delete u2dPtr;
     269#if 0
     270    } else if ((length > 14) && (strncmp(bytes, "# vtk DataFile", 14) == 0)) {
     271        TRACE("VTK loading...");
     272        std::stringstream fdata;
     273        fdata.write(bytes, length);
     274        if (length <= 0) {
     275            ERROR("data buffer is empty");
     276            abort();
     277        }
     278        Rappture::Outcome context;
     279        volume = load_vtk_volume_stream(context, tag, fdata);
     280        if (volume == NULL) {
     281            Tcl_AppendResult(interp, context.remark(), (char*)NULL);
     282            return TCL_ERROR;
     283        }
     284#endif
    268285    } else {
    269286        TRACE("header is %.14s", buf.bytes());
     
    307324#endif
    308325    }
    309     NanoVis::eventuallyRedraw(NanoVis::MAP_FLOWS);
     326    Flow::updatePending = true;
     327    NanoVis::eventuallyRedraw();
    310328    return TCL_OK;
    311329}
     
    353371    const char *string = Tcl_GetString(objPtr);
    354372    if (string[1] == '\0') {
    355         Flow::SliceAxis *axisPtr = (Flow::SliceAxis *)(record + offset);
     373        FlowSliceAxis *axisPtr = (FlowSliceAxis *)(record + offset);
    356374        char c;
    357375        c = tolower((unsigned char)string[0]);
    358376        if (c == 'x') {
    359             *axisPtr = Flow::AXIS_X;
     377            *axisPtr = AXIS_X;
    360378            return TCL_OK;
    361379        } else if (c == 'y') {
    362             *axisPtr = Flow::AXIS_Y;
     380            *axisPtr = AXIS_Y;
    363381            return TCL_OK;
    364382        } else if (c == 'z') {
    365             *axisPtr = Flow::AXIS_Z;
     383            *axisPtr = AXIS_Z;
    366384            return TCL_OK;
    367385        }
     
    564582        return TCL_ERROR;
    565583    }
    566     NanoVis::eventuallyRedraw(NanoVis::MAP_FLOWS);
     584    if (flow->configure()) {
     585        Flow::updatePending = true;
     586    }
     587    NanoVis::eventuallyRedraw();
    567588    return TCL_OK;
    568589}
     
    587608    }
    588609    particles->configure();
     610    Flow::updatePending = true;
    589611    NanoVis::eventuallyRedraw();
    590612    Tcl_SetObjResult(interp, objv[3]);
     
    608630        return TCL_ERROR;
    609631    }
    610     particles->configure();
    611     NanoVis::eventuallyRedraw(NanoVis::MAP_FLOWS);
     632    if (particles->configure()) {
     633        Flow::updatePending = true;
     634    }
     635    NanoVis::eventuallyRedraw();
    612636    return TCL_OK;
    613637}
     
    815839        return TCL_ERROR;
    816840    }
    817     if (NanoVis::flags & NanoVis::MAP_FLOWS) {
     841    if (Flow::updatePending) {
    818842        NanoVis::mapFlows();
    819843    }
    820     NanoVis::renderLegend(tf, NanoVis::magMin, NanoVis::magMax, w, h, label);
     844    NanoVis::renderLegend(tf, Flow::magMin, Flow::magMax, w, h, label);
    821845    return TCL_OK;
    822846}
     
    905929        }
    906930    }
    907     NanoVis::eventuallyRedraw(NanoVis::MAP_FLOWS);
     931    Flow::updatePending = true;
     932    NanoVis::eventuallyRedraw();
    908933    return TCL_OK;
    909934}
     
    939964    }
    940965    NanoVis::resetFlows();
    941     if (NanoVis::flags & NanoVis::MAP_FLOWS) {
     966    if (Flow::updatePending) {
    942967        NanoVis::mapFlows();
    943968    }
    944     NanoVis::advectFlows();
    945969    for (int i = 0; i < nSteps; i++) {
    946         if (NanoVis::licRenderer->active()) {
    947             NanoVis::licRenderer->convolve();
    948         }
     970        NanoVis::licRenderer->convolve();
    949971        NanoVis::advectFlows();
    950972    }
     
    974996{
    975997    assert(NanoVis::licRenderer != NULL);
    976     if (NanoVis::flags & NanoVis::MAP_FLOWS) {
     998    if (Flow::updatePending) {
    977999        NanoVis::mapFlows();
    9781000    }
    979     NanoVis::eventuallyRedraw();
    9801001    NanoVis::licRenderer->convolve();
    9811002    NanoVis::advectFlows();
     1003    NanoVis::eventuallyRedraw();
    9821004    return TCL_OK;
    9831005}
     
    11011123            break;
    11021124        }
    1103         if (NanoVis::licRenderer->active()) {
    1104             NanoVis::licRenderer->convolve();
    1105         }
     1125
     1126        NanoVis::licRenderer->convolve();
    11061127        NanoVis::advectFlows();
    11071128
Note: See TracChangeset for help on using the changeset viewer.