Moka libraries
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
image-3d.hh
Go to the documentation of this file.
1 /*
2  * lib-extraction-images : Extraction de cartes à partir d'images 2D et 3D.
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-extraction-images
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 IMAGE_3D_HH
26 #define IMAGE_3D_HH
27 //******************************************************************************
28 #include "inline-macro.hh"
29 #include "alt-stdint.hh"
30 /*******************************************************************************
31  * Cette classe virtuelle pure définit les méthodes de base pour travailler sur
32  * une image 3d pour un parcours de type haut-bas, devant-derrière et
33  * gauche-droite.
34  * On ne conserve que 2 plans à la fois, et on ne peut donc accéder qu'aux
35  * voxels d'un de ces 2 plans. D'ou les méthodes getCurrentVoxel pour le plan
36  * actuel, et getPrevVoxel pour le dernier plan.
37  */
38 
39 namespace GMap3d
40 {
41  class CImage3d
42  {
43  public:
44  CImage3d(int AActuPlaneIndex);
45 
46  virtual ~CImage3d();
47 
48  bool isOk() const;
49 
50  unsigned int getPlaneActu() const;
51 
52  unsigned int getWidth () const;
53  unsigned int getHeight() const;
54 
55  bool readNextPlane();
56 
57  bool lastPlane();
58 
59  // Az* == false => FPrevPlane
60  // Az* == true => FActuPlane
61  virtual bool sameVoxel(unsigned int Ax1, unsigned int Ay1, bool Az1,
62  unsigned int Ax2, unsigned int Ay2, bool Az2) const =0;
63 
66  virtual bool sameVoxel(unsigned int Ax, unsigned int Ay, bool Az,
67  int ARed, int AGreen, int ABlue, int AAlpha ) const =0;
68 
69  /* Les méthodes suivantes testent l'appartenante à la même région de deux
70  * voxels. Le premier mot de la méthode désigne la position du premier voxel
71  * par rapport au voxel courant. Le deuxième mot (après le -) désigne la
72  * position du deuxième voxel par rapport au premier (et donc est soit up,
73  * left ou behind). X et y désigne les cordonnées du voxel courant qui est
74  * dans le plan courant en z.
75  */
76  bool sameVoxelActuLeft (unsigned int x, unsigned int y) const;
77  bool sameVoxelActuBehind (unsigned int x, unsigned int y) const;
78  bool sameVoxelActuUp (unsigned int x, unsigned int y) const;
79 
80  bool sameVoxelLeftBehind (unsigned int x, unsigned int y) const;
81  bool sameVoxelLeftUp (unsigned int x, unsigned int y) const;
82 
83  bool sameVoxelBehindLeft (unsigned int x, unsigned int y) const;
84  bool sameVoxelBehindUp (unsigned int x, unsigned int y) const;
85 
86  bool sameVoxelUpLeft (unsigned int x, unsigned int y) const;
87  bool sameVoxelUpBehind (unsigned int x, unsigned int y) const;
88 
89  bool sameVoxelUpbehindLeft(unsigned int x, unsigned int y) const;
90 
91  bool sameVoxelLeftbehindUp(unsigned int x, unsigned int y) const;
92 
93  bool sameVoxelLeftupBehind(unsigned int x, unsigned int y) const;
94 
95  protected:
96  virtual bool readData() =0;
97  virtual void freePlane(bool AActuPlane);
98  virtual void pushPlane();
99 
100  unsigned int FWidth, FHeight;
101 
102  bool FIsOk; // vrai si on a réussi à créer l'image, faux sinon
103 
106 
107  private:
108  bool FNullActuPlane, FNullPrevPlane;
109  };
110 
111 } // namespace GMap3d
112 //******************************************************************************
113 #include INCLUDE_INLINE("image-3d.icc")
114 //******************************************************************************
115 #endif // IMAGE_3D_HH
116 //******************************************************************************