Ignore:
Timestamp:
Apr 1, 2014 8:57:56 PM (10 years ago)
Author:
ldelgass
Message:

Add protocol to get/set viewport parameters

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

Legend:

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

    r4312 r4313  
    955955 * \param[in] absolute Control if pan amount is relative to current or absolute
    956956 */
    957 void Renderer::panCamera(double x, double y, bool absolute)
    958 {
    959     TRACE("Enter: %g %g, abs: %d",
    960           x, y, (absolute ? 1 : 0));
     957void Renderer::panCamera(double x, double y)
     958{
     959    TRACE("Enter: %g %g", x, y);
    961960
    962961    if (_manipulator.valid()) {
     
    967966}
    968967
    969 void Renderer::rotateCamera(double x, double y, bool absolute)
    970 {
    971     TRACE("Enter: %g %g, abs: %d",
    972           x, y, (absolute ? 1 : 0));
     968void Renderer::rotateCamera(double x, double y)
     969{
     970    TRACE("Enter: %g %g", x, y);
    973971
    974972    if (_manipulator.valid()) {
     
    984982 * \param[in] absolute Control if zoom factor is relative to current setting or absolute
    985983 */
    986 void Renderer::zoomCamera(double z, bool absolute)
    987 {
    988     TRACE("Enter: z: %g, abs: %d",
    989           z, (absolute ? 1 : 0));
     984void Renderer::zoomCamera(double z)
     985{
     986    TRACE("Enter: z: %g", z);
    990987
    991988    if (_manipulator.valid()) {
  • trunk/packages/vizservers/geovis/Renderer.h

    r4312 r4313  
    313313    void setCameraOrientation(const double quat[4], bool absolute = true);
    314314
    315     void panCamera(double x, double y, bool absolute = false);
    316 
    317     void rotateCamera(double x, double y, bool absolute = false);
    318 
    319     void zoomCamera(double z, bool absolute = false);
     315    void panCamera(double x, double y);
     316
     317    void rotateCamera(double x, double y);
     318
     319    void zoomCamera(double z);
    320320
    321321    // Keyboard events
  • trunk/packages/vizservers/geovis/RendererCmd.cpp

    r4312 r4313  
    239239
    240240static int
     241CameraGetViewpointOp(ClientData clientData, Tcl_Interp *interp, int objc,
     242                     Tcl_Obj *const *objv)
     243{
     244    osgEarth::Viewpoint view = g_renderer->getViewpoint();
     245
     246    std::ostringstream oss;
     247    size_t len = 0;
     248    oss << "nv>camera get "
     249        << view.x() << " "
     250        << view.y() << " "
     251        << view.z() << " "
     252        << view.getHeading() << " "
     253        << view.getPitch() << " "
     254        << view.getRange()
     255        << " {" << view.getSRS()->getHorizInitString() << "}"
     256        << " {" << view.getSRS()->getVertInitString() << "}"
     257        << "\n";
     258    len = oss.str().size();
     259#ifdef USE_THREADS
     260    queueResponse(oss.str().c_str(), len, Response::VOLATILE);
     261#else
     262    ssize_t bytesWritten = SocketWrite(oss.str().c_str(), len);
     263
     264    if (bytesWritten < 0) {
     265        return TCL_ERROR;
     266    }
     267#endif /*USE_THREADS*/
     268    return TCL_OK;
     269}
     270
     271static int
     272CameraSetViewpointOp(ClientData clientData, Tcl_Interp *interp, int objc,
     273                     Tcl_Obj *const *objv)
     274{
     275    double x, y, z, heading, pitch, distance;
     276    double duration = 0.0;
     277    if (Tcl_GetDoubleFromObj(interp, objv[2], &x) != TCL_OK ||
     278        Tcl_GetDoubleFromObj(interp, objv[3], &y) != TCL_OK ||
     279        Tcl_GetDoubleFromObj(interp, objv[4], &z) != TCL_OK ||
     280        Tcl_GetDoubleFromObj(interp, objv[5], &heading) != TCL_OK ||
     281        Tcl_GetDoubleFromObj(interp, objv[6], &pitch) != TCL_OK ||
     282        Tcl_GetDoubleFromObj(interp, objv[7], &distance) != TCL_OK) {
     283        return TCL_ERROR;
     284    }
     285    if (objc > 8) {
     286        if (Tcl_GetDoubleFromObj(interp, objv[8], &duration) != TCL_OK) {
     287            return TCL_ERROR;
     288        }
     289    }
     290    if (objc > 9) {
     291        char *srsInit = Tcl_GetString(objv[9]);
     292        if (strlen(srsInit) > 0) {
     293            osgEarth::SpatialReference *srs = NULL;
     294            if (objc > 10) {
     295                char *vertDatum = Tcl_GetString(objv[10]);
     296                srs = osgEarth::SpatialReference::get(srsInit, vertDatum);
     297            } else {
     298                srs = osgEarth::SpatialReference::get(srsInit);
     299            }
     300            if (srs == NULL) {
     301                return TCL_ERROR;
     302            }
     303            osgEarth::Viewpoint view(x, y, z, heading, pitch, distance, srs);
     304            g_renderer->setViewpoint(view, duration);
     305        } else {
     306            osgEarth::Viewpoint view(x, y, z, heading, pitch, distance);
     307            g_renderer->setViewpoint(view, duration);
     308        }
     309    } else {
     310        osgEarth::Viewpoint view(x, y, z, heading, pitch, distance);
     311        g_renderer->setViewpoint(view, duration);
     312    }
     313    return TCL_OK;
     314}
     315
     316static int
    241317CameraThrowOp(ClientData clientData, Tcl_Interp *interp, int objc,
    242318              Tcl_Obj *const *objv)
     
    267343
    268344static CmdSpec cameraOps[] = {
     345    {"get",     1, CameraGetViewpointOp,     2, 2, ""},
    269346    {"orient",  1, CameraOrientOp,           6, 6, "qw qx qy qz"},
    270347    {"pan",     1, CameraPanOp,              4, 4, "panX panY"},
     
    272349    {"restore", 4, CameraRestoreViewpointOp, 3, 4, "name ?duration?"},
    273350    {"rotate",  2, CameraRotateOp,           4, 4, "azimuth elevation"},
    274     {"save",    1, CameraSaveViewpointOp,    3, 3, "name"},
     351    {"save",    2, CameraSaveViewpointOp,    3, 3, "name"},
     352    {"set",     2, CameraSetViewpointOp,     8, 11, "x y z heading pitch distance ?duration? ?srs? ?vertDatum?"},
    275353    {"throw",   1, CameraThrowOp,            3, 3, "bool"},
    276354    {"zoom",    1, CameraZoomOp,             3, 3, "zoomAmount"}
Note: See TracChangeset for help on using the changeset viewer.