VTK
vtkPerspectiveTransform.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkPerspectiveTransform.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
47 #ifndef vtkPerspectiveTransform_h
48 #define vtkPerspectiveTransform_h
49 
50 #include "vtkCommonTransformsModule.h" // For export macro
52 
53 #include "vtkMatrix4x4.h" // Needed for inline methods
54 
56 {
57  public:
60  void PrintSelf(ostream& os, vtkIndent indent);
61 
65  void Identity() { this->Concatenation->Identity(); this->Modified(); };
66 
70  void Inverse() { this->Concatenation->Inverse(); this->Modified(); };
71 
73 
79  void AdjustViewport(double oldXMin, double oldXMax,
80  double oldYMin, double oldYMax,
81  double newXMin, double newXMax,
82  double newYMin, double newYMax);
84 
86 
91  void AdjustZBuffer(double oldNearZ, double oldFarZ,
92  double newNearZ, double newFarZ);
94 
96 
99  void Ortho(double xmin, double xmax, double ymin, double ymax,
100  double znear, double zfar);
102 
104 
108  void Frustum(double xmin, double xmax, double ymin, double ymax,
109  double znear, double zfar);
111 
116  void Perspective(double angle, double aspect, double znear, double zfar);
117 
128  void Shear(double dxdz, double dydz, double zplane);
129 
137  void Stereo(double angle, double focaldistance);
138 
140 
143  void SetupCamera(const double position[3], const double focalpoint[3],
144  const double viewup[3]);
146 
147  void SetupCamera(double p0, double p1, double p2,
148  double fp0, double fp1, double fp2,
149  double vup0, double vup1, double vup2);
150 
152 
154  void Translate(double x, double y, double z) {
155  this->Concatenation->Translate(x,y,z); };
156  void Translate(const double x[3]) { this->Translate(x[0], x[1], x[2]); };
157  void Translate(const float x[3]) { this->Translate(x[0], x[1], x[2]); };
159 
161 
165  void RotateWXYZ(double angle, double x, double y, double z) {
166  this->Concatenation->Rotate(angle,x,y,z); };
167  void RotateWXYZ(double angle, const double axis[3]) {
168  this->RotateWXYZ(angle, axis[0], axis[1], axis[2]); };
169  void RotateWXYZ(double angle, const float axis[3]) {
170  this->RotateWXYZ(angle, axis[0], axis[1], axis[2]); };
172 
174 
177  void RotateX(double angle) { this->RotateWXYZ(angle, 1, 0, 0); };
178  void RotateY(double angle) { this->RotateWXYZ(angle, 0, 1, 0); };
179  void RotateZ(double angle) { this->RotateWXYZ(angle, 0, 0, 1); };
181 
183 
186  void Scale(double x, double y, double z) {
187  this->Concatenation->Scale(x,y,z); };
188  void Scale(const double s[3]) { this->Scale(s[0], s[1], s[2]); };
189  void Scale(const float s[3]) { this->Scale(s[0], s[1], s[2]); };
191 
193 
196  this->SetMatrix(*matrix->Element); };
197  void SetMatrix(const double elements[16]) {
198  this->Identity(); this->Concatenate(elements); };
200 
202 
205  this->Concatenate(*matrix->Element); };
206  void Concatenate(const double elements[16]) {
207  this->Concatenation->Concatenate(elements); };
209 
216 
218 
223  void PreMultiply() {
224  if (this->Concatenation->GetPreMultiplyFlag()) { return; }
225  this->Concatenation->SetPreMultiplyFlag(1); this->Modified(); };
227 
229 
234  void PostMultiply() {
235  if (!this->Concatenation->GetPreMultiplyFlag()) { return; }
236  this->Concatenation->SetPreMultiplyFlag(0); this->Modified(); };
238 
240 
243  return this->Concatenation->GetNumberOfTransforms() +
244  (this->Input == NULL ? 0 : 1); };
246 
248 
254  {
256  if (this->Input == NULL)
257  {
258  t=this->Concatenation->GetTransform(i);
259  }
260  else if (i < this->Concatenation->GetNumberOfPreTransforms())
261  {
262  t=this->Concatenation->GetTransform(i);
263  }
264  else if (i > this->Concatenation->GetNumberOfPreTransforms())
265  {
266  t=this->Concatenation->GetTransform(i-1);
267  }
268  else if (this->GetInverseFlag())
269  {
270  t=this->Input->GetInverse();
271  }
272  else
273  {
274  t=this->Input;
275  }
276  return static_cast<vtkHomogeneousTransform *>(t);
277  }
279 
281 
288  vtkHomogeneousTransform *GetInput() { return this->Input; };
290 
292 
297  return this->Concatenation->GetInverseFlag(); };
299 
301 
302  void Push() { if (this->Stack == NULL) {
303  this->Stack = vtkTransformConcatenationStack::New(); }
304  this->Stack->Push(&this->Concatenation);
305  this->Modified(); };
307 
309 
311  void Pop() { if (this->Stack == NULL) { return; }
312  this->Stack->Pop(&this->Concatenation);
313  this->Modified(); };
315 
319 
327 
329  unsigned long GetMTime();
330 
331 protected:
334 
337 
341 
342 private:
343  vtkPerspectiveTransform(const vtkPerspectiveTransform&); // Not implemented
344  void operator=(const vtkPerspectiveTransform&); // Not implemented
345 };
346 
347 
348 #endif
vtkgl::z
GLdouble GLdouble z
Definition: vtkgl.h:11754
vtkPerspectiveTransform::Scale
void Scale(const double s[3])
Definition: vtkPerspectiveTransform.h:188
vtkHomogeneousTransform
superclass for homogeneous transformations
Definition: vtkHomogeneousTransform.h:34
vtkPerspectiveTransform::Perspective
void Perspective(double angle, double aspect, double znear, double zfar)
vtkPerspectiveTransform::SetMatrix
void SetMatrix(vtkMatrix4x4 *matrix)
Definition: vtkPerspectiveTransform.h:195
vtkPerspectiveTransform::Inverse
void Inverse()
Definition: vtkPerspectiveTransform.h:70
vtkPerspectiveTransform::Translate
void Translate(double x, double y, double z)
Definition: vtkPerspectiveTransform.h:154
vtkAbstractTransform
superclass for all geometric transformations
Definition: vtkAbstractTransform.h:50
vtkPerspectiveTransform::Concatenate
void Concatenate(vtkHomogeneousTransform *transform)
vtkPerspectiveTransform::Scale
void Scale(const float s[3])
Definition: vtkPerspectiveTransform.h:189
vtkPerspectiveTransform::InternalDeepCopy
void InternalDeepCopy(vtkAbstractTransform *t)
vtkTransformConcatenationStack
Definition: vtkAbstractTransform.h:395
vtkPerspectiveTransform::Concatenate
void Concatenate(vtkMatrix4x4 *matrix)
Definition: vtkPerspectiveTransform.h:204
vtkPerspectiveTransform::CircuitCheck
int CircuitCheck(vtkAbstractTransform *transform)
vtkPerspectiveTransform::PostMultiply
void PostMultiply()
Definition: vtkPerspectiveTransform.h:234
vtkPerspectiveTransform::RotateX
void RotateX(double angle)
Definition: vtkPerspectiveTransform.h:177
vtkgl::s
GLdouble s
Definition: vtkgl.h:11594
vtkPerspectiveTransform::PreMultiply
void PreMultiply()
Definition: vtkPerspectiveTransform.h:223
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkObject::Modified
virtual void Modified()
vtkPerspectiveTransform::RotateZ
void RotateZ(double angle)
Definition: vtkPerspectiveTransform.h:179
vtkPerspectiveTransform::Input
vtkHomogeneousTransform * Input
Definition: vtkPerspectiveTransform.h:338
vtkgl::x
GLint GLint GLint GLint GLint x
Definition: vtkgl.h:11318
vtkPerspectiveTransform::SetMatrix
void SetMatrix(const double elements[16])
Definition: vtkPerspectiveTransform.h:197
vtkPerspectiveTransform::GetNumberOfConcatenatedTransforms
int GetNumberOfConcatenatedTransforms()
Definition: vtkPerspectiveTransform.h:242
vtkPerspectiveTransform::Push
void Push()
Definition: vtkPerspectiveTransform.h:302
vtkgl::input
GLenum GLenum GLenum input
Definition: vtkgl.h:15941
vtkPerspectiveTransform::RotateWXYZ
void RotateWXYZ(double angle, double x, double y, double z)
Definition: vtkPerspectiveTransform.h:165
vtkPerspectiveTransform::Translate
void Translate(const double x[3])
Definition: vtkPerspectiveTransform.h:156
vtkPerspectiveTransform::Identity
void Identity()
Definition: vtkPerspectiveTransform.h:65
vtkCommonTransformsModule.h
vtkX3D::position
@ position
Definition: vtkX3D.h:261
vtkPerspectiveTransform::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
VTKCOMMONTRANSFORMS_EXPORT
#define VTKCOMMONTRANSFORMS_EXPORT
Definition: vtkCommonTransformsModule.h:15
vtkPerspectiveTransform::RotateWXYZ
void RotateWXYZ(double angle, const float axis[3])
Definition: vtkPerspectiveTransform.h:169
vtkPerspectiveTransform::GetConcatenatedTransform
vtkHomogeneousTransform * GetConcatenatedTransform(int i)
Definition: vtkPerspectiveTransform.h:253
vtkPerspectiveTransform::InternalUpdate
void InternalUpdate()
vtkPerspectiveTransform::~vtkPerspectiveTransform
~vtkPerspectiveTransform()
vtkPerspectiveTransform::RotateY
void RotateY(double angle)
Definition: vtkPerspectiveTransform.h:178
vtkPerspectiveTransform::AdjustViewport
void AdjustViewport(double oldXMin, double oldXMax, double oldYMin, double oldYMax, double newXMin, double newXMax, double newYMin, double newYMax)
vtkPerspectiveTransform::SetInput
void SetInput(vtkHomogeneousTransform *input)
vtkHomogeneousTransform.h
vtkMatrix4x4.h
vtkPerspectiveTransform::Translate
void Translate(const float x[3])
Definition: vtkPerspectiveTransform.h:157
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkMatrix4x4
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:39
vtkPerspectiveTransform::Ortho
void Ortho(double xmin, double xmax, double ymin, double ymax, double znear, double zfar)
vtkPerspectiveTransform::GetInput
vtkHomogeneousTransform * GetInput()
Definition: vtkPerspectiveTransform.h:288
vtkPerspectiveTransform::Concatenate
void Concatenate(const double elements[16])
Definition: vtkPerspectiveTransform.h:206
vtkPerspectiveTransform::Concatenation
vtkTransformConcatenation * Concatenation
Definition: vtkPerspectiveTransform.h:339
vtkPerspectiveTransform::Shear
void Shear(double dxdz, double dydz, double zplane)
vtkTransformConcatenationStack::New
static vtkTransformConcatenationStack * New()
Definition: vtkAbstractTransform.h:397
vtkPerspectiveTransform
describes a 4x4 matrix transformation
Definition: vtkPerspectiveTransform.h:56
vtkPerspectiveTransform::RotateWXYZ
void RotateWXYZ(double angle, const double axis[3])
Definition: vtkPerspectiveTransform.h:167
vtkPerspectiveTransform::GetMTime
unsigned long GetMTime()
vtkgl::t
GLdouble GLdouble t
Definition: vtkgl.h:11602
vtkPerspectiveTransform::Scale
void Scale(double x, double y, double z)
Definition: vtkPerspectiveTransform.h:186
vtkgl::y
GLint GLint GLint GLint GLint GLint y
Definition: vtkgl.h:11318
vtkPerspectiveTransform::Stack
vtkTransformConcatenationStack * Stack
Definition: vtkPerspectiveTransform.h:340
vtkPerspectiveTransform::New
static vtkPerspectiveTransform * New()
vtkgl::matrix
GLuint GLenum matrix
Definition: vtkgl.h:16451
vtkPerspectiveTransform::Stereo
void Stereo(double angle, double focaldistance)
vtkgl::angle
GLfloat angle
Definition: vtkgl.h:18174
vtkPerspectiveTransform::SetupCamera
void SetupCamera(double p0, double p1, double p2, double fp0, double fp1, double fp2, double vup0, double vup1, double vup2)
vtkgl::transform
GLuint GLenum GLenum transform
Definition: vtkgl.h:16451
vtkPerspectiveTransform::Frustum
void Frustum(double xmin, double xmax, double ymin, double ymax, double znear, double zfar)
vtkPerspectiveTransform::SetupCamera
void SetupCamera(const double position[3], const double focalpoint[3], const double viewup[3])
vtkPerspectiveTransform::GetInverseFlag
int GetInverseFlag()
Definition: vtkPerspectiveTransform.h:296
vtkPerspectiveTransform::vtkPerspectiveTransform
vtkPerspectiveTransform()
vtkTransformConcatenation
Definition: vtkAbstractTransform.h:313
vtkPerspectiveTransform::AdjustZBuffer
void AdjustZBuffer(double oldNearZ, double oldFarZ, double newNearZ, double newFarZ)
vtkPerspectiveTransform::MakeTransform
vtkAbstractTransform * MakeTransform()
vtkPerspectiveTransform::Pop
void Pop()
Definition: vtkPerspectiveTransform.h:311