void Zoom3D::ZoomCamera(const int x, const int y) { if (OldY != y) { // // Calculate the zoom factor. // double dyf = MotionFactor * (double)(y - OldY) / (double)(Center[1]); double zoomFactor = pow((double)1.1, dyf); // // Calculate the new parallel scale. // VisWindow *vw = proxy; avtView3D newView3D = vw->GetView3D(); newView3D.imageZoom = newView3D.imageZoom * zoomFactor; OldX = x; OldY = y; vw->SetView3D(newView3D); } }
void Zoom3D::ZoomCamera(void) { vtkRenderWindowInteractor *rwi = Interactor; if (!SufficientDistanceMoved()) { // // This is a point, line, or very, very small rectangle // return; } // // Determine the size of the window. // int size[2]; rwi->GetSize(size); // // Get the current view information. // VisWindow *vw = proxy; // // Set the new image pan and image zoom. // double zoomFactor; double pan[2]; avtView3D newView3D = vw->GetView3D(); if (!controlKeyDown) // zoom { pan[0] = (((double)(anchorX + lastX - size[0])) / (2.0 * (double)size[0])) / newView3D.imageZoom; pan[1] = (((double)(anchorY + lastY - size[1])) / (2.0 * (double)size[1])) / newView3D.imageZoom; zoomFactor = fabs((double)(anchorY - lastY)) / (double) size[1]; newView3D.imagePan[0] -= pan[0]; newView3D.imagePan[1] -= pan[1]; newView3D.imageZoom = newView3D.imageZoom / zoomFactor; } else // unzoom { zoomFactor = fabs((double)(anchorY - lastY)) / (double) size[1]; newView3D.imageZoom = newView3D.imageZoom * zoomFactor; pan[0] = (((double)(anchorX + lastX - size[0])) / (2.0 * (double)size[0])) / newView3D.imageZoom; pan[1] = (((double)(anchorY + lastY - size[1])) / (2.0 * (double)size[1])) / newView3D.imageZoom; newView3D.imagePan[0] += pan[0]; newView3D.imagePan[1] += pan[1]; } vw->SetView3D(newView3D); }