Changeset 2222 for trunk


Ignore:
Timestamp:
Apr 22, 2011 6:07:24 PM (13 years ago)
Author:
ldelgass
Message:

Fix resetting zoom/camera distance in camera orient. Panning still needs
work.

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

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/vtkvis/RpVtkRenderer.cpp

    r2214 r2222  
    16361636}
    16371637
    1638 void Renderer::setSceneOrientation(double quat[4])
     1638void Renderer::setCameraOrientation(double quat[4])
    16391639{
    16401640    vtkSmartPointer<vtkCamera> camera = _renderer->GetActiveCamera();
     
    16461646        memcpy((*mat4)[r], mat3[r], sizeof(double)*3);
    16471647    }
     1648    TRACE("Arcball camera matrix: %g %g %g %g %g %g %g %g %g",
     1649          (*mat4)[0][0], (*mat4)[0][1], (*mat4)[0][2],
     1650          (*mat4)[1][0], (*mat4)[1][1], (*mat4)[1][2],
     1651          (*mat4)[2][0], (*mat4)[2][1], (*mat4)[2][2]);
     1652    camera->SetPosition(0, 0, 1);
     1653    camera->SetFocalPoint(0, 0, 0);
     1654    camera->SetViewUp(0, 1, 0);
     1655    camera->SetViewAngle(30);
     1656    _renderer->ResetCamera();
     1657    camera->GetFocalPoint(_cameraFocalPoint);
    16481658    trans->Translate(+_cameraFocalPoint[0], +_cameraFocalPoint[1], +_cameraFocalPoint[2]);
    16491659    trans->Concatenate(mat4);
    16501660    trans->Translate(-_cameraFocalPoint[0], -_cameraFocalPoint[1], -_cameraFocalPoint[2]);
    1651     camera->SetPosition(0, 0, 1);
    1652     camera->SetFocalPoint(0, 0, 0);
    1653     camera->SetViewUp(0, 1, 0);
    16541661    camera->ApplyTransform(trans);
    16551662    storeCameraOrientation();
     1663    if (_cameraZoomRatio != 1.0) {
     1664        double z = _cameraZoomRatio;
     1665        _cameraZoomRatio = 1.0;
     1666        zoomCamera(z, true);
     1667    }
    16561668    if (_cameraPan[0] != 0.0 || _cameraPan[1] != 0.0) {
    1657         panCamera(_cameraPan[0], _cameraPan[1], true);
    1658     }
     1669        double panx = _cameraPan[0];
     1670        double pany = -_cameraPan[1];
     1671        _cameraPan[0] = 0;
     1672        _cameraPan[1] = 0;
     1673        panCamera(panx, pany, true);
     1674    }
     1675    printCameraInfo(camera);
    16591676    _needsRedraw = true;
    16601677}
     
    16811698}
    16821699
     1700/**
     1701 * \brief Saves the current camera orientation and position in order to
     1702 * be able to later restore the saved orientation and position
     1703 */
    16831704void Renderer::storeCameraOrientation()
    16841705{
     
    16891710}
    16901711
     1712/**
     1713 * \brief Use the stored orientation and position to set the camera's
     1714 * current state
     1715 */
    16911716void Renderer::restoreCameraOrientation()
    16921717{
     
    17041729void Renderer::resetCamera(bool resetOrientation)
    17051730{
     1731    vtkSmartPointer<vtkCamera> camera = _renderer->GetActiveCamera();
    17061732    if (_cameraMode == IMAGE) {
    17071733        initCamera();
    17081734    } else {
    17091735        if (resetOrientation) {
    1710             vtkSmartPointer<vtkCamera> camera = _renderer->GetActiveCamera();
    17111736            camera->SetPosition(0, 0, 1);
    17121737            camera->SetFocalPoint(0, 0, 0);
     
    17161741            restoreCameraOrientation();
    17171742        }
     1743        camera->SetViewAngle(30);
    17181744        _renderer->ResetCamera();
    17191745        _renderer->ResetCameraClippingRange();
    17201746        computeScreenWorldCoords();
    17211747    }
     1748
     1749    printCameraInfo(camera);
     1750
    17221751    _cameraZoomRatio = 1;
    17231752    _cameraPan[0] = 0;
     
    17611790void Renderer::panCamera(double x, double y, bool absolute)
    17621791{
     1792    TRACE("Enter panCamera: %g %g, current abs: %g %g",
     1793          x, y, _cameraPan[0], _cameraPan[1]);
     1794
    17631795    if (_cameraMode == IMAGE) {
    17641796        // Reverse x rather than y, since we are panning the camera, and client
     
    18371869        computeScreenWorldCoords();
    18381870    }
     1871
     1872    TRACE("Leave panCamera: %g %g, current abs: %g %g",
     1873          x, y, _cameraPan[0], _cameraPan[1]);
     1874
    18391875    _needsRedraw = true;
    18401876}
     
    18481884void Renderer::zoomCamera(double z, bool absolute)
    18491885{
     1886    vtkSmartPointer<vtkCamera> camera = _renderer->GetActiveCamera();
     1887    TRACE("Enter Zoom: current abs: %g, z: %g, view angle %g",
     1888          _cameraZoomRatio, z, camera->GetViewAngle());
     1889
    18501890    if (absolute) {
    18511891        assert(_cameraZoomRatio > 0.0);
     
    18561896        _cameraZoomRatio *= z;
    18571897    }
     1898
    18581899    if (_cameraMode == IMAGE) {
    18591900        double dx = _imgWorldDims[0];
     
    18681909                            _imgWorldDims[0], _imgWorldDims[1]);
    18691910    } else {
    1870         vtkSmartPointer<vtkCamera> camera = _renderer->GetActiveCamera();
    18711911        camera->Zoom(z); // Change perspective FOV angle or ortho parallel scale
    18721912        //camera->Dolly(z); // Move camera forward/back
     
    18741914        storeCameraOrientation();
    18751915    }
     1916
     1917    TRACE("Leave Zoom: rel %g, new abs: %g, view angle %g",
     1918          z, _cameraZoomRatio, camera->GetViewAngle());
     1919
    18761920    _needsRedraw = true;
    18771921}
     
    22232267void Renderer::printCameraInfo(vtkCamera *camera)
    22242268{
    2225     TRACE("Parallel Scale: %g, Cam pos: %g %g %g, focal pt: %g %g %g, view up: %g %g %g, Clipping range: %g %g",
     2269    TRACE("Parallel Scale: %g, View angle: %g, Cam pos: %g %g %g, focal pt: %g %g %g, view up: %g %g %g, Clipping range: %g %g",
    22262270          camera->GetParallelScale(),
     2271          camera->GetViewAngle(),
    22272272          camera->GetPosition()[0],
    22282273          camera->GetPosition()[1],
  • trunk/packages/vizservers/vtkvis/RpVtkRenderer.h

    r2213 r2222  
    110110    void rotateCamera(double yaw, double pitch, double roll);
    111111
    112     void setSceneOrientation(double quat[4]);
     112    void setCameraOrientation(double quat[4]);
    113113
    114114    void setCameraOrientationAndPosition(double position[3],
  • trunk/packages/vizservers/vtkvis/RpVtkRendererCmd.cpp

    r2218 r2222  
    251251    }
    252252
    253     g_renderer->setSceneOrientation(quat);
     253    g_renderer->setCameraOrientation(quat);
    254254    return TCL_OK;
    255255}
Note: See TracChangeset for help on using the changeset viewer.