ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
vtkPVTrackballMultiRotate.cxx
Go to the documentation of this file.
1 // -*- c++ -*-
2 /*=========================================================================
3 
4  Program: Visualization Toolkit
5  Module: vtkPVTrackballMultiRotate.cxx
6 
7  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
8  All rights reserved.
9  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
10 
11  This software is distributed WITHOUT ANY WARRANTY; without even
12  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13  PURPOSE. See the above copyright notice for more information.
14 
15 =========================================================================*/
16 
17 /*-------------------------------------------------------------------------
18  Copyright 2009 Sandia Corporation.
19  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
20  the U.S. Government retains certain rights in this software.
21 -------------------------------------------------------------------------*/
22 
24 
25 #include "vtkObjectFactory.h"
26 #include "vtkPVTrackballRoll.h"
27 #include "vtkPVTrackballRotate.h"
28 #include "vtkRenderer.h"
29 
30 #define MY_MAX(x, y) ((x) < (y) ? (y) : (x))
31 #define MY_SQR(x) ((x) * (x))
32 
33 //=============================================================================
35 
36 //-----------------------------------------------------------------------------
38 {
41  this->CurrentManipulator = NULL;
42 }
43 
45 {
46  this->CurrentManipulator = NULL;
47  this->RotateManipulator->Delete();
48  this->RollManipulator->Delete();
49 }
50 
51 void vtkPVTrackballMultiRotate::PrintSelf(ostream& os, vtkIndent indent)
52 {
53  this->Superclass::PrintSelf(os, indent);
54 }
55 
56 //-----------------------------------------------------------------------------
58  int x, int y, vtkRenderer* ren, vtkRenderWindowInteractor* rwi)
59 {
60  int* viewSize;
61  viewSize = ren->GetSize();
62  double viewCenter[2];
63  viewCenter[0] = 0.5 * viewSize[0];
64  viewCenter[1] = 0.5 * viewSize[1];
65  double rotateRadius = 0.9 * (MY_MAX(viewCenter[0], viewCenter[1]));
66  double dist2 = MY_SQR(viewCenter[0] - x) + MY_SQR(viewCenter[1] - y);
67 
68  if (rotateRadius * rotateRadius > dist2)
69  {
71  }
72  else
73  {
74  this->CurrentManipulator = this->RollManipulator;
75  }
76 
77  this->CurrentManipulator->SetButton(this->GetButton());
78  this->CurrentManipulator->SetShift(this->GetShift());
79  this->CurrentManipulator->SetControl(this->GetControl());
80  this->CurrentManipulator->SetCenter(this->GetCenter());
81 
82  this->CurrentManipulator->OnButtonDown(x, y, ren, rwi);
83 }
84 
85 //-----------------------------------------------------------------------------
87  int x, int y, vtkRenderer* ren, vtkRenderWindowInteractor* rwi)
88 {
89  if (this->CurrentManipulator)
90  {
91  this->CurrentManipulator->OnButtonUp(x, y, ren, rwi);
92  }
93 }
94 
95 //-----------------------------------------------------------------------------
97  int x, int y, vtkRenderer* ren, vtkRenderWindowInteractor* rwi)
98 {
99  if (this->CurrentManipulator)
100  {
101  this->CurrentManipulator->OnMouseMove(x, y, ren, rwi);
102  }
103 }
#define NULL
virtual void OnButtonUp(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *iren)
virtual void OnMouseMove(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *iren)
virtual void OnButtonDown(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *iren)
void OnMouseMove(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
vtkPVTrackballRotate * RotateManipulator
void OnButtonUp(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void OnButtonDown(int x, int y, vtkRenderer *ren, vtkRenderWindowInteractor *rwi) override
void PrintSelf(ostream &os, vtkIndent indent) override
vtkPVTrackballRoll * RollManipulator
vtkCameraManipulator * CurrentManipulator
static vtkPVTrackballRoll * New()
static vtkPVTrackballRotate * New()
normal_z y
normal_z x
#define MY_SQR(x)
#define MY_MAX(x, y)
vtkStandardNewMacro(vtkPVTrackballMultiRotate)