00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00034 #ifndef __vtkCamera_h
00035 #define __vtkCamera_h
00036
00037 #include "vtkObject.h"
00038
00039 class vtkMatrix4x4;
00040 class vtkPerspectiveTransform;
00041 class vtkRenderer;
00042 class vtkTransform;
00043 class vtkHomogeneousTransform;
00044
00045 class VTK_RENDERING_EXPORT vtkCamera : public vtkObject
00046 {
00047 public:
00048 void PrintSelf(ostream& os, vtkIndent indent);
00049 vtkTypeRevisionMacro(vtkCamera,vtkObject);
00050
00054 static vtkCamera *New();
00055
00057
00059 void SetPosition(double x, double y, double z);
00060 void SetPosition(const double a[3]) {
00061 this->SetPosition(a[0], a[1], a[2]); };
00062 vtkGetVector3Macro(Position,double);
00064
00066
00068 void SetFocalPoint(double x, double y, double z);
00069 void SetFocalPoint(const double a[3]) {
00070 this->SetFocalPoint(a[0], a[1], a[2]);};
00071 vtkGetVector3Macro(FocalPoint,double);
00073
00075
00077 void SetViewUp(double vx, double vy, double vz);
00078 void SetViewUp(const double a[3]) {
00079 this->SetViewUp(a[0], a[1], a[2]); }
00080 vtkGetVector3Macro(ViewUp,double);
00082
00086 void OrthogonalizeViewUp();
00087
00089
00091 void SetDistance(double);
00092 vtkGetMacro(Distance,double);
00094
00096
00099 vtkGetVector3Macro(DirectionOfProjection,double);
00101
00105 void Dolly(double distance);
00106
00108
00109 void SetRoll(double angle);
00110 double GetRoll();
00112
00114 void Roll(double angle);
00115
00119 void Azimuth(double angle);
00120
00124 void Yaw(double angle);
00125
00128 void Elevation(double angle);
00129
00132 void Pitch(double angle);
00133
00135
00138 void SetParallelProjection(int flag);
00139 vtkGetMacro(ParallelProjection,int);
00140 vtkBooleanMacro(ParallelProjection,int);
00142
00144
00150 void SetUseHorizontalViewAngle(int flag);
00151 vtkGetMacro(UseHorizontalViewAngle, int);
00152 vtkBooleanMacro(UseHorizontalViewAngle, int);
00154
00156
00163 void SetViewAngle(double angle);
00164 vtkGetMacro(ViewAngle,double);
00166
00168
00173 void SetParallelScale(double scale);
00174 vtkGetMacro(ParallelScale,double);
00176
00181 void Zoom(double factor);
00182
00184
00191 void SetClippingRange(double near, double far);
00192 void SetClippingRange(const double a[2]) {
00193 this->SetClippingRange(a[0], a[1]); };
00194 vtkGetVector2Macro(ClippingRange,double);
00196
00198
00201 void SetThickness(double);
00202 vtkGetMacro(Thickness,double);
00204
00206
00211 void SetWindowCenter(double x, double y);
00212 vtkGetVector2Macro(WindowCenter,double);
00214
00223 void SetObliqueAngles(double alpha, double beta);
00224
00228 void ApplyTransform(vtkTransform *t);
00229
00231
00234 vtkGetVector3Macro(ViewPlaneNormal,double);
00236
00238
00242 void SetViewShear(double dxdz, double dydz, double center);
00243 void SetViewShear(double d[3]);
00244 vtkGetVector3Macro(ViewShear, double);
00246
00248
00250 vtkSetMacro(EyeAngle,double);
00251 vtkGetMacro(EyeAngle,double);
00253
00255
00259 vtkSetMacro(FocalDisk,double);
00260 vtkGetMacro(FocalDisk,double);
00262
00264 virtual vtkMatrix4x4 *GetViewTransformMatrix();
00265
00267
00272 virtual vtkMatrix4x4 *GetPerspectiveTransformMatrix(double aspect,
00273 double nearz,
00274 double farz);
00276
00278
00284 virtual vtkMatrix4x4 *GetCompositePerspectiveTransformMatrix(double aspect,
00285 double nearz,
00286 double farz);
00288
00290
00294 void SetUserTransform(vtkHomogeneousTransform *transform);
00295 vtkGetObjectMacro(UserTransform,vtkHomogeneousTransform);
00297
00301 virtual void Render(vtkRenderer *) {};
00302
00305 unsigned long GetViewingRaysMTime();
00306
00309 void ViewingRaysModified();
00310
00316 virtual void GetFrustumPlanes(double aspect, double planes[24]);
00317
00319
00320 double *GetOrientation();
00321 double *GetOrientationWXYZ();
00323
00325
00328 void SetViewPlaneNormal(double x, double y, double z);
00329 void SetViewPlaneNormal(const double a[3]) {
00330 this->SetViewPlaneNormal(a[0], a[1], a[2]); };
00332
00335 void ComputeViewPlaneNormal();
00336
00340 vtkMatrix4x4 *GetCameraLightTransformMatrix();
00341
00343 virtual void UpdateViewport(vtkRenderer *vtkNotUsed(ren)) {}
00344
00345 virtual vtkTransform *GetViewTransformObject() {return this->ViewTransform;};
00346
00347 protected:
00348 vtkCamera();
00349 ~vtkCamera();
00350
00352
00353 void ComputeDistance();
00354 void ComputeViewTransform();
00355 void ComputePerspectiveTransform(double aspect, double nearz, double farz);
00356 void ComputeCompositePerspectiveTransform(double aspect,
00357 double nearz, double farz);
00358 void ComputeCameraLightTransform();
00360
00361 double WindowCenter[2];
00362 double ObliqueAngles[2];
00363 double FocalPoint[3];
00364 double Position[3];
00365 double ViewUp[3];
00366 double ViewAngle;
00367 double ClippingRange[2];
00368 double EyeAngle;
00369 int ParallelProjection;
00370 double ParallelScale;
00371 int Stereo;
00372 int LeftEye;
00373 double Thickness;
00374 double Distance;
00375 double DirectionOfProjection[3];
00376 double ViewPlaneNormal[3];
00377 double ViewShear[3];
00378 int UseHorizontalViewAngle;
00379 vtkHomogeneousTransform *UserTransform;
00380
00381 vtkTransform *ViewTransform;
00382 vtkPerspectiveTransform *PerspectiveTransform;
00383 vtkPerspectiveTransform *Transform;
00384 vtkTransform *CameraLightTransform;
00385
00386 double FocalDisk;
00387
00388
00389
00390
00391 vtkTimeStamp ViewingRaysMTime;
00392 private:
00393 vtkCamera(const vtkCamera&);
00394 void operator=(const vtkCamera&);
00395 };
00396
00397 #endif
00398