VTK  9.1.0
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
54#ifndef vtkPerspectiveTransform_h
55#define vtkPerspectiveTransform_h
56
57#include "vtkCommonTransformsModule.h" // For export macro
59
60#include "vtkMatrix4x4.h" // Needed for inline methods
61
62class VTKCOMMONTRANSFORMS_EXPORT vtkPerspectiveTransform : public vtkHomogeneousTransform
63{
64public:
67 void PrintSelf(ostream& os, vtkIndent indent) override;
68
74 void Identity()
75 {
76 this->Concatenation->Identity();
77 this->Modified();
78 }
79
85 void Inverse() override
86 {
87 this->Concatenation->Inverse();
88 this->Modified();
89 }
90
99 void AdjustViewport(double oldXMin, double oldXMax, double oldYMin, double oldYMax,
100 double newXMin, double newXMax, double newYMin, double newYMax);
101
109 void AdjustZBuffer(double oldNearZ, double oldFarZ, double newNearZ, double newFarZ);
110
116 void Ortho(double xmin, double xmax, double ymin, double ymax, double znear, double zfar);
117
124 void Frustum(double xmin, double xmax, double ymin, double ymax, double znear, double zfar);
125
132 void Perspective(double angle, double aspect, double znear, double zfar);
133
147 void Shear(double dxdz, double dydz, double zplane);
148
159 void Stereo(double angle, double focaldistance);
160
166 void SetupCamera(const double position[3], const double focalpoint[3], const double viewup[3]);
167
168 void SetupCamera(double p0, double p1, double p2, double fp0, double fp1, double fp2, double vup0,
169 double vup1, double vup2);
170
172
176 void Translate(double x, double y, double z) { this->Concatenation->Translate(x, y, z); }
177 void Translate(const double x[3]) { this->Translate(x[0], x[1], x[2]); }
178 void Translate(const float x[3]) { this->Translate(x[0], x[1], x[2]); }
180
182
188 void RotateWXYZ(double angle, double x, double y, double z)
189 {
190 this->Concatenation->Rotate(angle, x, y, z);
191 }
192 void RotateWXYZ(double angle, const double axis[3])
193 {
194 this->RotateWXYZ(angle, axis[0], axis[1], axis[2]);
195 }
196 void RotateWXYZ(double angle, const float axis[3])
197 {
198 this->RotateWXYZ(angle, axis[0], axis[1], axis[2]);
199 }
201
203
208 void RotateX(double angle) { this->RotateWXYZ(angle, 1, 0, 0); }
209 void RotateY(double angle) { this->RotateWXYZ(angle, 0, 1, 0); }
210 void RotateZ(double angle) { this->RotateWXYZ(angle, 0, 0, 1); }
212
214
219 void Scale(double x, double y, double z) { this->Concatenation->Scale(x, y, z); }
220 void Scale(const double s[3]) { this->Scale(s[0], s[1], s[2]); }
221 void Scale(const float s[3]) { this->Scale(s[0], s[1], s[2]); }
223
225
229 void SetMatrix(vtkMatrix4x4* matrix) { this->SetMatrix(*matrix->Element); }
230 void SetMatrix(const double elements[16])
231 {
232 this->Identity();
233 this->Concatenate(elements);
234 }
236
238
242 void Concatenate(vtkMatrix4x4* matrix) { this->Concatenate(*matrix->Element); }
243 void Concatenate(const double elements[16]) { this->Concatenation->Concatenate(elements); }
245
254
263 {
264 if (this->Concatenation->GetPreMultiplyFlag())
265 {
266 return;
267 }
268 this->Concatenation->SetPreMultiplyFlag(1);
269 this->Modified();
270 }
271
280 {
281 if (!this->Concatenation->GetPreMultiplyFlag())
282 {
283 return;
284 }
285 this->Concatenation->SetPreMultiplyFlag(0);
286 this->Modified();
287 }
288
294 {
295 return this->Concatenation->GetNumberOfTransforms() + (this->Input == nullptr ? 0 : 1);
296 }
297
299
307 {
309 if (this->Input == nullptr)
310 {
311 t = this->Concatenation->GetTransform(i);
312 }
313 else if (i < this->Concatenation->GetNumberOfPreTransforms())
314 {
315 t = this->Concatenation->GetTransform(i);
316 }
317 else if (i > this->Concatenation->GetNumberOfPreTransforms())
318 {
319 t = this->Concatenation->GetTransform(i - 1);
320 }
321 else if (this->GetInverseFlag())
322 {
323 t = this->Input->GetInverse();
324 }
325 else
326 {
327 t = this->Input;
328 }
329 return static_cast<vtkHomogeneousTransform*>(t);
330 }
332
334
343 vtkHomogeneousTransform* GetInput() { return this->Input; }
345
353 int GetInverseFlag() { return this->Concatenation->GetInverseFlag(); }
354
356
359 void Push()
360 {
361 if (this->Stack == nullptr)
362 {
364 }
365 this->Stack->Push(&this->Concatenation);
366 this->Modified();
367 }
369
371
375 void Pop()
376 {
377 if (this->Stack == nullptr)
378 {
379 return;
380 }
381 this->Stack->Pop(&this->Concatenation);
382 this->Modified();
383 }
385
391
400 int CircuitCheck(vtkAbstractTransform* transform) override;
401
406
407protected:
410
412 void InternalUpdate() override;
413
417
418private:
420 void operator=(const vtkPerspectiveTransform&) = delete;
421};
422
423#endif
superclass for all geometric transformations
vtkAbstractTransform * GetInverse()
Get the inverse of this transform.
superclass for homogeneous transformations
a simple class to control print indentation
Definition: vtkIndent.h:43
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:45
double Element[4][4]
The internal data is public for historical reasons. Do not use!
Definition: vtkMatrix4x4.h:48
virtual void Modified()
Update the modification time for this object.
describes a 4x4 matrix transformation
void Perspective(double angle, double aspect, double znear, double zfar)
Create a perspective projection matrix by specifying the view angle (this angle is in the y direction...
vtkMTimeType GetMTime() override
Override GetMTime to account for input and concatenation.
void PreMultiply()
Sets the internal state of the transform to PreMultiply.
int CircuitCheck(vtkAbstractTransform *transform) override
Check for self-reference.
void Scale(const float s[3])
Create a scale matrix (i.e.
void SetInput(vtkHomogeneousTransform *input)
Set the input for this transformation.
static vtkPerspectiveTransform * New()
void Frustum(double xmin, double xmax, double ymin, double ymax, double znear, double zfar)
Create an perspective projection matrix and concatenate it by the current transformation.
void Scale(double x, double y, double z)
Create a scale matrix (i.e.
void SetMatrix(vtkMatrix4x4 *matrix)
Set the current matrix directly.
void RotateWXYZ(double angle, double x, double y, double z)
Create a rotation matrix and concatenate it with the current transformation according to PreMultiply ...
void Concatenate(vtkMatrix4x4 *matrix)
Concatenates the matrix with the current transformation according to PreMultiply or PostMultiply sema...
void Stereo(double angle, double focaldistance)
Create a stereo shear matrix and concatenate it with the current transformation.
void Ortho(double xmin, double xmax, double ymin, double ymax, double znear, double zfar)
Create an orthogonal projection matrix and concatenate it by the current transformation.
void Translate(const float x[3])
Create a translation matrix and concatenate it with the current transformation according to PreMultip...
void PostMultiply()
Sets the internal state of the transform to PostMultiply.
void RotateZ(double angle)
Create a rotation matrix about the X, Y, or Z axis and concatenate it with the current transformation...
vtkTransformConcatenationStack * Stack
int GetNumberOfConcatenatedTransforms()
Get the total number of transformations that are linked into this one via Concatenate() operations or...
void Identity()
Set this transformation to the identity transformation.
void Pop()
Deletes the transformation on the top of the stack and sets the top to the next transformation on the...
void Translate(double x, double y, double z)
Create a translation matrix and concatenate it with the current transformation according to PreMultip...
void Inverse() override
Invert the transformation.
void RotateX(double angle)
Create a rotation matrix about the X, Y, or Z axis and concatenate it with the current transformation...
void RotateY(double angle)
Create a rotation matrix about the X, Y, or Z axis and concatenate it with the current transformation...
void AdjustViewport(double oldXMin, double oldXMax, double oldYMin, double oldYMax, double newXMin, double newXMax, double newYMin, double newYMax)
Perform an adjustment to the viewport coordinates.
void Concatenate(const double elements[16])
Concatenates the matrix with the current transformation according to PreMultiply or PostMultiply sema...
void Scale(const double s[3])
Create a scale matrix (i.e.
vtkHomogeneousTransform * GetInput()
Set the input for this transformation.
void Push()
Pushes the current transformation onto the transformation stack.
vtkAbstractTransform * MakeTransform() override
Make a new transform of the same type – you are responsible for deleting the transform when you are d...
void SetupCamera(double p0, double p1, double p2, double fp0, double fp1, double fp2, double vup0, double vup1, double vup2)
void Translate(const double x[3])
Create a translation matrix and concatenate it with the current transformation according to PreMultip...
void SetupCamera(const double position[3], const double focalpoint[3], const double viewup[3])
Set a view transformation matrix for the camera (this matrix does not contain any perspective) and co...
void InternalDeepCopy(vtkAbstractTransform *t) override
Perform any subclass-specific DeepCopy.
vtkHomogeneousTransform * GetConcatenatedTransform(int i)
Get one of the concatenated transformations as a vtkAbstractTransform.
~vtkPerspectiveTransform() override
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GetInverseFlag()
Get the inverse flag of the transformation.
void RotateWXYZ(double angle, const double axis[3])
Create a rotation matrix and concatenate it with the current transformation according to PreMultiply ...
void Concatenate(vtkHomogeneousTransform *transform)
Concatenate the specified transform with the current transformation according to PreMultiply or PostM...
void Shear(double dxdz, double dydz, double zplane)
Create a shear transformation about a plane at distance z from the camera.
void AdjustZBuffer(double oldNearZ, double oldFarZ, double newNearZ, double newFarZ)
Perform an adjustment to the Z-Buffer range that the near and far clipping planes map to.
void InternalUpdate() override
Perform any subclass-specific Update.
void RotateWXYZ(double angle, const float axis[3])
Create a rotation matrix and concatenate it with the current transformation according to PreMultiply ...
vtkHomogeneousTransform * Input
vtkTransformConcatenation * Concatenation
void SetMatrix(const double elements[16])
Set the current matrix directly.
static vtkTransformConcatenationStack * New()
@ position
Definition: vtkX3D.h:267
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287