Moka kernel
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
gmg-unsew.cc
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
#include "
g-map-generic.hh
"
26
using namespace
GMap3d;
27
//******************************************************************************
28
int
CGMapGeneric::unsewMarkedCells
(
int
AMarkNumber,
int
ADim)
29
{
30
CDynamicCoverageAll
it(
this
);
31
int
nbUnsews = 0;
32
33
for
(; it.
cont
(); ++it)
34
if
(!
isFree
(*it,ADim) &&
isMarked
(*it, AMarkNumber))
35
{
36
unsew
(*it, ADim);
37
++nbUnsews;
38
}
39
40
return
nbUnsews;
41
}
42
//******************************************************************************
43
int
CGMapGeneric::intuitiveUnsewMarkedCells
(
int
AMarkNumber)
44
{
45
CDynamicCoverageAll
it(
this
);
46
int
nbUnsews = 0;
47
int
treated =
getNewMark
();
48
int
memo =
getNewMark
();
49
50
for
(
int
dim=3; dim>=0; --dim)
51
{
52
for
(it.
reinit
(); it.
cont
(); ++it)
53
if
(!
isMarked
(*it, treated))
54
{
55
// Pour des raisons de complexité (calcul de isWholeCellMarked), on
56
// traite toutes les cellules de dimension dim une par une:
57
58
bool
cellUnsewed =
false
;
59
60
CCoverage
* cov =
getDynamicCoverage
(*it,
ORBIT_CELL
[dim]);
61
62
for
(; cov->
cont
(); ++(*cov))
63
if
(!
isMarked
(**cov, treated))
64
{
65
if
(!
isMarked
(**cov, AMarkNumber) ||
isFree
(**cov, dim))
66
setMark
(**cov, treated);
67
else
68
{
69
markOrbit
(**cov,
ORBIT_SEWS
[dim], treated);
70
markOrbit
(**cov,
ORBIT_SEWS
[dim], memo);
71
unsew
(**cov, dim);
72
cellUnsewed =
true
;
73
++nbUnsews;
74
}
75
}
76
77
delete
cov;
78
79
if
(cellUnsewed &&
80
isWholeCellMarked
(*it,
ORBIT_CELL
[dim], AMarkNumber))
81
markOrbit
(*it,
ORBIT_CELL
[dim], memo);
82
}
83
84
markCopy
(memo, treated);
85
}
86
87
unmarkAll
(memo);
88
freeMark
(memo);
89
unmarkAll
(treated);
90
freeMark
(treated);
91
92
return
nbUnsews;
93
}
94
//******************************************************************************
lib-gmapkernel
g-map-generic
gmg-unsew.cc
Generated on Tue Apr 9 2013 09:51:35 for Moka kernel by
1.8.2