Moka kernel
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
g-map.hh
Go to the documentation of this file.
1 /*
2  * lib-gmapkernel : Un noyau de 3-G-cartes et des opérations.
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-gmapkernel
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 G_MAP_HH
26 #define G_MAP_HH
27 //******************************************************************************
28 #include "g-map-basic.hh"
29 #include "inline-macro.hh"
30 // Includes facultatifs :
31 #include "dart.hh"
32 #include "attribute.hh"
33 #include "embedding.hh"
34 #include "coverage.hh"
35 #include "dynamic-coverage.hh"
36 #include "static-coverage.hh"
37 //******************************************************************************
38 namespace GMap3d
39 {
49  class CGMap : public CGMapBasic
50  {
51  public:
52  // @name Constructeur et destructeur
53  // @{
54 
56  CGMap();
57 
59  virtual ~CGMap();
60 
61  // @}
62 
63  // @name Méthodes "sûres" pour la couture et décousure.
64 
70  // @{
71  bool canSew0(CDart* ADart1, CDart* ADart2);
72  bool canSew1(CDart* ADart1, CDart* ADart2);
73  bool canSew2(CDart* ADart1, CDart* ADart2);
74  bool canSew3(CDart* ADart1, CDart* ADart2);
75  // @}
76 
82  bool canSew(CDart* ADart1, CDart* ADart2, int ADimension);
83 
93  // @{
94  void sew0(CDart* ADart1, CDart* ADart2);
95  void sew1(CDart* ADart1, CDart* ADart2);
96  void sew2(CDart* ADart1, CDart* ADart2);
97  void sew3(CDart* ADart1, CDart* ADart2);
98  // @}
99 
107  void sew(CDart* ADart1, CDart* ADart2, int ADimension);
108 
117  // @{
118  void unsew0(CDart* ADart);
119  void unsew1(CDart* ADart);
120  void unsew2(CDart* ADart);
121  void unsew3(CDart* ADart);
122  // @}
123 
130  void unsew(CDart* ADart,int ADimension);
131 
137  // @{
138 
139  CCoverage* getDynamicCoverage (const CDart* ADart, TOrbit AOrbit);
140  CCoverage* getStaticCoverage (const CDart* ADart, TOrbit AOrbit);
141  CCoverage* getMultiDynamicCoverage(const CDart* ADart, TOrbit AOrbit);
142  CCoverage* getBasicDynamicCoverage(const CDart* ADart, TOrbit AOrbit,
143  int AMarkNumber);
144 
145  // @}
146  // @name Méthodes de gestion des attributs.
147  // @{
148 
154 
161  void addAttribute(CDart* ADart, TOrbit, CAttribute*);
162 
169 
175  void deleteAttribute(CDart* ADart, TOrbit, TAttributeId);
176 
184  bool isSameOrbit(CDart* ADart1, CDart* ADart2, TOrbit AOrbit);
185 
194  CDart* getEmbeddingOwner(const CDart* ADart, TOrbit AOrbit);
195 
196  // @}
214  // @{
215  void dartSew0(CDart*, CDart* ADart2);
216  void dartSew1(CDart*, CDart* ADart2);
217  void dartSew2(CDart*, CDart* ADart2);
218  void dartSew3(CDart*, CDart* ADart2);
219  void dartSew (CDart*, CDart* ADart2, int ADimension);
220  // @}
221 
229  // @{
230  void dartUnsew0(CDart* ADart);
231  void dartUnsew1(CDart* ADart);
232  void dartUnsew2(CDart* ADart);
233  void dartUnsew3(CDart* ADart);
234  void dartUnsew (CDart* ADart, int ADimension);
235  // @}
236 
245  // @{
246  void topoSew0(CDart* ADart1, CDart* ADart2);
247  void topoSew1(CDart* ADart1, CDart* ADart2);
248  void topoSew2(CDart* ADart1, CDart* ADart2);
249  void topoSew3(CDart* ADart1, CDart* ADart2);
250  void topoSew (CDart* ADart1, CDart* ADart2, int ADimension);
251  // @}
252 
260  // @{
261  void topoUnsew0(CDart* ADart);
262  void topoUnsew1(CDart* ADart);
263  void topoUnsew2(CDart* ADart);
264  void topoUnsew3(CDart* ADart);
265  void topoUnsew (CDart* ADart, int ADimension);
266  // @}
267 
268  private:
269  // @name Méthodes utilisées par sew et unsew pour gérer les attributs.
270  // @{
271 
282  bool isValidOrbit(CDart* ADart, TOrbit AOrbit);
283 
296  void groupAttributes(CDart* ADart1, CDart* ADart2, TMask16);
297 
309  void duplicateAttributes(CDart* ADart1, CDart* ADart2, TMask16);
310 
322  bool isSameOrbit(CDart* ADart1, CDart* ADart2, TOrbit AOrbit,
323  CDart*& ADartEmbeddingOwner1);
324  };
325 
326 } // namespace GMap3d
327 //******************************************************************************
328 #include INCLUDE_INLINE("g-map.icc")
329 //******************************************************************************
330 #endif // G_MAP_HH
331 //******************************************************************************