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
gmv-polyline.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-vertex.hh
"
26
#include "
geometry.hh
"
27
using namespace
GMap3d;
28
//******************************************************************************
29
CDart
*
CGMapVertex::prolongPolyline
(
CDart
* ADart,
const
CVertex
& AVertex)
30
{
31
CDart
* dart =
CGMapGeneric::prolongPolyline
(ADart);
32
setVertex
(dart, AVertex);
33
return
dart;
34
}
35
//******************************************************************************
36
bool
CGMapVertex::isPlanarPolyline
(
CDart
* ADart)
37
{
38
assert(ADart!=NULL);
39
40
CVertex
s1, v1, vect;
41
int
treated =
getNewMark
();
42
bool
ok =
true
;
43
44
CDynamicCoverage01
it(
this
, ADart);
45
46
s1 = *
findVertex
(ADart);
47
48
setMark
( *it , treated);
49
setMark
(
alpha1
(*it), treated);
50
51
for
(; it.
cont
() && ok; ++it)
52
if
(!
isMarked
(*it, treated))
53
{
54
if
(v1.
isNull
())
55
{
56
v1 = *
findVertex
(*it) - s1;
57
58
if
(!v1.
isNull
())
59
v1 /= v1.
norm
();
60
}
61
else
62
if
(vect.
isNull
())
63
{
64
CVertex
v2 = *
findVertex
(*it) - s1;
65
66
if
(!v2.
isNull
())
67
v2 /= v2.
norm
();
68
69
vect =
CGeometry::getNormalVector
(v1,v2);
70
}
71
else
72
{
73
CVertex
v2 = *
findVertex
(*it) - s1;
74
75
if
(!v2.
isNull
())
76
v2 /= v2.
norm
();
77
78
ok =
CGeometry::areColinear
(vect,
79
CGeometry::getNormalVector
(v1,v2));
80
}
81
82
setMark
( *it , treated);
83
setMark
(
alpha1
(*it), treated);
84
}
85
86
unmarkOrbit
(ADart,
ORBIT_01
, treated);
87
freeMark
(treated);
88
89
return
ok;
90
}
91
//******************************************************************************
92
bool
CGMapVertex::markNonPlanarPolylines
(
int
AMarkNumber)
93
{
94
int
treated =
getNewMark
();
95
bool
found =
false
;
96
97
CDynamicCoverageAll
it(
this
);
98
99
for
(; it.
cont
(); ++it)
100
if
(!
isMarked
(*it, treated))
101
{
102
if
(!
isPlanarPolyline
(*it))
103
{
104
markOrbit
(*it,
ORBIT_FACE
, AMarkNumber);
105
found =
true
;
106
}
107
108
markOrbit
(*it,
ORBIT_FACE
, treated);
109
}
110
111
negateMaskMark
(treated);
112
freeMark
(treated);
113
114
return
found;
115
}
116
//******************************************************************************
lib-gmapkernel
g-map-vertex
gmv-polyline.cc
Generated on Tue Apr 9 2013 09:51:35 for Moka kernel by
1.8.2