VTK
vtkCamera.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkCamera.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 =========================================================================*/
29 #ifndef vtkCamera_h
30 #define vtkCamera_h
31 
32 #include "vtkObject.h"
33 #include "vtkRect.h" // for ivar
34 #include "vtkRenderingCoreModule.h" // For export macro
35 
37 class vtkInformation;
38 class vtkMatrix4x4;
40 class vtkRenderer;
41 class vtkTransform;
42 class vtkCallbackCommand;
43 class vtkCameraCallbackCommand;
44 
45 class VTKRENDERINGCORE_EXPORT vtkCamera : public vtkObject
46 {
47 public:
48  vtkTypeMacro(vtkCamera, vtkObject);
49  void PrintSelf(ostream& os, vtkIndent indent) override;
50 
56  static vtkCamera* New();
57 
59 
63  void SetPosition(double x, double y, double z);
64  void SetPosition(const double a[3]) { this->SetPosition(a[0], a[1], a[2]); }
65  vtkGetVector3Macro(Position, double);
67 
69 
73  void SetFocalPoint(double x, double y, double z);
74  void SetFocalPoint(const double a[3]) { this->SetFocalPoint(a[0], a[1], a[2]); }
75  vtkGetVector3Macro(FocalPoint, double);
77 
79 
83  void SetViewUp(double vx, double vy, double vz);
84  void SetViewUp(const double a[3]) { this->SetViewUp(a[0], a[1], a[2]); }
85  vtkGetVector3Macro(ViewUp, double);
87 
93  void OrthogonalizeViewUp();
94 
99  void SetDistance(double);
100 
102 
106  vtkGetMacro(Distance, double);
108 
110 
115  vtkGetVector3Macro(DirectionOfProjection, double);
117 
124  void Dolly(double value);
125 
127 
130  void SetRoll(double angle);
131  double GetRoll();
133 
138  void Roll(double angle);
139 
146  void Azimuth(double angle);
147 
155  void Yaw(double angle);
156 
163  void Elevation(double angle);
164 
170  void Pitch(double angle);
171 
173 
179  void SetParallelProjection(vtkTypeBool flag);
180  vtkGetMacro(ParallelProjection, vtkTypeBool);
181  vtkBooleanMacro(ParallelProjection, vtkTypeBool);
183 
185 
195  void SetUseHorizontalViewAngle(vtkTypeBool flag);
196  vtkGetMacro(UseHorizontalViewAngle, vtkTypeBool);
197  vtkBooleanMacro(UseHorizontalViewAngle, vtkTypeBool);
199 
201 
212  void SetViewAngle(double angle);
213  vtkGetMacro(ViewAngle, double);
215 
217 
226  void SetParallelScale(double scale);
227  vtkGetMacro(ParallelScale, double);
229 
237  void Zoom(double factor);
238 
240 
253  void SetClippingRange(double dNear, double dFar);
254  void SetClippingRange(const double a[2]) { this->SetClippingRange(a[0], a[1]); }
255  vtkGetVector2Macro(ClippingRange, double);
257 
259 
266  void SetThickness(double);
267  vtkGetMacro(Thickness, double);
269 
271 
280  void SetWindowCenter(double x, double y);
281  vtkGetVector2Macro(WindowCenter, double);
283 
297  void SetObliqueAngles(double alpha, double beta);
298 
304  void ApplyTransform(vtkTransform* t);
305 
307 
312  vtkGetVector3Macro(ViewPlaneNormal, double);
314 
316 
324  void SetViewShear(double dxdz, double dydz, double center);
325  void SetViewShear(double d[3]);
326  vtkGetVector3Macro(ViewShear, double);
328 
330 
334  vtkSetMacro(EyeAngle, double);
335  vtkGetMacro(EyeAngle, double);
337 
339 
345  vtkSetMacro(FocalDisk, double);
346  vtkGetMacro(FocalDisk, double);
348 
350 
358  vtkSetMacro(FocalDistance, double);
359  vtkGetMacro(FocalDistance, double);
361 
363 
372  vtkSetMacro(UseOffAxisProjection, vtkTypeBool);
373  vtkGetMacro(UseOffAxisProjection, vtkTypeBool);
374  vtkBooleanMacro(UseOffAxisProjection, vtkTypeBool);
376 
378 
383  vtkSetVector3Macro(ScreenBottomLeft, double);
384  vtkGetVector3Macro(ScreenBottomLeft, double);
386 
388 
393  vtkSetVector3Macro(ScreenBottomRight, double);
394  vtkGetVector3Macro(ScreenBottomRight, double);
396 
398 
403  vtkSetVector3Macro(ScreenTopRight, double);
404  vtkGetVector3Macro(ScreenTopRight, double);
406 
408 
413  vtkSetMacro(EyeSeparation, double);
414  vtkGetMacro(EyeSeparation, double);
416 
418 
424  void SetEyePosition(double eyePosition[3]);
425  void GetEyePosition(double eyePosition[3]);
427 
432  void GetEyePlaneNormal(double normal[3]);
433 
435 
441  void SetEyeTransformMatrix(vtkMatrix4x4* matrix);
442  vtkGetObjectMacro(EyeTransformMatrix, vtkMatrix4x4);
444 
451  void SetEyeTransformMatrix(const double elements[16]);
452 
454 
459  void SetModelTransformMatrix(vtkMatrix4x4* matrix);
460  vtkGetObjectMacro(ModelTransformMatrix, vtkMatrix4x4);
462 
468  void SetModelTransformMatrix(const double elements[16]);
469 
473  virtual vtkMatrix4x4* GetModelViewTransformMatrix();
474 
478  virtual vtkTransform* GetModelViewTransformObject();
479 
487  virtual vtkMatrix4x4* GetViewTransformMatrix();
488 
498  virtual vtkTransform* GetViewTransformObject();
499 
506  virtual void SetExplicitProjectionTransformMatrix(vtkMatrix4x4*);
507  vtkGetObjectMacro(ExplicitProjectionTransformMatrix, vtkMatrix4x4);
515  vtkSetMacro(UseExplicitProjectionTransformMatrix, bool);
516  vtkGetMacro(UseExplicitProjectionTransformMatrix, bool);
517  vtkBooleanMacro(UseExplicitProjectionTransformMatrix, bool);
529  virtual vtkMatrix4x4* GetProjectionTransformMatrix(double aspect, double nearz, double farz);
530 
540  virtual vtkPerspectiveTransform* GetProjectionTransformObject(
541  double aspect, double nearz, double farz);
542 
553  virtual vtkMatrix4x4* GetCompositeProjectionTransformMatrix(
554  double aspect, double nearz, double farz);
555 
563  virtual vtkMatrix4x4* GetProjectionTransformMatrix(vtkRenderer* ren);
564 
566 
571  void SetUserViewTransform(vtkHomogeneousTransform* transform);
572  vtkGetObjectMacro(UserViewTransform, vtkHomogeneousTransform);
574 
576 
581  void SetUserTransform(vtkHomogeneousTransform* transform);
582  vtkGetObjectMacro(UserTransform, vtkHomogeneousTransform);
584 
590  virtual void Render(vtkRenderer*) {}
591 
595  vtkMTimeType GetViewingRaysMTime();
596 
601  void ViewingRaysModified();
602 
612  virtual void GetFrustumPlanes(double aspect, double planes[24]);
613 
615 
618  double* GetOrientation() VTK_SIZEHINT(3);
619  double* GetOrientationWXYZ() VTK_SIZEHINT(4);
621 
626  void ComputeViewPlaneNormal();
627 
633  vtkMatrix4x4* GetCameraLightTransformMatrix();
634 
638  virtual void UpdateViewport(vtkRenderer* vtkNotUsed(ren)) {}
639 
641 
644  vtkSetMacro(LeftEye, int);
645  vtkGetMacro(LeftEye, int);
647 
654  void ShallowCopy(vtkCamera* source);
655 
662  void DeepCopy(vtkCamera* source);
663 
665 
670  vtkSetMacro(FreezeFocalPoint, bool);
671  vtkGetMacro(FreezeFocalPoint, bool);
673 
675 
678  vtkSetMacro(UseScissor, bool);
679  vtkGetMacro(UseScissor, bool);
681 
683 
686  void SetScissorRect(vtkRecti scissorRect);
687  void GetScissorRect(vtkRecti& scissorRect);
689 
691 
694  vtkGetObjectMacro(Information, vtkInformation);
695  virtual void SetInformation(vtkInformation*);
697 
698 protected:
699  vtkCamera();
700  ~vtkCamera() override;
701 
703 
706  void ComputeDistance();
707  virtual void ComputeViewTransform();
709 
713  virtual void ComputeProjectionTransform(double aspect, double nearz, double farz);
714 
718  void ComputeCompositeProjectionTransform(double aspect, double nearz, double farz);
719 
720  void ComputeCameraLightTransform();
721 
726  void ComputeWorldToScreenMatrix();
727 
731  void ComputeOffAxisProjectionFrustum();
732 
736  void ComputeModelViewMatrix();
737 
744  void PartialCopy(vtkCamera* source);
745 
746  double WindowCenter[2];
747  double ObliqueAngles[2];
748  double FocalPoint[3];
749  double Position[3];
750  double ViewUp[3];
751  double ViewAngle;
752  double ClippingRange[2];
753  double EyeAngle;
756  int Stereo;
757  int LeftEye;
758  double Thickness;
759  double Distance;
760  double DirectionOfProjection[3];
761  double ViewPlaneNormal[3];
762  double ViewShear[3];
764 
766 
767  double ScreenBottomLeft[3];
768  double ScreenBottomRight[3];
769  double ScreenTopRight[3];
770 
772 
775 
777 
779 
782 
785 
790 
792 
793  double FocalDisk;
795 
796  vtkCameraCallbackCommand* UserViewTransformCallbackCommand;
797  friend class vtkCameraCallbackCommand;
798 
799  // ViewingRaysMtime keeps track of camera modifications which will
800  // change the calculation of viewing rays for the camera before it is
801  // transformed to the camera's location and orientation.
805 
807 
808  // Arbitrary extra information associated with this camera.
810 
811 private:
812  vtkCamera(const vtkCamera&) = delete;
813  void operator=(const vtkCamera&) = delete;
814 };
815 
816 #endif
vtkCamera::ViewTransform
vtkTransform * ViewTransform
Definition: vtkCamera.h:786
vtkCamera::UseScissor
bool UseScissor
Definition: vtkCamera.h:804
vtkCamera::CameraLightTransform
vtkTransform * CameraLightTransform
Definition: vtkCamera.h:789
vtkHomogeneousTransform
superclass for homogeneous transformations
Definition: vtkHomogeneousTransform.h:34
vtkX3D::alpha
Definition: vtkX3D.h:256
vtkX3D::scale
Definition: vtkX3D.h:235
vtkX3D::value
Definition: vtkX3D.h:226
vtkCamera::ParallelProjection
vtkTypeBool ParallelProjection
Definition: vtkCamera.h:754
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:32
vtkCamera::ViewingRaysMTime
vtkTimeStamp ViewingRaysMTime
Definition: vtkCamera.h:802
vtkCamera::SetViewUp
void SetViewUp(const double a[3])
Definition: vtkCamera.h:84
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:53
vtkCamera::LeftEye
int LeftEye
Definition: vtkCamera.h:757
vtkX3D::center
Definition: vtkX3D.h:236
vtkCamera::SetClippingRange
void SetClippingRange(const double a[2])
Definition: vtkCamera.h:254
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
vtkCamera::Stereo
int Stereo
Definition: vtkCamera.h:756
vtkCamera::Transform
vtkPerspectiveTransform * Transform
Definition: vtkCamera.h:788
vtkCamera::EyeAngle
double EyeAngle
Definition: vtkCamera.h:753
vtkCamera::UseOffAxisProjection
vtkTypeBool UseOffAxisProjection
Definition: vtkCamera.h:765
vtkCamera::UseExplicitProjectionTransformMatrix
bool UseExplicitProjectionTransformMatrix
Definition: vtkCamera.h:784
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:45
vtkCamera::ExplicitProjectionTransformMatrix
vtkMatrix4x4 * ExplicitProjectionTransformMatrix
Definition: vtkCamera.h:783
vtkCamera::ScissorRect
vtkRecti ScissorRect
Definition: vtkCamera.h:806
vtkRect.h
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkMatrix4x4
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:35
vtkCamera::ModelTransformMatrix
vtkMatrix4x4 * ModelTransformMatrix
Definition: vtkCamera.h:778
vtkCamera
a virtual camera for 3D rendering
Definition: vtkCamera.h:45
vtkCamera::SetPosition
void SetPosition(const double a[3])
Definition: vtkCamera.h:64
vtkCamera::WorldToScreenMatrixMTime
vtkTimeStamp WorldToScreenMatrixMTime
Definition: vtkCamera.h:774
vtkObject::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkCamera::Thickness
double Thickness
Definition: vtkCamera.h:758
vtkPerspectiveTransform
describes a 4x4 matrix transformation
Definition: vtkPerspectiveTransform.h:53
vtkObject.h
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:64
vtkCamera::FreezeFocalPoint
bool FreezeFocalPoint
Definition: vtkCamera.h:803
vtkCamera::UserTransform
vtkHomogeneousTransform * UserTransform
Definition: vtkCamera.h:780
vtkCamera::FocalDisk
double FocalDisk
Definition: vtkCamera.h:793
vtkCamera::EyeSeparation
double EyeSeparation
Definition: vtkCamera.h:771
vtkCamera::Information
vtkInformation * Information
Definition: vtkCamera.h:809
vtkCamera::Render
virtual void Render(vtkRenderer *)
This method causes the camera to set up whatever is required for viewing the scene.
Definition: vtkCamera.h:590
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:58
vtkCamera::ProjectionTransform
vtkPerspectiveTransform * ProjectionTransform
Definition: vtkCamera.h:787
vtkCamera::ParallelScale
double ParallelScale
Definition: vtkCamera.h:755
vtkCallbackCommand
supports function callbacks
Definition: vtkCallbackCommand.h:44
vtkCamera::UseHorizontalViewAngle
vtkTypeBool UseHorizontalViewAngle
Definition: vtkCamera.h:763
vtkCamera::UserViewTransformCallbackCommand
vtkCameraCallbackCommand * UserViewTransformCallbackCommand
Definition: vtkCamera.h:796
vtkCamera::SetFocalPoint
void SetFocalPoint(const double a[3])
Definition: vtkCamera.h:74
vtkRecti
Definition: vtkRect.h:312
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:959
vtkCamera::FocalDistance
double FocalDistance
Definition: vtkCamera.h:794
vtkCamera::Distance
double Distance
Definition: vtkCamera.h:759
vtkCamera::UserViewTransform
vtkHomogeneousTransform * UserViewTransform
Definition: vtkCamera.h:781
vtkCamera::ModelViewTransform
vtkTransform * ModelViewTransform
Definition: vtkCamera.h:791
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkCamera::EyeTransformMatrix
vtkMatrix4x4 * EyeTransformMatrix
Definition: vtkCamera.h:776
vtkCamera::ViewAngle
double ViewAngle
Definition: vtkCamera.h:751
vtkMTimeType
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:298
vtkCamera::WorldToScreenMatrix
vtkMatrix4x4 * WorldToScreenMatrix
Definition: vtkCamera.h:773