Moka libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
inter-smooth-diver.hh
Go to the documentation of this file.
1 /*
2  * lib-mesh : Opérations de maillage et lissage.
3  * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC
4  * http://www.sic.sp2mi.univ-poitiers.fr/
5  * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS,
6  * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/
7  *
8  * This file is part of lib-mesh
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU Lesser General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 //******************************************************************************
25 #ifndef INTER_SMOOTH_DIVER_HH
26 #define INTER_SMOOTH_DIVER_HH
27 //******************************************************************************
28 #include "mesh-diver.hh"
29 //******************************************************************************
30 class CTransformationMatrix;
31 //******************************************************************************
43 // @{
44 //------------------------------------------------------------------------------
45 class CMesh1InterpolationDiver : public CMesh1Diver
46 {
47 protected:
48  CVertex FVertex0, FVertex1;
49 
50 public:
51  // @name Constructeur et destructeur
52  // @{
53 
62  const CVertex& AVertex0,
63  const CVertex& AVertex1);
64 
66  virtual ~CMesh1InterpolationDiver();
67 
68  // @}
69 };
70 //------------------------------------------------------------------------------
71 class CMesh2InterpolationDiver : public CMesh2Diver
72 {
73 protected:
74  const CVertex ** FBottomEdge; /* FSx + 1 */
75  const CVertex ** FTopEdge ; /* FSx + 1 */
76  const CVertex ** FLeftEdge ; /* FSy + 1 */
77  const CVertex ** FRightEdge ; /* FSy + 1 */
78 
79 public:
80  // @name Constructeur et destructeur
81  // @{
82 
104  CMesh2InterpolationDiver(int ASx, int ASy,
105  const CVertex** ABottomEdge /* ASx+1 */,
106  const CVertex** ATopEdge /* ASx+1 */,
107  const CVertex** ALeftEdge /* ASy+1 */,
108  const CVertex** ARightEdge /* ASy+1 */);
109 
111  virtual ~CMesh2InterpolationDiver();
112 
113  // @}
114 };
115 //------------------------------------------------------------------------------
116 class CMesh3InterpolationDiver : public CMesh3Diver
117 {
118 protected:
119  const CVertex *** FLeftFace ; /* (FSy+1)*(FSz+1) */
120  const CVertex *** FRightFace ; /* (FSy+1)*(FSz+1) */
121  const CVertex *** FFrontFace ; /* (FSz+1)*(FSx+1) */
122  const CVertex *** FBackFace ; /* (FSz+1)*(FSx+1) */
123  const CVertex *** FBottomFace; /* (FSx+1)*(FSy+1) */
124  const CVertex *** FTopFace ; /* (FSx+1)*(FSy+1) */
125 
126 public:
127  // @name Constructeur et destructeur
128  // @{
129 
171  CMesh3InterpolationDiver(int ASx, int ASy, int ASz,
172  const CVertex*** ALeftFace /* (ASy+1)*(ASz+1) */,
173  const CVertex*** ARightFace /* (ASy+1)*(ASz+1) */,
174  const CVertex*** AFrontFace /* (ASx+1)*(ASz+1) */,
175  const CVertex*** ABackFace /* (ASx+1)*(ASz+1) */,
176  const CVertex*** ABottomFace /* (ASx+1)*(ASy+1) */,
177  const CVertex*** ATopFace /* (ASx+1)*(ASy+1) */);
178 
180  virtual ~CMesh3InterpolationDiver();
181 
182  // @}
183 };
184 
185 // @}
186 //******************************************************************************
193 // @{
194 //******************************************************************************
196 {
197 public:
198  // @name Constructeur et destructeur
199  // @{
200 
208  CMesh1LinearDiver(int ASx,
209  const CVertex& AVertex0,
210  const CVertex& AVertex1);
211 
213  virtual ~CMesh1LinearDiver();
214 
215  // @}
216  // @name Méthode de calcul des plongements
217  // @{
218 
220  virtual CVertex computeCurrentVertex() const;
221 
222  // @}
223 };
224 //------------------------------------------------------------------------------
226 {
227 private:
228  const CVertex * FP00, * FP01, * FP10, * FP11;
229  const CVertex * FPi0, * FP0j, * FP1j, * FPi1;
230 
231 public:
232  // @name Constructeur et destructeur
233  // @{
234 
256  CMesh2LinearDiver(int ASx, int ASy,
257  const CVertex ** ABottomEdge /* ASx+1 */,
258  const CVertex ** ATopEdge /* ASx+1 */,
259  const CVertex ** ALeftEdge /* ASy+1 */,
260  const CVertex ** ARightEdge /* ASy+1 */);
261 
263  virtual ~CMesh2LinearDiver();
264 
265  // @}
266  // @name Accesseurs
267  // @{
268 
273  virtual void setIx(int AIx);
274 
279  virtual void setIy(int AIy);
280 
281  // @}
282  // @name Méthode de calcul des plongements
283  // @{
284 
286  virtual CVertex computeCurrentVertex() const;
287 
288  // @}
289 };
290 //------------------------------------------------------------------------------
292 {
293 private:
294  const CVertex * FP000, * FP001, * FP010, * FP011;
295  const CVertex * FP100, * FP101, * FP110, * FP111;
296 
297  const CVertex * FPi00, * FP0j0, * FP00k;
298  const CVertex * FPi11, * FP1j1, * FP11k;
299 
300  const CVertex * FPi10, * FP0j1, * FP10k;
301  const CVertex * FPi01, * FP1j0, * FP01k;
302 
303  const CVertex * FP0jk, * FPi0k, * FPij0;
304  const CVertex * FP1jk, * FPi1k, * FPij1;
305 
306 public:
307  // @name Constructeur et destructeur
308  // @{
309 
351  CMesh3LinearDiver(int ASx, int ASy, int ASz,
352  const CVertex*** ALeftFace /* (ASy+1)*(ASz+1) */,
353  const CVertex*** ARightFace /* (ASy+1)*(ASz+1) */,
354  const CVertex*** AFrontFace /* (ASx+1)*(ASz+1) */,
355  const CVertex*** ABackFace /* (ASx+1)*(ASz+1) */,
356  const CVertex*** ABottomFace /* (ASx+1)*(ASy+1) */,
357  const CVertex*** ATopFace /* (ASx+1)*(ASy+1) */);
358 
360  virtual ~CMesh3LinearDiver();
361 
362  // @}
363  // @name Accesseurs
364  // @{
365 
370  virtual void setIx(int AIx);
371 
376  virtual void setIy(int AIy);
377 
382  virtual void setIz(int AIz);
383 
384  // @}
385  // @name Méthode de calcul des plongements
386  // @{
387 
389  virtual CVertex computeCurrentVertex() const;
390 
391  // @}
392 };
393 
394 // @}
395 //******************************************************************************
402 // @{
403 //******************************************************************************
404 class CMesh1SmoothingDiver : public CMesh1Diver
405 {
406 protected:
407  CVector FTX;
408  CVector FControl[3];
409 
410 public:
411  // @name Constructeur, initialisateur et destructeur
412  // @{
413 
421  CMesh1SmoothingDiver(int ASx,
422  const CTransformationMatrix & AMethod,
423  const CVertex * AControlPoints);
424 
426  virtual ~CMesh1SmoothingDiver();
427 
428  // @}
429  // @name Accesseurs
430  // @{
431 
436  virtual void setIx(int AIx);
437 
438  // @}
439  // @name Méthode de calcul des plongements
440  // @{
441 
444  virtual CVertex computeCurrentVertex() const;
445 
446  // @}
447 };
448 //------------------------------------------------------------------------------
449 class CMesh2SmoothingDiver : public CMesh2Diver
450 {
451 protected:
452  const CTransformationMatrix * FMethod;
453 
456 
457 public:
458  // @name Constructeur et destructeur
459  // @{
460 
469  CMesh2SmoothingDiver(int ASx, int ASy,
470  const CTransformationMatrix& AMethod,
471  const CVertex** AControlPoints);
472 
474  virtual ~CMesh2SmoothingDiver();
475 
476  // @}
477  // @name Accesseurs
478  // @{
479 
484  virtual void setIx(int AIx);
485 
490  virtual void setIy(int AIy);
491 
492  // @}
493  // @name Méthode de calcul des plongements
494  // @{
495 
498  virtual CVertex computeCurrentVertex() const;
499 
500  // @}
501 };
502 //------------------------------------------------------------------------------
503 class CMesh3SmoothingDiver : public CMesh3Diver
504 {
505 protected:
506  const CTransformationMatrix * FMethod;
507 
510 
511 public:
512  // @name Constructeur et destructeur
513  // @{
514 
524  CMesh3SmoothingDiver(int ASx, int ASy, int ASz,
525  const CTransformationMatrix& AMethod,
526  const CVertex*** AControlPoints);
527 
529  virtual ~CMesh3SmoothingDiver();
530 
531  // @}
532  // @name Accesseurs
533  // @{
534 
539  virtual void setIx(int AIx);
540 
545  virtual void setIy(int AIy);
546 
551  virtual void setIz(int AIz);
552 
553  // @}
554  // @name Méthode de calcul des plongements
555  // @{
556 
560  virtual CVertex computeCurrentVertex() const;
561 
562  // @}
563 };
564 //******************************************************************************
565 #include INCLUDE_INLINE("inter-smooth-diver.icc")
566 //******************************************************************************
567 #endif // INTER_SMOOTH_DIVER_HH
568 //******************************************************************************