00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00030 #ifndef __vtkVector_h
00031 #define __vtkVector_h
00032
00033 template<typename T, int Size>
00034 class vtkVector
00035 {
00036 public:
00037 vtkVector()
00038 {
00039 for (int i = 0; i < Size; ++i)
00040 {
00041 Data[i] = 0;
00042 }
00043 }
00044
00045 vtkVector(const T* init)
00046 {
00047 for (int i = 0; i < Size; ++i)
00048 {
00049 Data[i] = init[i];
00050 }
00051 }
00052
00054 int GetSize() const { return Size; }
00055
00057
00058 T* GetData() { return this->Data; }
00059 const T* GetData() const { return this->Data; }
00061
00063
00065 T& operator[](int i) { return this->Data[i]; }
00066 const T& operator[](int i) const { return this->Data[i]; }
00068
00071 T operator()(int i) const { return this->Data[i]; }
00072
00073 protected:
00075 T Data[Size];
00076 };
00077
00078
00079
00080 template<typename T>
00081 class vtkVector2 : public vtkVector<T, 2>
00082 {
00083 public:
00084 vtkVector2(const T& x = 0.0, const T& y = 0.0)
00085 {
00086 this->Data[0] = x;
00087 this->Data[1] = y;
00088 }
00089
00090 vtkVector2(const T* init) : vtkVector<T, 2>(init)
00091 {
00092 }
00093
00095
00096 void Set(const T& x, const T& y)
00097 {
00098 this->Data[0] = x;
00099 this->Data[1] = y;
00100 }
00102
00104 void SetX(const T& x) { this->Data[0] = x; }
00105
00107
00108 const T& GetX() const { return this->Data[0]; }
00109 const T& X() const { return this->Data[0]; }
00111
00113 void SetY(const T& y) { this->Data[1] = y; }
00114
00116
00117 const T& GetY() const { return this->Data[1]; }
00118 const T& Y() const { return this->Data[1]; }
00120 };
00121
00122
00123
00124 template<typename T>
00125 class vtkVector3 : public vtkVector<T, 3>
00126 {
00127 public:
00128 vtkVector3(const T& x = 0.0, const T& y = 0.0, const T& z = 0.0)
00129 {
00130 this->Data[0] = x;
00131 this->Data[1] = y;
00132 this->Data[2] = z;
00133 }
00134
00136
00137 void Set(const T& x, const T& y, const T& z)
00138 {
00139 this->Data[0] = x;
00140 this->Data[1] = y;
00141 this->Data[2] = z;
00142 }
00144
00146 void SetX(const T& x) { this->Data[0] = x; }
00147
00149
00150 const T& GetX() const { return this->Data[0]; }
00151 const T& X() const { return this->Data[0]; }
00153
00155 void SetY(const T& y) { this->Data[1] = y; }
00156
00158
00159 const T& GetY() const { return this->Data[1]; }
00160 const T& Y() const { return this->Data[1]; }
00162
00164 void SetZ(const T& z) { this->Data[2] = z; }
00165
00167
00168 const T& GetZ() const { return this->Data[2]; }
00169 const T& Z() const { return this->Data[2]; }
00171
00172 };
00173
00174
00175
00176 template<typename T>
00177 class vtkRect : public vtkVector<T, 4>
00178 {
00179 public:
00180 vtkRect(const T& x = 0.0, const T& y = 0.0, const T width = 0.0,
00181 const T& height = 0.0 )
00182 {
00183 this->Data[0] = x;
00184 this->Data[1] = y;
00185 this->Data[2] = width;
00186 this->Data[3] = height;
00187 }
00188
00190
00191 void Set(const T& x, const T& y, const T& width, const T& height)
00192 {
00193 this->Data[0] = x;
00194 this->Data[1] = y;
00195 this->Data[2] = width;
00196 this->Data[3] = height;
00197 }
00199
00201 void SetX(const T& x) { this->Data[0] = x; }
00202
00204
00205 const T& GetX() const { return this->Data[0]; }
00206 const T& X() const { return this->Data[0]; }
00208
00210 void SetY(const T& y) { this->Data[1] = y; }
00211
00213
00214 const T& GetY() const { return this->Data[1]; }
00215 const T& Y() const { return this->Data[1]; }
00217
00219 void SetWidth(const T& width) { this->Data[2] = width; }
00220
00222
00223 const T& GetWidth() const { return this->Data[2]; }
00224 const T& Width() const { return this->Data[2]; }
00226
00228 void SetHeight(const T& height) { this->Data[3] = height; }
00229
00231
00232 const T& GetHeight() const { return this->Data[3]; }
00233 const T& Height() const { return this->Data[3]; }
00235
00236 };
00237
00239 class vtkVector2i : public vtkVector2<int>
00240 {
00241 public:
00242 vtkVector2i(int x = 0, int y = 0) : vtkVector2<int>(x, y) {}
00243 };
00244
00245 class vtkVector2f : public vtkVector2<float>
00246 {
00247 public:
00248 vtkVector2f(float x = 0.0, float y = 0.0) : vtkVector2<float>(x, y) {}
00249 vtkVector2f(const float* i) : vtkVector2<float>(i) {}
00250 };
00251
00252 class vtkVector2d : public vtkVector2<double>
00253 {
00254 public:
00255 vtkVector2d(double x = 0.0, double y = 0.0) : vtkVector2<double>(x, y) {}
00256 };
00257
00258 class vtkVector3i : public vtkVector3<int>
00259 {
00260 public:
00261 vtkVector3i(int x = 0, int y = 0, int z = 0) : vtkVector3<int>(x, y, z) {}
00262 };
00263
00264 class vtkVector3f : public vtkVector3<float>
00265 {
00266 public:
00267 vtkVector3f(float x = 0.0, float y = 0.0, float z = 0.0)
00268 : vtkVector3<float>(x, y, z) {}
00269 };
00270
00271 class vtkVector3d : public vtkVector3<double>
00272 {
00273 public:
00274 vtkVector3d(double x = 0.0, double y = 0.0, double z = 0.0)
00275 : vtkVector3<double>(x, y, z) {}
00276 };
00277
00278 class vtkRecti : public vtkRect<int>
00279 {
00280 public:
00281 vtkRecti(int x = 0, int y = 0, int width = 0, int height = 0)
00282 : vtkRect<int>(x, y, width, height) {}
00283 };
00284
00285 class vtkRectf : public vtkRect<float>
00286 {
00287 public:
00288 vtkRectf(float x = 0.0, float y = 0.0, float width = 0.0, float height = 0.0)
00289 : vtkRect<float>(x, y, width, height) {}
00290 };
00291
00292 class vtkRectd : public vtkRect<double>
00293 {
00294 public:
00295 vtkRectd(double x = 0.0, double y = 0.0, double width = 0.0,
00296 double height = 0.0)
00297 : vtkRect<double>(x, y, width, height) {}
00298 };
00299
00300 #endif // __vtkVector_h