00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00038 #ifndef __vtkCamera_h
00039 #define __vtkCamera_h
00040
00041 #include "vtkObject.h"
00042
00043 class vtkMatrix4x4;
00044 class vtkPerspectiveTransform;
00045 class vtkRenderer;
00046 class vtkTransform;
00047 class vtkHomogeneousTransform;
00048
00049 class VTK_RENDERING_EXPORT vtkCamera : public vtkObject
00050 {
00051 public:
00052 void PrintSelf(ostream& os, vtkIndent indent);
00053 vtkTypeRevisionMacro(vtkCamera,vtkObject);
00054
00058 static vtkCamera *New();
00059
00061
00063 void SetPosition(double x, double y, double z);
00064 void SetPosition(const double a[3]) {
00065 this->SetPosition(a[0], a[1], a[2]); };
00066 void SetPosition(const float a[3]) {
00067 this->SetPosition(a[0], a[1], a[2]); };
00068 vtkGetVector3Macro(Position,double);
00069 void GetPosition(float a[3]) {
00070 double tmp[3]; this->GetPosition(tmp);
00071 a[0] = static_cast<float>(tmp[0]);
00072 a[1] = static_cast<float>(tmp[1]);
00073 a[2] = static_cast<float>(tmp[2]); };
00075
00077
00079 void SetFocalPoint(double x, double y, double z);
00080 void SetFocalPoint(const double a[3]) {
00081 this->SetFocalPoint(a[0], a[1], a[2]);};
00082 void SetFocalPoint(const float a[3]) {
00083 this->SetFocalPoint(a[0], a[1], a[2]);};
00084 vtkGetVector3Macro(FocalPoint,double);
00085 void GetFocalPoint(float a[3]) {
00086 double tmp[3]; this->GetFocalPoint(tmp);
00087 a[0] = static_cast<float>(tmp[0]);
00088 a[1] = static_cast<float>(tmp[1]);
00089 a[2] = static_cast<float>(tmp[2]); };
00091
00093
00095 void SetViewUp(double vx, double vy, double vz);
00096 void SetViewUp(const double a[3]) {
00097 this->SetViewUp(a[0], a[1], a[2]); }
00098 void SetViewUp(const float a[3]) {
00099 this->SetViewUp(a[0], a[1], a[2]); }
00100 vtkGetVector3Macro(ViewUp,double);
00101 void GetViewUp(float a[3]) {
00102 double tmp[3]; this->GetViewUp(tmp);
00103 a[0] = static_cast<float>(tmp[0]);
00104 a[1] = static_cast<float>(tmp[1]);
00105 a[2] = static_cast<float>(tmp[2]); };
00107
00111 void OrthogonalizeViewUp();
00112
00114
00116 void SetDistance(double);
00117 vtkGetMacro(Distance,double);
00119
00121
00124 vtkGetVector3Macro(DirectionOfProjection,double);
00125 void GetDirectionOfProjection(float a[3]) {
00126 double tmp[3]; this->GetDirectionOfProjection(tmp);
00127 a[0] = static_cast<float>(tmp[0]);
00128 a[1] = static_cast<float>(tmp[1]);
00129 a[2] = static_cast<float>(tmp[2]); };
00131
00135 void Dolly(double distance);
00136
00138
00139 void SetRoll(double angle);
00140 double GetRoll();
00142
00144 void Roll(double angle);
00145
00149 void Azimuth(double angle);
00150
00154 void Yaw(double angle);
00155
00158 void Elevation(double angle);
00159
00162 void Pitch(double angle);
00163
00165
00168 void SetParallelProjection(int flag);
00169 vtkGetMacro(ParallelProjection,int);
00170 vtkBooleanMacro(ParallelProjection,int);
00172
00174
00180 void SetUseHorizontalViewAngle(int flag);
00181 vtkGetMacro(UseHorizontalViewAngle, int);
00182 vtkBooleanMacro(UseHorizontalViewAngle, int);
00184
00186
00193 void SetViewAngle(double angle);
00194 vtkGetMacro(ViewAngle,double);
00196
00198
00203 void SetParallelScale(double scale);
00204 vtkGetMacro(ParallelScale,double);
00206
00211 void Zoom(double factor);
00212
00214
00221 void SetClippingRange(double near, double far);
00222 void SetClippingRange(const double a[2]) {
00223 this->SetClippingRange(a[0], a[1]); };
00224 void SetClippingRange(const float a[2]) {
00225 this->SetClippingRange(a[0], a[1]); };
00226 vtkGetVector2Macro(ClippingRange,double);
00227 void GetClippingRange(float a[2]) {
00228 double tmp[2]; this->GetClippingRange(tmp);
00229 a[0] = static_cast<float>(tmp[0]);
00230 a[1] = static_cast<float>(tmp[1]); };
00232
00234
00237 void SetThickness(double);
00238 vtkGetMacro(Thickness,double);
00240
00242
00247 void SetWindowCenter(double x, double y);
00248 vtkGetVector2Macro(WindowCenter,double);
00250
00259 void SetObliqueAngles(double alpha, double beta);
00260
00264 void ApplyTransform(vtkTransform *t);
00265
00267
00270 vtkGetVector3Macro(ViewPlaneNormal,double);
00271 void GetViewPlaneNormal(float a[3]) {
00272 double tmp[3]; this->GetViewPlaneNormal(tmp);
00273 a[0] = static_cast<float>(tmp[0]);
00274 a[1] = static_cast<float>(tmp[1]);
00275 a[2] = static_cast<float>(tmp[2]); };
00277
00278
00280
00284 void SetViewShear(double dxdz, double dydz, double center);
00285 void SetViewShear(double d[3]);
00286 vtkGetVector3Macro(ViewShear, double);
00288
00290
00292 vtkSetMacro(EyeAngle,double);
00293 vtkGetMacro(EyeAngle,double);
00295
00297
00301 vtkSetMacro(FocalDisk,double);
00302 vtkGetMacro(FocalDisk,double);
00304
00306 virtual vtkMatrix4x4 *GetViewTransformMatrix();
00307
00309
00314 virtual vtkMatrix4x4 *GetPerspectiveTransformMatrix(double aspect,
00315 double nearz,
00316 double farz);
00318
00320
00326 virtual vtkMatrix4x4 *GetCompositePerspectiveTransformMatrix(double aspect,
00327 double nearz,
00328 double farz);
00330
00332
00336 void SetUserTransform(vtkHomogeneousTransform *transform);
00337 vtkGetObjectMacro(UserTransform,vtkHomogeneousTransform);
00339
00343 virtual void Render(vtkRenderer *) {};
00344
00347 unsigned long GetViewingRaysMTime();
00348
00351 void ViewingRaysModified();
00352
00358 virtual void GetFrustumPlanes(float aspect, float planes[24]);
00359
00361
00362 float *GetOrientation();
00363 float *GetOrientationWXYZ();
00365
00367
00370 void SetViewPlaneNormal(double x, double y, double z);
00371 void SetViewPlaneNormal(const double a[3]) {
00372 this->SetViewPlaneNormal(a[0], a[1], a[2]); };
00373 void SetViewPlaneNormal(const float a[3]) {
00374 this->SetViewPlaneNormal(a[0], a[1], a[2]); };
00376
00379 void ComputeViewPlaneNormal();
00380
00384 vtkMatrix4x4 *GetCameraLightTransformMatrix();
00385
00387 virtual void UpdateViewport(vtkRenderer *vtkNotUsed(ren)) {}
00388
00389 virtual vtkTransform *GetViewTransformObject() {return this->ViewTransform;};
00390
00392
00393 vtkSetMacro(LeftEye,int);
00395
00396 protected:
00397 vtkCamera();
00398 ~vtkCamera();
00399
00401
00402 void ComputeDistance();
00403 void ComputeViewTransform();
00404 void ComputePerspectiveTransform(double aspect, double nearz, double farz);
00405 void ComputeCompositePerspectiveTransform(double aspect,
00406 double nearz, double farz);
00407 void ComputeCameraLightTransform();
00409
00410 double WindowCenter[2];
00411 double ObliqueAngles[2];
00412 double FocalPoint[3];
00413 double Position[3];
00414 double ViewUp[3];
00415 double ViewAngle;
00416 double ClippingRange[2];
00417 double EyeAngle;
00418 int ParallelProjection;
00419 double ParallelScale;
00420 int Stereo;
00421 int LeftEye;
00422 double Thickness;
00423 double Distance;
00424 double DirectionOfProjection[3];
00425 double ViewPlaneNormal[3];
00426 double ViewShear[3];
00427 int UseHorizontalViewAngle;
00428 vtkHomogeneousTransform *UserTransform;
00429
00430 vtkTransform *ViewTransform;
00431 vtkPerspectiveTransform *PerspectiveTransform;
00432 vtkPerspectiveTransform *Transform;
00433 vtkTransform *CameraLightTransform;
00434
00435 double FocalDisk;
00436
00437
00438
00439
00440 vtkTimeStamp ViewingRaysMTime;
00441 private:
00442 vtkCamera(const vtkCamera&);
00443 void operator=(const vtkCamera&);
00444 };
00445
00446 #endif
00447