00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef INTER_SMOOTH_DIVER_HH
00026 #define INTER_SMOOTH_DIVER_HH
00027
00028 #include "mesh-diver.hh"
00029
00030 class CTransformationMatrix;
00031
00043
00044
00045 class CMesh1InterpolationDiver : public CMesh1Diver
00046 {
00047 protected:
00048 CVertex FVertex0, FVertex1;
00049
00050 public:
00051
00052
00053
00061 CMesh1InterpolationDiver(int ASx,
00062 const CVertex& AVertex0,
00063 const CVertex& AVertex1);
00064
00066 virtual ~CMesh1InterpolationDiver();
00067
00068
00069 };
00070
00071 class CMesh2InterpolationDiver : public CMesh2Diver
00072 {
00073 protected:
00074 const CVertex ** FBottomEdge;
00075 const CVertex ** FTopEdge ;
00076 const CVertex ** FLeftEdge ;
00077 const CVertex ** FRightEdge ;
00078
00079 public:
00080
00081
00082
00104 CMesh2InterpolationDiver(int ASx, int ASy,
00105 const CVertex** ABottomEdge ,
00106 const CVertex** ATopEdge ,
00107 const CVertex** ALeftEdge ,
00108 const CVertex** ARightEdge );
00109
00111 virtual ~CMesh2InterpolationDiver();
00112
00113
00114 };
00115
00116 class CMesh3InterpolationDiver : public CMesh3Diver
00117 {
00118 protected:
00119 const CVertex *** FLeftFace ;
00120 const CVertex *** FRightFace ;
00121 const CVertex *** FFrontFace ;
00122 const CVertex *** FBackFace ;
00123 const CVertex *** FBottomFace;
00124 const CVertex *** FTopFace ;
00125
00126 public:
00127
00128
00129
00171 CMesh3InterpolationDiver(int ASx, int ASy, int ASz,
00172 const CVertex*** ALeftFace ,
00173 const CVertex*** ARightFace ,
00174 const CVertex*** AFrontFace ,
00175 const CVertex*** ABackFace ,
00176 const CVertex*** ABottomFace ,
00177 const CVertex*** ATopFace );
00178
00180 virtual ~CMesh3InterpolationDiver();
00181
00182
00183 };
00184
00185
00186
00193
00194
00195 class CMesh1LinearDiver : public CMesh1InterpolationDiver
00196 {
00197 public:
00198
00199
00200
00208 CMesh1LinearDiver(int ASx,
00209 const CVertex& AVertex0,
00210 const CVertex& AVertex1);
00211
00213 virtual ~CMesh1LinearDiver();
00214
00215
00216
00217
00218
00220 virtual CVertex computeCurrentVertex() const;
00221
00222
00223 };
00224
00225 class CMesh2LinearDiver : public CMesh2InterpolationDiver
00226 {
00227 private:
00228 const CVertex * FP00, * FP01, * FP10, * FP11;
00229 const CVertex * FPi0, * FP0j, * FP1j, * FPi1;
00230
00231 public:
00232
00233
00234
00256 CMesh2LinearDiver(int ASx, int ASy,
00257 const CVertex ** ABottomEdge ,
00258 const CVertex ** ATopEdge ,
00259 const CVertex ** ALeftEdge ,
00260 const CVertex ** ARightEdge );
00261
00263 virtual ~CMesh2LinearDiver();
00264
00265
00266
00267
00268
00273 virtual void setIx(int AIx);
00274
00279 virtual void setIy(int AIy);
00280
00281
00282
00283
00284
00286 virtual CVertex computeCurrentVertex() const;
00287
00288
00289 };
00290
00291 class CMesh3LinearDiver : public CMesh3InterpolationDiver
00292 {
00293 private:
00294 const CVertex * FP000, * FP001, * FP010, * FP011;
00295 const CVertex * FP100, * FP101, * FP110, * FP111;
00296
00297 const CVertex * FPi00, * FP0j0, * FP00k;
00298 const CVertex * FPi11, * FP1j1, * FP11k;
00299
00300 const CVertex * FPi10, * FP0j1, * FP10k;
00301 const CVertex * FPi01, * FP1j0, * FP01k;
00302
00303 const CVertex * FP0jk, * FPi0k, * FPij0;
00304 const CVertex * FP1jk, * FPi1k, * FPij1;
00305
00306 public:
00307
00308
00309
00351 CMesh3LinearDiver(int ASx, int ASy, int ASz,
00352 const CVertex*** ALeftFace ,
00353 const CVertex*** ARightFace ,
00354 const CVertex*** AFrontFace ,
00355 const CVertex*** ABackFace ,
00356 const CVertex*** ABottomFace ,
00357 const CVertex*** ATopFace );
00358
00360 virtual ~CMesh3LinearDiver();
00361
00362
00363
00364
00365
00370 virtual void setIx(int AIx);
00371
00376 virtual void setIy(int AIy);
00377
00382 virtual void setIz(int AIz);
00383
00384
00385
00386
00387
00389 virtual CVertex computeCurrentVertex() const;
00390
00391
00392 };
00393
00394
00395
00402
00403
00404 class CMesh1SmoothingDiver : public CMesh1Diver
00405 {
00406 protected:
00407 CVector FTX;
00408 CVector FControl[3];
00409
00410 public:
00411
00412
00413
00421 CMesh1SmoothingDiver(int ASx,
00422 const CTransformationMatrix & AMethod,
00423 const CVertex * AControlPoints);
00424
00426 virtual ~CMesh1SmoothingDiver();
00427
00428
00429
00430
00431
00436 virtual void setIx(int AIx);
00437
00438
00439
00440
00441
00444 virtual CVertex computeCurrentVertex() const;
00445
00446
00447 };
00448
00449 class CMesh2SmoothingDiver : public CMesh2Diver
00450 {
00451 protected:
00452 const CTransformationMatrix * FMethod;
00453
00454 CMesh1SmoothingDiver * FCurbsY[4];
00455 CMesh1SmoothingDiver * FCurbX;
00456
00457 public:
00458
00459
00460
00469 CMesh2SmoothingDiver(int ASx, int ASy,
00470 const CTransformationMatrix& AMethod,
00471 const CVertex** AControlPoints);
00472
00474 virtual ~CMesh2SmoothingDiver();
00475
00476
00477
00478
00479
00484 virtual void setIx(int AIx);
00485
00490 virtual void setIy(int AIy);
00491
00492
00493
00494
00495
00498 virtual CVertex computeCurrentVertex() const;
00499
00500
00501 };
00502
00503 class CMesh3SmoothingDiver : public CMesh3Diver
00504 {
00505 protected:
00506 const CTransformationMatrix * FMethod;
00507
00508 CMesh2SmoothingDiver * FSurfacesYZ[4];
00509 CMesh1SmoothingDiver * FCurbX;
00510
00511 public:
00512
00513
00514
00524 CMesh3SmoothingDiver(int ASx, int ASy, int ASz,
00525 const CTransformationMatrix& AMethod,
00526 const CVertex*** AControlPoints);
00527
00529 virtual ~CMesh3SmoothingDiver();
00530
00531
00532
00533
00534
00539 virtual void setIx(int AIx);
00540
00545 virtual void setIy(int AIy);
00546
00551 virtual void setIz(int AIz);
00552
00553
00554
00555
00556
00560 virtual CVertex computeCurrentVertex() const;
00561
00562
00563 };
00564
00565 #include INCLUDE_INLINE("inter-smooth-diver.icc")
00566
00567 #endif // INTER_SMOOTH_DIVER_HH
00568