Ignore:
Timestamp:
Apr 7, 2014 3:51:09 AM (10 years ago)
Author:
ldelgass
Message:

Let's try this: automatically set the client stored viewpoint on every image
response. Currently this uses a 'camera set' right before the image response
rather than adding the parameters to the image response itself.

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

Legend:

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

    r4320 r4328  
    5656#endif
    5757#endif
     58
     59static int
     60queueViewpoint()
     61{
     62    osgEarth::Viewpoint view = g_renderer->getViewpoint();
     63
     64    std::ostringstream oss;
     65    size_t len = 0;
     66    oss << "nv>camera get "
     67        << view.x() << " "
     68        << view.y() << " "
     69        << view.z() << " "
     70        << view.getHeading() << " "
     71        << view.getPitch() << " "
     72        << view.getRange()
     73        << " {" << ((view.getSRS() == NULL) ? "" : view.getSRS()->getHorizInitString()) << "}"
     74        << " {" << ((view.getSRS() == NULL) ? "" : view.getSRS()->getVertInitString()) << "}"
     75        << "\n";
     76    len = oss.str().size();
     77#ifdef USE_THREADS
     78    queueResponse(oss.str().c_str(), len, Response::VOLATILE);
     79#else
     80    ssize_t bytesWritten = SocketWrite(oss.str().c_str(), len);
     81
     82    if (bytesWritten < 0) {
     83        return TCL_ERROR;
     84    }
     85#endif /*USE_THREADS*/
     86    return TCL_OK;
     87}
    5888
    5989#ifdef USE_THREADS
     
    536566                if (imgData->s() == g_renderer->getWindowWidth() &&
    537567                    imgData->t() == g_renderer->getWindowHeight()) {
     568                    queueViewpoint();
    538569#ifdef USE_THREADS
    539570                    queueFrame(g_outQueue, imgData->data());
  • trunk/packages/vizservers/geovis/Renderer.cpp

    r4322 r4328  
    656656{
    657657    if (_manipulator.valid()) {
     658        TRACE("Setting viewpoint: %g %g %g %g %g %g",
     659              v.x(), v.y(), v.z(), v.getHeading(), v.getPitch(), v.getRange());
    658660        _manipulator->setViewpoint(v, durationSecs);
    659661        _needsRedraw = true;
     662    } else {
     663        ERROR("No manipulator");
    660664    }
    661665}
     
    11151119        TRACE("camDist: %g", _manipulator->getDistance());
    11161120        // FIXME: zoom here wants y mouse coords in normalized viewport coords
    1117         //_manipulator->zoom(0, y);
    1118 
     1121#if 1
     1122       _manipulator->zoom(0, y);
     1123#else
    11191124        double dist = _manipulator->getDistance();
    11201125        dist *= (1.0 + y);
    11211126        _manipulator->setDistance(dist);
    1122 
     1127#endif
    11231128        _needsRedraw = true;
    11241129    }
Note: See TracChangeset for help on using the changeset viewer.