Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Hurstel
CGoGN
Commits
abc26d95
Commit
abc26d95
authored
Jun 23, 2012
by
untereiner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bug correction : mr dart duplication in container
parent
ab23f706
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
274 additions
and
291 deletions
+274
-291
include/Algo/Multiresolution/map3MR/filters_Primal.h
include/Algo/Multiresolution/map3MR/filters_Primal.h
+0
-13
include/Algo/Multiresolution/map3MR/map3MR_PrimalRegular.h
include/Algo/Multiresolution/map3MR/map3MR_PrimalRegular.h
+1
-1
include/Algo/Multiresolution/map3MR/map3MR_PrimalRegular.hpp
include/Algo/Multiresolution/map3MR/map3MR_PrimalRegular.hpp
+269
-273
include/Algo/Render/GL2/colorPerFaceRender.h
include/Algo/Render/GL2/colorPerFaceRender.h
+1
-1
include/Algo/Render/GL2/colorPerFaceRender.hpp
include/Algo/Render/GL2/colorPerFaceRender.hpp
+2
-2
src/Topology/generic/genericmap.cpp
src/Topology/generic/genericmap.cpp
+1
-1
No files found.
include/Algo/Multiresolution/map3MR/filters_Primal.h
View file @
abc26d95
...
...
@@ -279,20 +279,9 @@ public:
void
operator
()
()
{
std
::
cout
<<
"lerp edges"
<<
std
::
endl
;
TraversorE
<
typename
PFP
::
MAP
>
trav
(
m_map
)
;
std
::
cout
<<
"begin = "
<<
m_map
.
begin
()
<<
std
::
endl
;
std
::
cout
<<
"end = "
<<
m_map
.
end
()
<<
std
::
endl
;
std
::
cout
<<
"begin = "
<<
trav
.
begin
()
<<
std
::
endl
;
std
::
cout
<<
"end = "
<<
trav
.
end
()
<<
std
::
endl
;
std
::
cout
<<
"next = "
<<
trav
.
next
()
<<
std
::
endl
;
for
(
Dart
d
=
trav
.
begin
();
d
!=
trav
.
end
();
d
=
trav
.
next
())
{
std
::
cout
<<
"edges"
<<
std
::
endl
;
typename
PFP
::
VEC3
p
=
(
m_position
[
d
]
+
m_position
[
m_map
.
phi2
(
d
)])
*
typename
PFP
::
REAL
(
0.5
);
m_map
.
incCurrentLevel
()
;
...
...
@@ -318,7 +307,6 @@ public:
void
operator
()
()
{
std
::
cout
<<
"lerp faces"
<<
std
::
endl
;
TraversorF
<
typename
PFP
::
MAP
>
trav
(
m_map
)
;
for
(
Dart
d
=
trav
.
begin
();
d
!=
trav
.
end
();
d
=
trav
.
next
())
{
...
...
@@ -349,7 +337,6 @@ public:
void
operator
()
()
{
std
::
cout
<<
"lerp volumes"
<<
std
::
endl
;
TraversorW
<
typename
PFP
::
MAP
>
trav
(
m_map
)
;
for
(
Dart
d
=
trav
.
begin
();
d
!=
trav
.
end
();
d
=
trav
.
next
())
{
...
...
include/Algo/Multiresolution/map3MR/map3MR_PrimalRegular.h
View file @
abc26d95
...
...
@@ -85,7 +85,7 @@ public:
//!
/*
*/
//
void addNewLevelHexa(bool embedNewVertices);
void
addNewLevelHexa
(
bool
embedNewVertices
);
//!
/*
...
...
include/Algo/Multiresolution/map3MR/map3MR_PrimalRegular.hpp
View file @
abc26d95
...
...
@@ -94,15 +94,12 @@ void Map3MR_PrimalRegular<PFP>::splitSurfaceInVolume(std::vector<Dart>& vd, bool
// embed the vertex embedded from the origin volume to the new darts
if
(
m_map
.
template
isOrbitEmbedded
<
VERTEX
>())
{
m_map
.
copyDartEmbedding
<
VERTEX
>
(
m_map
.
phi2
(
dit
),
m_map
.
phi1
(
dit
));
m_map
.
copyDartEmbedding
<
VERTEX
>
(
m_map
.
phi2
(
dit2
),
m_map
.
phi1
(
dit2
));
m_map
.
template
copyDartEmbedding
<
VERTEX
>(
m_map
.
phi2
(
dit
),
m_map
.
phi1
(
dit
));
m_map
.
template
copyDartEmbedding
<
VERTEX
>(
m_map
.
phi2
(
dit2
),
m_map
.
phi1
(
dit2
));
}
}
}
//Algo::Modelisation::Tetrahedralization::isTetrahedron<PFP>(m_map, d);
/************************************************************************
* Level creation *
************************************************************************/
...
...
@@ -137,148 +134,147 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices)
// embedNewCell<VERTEX>(d) ;
// }
std
::
cout
<<
"cut edge"
<<
std
::
endl
;
m_map
.
cutEdge
(
d
)
;
travE
.
skip
(
d
)
;
travE
.
skip
(
m_map
.
phi1
(
d
))
;
// When importing MR files
if
(
embedNewVertices
)
m_map
.
template
embedNewCell
<
VERTEX
>(
m_map
.
phi1
(
d
))
;
//
if(embedNewVertices)
//
m_map.template embedNewCell<VERTEX>(m_map.phi1(d)) ;
}
//
//2. split faces - triangular faces
//
TraversorF<typename PFP::MAP> travF(m_map) ;
//
for (Dart d = travF.begin(); d != travF.end(); d = travF.next())
//
{
//
Dart old = d ;
//
if(m_map.getDartLevel(old) == m_map.getMaxLevel())
//
old = m_map.phi1(old) ;
//
//
Dart dd = m_map.phi1(old) ;
//
Dart e = m_map.phi1(m_map.phi1(dd)) ;
//
m_map.splitFace(dd, e) ;
//
travF.skip(dd) ;
//
//
dd = e ;
//
e = m_map.phi1(m_map.phi1(dd)) ;
//
m_map.splitFace(dd, e) ;
//
travF.skip(dd) ;
//
//
dd = e ;
//
e = m_map.phi1(m_map.phi1(dd)) ;
//
m_map.splitFace(dd, e) ;
//
travF.skip(dd) ;
//
//
travF.skip(e) ;
//
}
//2. split faces - triangular faces
TraversorF
<
typename
PFP
::
MAP
>
travF
(
m_map
)
;
for
(
Dart
d
=
travF
.
begin
();
d
!=
travF
.
end
();
d
=
travF
.
next
())
{
Dart
old
=
d
;
if
(
m_map
.
getDartLevel
(
old
)
==
m_map
.
getMaxLevel
())
old
=
m_map
.
phi1
(
old
)
;
Dart
dd
=
m_map
.
phi1
(
old
)
;
Dart
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
travF
.
skip
(
dd
)
;
dd
=
e
;
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
travF
.
skip
(
dd
)
;
dd
=
e
;
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
travF
.
skip
(
dd
)
;
travF
.
skip
(
e
)
;
}
//
//3. create inside volumes
//
m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
//
TraversorW<typename PFP::MAP> traW(m_map);
//
for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next())
//
{
//
Traversor3WV<typename PFP::MAP> traWV(m_map, dit);
//
//
for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next())
//
{
//
m_map.setCurrentLevel(m_map.getMaxLevel()) ;
//
Dart f1 = m_map.phi1(ditWV);
//
Dart e = ditWV;
//
std::vector<Dart> v ;
//
//
do
//
{
//
v.push_back(m_map.phi1(e));
//
e = m_map.phi2(m_map.phi_1(e));
//
}
//
while(e != ditWV);
//
//
m_map.splitVolume(v) ;
//
//
//if is not a tetrahedron
//
unsigned int fdeg = m_map.faceDegree(m_map.phi2(f1));
//
if(fdeg > 3)
//
{
//
Dart old = m_map.phi2(m_map.phi1(ditWV));
//
Dart dd = m_map.phi1(old) ;
//
m_map.splitFace(old,dd) ;
//
//
Dart ne = m_map.phi1(old);
//
//
m_map.cutEdge(ne);
//
//
Dart stop = m_map.phi2(m_map.phi1(ne));
//
ne = m_map.phi2(ne);
//
do
//
{
//
dd = m_map.phi1(m_map.phi1(ne));
//
//
m_map.splitFace(ne, dd) ;
//
//
ne = m_map.phi2(m_map.phi_1(ne));
//
dd = m_map.phi1(dd);
//
}
//
while(dd != stop);
//
}
//
//
m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
//
}
//
}
//
//
m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
//
for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next())
//
{
//
Traversor3WV<typename PFP::MAP> traWV(m_map, dit);
//
//
for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next())
//
{
//
m_map.setCurrentLevel(m_map.getMaxLevel()) ;
//
Dart x = m_map.phi_1(m_map.phi2(m_map.phi1(ditWV)));
//
//
if(!Algo::Modelisation::Tetrahedralization::isTetrahedron<PFP>(m_map,x))
//
{
//
DartMarkerStore me(m_map);
//
//
Dart f = x;
//
//
do
//
{
//
Dart f3 = m_map.phi3(f);
//
//
if(!me.isMarked(f3))
//
{
//
Dart tmp = m_map.phi_1(m_map.phi2(m_map.phi_1(m_map.phi2(m_map.phi_1(f3))))); //future voisin par phi2
//
//
Dart f32 = m_map.phi2(f3);
//
swapEdges(f3, tmp);
//
//
me.markOrbit<EDGE>(f3);
//
me.markOrbit<EDGE>(f32);
//
}
//
//
f = m_map.phi2(m_map.phi_1(f));
//
}while(f != x);
//
//
// When importing MR files
//
if(embedNewVertices)
//
m_map.template embedNewCell<VERTEX>(x) ;
//
}
//
m_map.setCurrentLevel(m_map.getMaxLevel() - 1) ;
//
}
//
}
//3. create inside volumes
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
()
-
1
)
;
TraversorW
<
typename
PFP
::
MAP
>
traW
(
m_map
);
for
(
Dart
dit
=
traW
.
begin
();
dit
!=
traW
.
end
();
dit
=
traW
.
next
())
{
Traversor3WV
<
typename
PFP
::
MAP
>
traWV
(
m_map
,
dit
);
for
(
Dart
ditWV
=
traWV
.
begin
();
ditWV
!=
traWV
.
end
();
ditWV
=
traWV
.
next
())
{
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
())
;
Dart
f1
=
m_map
.
phi1
(
ditWV
);
Dart
e
=
ditWV
;
std
::
vector
<
Dart
>
v
;
do
{
v
.
push_back
(
m_map
.
phi1
(
e
));
e
=
m_map
.
phi2
(
m_map
.
phi_1
(
e
));
}
while
(
e
!=
ditWV
);
m_map
.
splitVolume
(
v
)
;
//if is not a tetrahedron
unsigned
int
fdeg
=
m_map
.
faceDegree
(
m_map
.
phi2
(
f1
));
if
(
fdeg
>
3
)
{
Dart
old
=
m_map
.
phi2
(
m_map
.
phi1
(
ditWV
));
Dart
dd
=
m_map
.
phi1
(
old
)
;
m_map
.
splitFace
(
old
,
dd
)
;
Dart
ne
=
m_map
.
phi1
(
old
);
m_map
.
cutEdge
(
ne
);
Dart
stop
=
m_map
.
phi2
(
m_map
.
phi1
(
ne
));
ne
=
m_map
.
phi2
(
ne
);
do
{
dd
=
m_map
.
phi1
(
m_map
.
phi1
(
ne
));
m_map
.
splitFace
(
ne
,
dd
)
;
ne
=
m_map
.
phi2
(
m_map
.
phi_1
(
ne
));
dd
=
m_map
.
phi1
(
dd
);
}
while
(
dd
!=
stop
);
}
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
()
-
1
)
;
}
}
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
()
-
1
)
;
for
(
Dart
dit
=
traW
.
begin
();
dit
!=
traW
.
end
();
dit
=
traW
.
next
())
{
Traversor3WV
<
typename
PFP
::
MAP
>
traWV
(
m_map
,
dit
);
for
(
Dart
ditWV
=
traWV
.
begin
();
ditWV
!=
traWV
.
end
();
ditWV
=
traWV
.
next
())
{
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
())
;
Dart
x
=
m_map
.
phi_1
(
m_map
.
phi2
(
m_map
.
phi1
(
ditWV
)));
if
(
!
Algo
::
Modelisation
::
Tetrahedralization
::
isTetrahedron
<
PFP
>
(
m_map
,
x
))
{
DartMarkerStore
me
(
m_map
);
Dart
f
=
x
;
do
{
Dart
f3
=
m_map
.
phi3
(
f
);
if
(
!
me
.
isMarked
(
f3
))
{
Dart
tmp
=
m_map
.
phi_1
(
m_map
.
phi2
(
m_map
.
phi_1
(
m_map
.
phi2
(
m_map
.
phi_1
(
f3
)))));
//future voisin par phi2
Dart
f32
=
m_map
.
phi2
(
f3
);
swapEdges
(
f3
,
tmp
);
me
.
markOrbit
<
EDGE
>
(
f3
);
me
.
markOrbit
<
EDGE
>
(
f32
);
}
f
=
m_map
.
phi2
(
m_map
.
phi_1
(
f
));
}
while
(
f
!=
x
);
// When importing MR files
//
if(embedNewVertices)
//
m_map.template embedNewCell<VERTEX>(x) ;
}
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
()
-
1
)
;
}
}
m_map
.
popLevel
()
;
}
//void Map3MR_PrimalRegular::addNewLevelHexa(bool embedNewVertices)
//{
// pushLevel();
//
// addLevel();
// setCurrentLevel(getMaxLevel());
//
template
<
typename
PFP
>
void
Map3MR_PrimalRegular
<
PFP
>::
addNewLevelHexa
(
bool
embedNewVertices
)
{
m_map
.
pushLevel
();
m_map
.
addLevel
();
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
());
// if(!shareVertexEmbeddings)
// {
// //create the new level with the old one
...
...
@@ -288,12 +284,12 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices)
// (*m_embeddings[VERTEX])[index] = EMBNULL ; // set vertex embedding to EMBNULL if no sharing
// }
// }
//
//
//subdivision
//
//1. cut edges
//
TraversorE<
Map3MR_PrimalRegular
> travE(
*this
);
//
for (Dart d = travE.begin(); d != travE.end(); d = travE.next())
//
{
//subdivision
//1. cut edges
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
);
for
(
Dart
d
=
travE
.
begin
();
d
!=
travE
.
end
();
d
=
travE
.
next
())
{
// if(!shareVertexEmbeddings)
// {
// if(getEmbedding<VERTEX>(d) == EMBNULL)
...
...
@@ -301,140 +297,140 @@ void Map3MR_PrimalRegular<PFP>::addNewLevelTetraOcta(bool embedNewVertices)
// if(getEmbedding<VERTEX>(phi1(d)) == EMBNULL)
// embedNewCell<VERTEX>(phi1(d)) ;
// }
//
//
cutEdge(d) ;
//
travE.skip(d) ;
//
travE.skip(phi1(d)) ;
//
//
// When importing MR files : activated for DEBUG
m_map
.
cutEdge
(
d
)
;
travE
.
skip
(
d
)
;
travE
.
skip
(
m_map
.
phi1
(
d
))
;
// When importing MR files : activated for DEBUG
// if(embedNewVertices)
// embedNewCell<VERTEX>(phi1(d)) ;
//
}
//
////
//2. split faces - quadrangule faces
////
TraversorF<
Map3MR_PrimalRegular
> travF(
*this
) ;
////
for (Dart d = travF.begin(); d != travF.end(); d = travF.next())
////
{
////
Dart old = d;
////
if(getDartLevel(old) == getMaxLevel())
////
old = phi1(old) ;
////
////
Dart dd = phi1(old) ;
////
Dart next =
phi1(
phi1(dd)) ;
////
splitFace(dd, next) ; // insert a first edge
////
////
Dart ne =
phi2(
phi_1(dd)) ;
////
cutEdge(ne) ; // cut the new edge to insert the central vertex
////
travF.skip(dd) ;
////
////
// When importing MR files : activated for DEBUG
//
// if(embedNewVertices)
//
// embedNewCell<VERTEX>(phi1(ne)) ;
////
////
dd =
phi1(
phi1(next)) ;
////
while(dd != ne) // turn around the face and insert new edges
////
{ // linked to the central vertex
////
Dart tmp = phi1(ne) ;
////
splitFace(tmp, dd) ;
////
travF.skip(tmp) ;
////
dd =
phi1(
phi1(dd)) ;
////
}
////
travF.skip(ne) ;
////
}
//
////
//3. create inside volumes
////
setCurrentLevel(getMaxLevel() - 1) ;
////
TraversorW<
Map3MR_PrimalRegular
> traW(
*this
);
////
for(Dart dit = traW.begin(); dit != traW.end(); dit = traW.next())
////
{
////
std::vector<std::pair<Dart, Dart> > subdividedFaces;
////
subdividedFaces.reserve(64);
////
Dart centralDart = NIL;
////
////
Traversor3WV<
Map3MR_PrimalRegular
> traWV(
*this
, dit);
////
for(Dart ditWV = traWV.begin(); ditWV != traWV.end(); ditWV = traWV.next())
////
{
////
setCurrentLevel(getMaxLevel()) ; //Utile ?
////
////
Dart e = ditWV;
////
std::vector<Dart> v ;
////
////
do
////
{
////
v.push_back(phi1(e));
////
v.push_back(
phi1(
phi1(e)));
////
////
if(!Map
2
::isBoundaryEdge(phi1(e)))
////
subdividedFaces.push_back(std::pair<Dart,Dart>(phi1(e),
phi2(
phi1(e))));
////
////
if(!Map
2
::isBoundaryEdge(
phi1(
phi1(e))))
////
subdividedFaces.push_back(std::pair<Dart,Dart>(
phi1(phi1(e)),phi2(phi1(
phi1(e)))));
////
////
e =
phi2(
phi_1(e));
////
}
////
while(e != ditWV);
////
////
splitSurfaceInVolume(v);
////
////
Dart dd =
phi2(
phi1(ditWV));
////
Dart next =
phi1(
phi1(dd)) ;
////
Map
2
::splitFace(dd, next) ;
////
////
Dart ne =
phi2(
phi_1(dd));
////
Map
2
::cutEdge(ne) ;
////
centralDart = phi1(ne);
////
////
dd =
phi1(
phi1(next)) ;
////
while(dd != ne)
////
{
////
Dart tmp = phi1(ne) ;
////
Map
2
::splitFace(tmp, dd) ;
////
dd =
phi1(
phi1(dd)) ;
////
}
////
////
setCurrentLevel(getMaxLevel() - 1) ; //Utile ?
////
}
////
////
setCurrentLevel(getMaxLevel()) ;
////
//4 couture des relations precedemment sauvegarde
////
for (std::vector<std::pair<Dart,Dart> >::iterator it = subdividedFaces.begin(); it != subdividedFaces.end(); ++it)
////
{
////
Dart f1 = phi2((*it).first);
////
Dart f2 = phi2((*it).second);
////
////
//if(isBoundaryFace(f1) && isBoundaryFace(f2))
////
if(phi3(f1) == f1 && phi3(f2) == f2)
////
sewVolumes(f1, f2, false);
////
}
////
embedOrbit<VERTEX>(centralDart, getEmbedding<VERTEX>(centralDart));
////
////
setCurrentLevel(getMaxLevel() - 1) ;
////
}
//
////
//A optimiser
////
setCurrentLevel(getMaxLevel()-1) ;
////
TraversorE<
Map3MR_PrimalRegular
> travE2(
*this
);
////
for (Dart d = travE2.begin(); d != travE2.end(); d = travE2.next())
////
{
////
setCurrentLevel(getMaxLevel()) ;
////
embedOrbit<VERTEX>(phi1(d), getEmbedding<VERTEX>(phi1(d)));
////
setCurrentLevel(getMaxLevel()-1) ;
////
}
////
setCurrentLevel(getMaxLevel()) ;
////
////
setCurrentLevel(getMaxLevel()-1) ;
////
TraversorF<
Map3MR_PrimalRegular
> travF2(
*this
) ;
////
for (Dart d = travF2.begin(); d != travF2.end(); d = travF2.next())
////
{
////
setCurrentLevel(getMaxLevel()) ;
////
embedOrbit<VERTEX>(
phi2(phi1(d)),
getEmbedding<VERTEX>(
phi2(
phi1(d))));
////
setCurrentLevel(getMaxLevel()-1) ;
////
}
////
setCurrentLevel(getMaxLevel()) ;
//
//
popLevel() ;
//
}
//
}
//2. split faces - quadrangule faces
TraversorF
<
typename
PFP
::
MAP
>
travF
(
m_map
)
;
for
(
Dart
d
=
travF
.
begin
();
d
!=
travF
.
end
();
d
=
travF
.
next
())
{
Dart
old
=
d
;
if
(
m_map
.
getDartLevel
(
old
)
==
m_map
.
getMaxLevel
())
old
=
m_map
.
phi1
(
old
)
;
Dart
dd
=
m_map
.
phi1
(
old
)
;
Dart
next
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
next
)
;
// insert a first edge
Dart
ne
=
m_map
.
phi2
(
m_map
.
phi_1
(
dd
))
;
m_map
.
cutEdge
(
ne
)
;
// cut the new edge to insert the central vertex
travF
.
skip
(
dd
)
;
// When importing MR files : activated for DEBUG
// if(embedNewVertices)
// embedNewCell<VERTEX>(phi1(ne)) ;
dd
=
m_map
.
phi1
(
m_map
.
phi1
(
next
))
;
while
(
dd
!=
ne
)
// turn around the face and insert new edges
{
// linked to the central vertex
Dart
tmp
=
m_map
.
phi1
(
ne
)
;
m_map
.
splitFace
(
tmp
,
dd
)
;
travF
.
skip
(
tmp
)
;
dd
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
}
travF
.
skip
(
ne
)
;
}
//3. create inside volumes
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
()
-
1
)
;
TraversorW
<
typename
PFP
::
MAP
>
traW
(
m_map
);
for
(
Dart
dit
=
traW
.
begin
();
dit
!=
traW
.
end
();
dit
=
traW
.
next
())
{
std
::
vector
<
std
::
pair
<
Dart
,
Dart
>
>
subdividedFaces
;
subdividedFaces
.
reserve
(
64
);
Dart
centralDart
=
NIL
;
Traversor3WV
<
typename
PFP
::
MAP
>
traWV
(
m_map
,
dit
);
for
(
Dart
ditWV
=
traWV
.
begin
();
ditWV
!=
traWV
.
end
();
ditWV
=
traWV
.
next
())
{
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
())
;
//Utile ?
Dart
e
=
ditWV
;
std
::
vector
<
Dart
>
v
;
do
{
v
.
push_back
(
m_map
.
phi1
(
e
));
v
.
push_back
(
m_map
.
phi1
(
m_map
.
phi1
(
e
)));
if
(
!
m_map
.
PFP
::
MAP
::
Parent
Map
::
isBoundaryEdge
(
m_map
.
phi1
(
e
)))
subdividedFaces
.
push_back
(
std
::
pair
<
Dart
,
Dart
>
(
m_map
.
phi1
(
e
),
m_map
.
phi2
(
m_map
.
phi1
(
e
))));
if
(
!
m_map
.
PFP
::
MAP
::
Parent
Map
::
isBoundaryEdge
(
m_map
.
phi1
(
m_map
.
phi1
(
e
))))
subdividedFaces
.
push_back
(
std
::
pair
<
Dart
,
Dart
>
(
m_map
.
phi1
(
m_map
.
phi1
(
e
)),
m_map
.
phi2
(
m_map
.
phi1
(
m_map
.
phi1
(
e
)))));
e
=
m_map
.
phi2
(
m_map
.
phi_1
(
e
));
}
while
(
e
!=
ditWV
);
splitSurfaceInVolume
(
v
);
Dart
dd
=
m_map
.
phi2
(
m_map
.
phi1
(
ditWV
));
Dart
next
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
PFP
::
MAP
::
Parent
Map
::
splitFace
(
dd
,
next
)
;
Dart
ne
=
m_map
.
phi2
(
m_map
.
phi_1
(
dd
));
m_map
.
PFP
::
MAP
::
Parent
Map
::
cutEdge
(
ne
)
;
centralDart
=
m_map
.
phi1
(
ne
);
dd
=
m_map
.
phi1
(
m_map
.
phi1
(
next
))
;
while
(
dd
!=
ne
)
{
Dart
tmp
=
m_map
.
phi1
(
ne
)
;
m_map
.
PFP
::
MAP
::
Parent
Map
::
splitFace
(
tmp
,
dd
)
;
dd
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
}