Changeset 6549 for geovis


Ignore:
Timestamp:
Sep 22, 2016 1:33:36 PM (8 years ago)
Author:
ldelgass
Message:

Add geovis support for WMS-T animated sequence

Location:
geovis/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • geovis/trunk/Renderer.cpp

    r6518 r6549  
    5151#include <osgEarth/ModelLayer>
    5252#include <osgEarth/DateTime>
     53#include <osgEarth/TimeControl>
    5354#ifdef USE_RTT_PICKER
    5455#include <osgEarthUtil/RTTPicker>
     
    14831484        TRACE("Image layer not found: %s", name);
    14841485    }
     1486}
     1487
     1488bool Renderer::layerHasSequence(const char *name)
     1489{
     1490    if (!_map.valid()) {
     1491        ERROR("No map");
     1492        return false;
     1493    }
     1494    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
     1495    if (layer != NULL) {
     1496        osgEarth::SequenceControl *seq = layer->getSequenceControl();
     1497        if (seq == NULL) {
     1498            TRACE("Image layer has no SequenceControl: %s", name);
     1499            return false;
     1500        }
     1501        return seq->supportsSequenceControl();
     1502    }
     1503    TRACE("Image layer not found: %s", name);
     1504    return false;
     1505}
     1506
     1507bool Renderer::sequencePause(const char *name)
     1508{
     1509    if (!_map.valid()) {
     1510        ERROR("No map");
     1511        return false;
     1512    }
     1513    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
     1514    if (layer != NULL) {
     1515        osgEarth::SequenceControl *seq = layer->getSequenceControl();
     1516        if (seq == NULL || !seq->supportsSequenceControl()) {
     1517            TRACE("Image layer has no SequenceControl: %s", name);
     1518            return false;
     1519        }
     1520        seq->pauseSequence();
     1521        _needsRedraw = true;
     1522        return true;
     1523    }
     1524    TRACE("Image layer not found: %s", name);
     1525    return false;
     1526}
     1527
     1528bool Renderer::sequencePlay(const char *name)
     1529{
     1530    if (!_map.valid()) {
     1531        ERROR("No map");
     1532        return false;
     1533    }
     1534    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
     1535    if (layer != NULL) {
     1536        osgEarth::SequenceControl *seq = layer->getSequenceControl();
     1537        if (seq == NULL || !seq->supportsSequenceControl()) {
     1538            TRACE("Image layer has no SequenceControl: %s", name);
     1539            return false;
     1540        }
     1541        seq->playSequence();
     1542        _needsRedraw = true;
     1543        return true;
     1544    }
     1545    TRACE("Image layer not found: %s", name);
     1546    return false;
     1547}
     1548
     1549bool Renderer::sequenceSeek(const char *name, unsigned int frame)
     1550{
     1551    if (!_map.valid()) {
     1552        ERROR("No map");
     1553        return false;
     1554    }
     1555    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
     1556    if (layer != NULL) {
     1557        osgEarth::SequenceControl *seq = layer->getSequenceControl();
     1558        if (seq == NULL || !seq->supportsSequenceControl()) {
     1559            TRACE("Image layer has no SequenceControl: %s", name);
     1560            return false;
     1561        }
     1562        seq->seekToSequenceFrame(frame);
     1563        _needsRedraw = true;
     1564        return true;
     1565    }
     1566    TRACE("Image layer not found: %s", name);
     1567    return false;
    14851568}
    14861569
  • geovis/trunk/Renderer.h

    r6518 r6549  
    291291
    292292    void removeColorFilter(const char *name, int idx = -1);
     293
     294    // Sequence control
     295
     296    bool layerHasSequence(const char *name);
     297
     298    bool sequencePause(const char *name);
     299
     300    bool sequencePlay(const char *name);
     301
     302    bool sequenceSeek(const char *name, unsigned int frame);
    293303
    294304    // Elevation raster layers
  • geovis/trunk/RendererCmd.cpp

    r6528 r6549  
    16661666            opts.format() = format;
    16671667            opts.transparent() = transparent;
     1668            if (objc > 12) {
     1669                char *times = Tcl_GetString(objv[12]);
     1670                opts.times() = times;
     1671            }
     1672            if (objc > 13) {
     1673                double frameSeconds;
     1674                if (Tcl_GetDoubleFromObj(interp, objv[13], &frameSeconds) != TCL_OK) {
     1675                    return TCL_ERROR;
     1676                }
     1677                opts.secondsPerFrame() = frameSeconds;
     1678            }
    16681679
    16691680            ret = g_renderer->addImageLayer(name, opts, pos, cache, coverage, shared, visible, minLOD, maxLOD);
     
    31863197
    31873198static int
     3199MapSequencePauseOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3200                   Tcl_Obj *const *objv)
     3201{
     3202    const char *layer = Tcl_GetString(objv[3]);
     3203    bool ret = g_renderer->sequencePause(layer);
     3204    if (!ret) {
     3205        Tcl_AppendResult(interp, "Layer \"", layer,
     3206                         "\" doesn't exist or has no sequence", (char *)NULL);
     3207        return TCL_ERROR;
     3208    }
     3209
     3210    return TCL_OK;
     3211}
     3212
     3213static int
     3214MapSequencePlayOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3215                  Tcl_Obj *const *objv)
     3216{
     3217    const char *layer = Tcl_GetString(objv[3]);
     3218    bool ret = g_renderer->sequencePause(layer);
     3219    if (!ret) {
     3220        Tcl_AppendResult(interp, "Layer \"", layer,
     3221                         "\" doesn't exist or has no sequence", (char *)NULL);
     3222        return TCL_ERROR;
     3223    }
     3224
     3225    return TCL_OK;
     3226}
     3227
     3228static int
     3229MapSequenceSeekOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3230                  Tcl_Obj *const *objv)
     3231{
     3232    const char *layer = Tcl_GetString(objv[4]);
     3233    int frame;
     3234    if (Tcl_GetIntFromObj(interp, objv[3], &frame) != TCL_OK) {
     3235        return TCL_ERROR;
     3236    }
     3237    bool ret = g_renderer->sequenceSeek(layer, (unsigned int)frame);
     3238    if (!ret) {
     3239        Tcl_AppendResult(interp, "Layer \"", layer,
     3240                         "\" doesn't exist or has no sequence", (char *)NULL);
     3241        return TCL_ERROR;
     3242    }
     3243
     3244    return TCL_OK;
     3245}
     3246
     3247static CmdSpec mapSequenceOps[] = {
     3248    {"pause", 2, MapSequencePauseOp, 4, 4, "layerName"},
     3249    {"play",  2, MapSequencePlayOp,  4, 4, "layerName"},
     3250    {"seek",  1, MapSequenceSeekOp,  5, 5, "frame layerName"},
     3251};
     3252static int nMapSequenceOps = NumCmdSpecs(mapSequenceOps);
     3253
     3254static int
     3255MapSequenceOp(ClientData clientData, Tcl_Interp *interp, int objc,
     3256           Tcl_Obj *const *objv)
     3257{
     3258    Tcl_ObjCmdProc *proc;
     3259
     3260    proc = GetOpFromObj(interp, nMapSequenceOps, mapSequenceOps,
     3261                        CMDSPEC_ARG2, objc, objv, 0);
     3262    if (proc == NULL) {
     3263        return TCL_ERROR;
     3264    }
     3265    return (*proc) (clientData, interp, objc, objv);
     3266}
     3267
     3268static int
    31883269MapSetPositionOp(ClientData clientData, Tcl_Interp *interp, int objc,
    31893270            Tcl_Obj *const *objv)
     
    33783459    {"reset",    1, MapResetOp,           6, 11, "type r g b ?profile xmin ymin xmax ymax?"},
    33793460    {"scalebar", 1, MapScaleBarOp,        3, 4, "bool ?units?"},
    3380     {"setpos",   1, MapSetPositionOp,     2, 4, "x y"},
     3461    {"sequence", 3, MapSequenceOp,        3, 0, "op ?params...?"},
     3462    {"setpos",   3, MapSetPositionOp,     2, 4, "x y"},
    33813463    {"terrain",  1, MapTerrainOp,         3, 0, "op ?params...?"},
    33823464    {"time",     1, MapTimeOp,            2, 6, "?hours? ?day? ?month? ?year?"},
  • geovis/trunk/geovis_protocol.txt

    r6524 r6549  
    226226    <coverage> = bool indicating if data should not be interpolated (true means
    227227    no interpolation)
    228 map layer add <layerName> image wms <url> <cache> <coverage> <layers> <format> <transparent>
     228map layer add <layerName> image wms <url> <cache> <coverage> <layers> <format> <transparent> <?times?> <?frameSeconds?>
    229229    Add a WMS image layer from a URL + layer string
    230230    <url> = URL of WMS service
     
    235235    <format> = Image format to return (e.g. 'png')
    236236    <transparent> = bool
     237    <times> = optional comma separated list of timestamps for WMS-T
     238    <frameSeconds> = time in seconds to display each animated frame for WMS-T
    237239map layer add <layerName> image tms <url> <cache> <coverage>
    238240    Add a TMS image layer from a URL
Note: See TracChangeset for help on using the changeset viewer.