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 #include "vertex.hh"
00026 #include "transformation-matrix.hh"
00027 #include <cassert>
00028
00029 INLINE
00030 CMesh1InterpolationDiver::CMesh1InterpolationDiver(int ASx,
00031 const CVertex& AVertex0,
00032 const CVertex& AVertex1)
00033 : CMesh1Diver(ASx)
00034 {
00035 FVertex0 = AVertex0;
00036 FVertex1 = AVertex1;
00037 }
00038
00039 INLINE
00040 CMesh1InterpolationDiver::~CMesh1InterpolationDiver()
00041 {}
00042
00043 INLINE
00044 CMesh2InterpolationDiver::CMesh2InterpolationDiver(int ASx, int ASy,
00045 const CVertex** ABottomEdge,
00046 const CVertex** ATopEdge,
00047 const CVertex** ALeftEdge,
00048 const CVertex** ARightEdge)
00049 : CMesh2Diver(ASx, ASy)
00050 {
00051 assert(ABottomEdge[ 0 ]==ALeftEdge [ 0 ]);
00052 assert(ABottomEdge[FSx]==ARightEdge[ 0 ]);
00053 assert(ATopEdge [ 0 ]==ALeftEdge [FSy]);
00054 assert(ATopEdge [FSx]==ARightEdge[FSy]);
00055
00056
00057 FBottomEdge = new const CVertex* [FSx+1];
00058 FTopEdge = new const CVertex* [FSx+1];
00059 FLeftEdge = new const CVertex* [FSy+1];
00060 FRightEdge = new const CVertex* [FSy+1];
00061
00062
00063 for (int i=0; i<=FSx; ++i)
00064 {
00065 FBottomEdge[i] = ABottomEdge[i];
00066 FTopEdge [i] = ATopEdge [i];
00067 }
00068
00069 for (int j=0; j<=FSy; ++j)
00070 {
00071 FLeftEdge [j] = ALeftEdge [j];
00072 FRightEdge [j] = ARightEdge [j];
00073 }
00074 }
00075
00076 INLINE
00077 CMesh2InterpolationDiver::~CMesh2InterpolationDiver()
00078 {
00079
00080 delete [] FBottomEdge;
00081 delete [] FTopEdge ;
00082 delete [] FLeftEdge ;
00083 delete [] FRightEdge ;
00084 }
00085
00086 INLINE
00087 CMesh3InterpolationDiver::CMesh3InterpolationDiver(int ASx, int ASy, int ASz,
00088 const CVertex*** ALeftFace ,
00089 const CVertex*** ARightFace ,
00090 const CVertex*** AFrontFace ,
00091 const CVertex*** ABackFace ,
00092 const CVertex*** ABottomFace,
00093 const CVertex*** ATopFace )
00094 : CMesh3Diver(ASx, ASy, ASz)
00095 {
00096 int i,j,k;
00097
00098 #ifndef NDEBUG
00099 for (i=0; i<FSx; ++i)
00100 {
00101 assert( ABottomFace[ i ][ 0 ] == AFrontFace[ 0 ][ i ] );
00102 assert( ABottomFace[ i ][FSy] == ABackFace [ 0 ][ i ] );
00103 assert( ATopFace [ i ][ 0 ] == AFrontFace[FSz][ i ] );
00104 assert( ATopFace [ i ][FSy] == ABackFace [FSz][ i ] );
00105 }
00106
00107 for (j=0; j<FSy; ++j)
00108 {
00109 assert( ABottomFace[ 0 ][ j ] == ALeftFace [ j ][ 0 ] );
00110 assert( ABottomFace[FSx][ j ] == ARightFace[ j ][ 0 ] );
00111 assert( ATopFace [ 0 ][ j ] == ALeftFace [ j ][FSz] );
00112 assert( ATopFace [FSx][ j ] == ARightFace[ j ][FSz] );
00113 }
00114
00115 for (k=0; k<FSz; ++k)
00116 {
00117 assert( AFrontFace [ k ][ 0 ] == ALeftFace [ 0 ][ k ] );
00118 assert( AFrontFace [ k ][FSx] == ARightFace[ 0 ][ k ] );
00119 assert( ABackFace [ k ][ 0 ] == ALeftFace [FSy][ k ] );
00120 assert( ABackFace [ k ][FSx] == ARightFace[FSy][ k ] );
00121 }
00122 #endif
00123
00124
00125 FLeftFace = new const CVertex** [FSy+1];
00126 FRightFace = new const CVertex** [FSy+1];
00127 FFrontFace = new const CVertex** [FSz+1];
00128 FBackFace = new const CVertex** [FSz+1];
00129 FBottomFace = new const CVertex** [FSx+1];
00130 FTopFace = new const CVertex** [FSx+1];
00131
00132 for (j=0; j<=FSy; ++j)
00133 {
00134 FLeftFace [j] = new const CVertex* [FSz+1];
00135 FRightFace [j] = new const CVertex* [FSz+1];
00136 }
00137
00138 for (k=0; k<=FSz; ++k)
00139 {
00140 FFrontFace [k] = new const CVertex* [FSx+1];
00141 FBackFace [k] = new const CVertex* [FSx+1];
00142 }
00143
00144 for (i=0; i<=FSx; ++i)
00145 {
00146 FBottomFace[i] = new const CVertex* [FSy+1];
00147 FTopFace [i] = new const CVertex* [FSy+1];
00148 }
00149
00150
00151 for (j=0; j<=FSy; ++j)
00152 for (k=0; k<=FSz; ++k)
00153 {
00154 FLeftFace [j][k] = ALeftFace [j][k];
00155 FRightFace [j][k] = ARightFace [j][k];
00156 }
00157
00158 for (k=0; k<=FSz; ++k)
00159 for (i=0; i<=FSx; ++i)
00160 {
00161 FFrontFace [k][i] = AFrontFace [k][i];
00162 FBackFace [k][i] = ABackFace [k][i];
00163 }
00164
00165 for (i=0; i<=FSx; ++i)
00166 for (j=0; j<=FSy; ++j)
00167 {
00168 FBottomFace[i][j] = ABottomFace[i][j];
00169 FTopFace [i][j] = ATopFace [i][j];
00170 }
00171 }
00172
00173 INLINE
00174 CMesh3InterpolationDiver::~CMesh3InterpolationDiver()
00175 {
00176
00177 for (int j=0; j<=FSy; ++j)
00178 {
00179 delete [] FLeftFace [j];
00180 delete [] FRightFace [j];
00181 }
00182
00183 for (int k=0; k<=FSz; ++k)
00184 {
00185 delete [] FFrontFace [k];
00186 delete [] FBackFace [k];
00187 }
00188
00189 for (int i=0; i<=FSx; ++i)
00190 {
00191 delete [] FBottomFace[i];
00192 delete [] FTopFace [i];
00193 }
00194
00195 delete [] FLeftFace ;
00196 delete [] FRightFace ;
00197 delete [] FFrontFace ;
00198 delete [] FBackFace ;
00199 delete [] FBottomFace;
00200 delete [] FTopFace ;
00201 }
00202
00203 INLINE
00204 CMesh1LinearDiver::CMesh1LinearDiver(int ASx,
00205 const CVertex& AVertex0,
00206 const CVertex& AVertex1)
00207 : CMesh1InterpolationDiver(ASx, AVertex0, AVertex1)
00208 {
00209 }
00210
00211 INLINE
00212 CMesh1LinearDiver::~CMesh1LinearDiver()
00213 {}
00214
00215 INLINE
00216 CMesh2LinearDiver::CMesh2LinearDiver(int ASx, int ASy,
00217 const CVertex** ABottomEdge,
00218 const CVertex** ATopEdge,
00219 const CVertex** ALeftEdge,
00220 const CVertex** ARightEdge)
00221 : CMesh2InterpolationDiver(ASx, ASy,
00222 ABottomEdge, ATopEdge,
00223 ALeftEdge, ARightEdge)
00224 {
00225 FP00 = FBottomEdge[ 0 ];
00226 FP10 = FRightEdge [ 0 ];
00227 FP11 = FTopEdge [FSx];
00228 FP01 = FLeftEdge [FSy];
00229 }
00230
00231 INLINE
00232 CMesh2LinearDiver::~CMesh2LinearDiver()
00233 {}
00234
00235 INLINE
00236 CMesh3LinearDiver::CMesh3LinearDiver(int ASx, int ASy, int ASz,
00237 const CVertex** ALeftFace[],
00238 const CVertex** ARightFace[],
00239 const CVertex** AFrontFace[],
00240 const CVertex** ABackFace[],
00241 const CVertex** ABottomFace[],
00242 const CVertex** ATopFace[])
00243 : CMesh3InterpolationDiver(ASx, ASy, ASz,
00244 ALeftFace, ARightFace,
00245 AFrontFace, ABackFace,
00246 ABottomFace,
00247 ATopFace)
00248 {
00249 FP000 = FBottomFace[ 0 ][ 0 ];
00250 FP010 = FBottomFace[ 0 ][ASy];
00251 FP100 = FBottomFace[ASx][ 0 ];
00252 FP110 = FBottomFace[ASx][ASy];
00253
00254 FP001 = ATopFace [ 0 ][ 0 ];
00255 FP011 = ATopFace [ 0 ][ASy];
00256 FP101 = ATopFace [ASx][ 0 ];
00257 FP111 = ATopFace [ASx][ASy];
00258 }
00259
00260 INLINE
00261 CMesh3LinearDiver::~CMesh3LinearDiver()
00262 {}
00263
00264 INLINE
00265 CMesh1SmoothingDiver::CMesh1SmoothingDiver(int ASx,
00266 const CTransformationMatrix& AMethod,
00267 const CVertex* AControlPoints)
00268 : CMesh1Diver(ASx)
00269 {
00270 assert(AControlPoints!=NULL);
00271
00272 for (int dim=0; dim<3; ++dim)
00273 {
00274
00275 CVector controlPoints;
00276
00277 for (int i=0; i<4; ++i)
00278 controlPoints[i] = AControlPoints[i].getCoord(dim);
00279
00280
00281 FControl[dim] = controlPoints* AMethod;
00282 }
00283 }
00284
00285 INLINE
00286 CMesh1SmoothingDiver::~CMesh1SmoothingDiver()
00287 {}
00288
00289 INLINE
00290 CMesh2SmoothingDiver::CMesh2SmoothingDiver(int ASx, int ASy,
00291 const CTransformationMatrix& AMethod,
00292 const CVertex** AControlPoints)
00293 : CMesh2Diver(ASx, ASy)
00294 {
00295 assert(AControlPoints!=NULL);
00296
00297 FMethod = & AMethod;
00298
00299 for (int i=0; i<4; ++i)
00300 FCurbsY[i] = new CMesh1SmoothingDiver(ASy, * FMethod,
00301 AControlPoints[i]);
00302
00303 FCurbX = NULL;
00304 }
00305
00306 INLINE
00307 CMesh2SmoothingDiver::~CMesh2SmoothingDiver()
00308 {
00309 for (int i=0; i<4; ++i)
00310 delete FCurbsY[i];
00311
00312 if (FCurbX!=NULL)
00313 delete FCurbX;
00314 }
00315
00316 INLINE
00317 CMesh3SmoothingDiver::CMesh3SmoothingDiver(int ASx, int ASy, int ASz,
00318 const CTransformationMatrix& AMethod,
00319 const CVertex*** AControlPoints)
00320 : CMesh3Diver(ASx, ASy, ASz)
00321 {
00322 assert(AControlPoints!=NULL);
00323
00324 FMethod = & AMethod;
00325
00326 for (int i=0; i<4; ++i)
00327 FSurfacesYZ[i] = new CMesh2SmoothingDiver(ASy, ASz, * FMethod,
00328 AControlPoints[i]);
00329
00330 FCurbX = NULL;
00331 }
00332
00333 INLINE
00334 CMesh3SmoothingDiver::~CMesh3SmoothingDiver()
00335 {
00336 for (int i=0; i<4; ++i)
00337 delete FSurfacesYZ[i];
00338
00339 if (FCurbX!=NULL)
00340 delete FCurbX;
00341 }
00342
00343 INLINE
00344 CVertex CMesh1LinearDiver::computeCurrentVertex() const
00345 {
00346 TCoordinate
00347 x = FKx0*FVertex0.getX() + FKx1*FVertex1.getX(),
00348 y = FKx0*FVertex0.getY() + FKx1*FVertex1.getY(),
00349 z = FKx0*FVertex0.getZ() + FKx1*FVertex1.getZ();
00350
00351 return CVertex(x,y,z);
00352 }
00353
00354 INLINE
00355 void CMesh2LinearDiver::setIx(int AIx)
00356 {
00357 CMesh2InterpolationDiver::setIx(AIx);
00358
00359 FPi0 = FBottomEdge[FIx];
00360 FPi1 = FTopEdge [FIx];
00361 }
00362
00363 INLINE
00364 void CMesh2LinearDiver::setIy(int AIy)
00365 {
00366 CMesh2InterpolationDiver::setIy(AIy);
00367
00368 FP0j = FLeftEdge [FIy];
00369 FP1j = FRightEdge [FIy];
00370 }
00371
00372 INLINE
00373 CVertex CMesh2LinearDiver::computeCurrentVertex() const
00374 {
00375 TCoordinate
00376 x =
00377 (
00378 FKx0 * FP0j->getX() + FKx1 * FP1j->getX() +
00379 FKy0 * FPi0->getX() + FKy1 * FPi1->getX() )
00380 -
00381 ( FKx0 * FKy0 * FP00->getX() + FKx1 * FKy0 * FP10->getX() +
00382 FKx0 * FKy1 * FP01->getX() + FKx1 * FKy1 * FP11->getX() ),
00383
00384 y =
00385 (
00386 FKx0 * FP0j->getY() + FKx1 * FP1j->getY() +
00387 FKy0 * FPi0->getY() + FKy1 * FPi1->getY() )
00388 -
00389 ( FKx0 * FKy0 * FP00->getY() + FKx1 * FKy0 * FP10->getY() +
00390 FKx0 * FKy1 * FP01->getY() + FKx1 * FKy1 * FP11->getY() ),
00391
00392 z =
00393 (
00394 FKx0 * FP0j->getZ() + FKx1 * FP1j->getZ() +
00395 FKy0 * FPi0->getZ() + FKy1 * FPi1->getZ() )
00396 -
00397 ( FKx0 * FKy0 * FP00->getZ() + FKx1 * FKy0 * FP10->getZ() +
00398 FKx0 * FKy1 * FP01->getZ() + FKx1 * FKy1 * FP11->getZ() );
00399
00400 return CVertex(x,y,z);
00401 }
00402
00403 INLINE
00404 void CMesh3LinearDiver::setIx(int AIx)
00405 {
00406 CMesh3InterpolationDiver::setIx(AIx);
00407
00408 FPi00 = FBottomFace[FIx][ 0 ];
00409 FPi01 = FTopFace [FIx][ 0 ];
00410 FPi10 = FBottomFace[FIx][FSy];
00411 FPi11 = FTopFace [FIx][FSy];
00412
00413 FPi0k = FFrontFace [FIz][FIx];
00414 FPi1k = FBackFace [FIz][FIx];
00415
00416 FPij0 = FBottomFace[FIx][FIy];
00417 FPij1 = FTopFace [FIx][FIy];
00418 }
00419
00420 INLINE
00421 void CMesh3LinearDiver::setIy(int AIy)
00422 {
00423 CMesh3InterpolationDiver::setIy(AIy);
00424
00425 FP0j0 = FLeftFace [FIy][ 0 ];
00426 FP1j0 = FRightFace [FIy][ 0 ];
00427 FP0j1 = FLeftFace [FIy][FSz];
00428 FP1j1 = FRightFace [FIy][FSz];
00429
00430 FP0jk = FLeftFace [FIy][FIz];
00431 FP1jk = FRightFace [FIy][FIz];
00432
00433 FPij0 = FBottomFace[FIx][FIy];
00434 FPij1 = FTopFace [FIx][FIy];
00435 }
00436
00437 INLINE
00438 void CMesh3LinearDiver::setIz(int AIz)
00439 {
00440 CMesh3InterpolationDiver::setIz(AIz);
00441
00442 FP00k = FFrontFace [FIz][ 0 ];
00443 FP01k = FBackFace [FIz][ 0 ];
00444 FP10k = FFrontFace [FIz][FSx];
00445 FP11k = FBackFace [FIz][FSx];
00446
00447 FP0jk = FLeftFace [FIy][FIz];
00448 FP1jk = FRightFace [FIy][FIz];
00449
00450 FPi0k = FFrontFace [FIz][FIx];
00451 FPi1k = FBackFace [FIz][FIx];
00452 }
00453
00454 INLINE
00455 CVertex CMesh3LinearDiver::computeCurrentVertex() const
00456 {
00457 TCoordinate
00458 x =
00459
00460 (
00461 FKx0 * FP0jk->getX() + FKx1 * FP1jk->getX() +
00462 FKy0 * FPi0k->getX() + FKy1 * FPi1k->getX() +
00463 FKz0 * FPij0->getX() + FKz1 * FPij1->getX() )
00464
00465 -
00466 (
00467 FKx0 * FKy0 * FP00k->getX() + FKx1 * FKy0 * FP10k->getX() +
00468 FKx0 * FKy1 * FP01k->getX() + FKx1 * FKy1 * FP11k->getX() +
00469
00470 FKx0 * FKz0 * FP0j0->getX() + FKx1 * FKz0 * FP1j0->getX() +
00471 FKx0 * FKz1 * FP0j1->getX() + FKx1 * FKz1 * FP1j1->getX() +
00472
00473 FKy0 * FKz0 * FPi00->getX() + FKy1 * FKz0 * FPi10->getX() +
00474 FKy0 * FKz1 * FPi01->getX() + FKy1 * FKz1 * FPi11->getX() )
00475
00476 +
00477 (
00478 FKx0 * FKy0 * FKz0 * FP000->getX() +
00479 FKx1 * FKy1 * FKz1 * FP111->getX() +
00480 FKx1 * FKy0 * FKz0 * FP100->getX() +
00481 FKx0 * FKy1 * FKz0 * FP010->getX() +
00482 FKx0 * FKy0 * FKz1 * FP001->getX() +
00483 FKx0 * FKy1 * FKz1 * FP011->getX() +
00484 FKx1 * FKy0 * FKz1 * FP101->getX() +
00485 FKx1 * FKy1 * FKz0 * FP110->getX() ),
00486
00487 y =
00488
00489 (
00490 FKx0 * FP0jk->getY() + FKx1 * FP1jk->getY() +
00491 FKy0 * FPi0k->getY() + FKy1 * FPi1k->getY() +
00492 FKz0 * FPij0->getY() + FKz1 * FPij1->getY() )
00493
00494 -
00495 (
00496 FKx0 * FKy0 * FP00k->getY() + FKx1 * FKy0 * FP10k->getY() +
00497 FKx0 * FKy1 * FP01k->getY() + FKx1 * FKy1 * FP11k->getY() +
00498
00499 FKx0 * FKz0 * FP0j0->getY() + FKx1 * FKz0 * FP1j0->getY() +
00500 FKx0 * FKz1 * FP0j1->getY() + FKx1 * FKz1 * FP1j1->getY() +
00501
00502 FKy0 * FKz0 * FPi00->getY() + FKy1 * FKz0 * FPi10->getY() +
00503 FKy0 * FKz1 * FPi01->getY() + FKy1 * FKz1 * FPi11->getY() )
00504
00505 +
00506 (
00507 FKx0 * FKy0 * FKz0 * FP000->getY() +
00508 FKx1 * FKy1 * FKz1 * FP111->getY() +
00509 FKx1 * FKy0 * FKz0 * FP100->getY() +
00510 FKx0 * FKy1 * FKz0 * FP010->getY() +
00511 FKx0 * FKy0 * FKz1 * FP001->getY() +
00512 FKx0 * FKy1 * FKz1 * FP011->getY() +
00513 FKx1 * FKy0 * FKz1 * FP101->getY() +
00514 FKx1 * FKy1 * FKz0 * FP110->getY() ),
00515
00516 z =
00517
00518 (
00519 FKx0 * FP0jk->getZ() + FKx1 * FP1jk->getZ() +
00520 FKy0 * FPi0k->getZ() + FKy1 * FPi1k->getZ() +
00521 FKz0 * FPij0->getZ() + FKz1 * FPij1->getZ() )
00522
00523 -
00524 (
00525 FKx0 * FKy0 * FP00k->getZ() + FKx1 * FKy0 * FP10k->getZ() +
00526 FKx0 * FKy1 * FP01k->getZ() + FKx1 * FKy1 * FP11k->getZ() +
00527
00528 FKx0 * FKz0 * FP0j0->getZ() + FKx1 * FKz0 * FP1j0->getZ() +
00529 FKx0 * FKz1 * FP0j1->getZ() + FKx1 * FKz1 * FP1j1->getZ() +
00530
00531 FKy0 * FKz0 * FPi00->getZ() + FKy1 * FKz0 * FPi10->getZ() +
00532 FKy0 * FKz1 * FPi01->getZ() + FKy1 * FKz1 * FPi11->getZ() )
00533
00534 +
00535 (
00536 FKx0 * FKy0 * FKz0 * FP000->getZ() +
00537 FKx1 * FKy1 * FKz1 * FP111->getZ() +
00538 FKx1 * FKy0 * FKz0 * FP100->getZ() +
00539 FKx0 * FKy1 * FKz0 * FP010->getZ() +
00540 FKx0 * FKy0 * FKz1 * FP001->getZ() +
00541 FKx0 * FKy1 * FKz1 * FP011->getZ() +
00542 FKx1 * FKy0 * FKz1 * FP101->getZ() +
00543 FKx1 * FKy1 * FKz0 * FP110->getZ() );
00544
00545 return CVertex(x,y,z);
00546 }
00547
00548 INLINE
00549 void CMesh1SmoothingDiver::setIx(int AIx)
00550 {
00551 CMesh1Diver::setIx(AIx);
00552
00553 TCoordinate t = 1;
00554
00555 for (int i=3; i>=0; --i)
00556 {
00557 FTX[i] = t;
00558 t *= FKx1;
00559 }
00560 }
00561
00562 INLINE
00563 CVertex CMesh1SmoothingDiver::computeCurrentVertex() const
00564 {
00565 TCoordinate coord[3];
00566
00567 for (int i=0; i<3; ++i)
00568 coord[i] = FTX * FControl[i];
00569
00570 return CVertex(coord[0], coord[1], coord[2]);
00571 }
00572
00573 INLINE
00574 void CMesh2SmoothingDiver::setIx(int AIx)
00575 {
00576 assert(FCurbX!=NULL);
00577
00578 CMesh2Diver::setIx(AIx);
00579
00580 FCurbX->setIx(AIx);
00581 }
00582
00583 INLINE
00584 void CMesh2SmoothingDiver::setIy(int AIy)
00585 {
00586 CMesh2Diver::setIy(AIy);
00587
00588 CVertex controlPoints[4];
00589
00590 for (int i=0; i<4; ++i)
00591 {
00592 FCurbsY[i]->setIx(AIy);
00593 controlPoints[i] = FCurbsY[i]->computeCurrentVertex();
00594 }
00595
00596 if (FCurbX!=NULL)
00597 delete FCurbX;
00598
00599 FCurbX = new CMesh1SmoothingDiver(FSx, * FMethod,
00600 controlPoints);
00601 }
00602
00603 INLINE
00604 CVertex CMesh2SmoothingDiver::computeCurrentVertex() const
00605 {
00606 assert(FCurbX!=NULL);
00607
00608 return FCurbX->computeCurrentVertex();
00609 }
00610
00611 INLINE
00612 void CMesh3SmoothingDiver::setIx(int AIx)
00613 {
00614 assert(FCurbX!=NULL);
00615
00616 FCurbX->setIx(AIx);
00617 }
00618
00619 INLINE
00620 void CMesh3SmoothingDiver::setIy(int AIy)
00621 {
00622 CMesh3Diver::setIy(AIy);
00623
00624 CVertex controlPoints[4];
00625
00626 for (int i=0; i<4; ++i)
00627 {
00628 FSurfacesYZ[i]->setIx(AIy);
00629 controlPoints[i] = FSurfacesYZ[i]->computeCurrentVertex();
00630 }
00631
00632 if (FCurbX!=NULL)
00633 delete FCurbX;
00634
00635 FCurbX = new CMesh1SmoothingDiver(FSx, * FMethod,
00636 controlPoints);
00637 }
00638
00639 INLINE
00640 void CMesh3SmoothingDiver::setIz(int AIz)
00641 {
00642 CMesh3Diver::setIz(AIz);
00643
00644 for (int i=0; i<4; ++i)
00645 FSurfacesYZ[i]->setIy(AIz);
00646 }
00647
00648 INLINE
00649 CVertex CMesh3SmoothingDiver::computeCurrentVertex() const
00650 {
00651 assert(FCurbX!=NULL);
00652
00653 return FCurbX->computeCurrentVertex();
00654 }
00655