Changeset 4036 for trunk/packages


Ignore:
Timestamp:
Nov 6, 2013, 12:50:36 AM (11 years ago)
Author:
ldelgass
Message:

Add type parameter to layer add, first pass at feature layers.

Location:
trunk/packages/vizservers/geovis
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/geovis/Renderer.cpp

    r4033 r4036  
    2626#include <osgEarth/ModelLayer>
    2727#include <osgEarthUtil/EarthManipulator>
     28#include <osgEarthUtil/AutoClipPlaneHandler>
    2829#include <osgEarthUtil/MouseCoordsTool>
    2930
     
    128129    _mouseCoordsTool = new osgEarth::Util::MouseCoordsTool(mapNode);
    129130    _mouseCoordsTool->addCallback(_coordsCallback.get());
     131    if (_clipPlaneCullCallback.valid()) {
     132        _viewer->getCamera()->removeCullCallback(_clipPlaneCullCallback.get());
     133        _clipPlaneCullCallback = NULL;
     134    }
     135    if (_map->isGeocentric()) {
     136        _clipPlaneCullCallback = new osgEarth::Util::AutoClipPlaneCullCallback(mapNode);
     137        _viewer->getCamera()->addCullCallback(_clipPlaneCullCallback.get());
     138    }
    130139    _viewer->addEventHandler(_mouseCoordsTool.get());
    131140    _viewer->setSceneData(_sceneRoot.get());
     
    162171    _mouseCoordsTool->addCallback(_coordsCallback.get());
    163172    _viewer->addEventHandler(_mouseCoordsTool.get());
     173
     174    if (_clipPlaneCullCallback.valid()) {
     175        _viewer->getCamera()->removeCullCallback(_clipPlaneCullCallback.get());
     176        _clipPlaneCullCallback = NULL;
     177    }
     178    if (_map->isGeocentric()) {
     179        _clipPlaneCullCallback = new osgEarth::Util::AutoClipPlaneCullCallback(mapNode);
     180        _viewer->getCamera()->addCullCallback(_clipPlaneCullCallback.get());
     181    }
    164182    _viewer->setSceneData(_sceneRoot.get());
    165183    _manipulator = new osgEarth::Util::EarthManipulator;
     
    172190}
    173191
     192void Renderer::clearMap()
     193{
     194    if (_map.valid()) {
     195        _map->clear();
     196    }
     197}
     198
    174199bool Renderer::mapMouseCoords(float mouseX, float mouseY, osgEarth::GeoPoint& map)
    175200{
     
    191216{
    192217    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
    193     _map->removeImageLayer(layer);
     218    if (layer != NULL) {
     219        _map->removeImageLayer(layer);
     220    }
    194221}
    195222
     
    197224{
    198225    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
    199     _map->moveImageLayer(layer, pos);
     226    if (layer != NULL) {
     227        _map->moveImageLayer(layer, pos);
     228    }
    200229}
    201230
     
    203232{
    204233    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
    205     layer->setOpacity(opacity);
     234    if (layer != NULL) {
     235        layer->setOpacity(opacity);
     236    }
    206237}
    207238
     
    210241#if OSGEARTH_MIN_VERSION_REQUIRED(2, 4, 0)
    211242    osgEarth::ImageLayer *layer = _map->getImageLayerByName(name);
    212     layer->setVisible(state);
     243    if (layer != NULL) {
     244        layer->setVisible(state);
     245    }
    213246#endif
    214247}
     
    223256{
    224257    osgEarth::ElevationLayer *layer = _map->getElevationLayerByName(name);
    225     _map->removeElevationLayer(layer);
     258    if (layer != NULL) {
     259        _map->removeElevationLayer(layer);
     260    }
    226261}
    227262
     
    229264{
    230265    osgEarth::ElevationLayer *layer = _map->getElevationLayerByName(name);
    231     _map->moveElevationLayer(layer, pos);
     266    if (layer != NULL) {
     267        _map->moveElevationLayer(layer, pos);
     268    }
     269}
     270
     271void Renderer::setElevationLayerVisibility(const char *name, bool state)
     272{
     273#if OSGEARTH_MIN_VERSION_REQUIRED(2, 4, 0)
     274    osgEarth::ElevationLayer *layer = _map->getElevationLayerByName(name);
     275    if (layer != NULL) {
     276        layer->setVisible(state);
     277    }
     278#endif
    232279}
    233280
     
    241288{
    242289    osgEarth::ModelLayer *layer = _map->getModelLayerByName(name);
    243     _map->removeModelLayer(layer);
     290    if (layer != NULL) {
     291        _map->removeModelLayer(layer);
     292    }
    244293}
    245294
     
    247296{
    248297    osgEarth::ModelLayer *layer = _map->getModelLayerByName(name);
    249     _map->moveModelLayer(layer, pos);
     298    if (layer != NULL) {
     299        _map->moveModelLayer(layer, pos);
     300    }
     301}
     302
     303void Renderer::setModelLayerVisibility(const char *name, bool state)
     304{
     305#if OSGEARTH_MIN_VERSION_REQUIRED(2, 4, 0)
     306    osgEarth::ModelLayer *layer = _map->getModelLayerByName(name);
     307    if (layer != NULL) {
     308        layer->setVisible(state);
     309    }
     310#endif
    250311}
    251312
  • trunk/packages/vizservers/geovis/Renderer.h

    r4033 r4036  
    2828#include <osgEarthUtil/EarthManipulator>
    2929#include <osgEarthUtil/MouseCoordsTool>
     30#include <osgEarthUtil/AutoClipPlaneHandler>
    3031
    3132#include "Types.h"
     
    134135    void resetMap(osgEarth::MapOptions::CoordinateSystemType type, const char *profile = NULL);
    135136
     137    void clearMap();
     138
    136139    // Map options
    137140
     
    140143    // Image raster layers
    141144
     145    int getNumImageLayers() const
     146    {
     147        return (_map.valid() ? _map->getNumImageLayers() : 0);
     148    }
     149
    142150    void addImageLayer(const char *name, const osgEarth::TileSourceOptions& opts);
    143151
     
    152160    // Elevation raster layers
    153161
     162    int getNumElevationLayers() const
     163    {
     164        return (_map.valid() ? _map->getNumElevationLayers() : 0);
     165    }
     166
    154167    void addElevationLayer(const char *name, const osgEarth::TileSourceOptions& opts);
    155168
     
    158171    void moveElevationLayer(const char *name, unsigned int pos);
    159172
     173    void setElevationLayerVisibility(const char *name, bool state);
     174
    160175    // Model layers
    161176
     177    int getNumModelLayers() const
     178    {
     179        return (_map.valid() ? _map->getNumModelLayers() : 0);
     180    }
     181
    162182    void addModelLayer(const char *name, const osgEarth::ModelSourceOptions& opts);
    163183
     
    165185
    166186    void moveModelLayer(const char *name, unsigned int pos);
     187
     188    void setModelLayerVisibility(const char *name, bool state);
    167189
    168190    // Render window
     
    252274    osg::ref_ptr<osgViewer::Viewer> _viewer;
    253275    osg::ref_ptr<ScreenCaptureCallback> _captureCallback;
     276    osg::ref_ptr<osgEarth::Util::AutoClipPlaneCullCallback> _clipPlaneCullCallback;
    254277    osg::ref_ptr<osgEarth::Util::MouseCoordsTool> _mouseCoordsTool;
    255278    osg::ref_ptr<MouseCoordsCallback> _coordsCallback;
  • trunk/packages/vizservers/geovis/RendererCmd.cpp

    r4033 r4036  
    1919#include <tcl.h>
    2020
     21#include <osgEarthFeatures/FeatureModelSource>
     22#include <osgEarthSymbology/Color>
     23#include <osgEarthSymbology/Style>
     24#include <osgEarthSymbology/StyleSheet>
     25#include <osgEarthSymbology/LineSymbol>
     26
    2127#include <osgEarthDrivers/gdal/GDALOptions>
     28#include <osgEarthDrivers/model_feature_geom/FeatureGeomModelOptions>
     29#include <osgEarthDrivers/feature_ogr/OGRFeatureOptions>
    2230
    2331#include "Trace.h"
     
    381389              Tcl_Obj *const *objv)
    382390{
    383     osgEarth::Drivers::GDALOptions opts;
    384     char *url =  Tcl_GetString(objv[3]);
    385     char *name = Tcl_GetString(objv[4]);
    386 
    387     opts.url() = url;
    388 
    389     g_renderer->addImageLayer(name, opts);
    390 
     391    char *type = Tcl_GetString(objv[3]);
     392    if (type[0] == 'i' && strcmp(type, "image") == 0) {
     393        osgEarth::Drivers::GDALOptions opts;
     394        char *url =  Tcl_GetString(objv[4]);
     395        char *name = Tcl_GetString(objv[5]);
     396
     397        opts.url() = url;
     398
     399        g_renderer->addImageLayer(name, opts);
     400    } else if (type[0] == 'e' && strcmp(type, "elevation") == 0) {
     401        osgEarth::Drivers::GDALOptions opts;
     402        char *url =  Tcl_GetString(objv[4]);
     403        char *name = Tcl_GetString(objv[5]);
     404
     405        opts.url() = url;
     406
     407        g_renderer->addElevationLayer(name, opts);
     408    } else if (type[0] == 'm' && strcmp(type, "model") == 0) {
     409        osgEarth::Drivers::OGRFeatureOptions opts;
     410        char *url =  Tcl_GetString(objv[4]);
     411        char *name = Tcl_GetString(objv[5]);
     412        opts.url() = url;
     413
     414        osgEarth::Symbology::Style style;
     415        osgEarth::Symbology::LineSymbol *ls = style.getOrCreateSymbol<osgEarth::Symbology::LineSymbol>();
     416        ls->stroke()->color() = osgEarth::Symbology::Color::Black;
     417        ls->stroke()->width() = 2.0f;
     418
     419        osgEarth::Drivers::FeatureGeomModelOptions geomOpts;
     420        geomOpts.featureOptions() = opts;
     421        geomOpts.styles() = new osgEarth::Symbology::StyleSheet();
     422        geomOpts.styles()->addStyle(style);
     423        geomOpts.enableLighting() = false;
     424        g_renderer->addModelLayer(name, geomOpts);
     425    } else {
     426        Tcl_AppendResult(interp, "unknown map layer type \"", type,
     427                         "\": should be 'image', 'elevation' or 'model'", (char*)NULL);
     428        return TCL_ERROR;
     429    }
    391430    return TCL_OK;
    392431}
     
    399438        char *name = Tcl_GetString(objv[3]);
    400439        g_renderer->removeImageLayer(name);
     440        g_renderer->removeElevationLayer(name);
     441        g_renderer->removeModelLayer(name);
    401442    } else {
    402         g_renderer->removeImageLayer("all");
     443        g_renderer->clearMap();
    403444    }
    404445
     
    421462    }
    422463    g_renderer->moveImageLayer(name, (unsigned int)pos);
     464    g_renderer->moveElevationLayer(name, (unsigned int)pos);
     465    g_renderer->moveModelLayer(name, (unsigned int)pos);
    423466
    424467    return TCL_OK;
     
    455498
    456499    g_renderer->setImageLayerVisibility(name, visible);
     500    g_renderer->setElevationLayerVisibility(name, visible);
     501    g_renderer->setModelLayerVisibility(name, visible);
    457502
    458503    return TCL_OK;
     
    460505
    461506static Rappture::CmdSpec mapLayerOps[] = {
    462     {"add",     1, MapLayerAddOp,       5, 5, "type url name"},
     507    {"add",     1, MapLayerAddOp,       6, 6, "type url name"},
    463508    {"delete",  1, MapLayerDeleteOp,    3, 4, "?name?"},
    464509    {"move",    1, MapLayerMoveOp,      5, 5, "pos name"},
     
    548593
    549594static Rappture::CmdSpec mapOps[] = {
    550     {"layer",    2, MapLayerOp,       3, 5, "op ?params...?"},
     595    {"layer",    2, MapLayerOp,       3, 6, "op ?params...?"},
    551596    {"load",     2, MapLoadOp,        4, 5, "options"},
    552597    {"reset",    1, MapResetOp,       3, 4, "type ?profile?"},
Note: See TracChangeset for help on using the changeset viewer.