Changeset 4635


Ignore:
Timestamp:
Sep 18, 2014, 2:01:56 PM (10 years ago)
Author:
ldelgass
Message:

Add resources directory command line option, preliminary testing of new map
coords syntax

Location:
geovis/trunk
Files:
3 added
5 edited

Legend:

Unmodified
Added
Removed
  • geovis/trunk/Makefile.in

    r4629 r4635  
    145145SERVER=geovis
    146146
    147 .PHONY: all docs install clean clean-docs distclean
     147resources       = \
     148                $(srcdir)/resources/placemark32.png \
     149                $(srcdir)/resources/world.tif
     150
     151.PHONY: all docs install install-resources clean clean-docs distclean
    148152
    149153all: $(SERVER)
     
    156160        $(CXX) -o $@ $(SERVER_OBJS) $(LIBS)
    157161
    158 install: all
     162install: install-server install-resources
     163
     164install-server: all
    159165        $(INSTALL_PROGRAM) $(SERVER) $(bindir)
     166
     167install-resources:
     168        $(MKDIR_P) $(libdir)/resources
     169        @for i in $(resources) ; do \
     170            echo "installing $$i..." ; \
     171            $(INSTALL_DATA) $$i $(libdir)/resources ; \
     172        done
    160173
    161174%.o: %.cpp
  • geovis/trunk/RenderServer.cpp

    r4632 r4635  
    292292    signal(SIGPIPE, SIG_IGN);
    293293
    294     //const char *resourcePath = NULL;
     294    std::string resourcePath;
    295295    while (1) {
    296296        int c = getopt(argc, argv, "p:i:o:");
     
    300300        switch (c) {
    301301        case 'p':
    302             //resourcePath = optarg;
     302            resourcePath = optarg;
    303303            break;
    304304        case 'i': {
     
    351351    g_renderer = new Renderer();
    352352    g_inBufPtr = new ReadBuffer(g_fdIn, 1<<12);
     353
     354    if (resourcePath.empty()) {
     355        resourcePath = "/usr/share/osgearth/data";
     356    }
     357    g_renderer->setResourcePath(resourcePath);
    353358
    354359    Tcl_Interp *interp = Tcl_CreateInterp();
  • geovis/trunk/Renderer.cpp

    r4632 r4635  
    7878     (((t2).tv_sec - (t1).tv_sec))*1.0e+3 + (double)((t2).tv_usec - (t1).tv_usec)/1.0e+3)
    7979
    80 #define BASE_IMAGE "/usr/share/osgearth/data/world.tif"
    81 #define PIN_ICON "/usr/share/osgearth/data/placemark32.png"
     80#define BASE_IMAGE "world.tif"
     81#define PIN_ICON "placemark32.png"
    8282
    8383using namespace GeoVis;
     
    107107        TRACE("Setting base URI: %s", _baseURI.c_str());
    108108    }
    109 
    110 #if 0
    111     initViewer();
    112 
    113     osgEarth::MapOptions mapOpts;
    114     mapOpts.coordSysType() = osgEarth::MapOptions::CSTYPE_PROJECTED;
    115     mapOpts.profile() = osgEarth::ProfileOptions("global-mercator");
    116     osgEarth::Map *map = new osgEarth::Map(mapOpts);
    117     _map = map;
    118     osgEarth::Drivers::GDALOptions bopts;
    119     bopts.url() = BASE_IMAGE;
    120     addImageLayer("base", bopts);
    121 #ifdef USE_OSGEARTH_TRUNK
    122     osgEarth::Drivers::MPTerrainEngine::MPTerrainEngineOptions mpOpt;
    123 #else
    124     osgEarth::Drivers::MPTerrainEngineOptions mpOpt;
    125 #endif
    126     // Set background layer color
    127     mpOpt.color() = osg::Vec4(1, 1, 1, 1);
    128     //mpOpt.minLOD() = 1;
    129     osgEarth::MapNodeOptions mapNodeOpts(mpOpt);
    130     mapNodeOpts.enableLighting() = false;
    131     osgEarth::MapNode *mapNode = new osgEarth::MapNode(map, mapNodeOpts);
    132     _mapNode = mapNode;
    133     _sceneRoot = new osg::Group;
    134     _sceneRoot->addChild(mapNode);
    135     _viewer->setSceneData(_sceneRoot.get());
    136 
    137     initEarthManipulator();
    138     initControls();
    139 
    140     finalizeViewer();
    141 #endif
    142 
    143 #ifdef DEBUG
    144     if (_viewer.valid() && _viewer->getViewerStats() != NULL) {
    145         TRACE("Enabling stats");
    146         _viewer->getViewerStats()->collectStats("scene", true);
    147     }
    148 #endif
    149 #if 0
    150     if (_viewer.valid()) {
    151         osgViewer::ViewerBase::Windows windows;
    152         _viewer->getWindows(windows);
    153         if (windows.size() == 1) {
    154             windows[0]->setSyncToVBlank(false);
    155         } else {
    156             ERROR("Num windows: %lu", windows.size());
    157         }
    158     }
    159 #endif
    160109}
    161110
     
    179128
    180129    TRACE("Leave");
     130}
     131
     132std::string Renderer::getBaseImage()
     133{
     134    std::ostringstream oss;
     135    oss << _resourcePath << "/" << BASE_IMAGE;
     136    return oss.str();
     137}
     138
     139std::string Renderer::getPinIcon()
     140{
     141    std::ostringstream oss;
     142    oss << _resourcePath << "/" << PIN_ICON;
     143    return oss.str();
    181144}
    182145
     
    301264    _viewer->addEventHandler(_stateManip);
    302265    //_viewer->addEventHandler(new osgViewer::StatsHandler());
     266
     267#ifdef DEBUG
     268    if (_viewer->getViewerStats() != NULL) {
     269        TRACE("Enabling stats");
     270        _viewer->getViewerStats()->collectStats("scene", true);
     271    }
     272#endif
     273#if 0
     274    osgViewer::ViewerBase::Windows windows;
     275    _viewer->getWindows(windows);
     276    if (windows.size() == 1) {
     277        windows[0]->setSyncToVBlank(false);
     278    } else {
     279        ERROR("Num windows: %lu", windows.size());
     280    }
     281#endif
    303282}
    304283
     
    709688    _map = map;
    710689    osgEarth::Drivers::GDALOptions bopts;
    711     bopts.url() = BASE_IMAGE;
     690    bopts.url() = getBaseImage();
    712691    addImageLayer("base", bopts);
    713692#ifdef USE_OSGEARTH_TRUNK
     
    12551234
    12561235    osgEarth::Symbology::Style pin;
    1257     pin.getOrCreate<osgEarth::Symbology::IconSymbol>()->url()->setLiteral(PIN_ICON);
     1236    pin.getOrCreate<osgEarth::Symbology::IconSymbol>()->url()->setLiteral(getPinIcon());
    12581237    osgEarth::Annotation::AnnotationNode *anno = new osgEarth::Annotation::PlaceNode(_mapNode, osgEarth::GeoPoint(geoSRS, longitude, latitude), labelText, pin);
    12591238    _placeNodes->addChild(anno);
  • geovis/trunk/Renderer.h

    r4632 r4635  
    129129    virtual ~Renderer();
    130130
     131    void setResourcePath(std::string& path)
     132    {
     133        TRACE("Set resource path to %s", path.c_str());
     134        _resourcePath = path;
     135    }
     136
     137    std::string getBaseImage();
     138
     139    std::string getPinIcon();
     140
    131141    // Colormaps
    132142
     
    453463    ColorMapHashmap _colorMaps;
    454464
     465    std::string _resourcePath;
    455466    std::string _baseURI;
    456467    std::string _cacheDir;
  • geovis/trunk/RendererCmd.cpp

    r4632 r4635  
    1313#include <string>
    1414#include <sstream>
     15#include <limits>
    1516#include <vector>
    1617#include <unistd.h>
     
    766767    return (*proc) (clientData, interp, objc, objv);
    767768}
    768 
     769#if 1
     770static int
     771MapCoordsOp(ClientData clientData, Tcl_Interp *interp, int objc,
     772            Tcl_Obj *const *objv)
     773{
     774    int tokenLength;
     775    const char *token = Tcl_GetStringFromObj(objv[2], &tokenLength);
     776    int numCoords;
     777    Tcl_Obj **coords;
     778    if (Tcl_ListObjGetElements(interp, objv[3], &numCoords, &coords) != TCL_OK) {
     779        return TCL_ERROR;
     780    }
     781    if (numCoords == 0) {
     782        Tcl_AppendResult(interp, "no x,y coordinates in list", (char *)NULL);
     783        return TCL_ERROR;
     784    }
     785    if (numCoords & 1) {
     786        Tcl_AppendResult(interp, "odd number of x, y coordinates in list",
     787                         (char *)NULL);
     788        return TCL_ERROR;
     789    }
     790    const osgEarth::SpatialReference *outSRS = NULL;
     791    if (objc > 4) {
     792        std::string srsInit;
     793        std::string verticalDatum;
     794        srsInit = Tcl_GetString(objv[4]);
     795        if (objc > 5) {
     796            verticalDatum = Tcl_GetString(objv[5]);
     797        }
     798        outSRS = osgEarth::SpatialReference::get(srsInit, verticalDatum);
     799        if (outSRS == NULL) {
     800            Tcl_AppendResult(interp, "bad SRS \"", srsInit.c_str(), "\"",
     801                             (char*)NULL);
     802            return TCL_ERROR;
     803        }
     804    }
     805    Tcl_Obj *listObjPtr = Tcl_NewListObj(0, (Tcl_Obj **)NULL);
     806    std::vector<osg::Vec3d> coordVec;
     807    for (int i = 0; i < numCoords; i += 2) {
     808        int x, y;
     809        if ((Tcl_GetIntFromObj(interp, coords[i], &x) != TCL_OK) ||
     810            (Tcl_GetIntFromObj(interp, coords[i+1], &y) != TCL_OK)) {
     811            return TCL_ERROR;
     812        }
     813        osgEarth::GeoPoint mapPoint;
     814        if (g_renderer->mapMouseCoords(x, y, mapPoint)) {
     815            // altmode absolute
     816            coordVec.push_back(osg::Vec3d(mapPoint.x(), mapPoint.y(), mapPoint.z()));
     817#if 0
     818            if (outSRS != NULL) {
     819                mapPoint = mapPoint.transform(outSRS);
     820                if (!mapPoint.isValid()) {
     821                    Tcl_DecrRefCount(listObjPtr);
     822                    Tcl_AppendResult(interp, "Could not transform map point to requested SRS", (char*)NULL);
     823                    return TCL_ERROR;
     824                }
     825            }
     826            Tcl_Obj *objPtr = Tcl_NewDoubleObj(mapPoint.x());
     827            Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     828            objPtr = Tcl_NewDoubleObj(mapPoint.y());
     829            Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     830            objPtr = Tcl_NewDoubleObj(mapPoint.z());
     831            Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     832#endif
     833        } else {
     834            coordVec.push_back(osg::Vec3d(std::numeric_limits<double>::quiet_NaN(),
     835                                          std::numeric_limits<double>::quiet_NaN(),
     836                                          std::numeric_limits<double>::quiet_NaN()));
     837#if 0
     838            Tcl_Obj *objPtr = Tcl_NewStringObj("NaN", 3);
     839            Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     840            Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     841            Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     842#endif
     843        }
     844    }
     845    if (outSRS != NULL) {
     846        g_renderer->getMapSRS()->transform(coordVec, outSRS);
     847    } else {
     848        outSRS = g_renderer->getMapSRS();
     849    }
     850    for (std::vector<osg::Vec3d>::iterator itr = coordVec.begin();
     851         itr != coordVec.end(); ++itr) {
     852        Tcl_Obj *objPtr = Tcl_NewDoubleObj(itr->x());
     853        Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     854        objPtr = Tcl_NewDoubleObj(itr->y());
     855        Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     856        objPtr = Tcl_NewDoubleObj(itr->z());
     857        Tcl_ListObjAppendElement(interp, listObjPtr, objPtr);
     858    }
     859    // send coords to client
     860    int listLength;
     861    const char *string = Tcl_GetStringFromObj(listObjPtr, &listLength);
     862    size_t length = listLength + tokenLength +
     863        outSRS->getHorizInitString().length() +
     864        outSRS->getVertInitString().length() +
     865        25;
     866    char *mesg = new char[length];
     867    length = snprintf(mesg, length, "nv>map coords %s {%s} {%s} {%s}\n", token, string,
     868                      outSRS->getHorizInitString().c_str(),
     869                      outSRS->getVertInitString().c_str());
     870    Tcl_DecrRefCount(listObjPtr);
     871    queueResponse(mesg, length, Response::VOLATILE);
     872    delete [] mesg;
     873    return TCL_OK;
     874}
     875#else
    769876static int
    770877MapCoordsOp(ClientData clientData, Tcl_Interp *interp, int objc,
     
    821928    return TCL_OK;
    822929}
    823 
     930#endif
    824931static int
    825932MapGraticuleOp(ClientData clientData, Tcl_Interp *interp, int objc,
     
    16361743
    16371744static CmdSpec mapOps[] = {
    1638     {"coords",   1, MapCoordsOp,          5, 7, "token x y ?srs? ?verticalDatum?"},
     1745    {"coords",   1, MapCoordsOp,          4, 6, "token coords ?srs? ?verticalDatum?"},
    16391746    {"grid",     1, MapGraticuleOp,       3, 4, "bool ?type?"},
    16401747    {"layer",    2, MapLayerOp,           3, 0, "op ?params...?"},
Note: See TracChangeset for help on using the changeset viewer.