Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
CGoGN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
1
Issues
1
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
Operations
Operations
Incidents
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
CGoGN
CGoGN
Commits
0003689c
Commit
0003689c
authored
May 23, 2011
by
Pierre Kraemer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
-> stop lazy embedding
parent
3dc1a1ed
Changes
15
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
133 additions
and
316 deletions
+133
-316
include/Algo/Decimation/edgeSelector.hpp
include/Algo/Decimation/edgeSelector.hpp
+2
-2
include/Algo/Decimation/geometryApproximator.hpp
include/Algo/Decimation/geometryApproximator.hpp
+4
-4
include/Algo/Export/export.hpp
include/Algo/Export/export.hpp
+4
-4
include/Algo/ImplicitHierarchicalMesh/ihm.hpp
include/Algo/ImplicitHierarchicalMesh/ihm.hpp
+4
-4
include/Algo/ImplicitHierarchicalMesh/ihm3.hpp
include/Algo/ImplicitHierarchicalMesh/ihm3.hpp
+2
-2
include/Algo/Import/importMesh.hpp
include/Algo/Import/importMesh.hpp
+19
-21
include/Algo/Render/GL2/mapRender.hpp
include/Algo/Render/GL2/mapRender.hpp
+8
-8
include/Topology/generic/attributeHandler.hpp
include/Topology/generic/attributeHandler.hpp
+2
-2
include/Topology/generic/cellmarker.h
include/Topology/generic/cellmarker.h
+4
-4
include/Topology/generic/embeddedMap2.h
include/Topology/generic/embeddedMap2.h
+0
-17
include/Topology/generic/embeddedMap2.hpp
include/Topology/generic/embeddedMap2.hpp
+57
-167
include/Topology/generic/embeddedMap3.hpp
include/Topology/generic/embeddedMap3.hpp
+5
-5
include/Topology/generic/genericmap.h
include/Topology/generic/genericmap.h
+5
-5
include/Topology/generic/genericmap.hpp
include/Topology/generic/genericmap.hpp
+15
-69
src/Topology/generic/genericmap.cpp
src/Topology/generic/genericmap.cpp
+2
-2
No files found.
include/Algo/Decimation/edgeSelector.hpp
View file @
0003689c
...
...
@@ -877,8 +877,8 @@ void EdgeSelector_Curvature<PFP>::computeEdgeInfo(Dart d, EdgeInfo& einfo)
MAP
&
m
=
this
->
m_map
;
Dart
dd
=
m
.
phi2
(
d
)
;
unsigned
int
v1
=
m
.
getEmbedding
(
d
,
VERTEX_ORBIT
)
;
unsigned
int
v2
=
m
.
getEmbedding
(
dd
,
VERTEX_ORBIT
)
;
unsigned
int
v1
=
m
.
getEmbedding
(
VERTEX_ORBIT
,
d
)
;
unsigned
int
v2
=
m
.
getEmbedding
(
VERTEX_ORBIT
,
dd
)
;
m_positionApproximator
->
approximate
(
d
)
;
...
...
include/Algo/Decimation/geometryApproximator.hpp
View file @
0003689c
...
...
@@ -220,8 +220,8 @@ void Approximator_MidEdge<PFP>::approximate(Dart d)
// vertex split to reset the initial connectivity and embeddings
m
.
insertTrianglePair
(
d
,
d2
,
dd2
)
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
d
,
m
.
getEmbedding
(
d
,
VERTEX_ORBIT
))
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
dd
,
m
.
getEmbedding
(
dd
,
VERTEX_ORBIT
))
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
d
,
m
.
getEmbedding
(
VERTEX_ORBIT
,
d
))
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
dd
,
m
.
getEmbedding
(
VERTEX_ORBIT
,
dd
))
;
}
}
...
...
@@ -268,8 +268,8 @@ void Approximator_HalfCollapse<PFP>::approximate(Dart d)
// vertex split to reset the initial connectivity and embeddings
m
.
insertTrianglePair
(
d
,
d2
,
dd2
)
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
d
,
m
.
getEmbedding
(
d
,
VERTEX_ORBIT
))
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
dd
,
m
.
getEmbedding
(
dd
,
VERTEX_ORBIT
))
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
d
,
m
.
getEmbedding
(
VERTEX_ORBIT
,
d
))
;
m
.
embedOrbit
(
VERTEX_ORBIT
,
dd
,
m
.
getEmbedding
(
VERTEX_ORBIT
,
dd
))
;
}
}
...
...
include/Algo/Export/export.hpp
View file @
0003689c
...
...
@@ -71,7 +71,7 @@ bool exportPLY(typename PFP::MAP& map, const typename PFP::TVEC3& position, cons
Dart
dd
=
d
;
do
{
unsigned
int
vNum
=
map
.
getEmbedding
(
dd
,
VERTEX_ORBIT
)
;
unsigned
int
vNum
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
dd
)
;
if
(
!
markV
.
isMarked
(
dd
))
{
markV
.
mark
(
dd
)
;
...
...
@@ -149,7 +149,7 @@ bool exportOFF(typename PFP::MAP& map, const typename PFP::TVEC3& position, cons
Dart
dd
=
d
;
do
{
unsigned
int
vNum
=
map
.
getEmbedding
(
dd
,
VERTEX_ORBIT
)
;
unsigned
int
vNum
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
dd
)
;
if
(
!
markV
.
isMarked
(
dd
))
{
markV
.
mark
(
dd
)
;
...
...
@@ -286,7 +286,7 @@ bool exportPLYPTM(typename PFP::MAP& map, const char* filename, const typename P
{
if
(
!
markV
.
isMarked
(
e
))
{
vertices
.
push_back
(
map
.
getEmbedding
(
e
,
VERTEX_ORBIT
));
vertices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
e
));
tableVertLab
[
e
]
=
lab
++
;
markV
.
mark
(
e
);
...
...
@@ -434,7 +434,7 @@ bool exportPLYPTM(typename PFP::MAP& map, const char* filename, const typename P
{
if (!markV.isMarked(e))
{
vertices.push_back(map.getEmbedding(
e, VERTEX_ORBIT
));
vertices.push_back(map.getEmbedding(
VERTEX_ORBIT, e
));
tableVertLab[e] = lab++;
markV.mark(e);
...
...
include/Algo/ImplicitHierarchicalMesh/ihm.hpp
View file @
0003689c
...
...
@@ -258,8 +258,8 @@ inline void ImplicitHierarchicalMap::splitFace(Dart d, Dart e)
{
unsigned
int
cur
=
m_curLevel
;
m_curLevel
=
m_maxLevel
;
this
->
embedOrbit
(
FACE_ORBIT
,
d
,
this
->
get
Dart
Embedding
(
FACE_ORBIT
,
d
))
;
this
->
embedOrbit
(
FACE_ORBIT
,
e
,
this
->
get
Dart
Embedding
(
FACE_ORBIT
,
e
))
;
this
->
embedOrbit
(
FACE_ORBIT
,
d
,
this
->
getEmbedding
(
FACE_ORBIT
,
d
))
;
this
->
embedOrbit
(
FACE_ORBIT
,
e
,
this
->
getEmbedding
(
FACE_ORBIT
,
e
))
;
m_curLevel
=
cur
;
}
}
...
...
@@ -345,7 +345,7 @@ T& AttributeHandler_IHM<T>::operator[](Dart d)
unsigned
int
orbit
=
this
->
getOrbit
()
;
unsigned
int
nbSteps
=
m
->
m_curLevel
-
m
->
vertexInsertionLevel
(
d
)
;
unsigned
int
index
=
m
->
getEmbedding
(
d
,
orbit
)
;
unsigned
int
index
=
m
->
getEmbedding
(
orbit
,
d
)
;
if
(
index
==
EMBNULL
)
{
...
...
@@ -381,7 +381,7 @@ const T& AttributeHandler_IHM<T>::operator[](Dart d) const
unsigned
int
orbit
=
this
->
getOrbit
()
;
unsigned
int
nbSteps
=
m
->
m_curLevel
-
m
->
vertexInsertionLevel
(
d
)
;
unsigned
int
index
=
m
->
getEmbedding
(
d
,
orbit
)
;
unsigned
int
index
=
m
->
getEmbedding
(
orbit
,
d
)
;
unsigned
int
step
=
0
;
while
(
step
<
nbSteps
)
...
...
include/Algo/ImplicitHierarchicalMesh/ihm3.hpp
View file @
0003689c
...
...
@@ -628,7 +628,7 @@ T& AttributeHandler_IHM<T>::operator[](Dart d)
unsigned
int
orbit
=
this
->
getOrbit
()
;
unsigned
int
nbSteps
=
m
->
m_curLevel
-
m
->
vertexInsertionLevel
(
d
)
;
unsigned
int
index
=
m
->
getEmbedding
(
d
,
orbit
)
;
unsigned
int
index
=
m
->
getEmbedding
(
orbit
,
d
)
;
if
(
index
==
EMBNULL
)
{
...
...
@@ -664,7 +664,7 @@ const T& AttributeHandler_IHM<T>::operator[](Dart d) const
unsigned
int
orbit
=
this
->
getOrbit
()
;
unsigned
int
nbSteps
=
m
->
m_curLevel
-
m
->
vertexInsertionLevel
(
d
)
;
unsigned
int
index
=
m
->
getEmbedding
(
d
,
orbit
)
;
unsigned
int
index
=
m
->
getEmbedding
(
orbit
,
d
)
;
unsigned
int
step
=
0
;
while
(
step
<
nbSteps
)
...
...
include/Algo/Import/importMesh.hpp
View file @
0003689c
...
...
@@ -96,11 +96,11 @@ bool importMesh(typename PFP::MAP& map, MeshTablesSurface<PFP>& mts)
// darts incident to end vertex of edge
std
::
vector
<
Dart
>&
vec
=
vecDartsPerVertex
[
map
.
phi1
(
d
)];
unsigned
int
embd
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
d
);
unsigned
int
embd
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
d
);
Dart
good_dart
;
for
(
typename
std
::
vector
<
Dart
>::
iterator
it
=
vec
.
begin
();
it
!=
vec
.
end
()
&&
good_dart
==
Dart
::
nil
();
++
it
)
{
if
(
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
map
.
phi1
(
*
it
))
==
embd
)
if
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi1
(
*
it
))
==
embd
)
good_dart
=
*
it
;
}
...
...
@@ -260,14 +260,14 @@ bool importMesh(typename PFP::MAP& map, MeshTablesVolume<PFP>& mtv)
std
::
vector
<
Dart
>&
vec
=
vecDartsPerVertex
[
map
.
phi1
(
d
)];
//Phi3 reconstruction
unsigned
int
emb1d
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
map
.
phi_1
(
d
));
unsigned
int
emb2d
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
map
.
phi1
(
map
.
phi1
(
d
)));
unsigned
int
emb1d
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi_1
(
d
));
unsigned
int
emb2d
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi1
(
map
.
phi1
(
d
)));
for
(
typename
std
::
vector
<
Dart
>::
iterator
it
=
vec
.
begin
();
it
!=
vec
.
end
();
++
it
)
{
Dart
dprim
=*
it
;
unsigned
int
emb1dprim
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
map
.
phi1
(
map
.
phi1
(
dprim
)));
unsigned
int
emb2dprim
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
map
.
phi_1
(
dprim
));
unsigned
int
emb1dprim
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi1
(
map
.
phi1
(
dprim
)));
unsigned
int
emb2dprim
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi_1
(
dprim
));
if
(
emb1d
==
emb1dprim
&&
emb2d
==
emb2dprim
)
{
...
...
@@ -276,14 +276,14 @@ bool importMesh(typename PFP::MAP& map, MeshTablesVolume<PFP>& mtv)
}
//Phi2 reconstruction
emb1d
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
d
);
emb2d
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
map
.
phi1
(
d
));
emb1d
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
d
);
emb2d
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi1
(
d
));
for
(
typename
std
::
vector
<
Dart
>::
iterator
it
=
vec
.
begin
();
it
!=
vec
.
end
();
++
it
)
{
Dart
dprim
=*
it
;
unsigned
int
emb1dprim
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
map
.
phi1
(
dprim
));
unsigned
int
emb2dprim
=
map
.
get
Dart
Embedding
(
VERTEX_ORBIT
,
dprim
);
unsigned
int
emb1dprim
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi1
(
dprim
));
unsigned
int
emb2dprim
=
map
.
getEmbedding
(
VERTEX_ORBIT
,
dprim
);
if
(
emb1d
==
emb1dprim
&&
emb2d
==
emb2dprim
)
{
...
...
@@ -295,8 +295,6 @@ bool importMesh(typename PFP::MAP& map, MeshTablesVolume<PFP>& mtv)
}
}
return
true
;
//
...
...
@@ -387,7 +385,7 @@ bool importMesh(typename PFP::MAP& map, MeshTablesVolume<PFP>& mtv)
// // darts incident to end vertex of edge
// std::vector<Dart>& vec = vecDartsPerVertex[map.phi1(d)];
//
// unsigned int embd = map.get
Dart
Embedding(VERTEX_ORBIT, d);
// unsigned int embd = map.getEmbedding(VERTEX_ORBIT, d);
// unsigned int nbf = 0;
// Dart good_dart = d;
//
...
...
@@ -395,7 +393,7 @@ bool importMesh(typename PFP::MAP& map, MeshTablesVolume<PFP>& mtv)
//
// for(typename std::vector<Dart>::iterator it = vec.begin(); it != vec.end(); ++it)
// {
// if (map.get
Dart
Embedding(VERTEX_ORBIT, map.phi1(*it)) == embd)
// if (map.getEmbedding(VERTEX_ORBIT, map.phi1(*it)) == embd)
// {
// good_dart = *it;
// nbf++;
...
...
@@ -520,12 +518,12 @@ bool importMesh(typename PFP::MAP& map, const std::string& filename, std::vector
// // darts incident to end vertex of edge
// std::vector<Dart>& vec = vecDartsPerVertex[map.phi1(d)];
//
// unsigned int embd = map.get
Dart
Embedding(VERTEX_ORBIT, d);
// unsigned int embd = map.getEmbedding(VERTEX_ORBIT, d);
// unsigned int nbf=0;
// Dart good_dart;
// for (typename std::vector<Dart>::iterator it = vec.begin(); it != vec.end(); ++it)
// {
// if ( map.get
Dart
Embedding(VERTEX_ORBIT,map.phi1(*it))==embd)
// if ( map.getEmbedding(VERTEX_ORBIT,map.phi1(*it))==embd)
// {
// good_dart = *it;
// nbf++;
...
...
@@ -566,7 +564,7 @@ bool importMesh(typename PFP::MAP& map, const std::string& filename, std::vector
//// typename std::vector<Dart>::iterator jt = vd.begin();
//// while (!map.isMarkedDart(*jt, m))
//// jt++;
//// unsigned int P = map.get
Dart
Embedding(VERTEX_ORBIT, *jt);
//// unsigned int P = map.getEmbedding(VERTEX_ORBIT, *jt);
//// // while vertex if a "non manifold point"
//// while (vecEmbNbFp[index] > 1)
//// {
...
...
@@ -576,9 +574,9 @@ bool importMesh(typename PFP::MAP& map, const std::string& filename, std::vector
//// {
//// e = map.phi1(e);
//// // embedding of boundary darts on the fly
//// unsigned int emb = map.get
Dart
Embedding(VERTEX_ORBIT, map.phi1(map.phi2(e)));
//// unsigned int emb = map.getEmbedding(VERTEX_ORBIT, map.phi1(map.phi2(e)));
//// map.setDartEmbedding(VERTEX_ORBIT, e, emb);
//// } while (map.get
Dart
Embedding(VERTEX_ORBIT, map.phi2(e)) != P);
//// } while (map.getEmbedding(VERTEX_ORBIT, map.phi2(e)) != P);
//// // separate the face
//// map.phi1sew(map.phi2(*jt), e);
//// vecEmbNbFp[index]--;
...
...
@@ -586,11 +584,11 @@ bool importMesh(typename PFP::MAP& map, const std::string& filename, std::vector
//// // copy embedding of vertex of boundary of last face
//// Dart e = map.phi2(*jt);
//// Dart d = e;
//// if (map.get
Dart
Embedding(VERTEX_ORBIT, d) == EMBNULL)
//// if (map.getEmbedding(VERTEX_ORBIT, d) == EMBNULL)
//// {
//// do
//// {
//// unsigned int emb = map.get
Dart
Embedding(VERTEX_ORBIT, map.phi1(map.phi2(d)));
//// unsigned int emb = map.getEmbedding(VERTEX_ORBIT, map.phi1(map.phi2(d)));
//// map.setDartEmbedding(VERTEX_ORBIT, d, emb);
//// d = map.phi1(d);
//// } while (d != e);
...
...
include/Algo/Render/GL2/mapRender.hpp
View file @
0003689c
...
...
@@ -48,9 +48,9 @@ inline void MapRender::addTri(typename PFP::MAP& map, Dart d, std::vector<GLuint
// loop to cut a polygon in triangle on the fly (works only with convex faces)
do
{
tableIndices
.
push_back
(
map
.
getEmbedding
(
d
,
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
b
,
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
c
,
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
d
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
b
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
c
));
b
=
c
;
c
=
map
.
phi1
(
b
);
}
while
(
c
!=
d
);
...
...
@@ -139,8 +139,8 @@ void MapRender::initLines(typename PFP::MAP& map, const FunctorSelect& good, std
{
if
(
!
m
.
isMarked
(
d
)
&&
good
(
d
))
{
tableIndices
.
push_back
(
map
.
getEmbedding
(
d
,
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
map
.
phi2
(
d
),
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
d
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi2
(
d
)
));
m
.
markOrbit
(
EDGE_ORBIT
,
d
);
}
}
...
...
@@ -172,9 +172,9 @@ void MapRender::initLinesOptimized(typename PFP::MAP& map, const FunctorSelect&
if
(
!
m
.
isMarked
(
ee
))
{
if
(
good
(
ee
))
tableIndices
.
push_back
(
map
.
getEmbedding
(
ee
,
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
ee
));
if
(
good
(
f
))
tableIndices
.
push_back
(
map
.
getEmbedding
(
map
.
phi1
(
ee
),
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
map
.
phi1
(
ee
)
));
m
.
markOrbit
(
EDGE_ORBIT
,
f
);
bound
.
push_back
(
f
);
...
...
@@ -205,7 +205,7 @@ void MapRender::initPoints(typename PFP::MAP& map, const FunctorSelect& good, st
{
if
(
!
m
.
isMarked
(
d
)
&&
good
(
d
))
{
tableIndices
.
push_back
(
map
.
getEmbedding
(
d
,
VERTEX_ORBIT
));
tableIndices
.
push_back
(
map
.
getEmbedding
(
VERTEX_ORBIT
,
d
));
m
.
mark
(
d
)
;
}
}
...
...
include/Topology/generic/attributeHandler.hpp
View file @
0003689c
...
...
@@ -94,7 +94,7 @@ inline T& AttributeHandler<T>::operator[](Dart d)
{
assert
(
isValid
()
||
!
"Invalid AttributeHandler"
)
;
unsigned
int
orbit
=
m_attrib
->
getOrbit
()
;
unsigned
int
a
=
m_map
->
getEmbedding
(
d
,
orbit
)
;
unsigned
int
a
=
m_map
->
getEmbedding
(
orbit
,
d
)
;
if
(
a
==
EMBNULL
)
a
=
m_map
->
embedNewCell
(
orbit
,
d
);
...
...
@@ -106,7 +106,7 @@ template <typename T>
inline
const
T
&
AttributeHandler
<
T
>::
operator
[](
Dart
d
)
const
{
assert
(
isValid
()
||
!
"Invalid AttributeHandler"
)
;
unsigned
int
a
=
m_map
->
getEmbedding
(
d
,
m_attrib
->
getOrbit
()
)
;
unsigned
int
a
=
m_map
->
getEmbedding
(
m_attrib
->
getOrbit
(),
d
)
;
return
m_attrib
->
operator
[](
a
)
;
}
...
...
include/Topology/generic/cellmarker.h
View file @
0003689c
...
...
@@ -88,7 +88,7 @@ public:
virtual
void
mark
(
Dart
d
)
{
unsigned
int
cell
=
m_marker
.
getCell
()
;
unsigned
int
a
=
m_map
.
getEmbedding
(
d
,
cell
);
unsigned
int
a
=
m_map
.
getEmbedding
(
cell
,
d
);
if
(
a
==
EMBNULL
)
a
=
m_map
.
embedNewCell
(
cell
,
d
);
...
...
@@ -101,7 +101,7 @@ public:
virtual
void
unmark
(
Dart
d
)
{
unsigned
int
cell
=
m_marker
.
getCell
()
;
unsigned
int
a
=
m_map
.
getEmbedding
(
d
,
cell
);
unsigned
int
a
=
m_map
.
getEmbedding
(
cell
,
d
);
if
(
a
==
EMBNULL
)
a
=
m_map
.
embedNewCell
(
cell
,
d
);
...
...
@@ -114,7 +114,7 @@ public:
virtual
bool
isMarked
(
Dart
d
)
{
unsigned
int
cell
=
m_marker
.
getCell
()
;
unsigned
int
a
=
m_map
.
getEmbedding
(
d
,
cell
);
unsigned
int
a
=
m_map
.
getEmbedding
(
cell
,
d
);
if
(
a
==
EMBNULL
)
return
false
;
...
...
@@ -198,7 +198,7 @@ public:
void
mark
(
Dart
d
)
{
CellMarker
::
mark
(
d
)
;
m_markedCells
.
push_back
(
m_map
.
getEmbedding
(
d
,
m_marker
.
getCell
()
))
;
m_markedCells
.
push_back
(
m_map
.
getEmbedding
(
m_marker
.
getCell
(),
d
))
;
}
/**
...
...
include/Topology/generic/embeddedMap2.h
View file @
0003689c
...
...
@@ -38,21 +38,13 @@ template <typename MAP2>
class
EmbeddedMap2
:
public
MAP2
{
public:
/**
*
*/
virtual
void
deleteFace
(
Dart
d
)
;
/**
* The attributes attached to the old vertex are duplicated on both resulting vertices
* No attribute is attached to the new edge
* Nothing has to be done for the faces
*/
virtual
void
splitVertex
(
Dart
d
,
Dart
e
)
;
/**
* Nothing has to be done for the vertices
* Nothing has to be done for the edges
* The attributes attached to the face of d are kept on the resulting face
*/
virtual
bool
deleteVertex
(
Dart
d
)
;
...
...
@@ -60,7 +52,6 @@ public:
/**
* No attribute is attached to the new vertex
* The attributes attached to the old edge are duplicated on both resulting edges
* Nothing has to be done for the faces
*/
virtual
void
cutEdge
(
Dart
d
)
;
...
...
@@ -91,34 +82,27 @@ public:
/**
* The attributes attached to the vertices of the edge of d are kept on the vertices of the resulting edge
* The attributes attached to the edge of d are kept on the resulting edge
* Nothing has to be done for the faces
*/
virtual
void
sewFaces
(
Dart
d
,
Dart
e
)
;
/**
* The attributes attached to the vertices of the old edge of d are duplicated on the vertices of both resulting edges
* The attributes attached to the old edge are duplicated on both resulting edges
* Nothing has to be done for the faces
*/
virtual
void
unsewFaces
(
Dart
d
)
;
/**
* Nothing has to be done for the vertices
* The attributes attached to the edge of d are kept on the resulting edge
* Nothing has to be done for the faces
*/
virtual
bool
collapseDegeneratedFace
(
Dart
d
);
/**
* Nothing has to be done for the vertices
* No attribute is attached to the new edge
* The attributes attached to the old face are duplicated on both resulting faces
*/
virtual
void
splitFace
(
Dart
d
,
Dart
e
)
;
/**
* Nothing has to be done for the vertices
* Nothing has to be done for the edges
* The attributes attached to the face of dart d are kept on the resulting face
*/
virtual
bool
mergeFaces
(
Dart
d
)
;
...
...
@@ -126,7 +110,6 @@ public:
/**
* The attributes attached to the vertices of the face of d are kept on the resulting vertices
* The attributes attached to the edges of the face of d are kept on the resulting edges
* Nothing has to be done for the faces
*/
virtual
bool
mergeVolumes
(
Dart
d
,
Dart
e
)
;
...
...
include/Topology/generic/embeddedMap2.hpp
View file @
0003689c
...
...
@@ -28,82 +28,38 @@
namespace
CGoGN
{
template
<
typename
MAP2
>
void
EmbeddedMap2
<
MAP2
>::
deleteFace
(
Dart
d
)
{
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
Dart
dd
=
d
;
do
{
unsigned
int
vEmb
=
MAP2
::
getDartEmbedding
(
VERTEX_ORBIT
,
dd
)
;
if
(
vEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
MAP2
::
alpha1
(
d
),
vEmb
)
;
dd
=
MAP2
::
phi1
(
dd
)
;
}
while
(
dd
!=
d
)
;
}
if
(
MAP2
::
isOrbitEmbedded
(
EDGE_ORBIT
))
{
Dart
dd
=
d
;
do
{
unsigned
int
eEmb
=
MAP2
::
getDartEmbedding
(
EDGE_ORBIT
,
dd
)
;
if
(
eEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
EDGE_ORBIT
,
MAP2
::
phi2
(
d
),
eEmb
)
;
dd
=
MAP2
::
phi1
(
dd
)
;
}
while
(
dd
!=
d
)
;
}
MAP2
::
deleteFace
(
d
)
;
}
template
<
typename
MAP2
>
void
EmbeddedMap2
<
MAP2
>::
splitVertex
(
Dart
d
,
Dart
e
)
{
unsigned
int
vEmb
=
EMBNULL
;
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
vEmb
=
MAP2
::
getEmbedding
(
d
,
VERTEX_ORBIT
)
;
}
Dart
dd
=
MAP2
::
phi2
(
d
)
;
Dart
ee
=
MAP2
::
phi2
(
e
)
;
MAP2
::
splitVertex
(
d
,
e
)
;
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
d
,
vEmb
)
;
MAP2
::
copyDartEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi1
(
dd
),
d
)
;
MAP2
::
copyDartEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi1
(
ee
),
e
)
;
MAP2
::
embedNewCell
(
VERTEX_ORBIT
,
e
)
;
MAP2
::
copyCell
(
VERTEX_ORBIT
,
e
,
d
)
;
}
if
(
MAP2
::
isOrbitEmbedded
(
FACE_ORBIT
))
{
MAP2
::
copyDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi1
(
dd
),
dd
)
;
MAP2
::
copyDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi1
(
ee
),
ee
)
;
}
}
template
<
typename
MAP2
>
bool
EmbeddedMap2
<
MAP2
>::
deleteVertex
(
Dart
d
)
{
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
Dart
vit
=
d
;
do
{
unsigned
int
vEmb
=
MAP2
::
getDartEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi2
(
vit
))
;
if
(
vEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi1
(
vit
),
vEmb
)
;
vit
=
MAP2
::
alpha1
(
vit
)
;
}
while
(
vit
!=
d
)
;
}
Dart
f
=
MAP2
::
phi1
(
d
)
;
unsigned
int
fEmb
=
EMBNULL
;
if
(
MAP2
::
isOrbitEmbedded
(
FACE_ORBIT
))
{
fEmb
=
MAP2
::
getEmbedding
(
d
,
FACE_ORBIT
)
;
}
if
(
MAP2
::
deleteVertex
(
d
))
{
if
(
MAP2
::
isOrbitEmbedded
(
FACE_ORBIT
))
{
MAP2
::
embedOrbit
(
FACE_ORBIT
,
f
,
fEmb
)
;
MAP2
::
embedOrbit
(
FACE_ORBIT
,
f
,
MAP2
::
getEmbedding
(
FACE_ORBIT
,
f
)
)
;
}
return
true
;
}
...
...
@@ -113,20 +69,21 @@ bool EmbeddedMap2<MAP2>::deleteVertex(Dart d)
template
<
typename
MAP2
>
void
EmbeddedMap2
<
MAP2
>::
cutEdge
(
Dart
d
)
{
unsigned
int
eEmb
=
EMBNULL
;
if
(
MAP2
::
isOrbitEmbedded
(
EDGE_ORBIT
))
{
eEmb
=
MAP2
::
getEmbedding
(
d
,
EDGE_ORBIT
)
;
}
MAP2
::
cutEdge
(
d
)
;
Dart
nd
=
MAP2
::
phi1
(
d
)
;
if
(
MAP2
::
isOrbitEmbedded
(
EDGE_ORBIT
))
{
Dart
e
=
MAP2
::
phi1
(
d
)
;
MAP2
::
setDartEmbedding
(
EDGE_ORBIT
,
d
,
eEmb
)
;
MAP2
::
embedNewCell
(
EDGE_ORBIT
,
e
)
;
MAP2
::
copyCell
(
EDGE_ORBIT
,
e
,
d
)
;
MAP2
::
embedNewCell
(
EDGE_ORBIT
,
nd
)
;
MAP2
::
copyCell
(
EDGE_ORBIT
,
nd
,
d
)
;
}
if
(
MAP2
::
isOrbitEmbedded
(
FACE_ORBIT
))
{
MAP2
::
copyDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi1
(
d
),
d
)
;
Dart
e
=
MAP2
::
phi2
(
nd
)
;
if
(
e
!=
nd
)
MAP2
::
copyDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi1
(
e
),
e
)
;
}
}
...
...
@@ -165,7 +122,7 @@ bool EmbeddedMap2<MAP2>::edgeCanCollapse(Dart d)
Dart
end
=
MAP2
::
phi1
(
dd
)
;
do
{
unsigned
int
ve
=
MAP2
::
getEmbedding
(
MAP2
::
phi2
(
vit1
),
VERTEX_ORBIT
)
;
unsigned
int
ve
=
MAP2
::
getEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi2
(
vit1
)
)
;
vu1
.
push_back
(
ve
)
;
vit1
=
MAP2
::
alpha1
(
vit1
)
;
}
while
(
vit1
!=
end
)
;
...
...
@@ -173,7 +130,7 @@ bool EmbeddedMap2<MAP2>::edgeCanCollapse(Dart d)
Dart
vit2
=
MAP2
::
alpha1
(
MAP2
::
alpha1
(
dd
))
;
do
{
unsigned
int
ve
=
MAP2
::
getEmbedding
(
MAP2
::
phi2
(
vit2
),
VERTEX_ORBIT
)
;
unsigned
int
ve
=
MAP2
::
getEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi2
(
vit2
)
)
;
std
::
vector
<
unsigned
int
>::
iterator
it
=
std
::
find
(
vu1
.
begin
(),
vu1
.
end
(),
ve
)
;
if
(
it
!=
vu1
.
end
())
return
false
;
...
...
@@ -189,7 +146,7 @@ Dart EmbeddedMap2<MAP2>::collapseEdge(Dart d, bool delDegenerateFaces)
unsigned
int
vEmb
=
EMBNULL
;
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
vEmb
=
MAP2
::
getEmbedding
(
d
,
VERTEX_ORBIT
)
;
vEmb
=
MAP2
::
getEmbedding
(
VERTEX_ORBIT
,
d
)
;
}
Dart
dV
=
MAP2
::
collapseEdge
(
d
,
delDegenerateFaces
);
...
...
@@ -211,27 +168,13 @@ bool EmbeddedMap2<MAP2>::flipEdge(Dart d)
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
unsigned
int
dVEmb
=
MAP2
::
getDartEmbedding
(
VERTEX_ORBIT
,
d
)
;
if
(
dVEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi_1
(
d
),
dVEmb
)
;
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
d
,
EMBNULL
)
;
unsigned
int
eVEmb
=
MAP2
::
getDartEmbedding
(
VERTEX_ORBIT
,
e
)
;
if
(
eVEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi_1
(
e
),
eVEmb
)
;
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
e
,
EMBNULL
)
;
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
d
,
MAP2
::
getEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi1
(
e
)))
;
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
e
,
MAP2
::
getEmbedding
(
VERTEX_ORBIT
,
MAP2
::
phi1
(
d
)))
;
}
if
(
MAP2
::
isOrbitEmbedded
(
FACE_ORBIT
))
{
unsigned
int
dFEmb
=
MAP2
::
getDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi_1
(
e
))
;
if
(
dFEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
FACE_ORBIT
,
d
,
dFEmb
)
;
MAP2
::
setDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi_1
(
e
),
EMBNULL
)
;
unsigned
int
eFEmb
=
MAP2
::
getDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi_1
(
d
))
;
if
(
eFEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
FACE_ORBIT
,
e
,
eFEmb
)
;
MAP2
::
setDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi_1
(
d
),
EMBNULL
)
;
MAP2
::
setDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi_1
(
d
),
MAP2
::
getEmbedding
(
FACE_ORBIT
,
d
))
;
MAP2
::
setDartEmbedding
(
FACE_ORBIT
,
MAP2
::
phi_1
(
e
),
MAP2
::
getEmbedding
(
FACE_ORBIT
,
e
))
;
}
return
true
;
}
...
...
@@ -247,28 +190,13 @@ bool EmbeddedMap2<MAP2>::flipBackEdge(Dart d)
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
unsigned
int
dVEmb
=
MAP2
::
getDartEmbedding
(
VERTEX_ORBIT
,
d
)