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
48#ifndef vtkPerspectiveTransform_h
49#define vtkPerspectiveTransform_h
50
51#include "vtkCommonTransformsModule.h" // For export macro
53
54#include "vtkMatrix4x4.h" // Needed for inline methods
55
56class VTKCOMMONTRANSFORMS_EXPORT vtkPerspectiveTransform : public vtkHomogeneousTransform
57{
58 public:
61 void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
62
68 void Identity() { this->Concatenation->Identity(); this->Modified(); };
69
75 void Inverse() VTK_OVERRIDE
76 { this->Concatenation->Inverse(); this->Modified(); };
77
86 void AdjustViewport(double oldXMin, double oldXMax,
87 double oldYMin, double oldYMax,
88 double newXMin, double newXMax,
89 double newYMin, double newYMax);
90
98 void AdjustZBuffer(double oldNearZ, double oldFarZ,
99 double newNearZ, double newFarZ);
100
106 void Ortho(double xmin, double xmax, double ymin, double ymax,
107 double znear, double zfar);
108
115 void Frustum(double xmin, double xmax, double ymin, double ymax,
116 double znear, double zfar);
117
124 void Perspective(double angle, double aspect, double znear, double zfar);
125
139 void Shear(double dxdz, double dydz, double zplane);
140
151 void Stereo(double angle, double focaldistance);
152
158 void SetupCamera(const double position[3], const double focalpoint[3],
159 const double viewup[3]);
160
161 void SetupCamera(double p0, double p1, double p2,
162 double fp0, double fp1, double fp2,
163 double vup0, double vup1, double vup2);
164
166
170 void Translate(double x, double y, double z) {
171 this->Concatenation->Translate(x,y,z); };
172 void Translate(const double x[3]) { this->Translate(x[0], x[1], x[2]); };
173 void Translate(const float x[3]) { this->Translate(x[0], x[1], x[2]); };
175
177
183 void RotateWXYZ(double angle, double x, double y, double z) {
184 this->Concatenation->Rotate(angle,x,y,z); };
185 void RotateWXYZ(double angle, const double axis[3]) {
186 this->RotateWXYZ(angle, axis[0], axis[1], axis[2]); };
187 void RotateWXYZ(double angle, const float axis[3]) {
188 this->RotateWXYZ(angle, axis[0], axis[1], axis[2]); };
190
192
197 void RotateX(double angle) { this->RotateWXYZ(angle, 1, 0, 0); };
198 void RotateY(double angle) { this->RotateWXYZ(angle, 0, 1, 0); };
199 void RotateZ(double angle) { this->RotateWXYZ(angle, 0, 0, 1); };
201
203
208 void Scale(double x, double y, double z) {
209 this->Concatenation->Scale(x,y,z); };
210 void Scale(const double s[3]) { this->Scale(s[0], s[1], s[2]); };
211 void Scale(const float s[3]) { this->Scale(s[0], s[1], s[2]); };
213
215
219 void SetMatrix(vtkMatrix4x4 *matrix) {
220 this->SetMatrix(*matrix->Element); };
221 void SetMatrix(const double elements[16]) {
222 this->Identity(); this->Concatenate(elements); };
224
226
230 void Concatenate(vtkMatrix4x4 *matrix) {
231 this->Concatenate(*matrix->Element); };
232 void Concatenate(const double elements[16]) {
233 this->Concatenation->Concatenate(elements); };
235
244
252 void PreMultiply() {
253 if (this->Concatenation->GetPreMultiplyFlag()) { return; }
254 this->Concatenation->SetPreMultiplyFlag(1); this->Modified(); };
255
264 if (!this->Concatenation->GetPreMultiplyFlag()) { return; }
265 this->Concatenation->SetPreMultiplyFlag(0); this->Modified(); };
266
272 return this->Concatenation->GetNumberOfTransforms() +
273 (this->Input == NULL ? 0 : 1); };
274
276
284 {
286 if (this->Input == NULL)
287 {
288 t=this->Concatenation->GetTransform(i);
289 }
290 else if (i < this->Concatenation->GetNumberOfPreTransforms())
291 {
292 t=this->Concatenation->GetTransform(i);
293 }
294 else if (i > this->Concatenation->GetNumberOfPreTransforms())
295 {
296 t=this->Concatenation->GetTransform(i-1);
297 }
298 else if (this->GetInverseFlag())
299 {
300 t=this->Input->GetInverse();
301 }
302 else
303 {
304 t=this->Input;
305 }
306 return static_cast<vtkHomogeneousTransform *>(t);
307 }
309
311
320 vtkHomogeneousTransform *GetInput() { return this->Input; };
322
331 return this->Concatenation->GetInverseFlag(); };
332
334
337 void Push() { if (this->Stack == NULL) {
338 this->Stack = vtkTransformConcatenationStack::New(); }
339 this->Stack->Push(&this->Concatenation);
340 this->Modified(); };
342
344
348 void Pop() { if (this->Stack == NULL) { return; }
349 this->Stack->Pop(&this->Concatenation);
350 this->Modified(); };
352
358
367 int CircuitCheck(vtkAbstractTransform *transform) VTK_OVERRIDE;
368
372 vtkMTimeType GetMTime() VTK_OVERRIDE;
373
374protected:
376 ~vtkPerspectiveTransform() VTK_OVERRIDE;
377
378 void InternalDeepCopy(vtkAbstractTransform *t) VTK_OVERRIDE;
379 void InternalUpdate() VTK_OVERRIDE;
380
384
385private:
386 vtkPerspectiveTransform(const vtkPerspectiveTransform&) VTK_DELETE_FUNCTION;
387 void operator=(const vtkPerspectiveTransform&) VTK_DELETE_FUNCTION;
388};
389
390
391#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:40
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:42
double Element[4][4]
The internal data is public for historical reasons. Do not use!
Definition: vtkMatrix4x4.h:45
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...
void PreMultiply()
Sets the internal state of the transform to PreMultiply.
void Scale(const float s[3])
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])
void PostMultiply()
Sets the internal state of the transform to PostMultiply.
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 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])
void Scale(const double s[3])
vtkHomogeneousTransform * GetInput()
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])
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...
vtkHomogeneousTransform * GetConcatenatedTransform(int i)
Get one of the concatenated transformations as a vtkAbstractTransform.
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])
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 RotateWXYZ(double angle, const float axis[3])
void SetMatrix(const double elements[16])
static vtkTransformConcatenationStack * New()
@ position
Definition: vtkX3D.h:261
vtkTypeUInt64 vtkMTimeType
Definition: vtkType.h:248