Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
CGoGN
CGoGN
Commits
6346fca0
Commit
6346fca0
authored
Feb 25, 2011
by
Pierre Kraemer
Browse files
calcul dual ok + reverse orientation
parent
db4115a5
Changes
15
Hide whitespace changes
Inline
Side-by-side
Apps/Examples/miniTest.cpp
View file @
6346fca0
...
...
@@ -536,11 +536,10 @@ void MyGlutWin::myKeyboard(unsigned char keycode, int x, int y)
case
'd'
:
{
myMap
.
removeAttribute
<
PFP
::
VEC3
>
(
normal
)
;
myMap
.
removeAttribute
<
PFP
::
VEC3
>
(
laplacian
)
;
AttributeHandler
<
PFP
::
VEC3
>
newPosition
=
myMap
.
addAttribute
<
PFP
::
VEC3
>
(
FACE_ORBIT
,
"position"
)
;
Algo
::
Geometry
::
computeCentroidFaces
<
PFP
>
(
myMap
,
position
,
newPosition
)
;
AttributeHandler
<
PFP
::
VEC3
>
positionF
=
myMap
.
getAttribute
<
PFP
::
VEC3
>
(
FACE_ORBIT
,
"position"
)
;
if
(
!
positionF
.
isValid
())
positionF
=
myMap
.
addAttribute
<
PFP
::
VEC3
>
(
FACE_ORBIT
,
"position"
)
;
Algo
::
Geometry
::
computeCentroidFaces
<
PFP
>
(
myMap
,
position
,
positionF
)
;
GLint
t1
=
glutGet
(
GLUT_ELAPSED_TIME
);
...
...
@@ -550,12 +549,14 @@ void MyGlutWin::myKeyboard(unsigned char keycode, int x, int y)
GLfloat
seconds
=
(
t2
-
t1
)
/
1000.0
f
;
std
::
cout
<<
"dual computation: "
<<
seconds
<<
"sec"
<<
std
::
endl
;
newPosition
=
myMap
.
getAttribute
<
PFP
::
VEC3
>
(
FACE_ORBIT
,
"position"
)
;
myMap
.
removeAttribute
<
PFP
::
VEC3
>
(
newPosition
)
;
position
=
myMap
.
getAttribute
<
PFP
::
VEC3
>
(
VERTEX_ORBIT
,
"position"
)
;
normal
=
myMap
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX_ORBIT
,
"normal"
)
;
laplacian
=
myMap
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX_ORBIT
,
"laplacian"
)
;
normal
=
myMap
.
getAttribute
<
PFP
::
VEC3
>
(
VERTEX_ORBIT
,
"normal"
)
;
if
(
!
normal
.
isValid
())
normal
=
myMap
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX_ORBIT
,
"normal"
)
;
laplacian
=
myMap
.
getAttribute
<
PFP
::
VEC3
>
(
VERTEX_ORBIT
,
"laplacian"
)
;
if
(
!
laplacian
.
isValid
())
laplacian
=
myMap
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX_ORBIT
,
"laplacian"
)
;
t1
=
glutGet
(
GLUT_ELAPSED_TIME
);
updateVBOprimitives
(
Algo
::
Render
::
VBO
::
TRIANGLES
|
Algo
::
Render
::
VBO
::
LINES
|
Algo
::
Render
::
VBO
::
POINTS
)
;
...
...
include/Algo/ImplicitHierarchicalMesh/ihm.hpp
View file @
6346fca0
...
...
@@ -343,7 +343,7 @@ T& AttributeHandler_IHM<T>::operator[](Dart d)
assert
(
m
->
m_dartLevel
[
d
]
<=
m
->
m_curLevel
||
!
"Access to a dart introduced after current level"
)
;
assert
(
m
->
vertexInsertionLevel
(
d
)
<=
m
->
m_curLevel
||
!
"Access to the embedding of a vertex inserted after current level"
)
;
unsigned
int
orbit
=
this
->
m_o
rbit
;
unsigned
int
orbit
=
this
->
getO
rbit
()
;
unsigned
int
nbSteps
=
m
->
m_curLevel
-
m
->
vertexInsertionLevel
(
d
)
;
unsigned
int
index
=
m
->
getEmbedding
(
d
,
orbit
)
;
...
...
@@ -380,7 +380,7 @@ const T& AttributeHandler_IHM<T>::operator[](Dart d) const
assert
(
m
->
m_dartLevel
[
d
]
<=
m
->
m_curLevel
||
!
"Access to a dart introduced after current level"
)
;
assert
(
m
->
vertexInsertionLevel
(
d
)
<=
m
->
m_curLevel
||
!
"Access to the embedding of a vertex inserted after current level"
)
;
unsigned
int
orbit
=
this
->
m_o
rbit
;
unsigned
int
orbit
=
this
->
getO
rbit
()
;
unsigned
int
nbSteps
=
m
->
m_curLevel
-
m
->
vertexInsertionLevel
(
d
)
;
unsigned
int
index
=
m
->
getEmbedding
(
d
,
orbit
)
;
...
...
include/Algo/Modelisation/subdivision.h
View file @
6346fca0
...
...
@@ -91,6 +91,12 @@ void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelec
template
<
typename
PFP
>
void
LoopSubdivision
(
typename
PFP
::
MAP
&
map
,
typename
PFP
::
TVEC3
&
position
,
const
FunctorSelect
&
selected
=
SelectorTrue
())
;
/**
* Reverse the orientation of the map
*/
template
<
typename
PFP
>
void
reverseOrientation
(
typename
PFP
::
MAP
&
map
)
;
/**
* Dual mesh computation
*/
...
...
include/Algo/Modelisation/subdivision.hpp
View file @
6346fca0
...
...
@@ -434,6 +434,24 @@ void LoopSubdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, cons
LoopSubdivision
<
PFP
,
typename
PFP
::
TVEC3
,
typename
PFP
::
VEC3
>
(
map
,
position
,
selected
)
;
}
template
<
typename
PFP
>
void
reverseOrientation
(
typename
PFP
::
MAP
&
map
)
{
AttributeHandler
<
unsigned
int
>
emb0
(
&
map
,
map
.
getEmbeddingAttributeVector
(
VERTEX_ORBIT
))
;
if
(
emb0
.
isValid
())
{
AttributeHandler
<
unsigned
int
>
new_emb0
=
map
.
template
addAttribute
<
unsigned
int
>(
DART_ORBIT
,
"new_EMB_0"
)
;
for
(
Dart
d
=
map
.
begin
();
d
!=
map
.
end
();
map
.
next
(
d
))
new_emb0
[
d
]
=
emb0
[
map
.
phi1
(
d
)]
;
map
.
template
swapAttributes
<
unsigned
int
>(
emb0
,
new_emb0
)
;
map
.
template
removeAttribute
<
unsigned
int
>(
new_emb0
)
;
}
AttributeHandler
<
Dart
>
phi1
=
map
.
template
getAttribute
<
Dart
>(
DART_ORBIT
,
"phi1"
)
;
AttributeHandler
<
Dart
>
phi_1
=
map
.
template
getAttribute
<
Dart
>(
DART_ORBIT
,
"phi_1"
)
;
map
.
template
swapAttributes
<
Dart
>(
phi1
,
phi_1
)
;
}
template
<
typename
PFP
>
void
computeDual
(
typename
PFP
::
MAP
&
map
,
const
FunctorSelect
&
selected
)
{
...
...
@@ -456,12 +474,14 @@ void computeDual(typename PFP::MAP& map, const FunctorSelect& selected)
map
.
template
removeAttribute
<
Dart
>(
new_phi_1
)
;
map
.
swapEmbeddingContainers
(
VERTEX_ORBIT
,
FACE_ORBIT
)
;
reverseOrientation
<
PFP
>
(
map
)
;
}
template
<
typename
PFP
>
void
Sqrt3Subdivision
(
typename
PFP
::
MAP
&
map
,
typename
PFP
::
TVEC3
&
position
,
const
FunctorSelect
&
selected
)
{
//
computeDual<PFP>(map, selected);
computeDual
<
PFP
>
(
map
,
selected
);
trianguleFaces
<
PFP
>
(
map
,
position
,
selected
);
}
...
...
include/Container/attributeContainer.hpp
View file @
6346fca0
...
...
@@ -292,8 +292,10 @@ AttributeMultiVector<T>* AttributeContainer::getDataVector(const std::string& at
inline
AttributeMultiVectorGen
*
AttributeContainer
::
getVirtualDataVector
(
const
std
::
string
&
attribName
)
{
unsigned
int
index
=
getAttributeIndex
(
attribName
)
;
assert
(
index
!=
UNKNOWN
)
;
return
m_tableAttribs
[
index
];
if
(
index
==
UNKNOWN
)
return
NULL
;
else
return
m_tableAttribs
[
index
];
}
template
<
typename
T
>
...
...
include/Topology/generic/attribmap.hpp
View file @
6346fca0
...
...
@@ -44,7 +44,6 @@ inline bool AttribMap::removeAttribute(AttributeHandler<T>& attr)
template
<
typename
T
>
inline
AttributeHandler
<
T
>
AttribMap
::
getAttribute
(
unsigned
int
orbit
,
const
std
::
string
&
nameAttr
)
{
assert
(
isOrbitEmbedded
(
orbit
)
||
!
"Invalid parameter: orbit not embedded"
);
AttributeMultiVector
<
T
>*
amv
=
m_attribs
[
orbit
].
getDataVector
<
T
>
(
nameAttr
)
;
return
AttributeHandler
<
T
>
(
this
,
amv
)
;
}
...
...
@@ -77,7 +76,6 @@ inline bool AttribMap::copyAttribute(AttributeHandler<T>& dst, AttributeHandler<
inline
unsigned
int
AttribMap
::
getNbCells
(
unsigned
int
orbit
)
{
assert
(
isOrbitEmbedded
(
orbit
)
||
!
"Invalid parameter: orbit not embedded"
);
return
this
->
m_attribs
[
orbit
].
size
()
;
}
...
...
@@ -88,7 +86,6 @@ inline unsigned int AttribMap::getNbCells(unsigned int orbit)
inline
AttributeMultiVector
<
Dart
>*
AttribMap
::
addRelation
(
const
std
::
string
&
name
)
{
AttributeContainer
&
cont
=
m_attribs
[
DART_ORBIT
]
;
AttributeMultiVector
<
Dart
>*
amv
=
cont
.
addAttribute
<
Dart
>
(
name
)
;
// set new relation to fix point for all the darts of the map
...
...
include/Topology/generic/attributeHandler.h
View file @
6346fca0
...
...
@@ -43,8 +43,6 @@ namespace CGoGN
template
<
typename
T
>
class
AttributeHandler
{
friend
class
AttribMap
;
protected:
// we need the map to use dart as index
GenericMap
*
m_map
;
...
...
@@ -52,19 +50,17 @@ protected:
// access to the data
AttributeMultiVector
<
T
>*
m_attrib
;
protected:
public:
typedef
T
DATA_TYPE
;
/**
* Constructor
* @param m the map which belong attribute
* @param orbit orbit of attribute
* @param orbit index of attribute
* @param amv a pointer to the AttributeMultiVector
*/
AttributeHandler
(
GenericMap
*
m
,
AttributeMultiVector
<
T
>*
amv
)
;
public:
typedef
T
DATA_TYPE
;
AttributeHandler
()
:
m_map
(
NULL
),
m_attrib
(
NULL
)
{}
AttributeHandler
()
;
/**
* Copy constructor
...
...
include/Topology/generic/attributeHandler.hpp
View file @
6346fca0
...
...
@@ -30,6 +30,11 @@ AttributeHandler<T>::AttributeHandler(GenericMap* m, AttributeMultiVector<T>* am
m_map
(
m
),
m_attrib
(
amv
)
{}
template
<
typename
T
>
AttributeHandler
<
T
>::
AttributeHandler
()
:
m_map
(
NULL
),
m_attrib
(
NULL
)
{}
template
<
typename
T
>
AttributeHandler
<
T
>::
AttributeHandler
(
const
AttributeHandler
<
T
>&
ta
)
:
m_map
(
ta
.
m_map
),
m_attrib
(
ta
.
m_attrib
)
...
...
@@ -79,9 +84,9 @@ const std::string& AttributeHandler<T>::name() const
template
<
typename
T
>
bool
AttributeHandler
<
T
>::
isValid
()
const
{
return
(
m_map
!
=
NULL
&&
m_attrib
!
=
NULL
&&
m_attrib
->
getIndex
()
!
=
AttributeContainer
::
UNKNOWN
)
;
return
!
(
m_map
=
=
NULL
||
m_attrib
=
=
NULL
||
m_attrib
->
getIndex
()
=
=
AttributeContainer
::
UNKNOWN
)
;
}
template
<
typename
T
>
...
...
include/Topology/generic/genericmap.h
View file @
6346fca0
...
...
@@ -84,7 +84,7 @@ protected:
*/
AttributeContainer
m_attribs
[
NB_ORBITS
]
;
static
std
::
map
<
std
::
string
,
RegisteredBaseAttribute
*
>*
m_attributes_registry_map
;
static
std
::
map
<
std
::
string
,
RegisteredBaseAttribute
*>*
m_attributes_registry_map
;
/**
* Direct access to the Dart attributes that store the orbits embeddings
...
...
@@ -272,17 +272,16 @@ protected:
* @param orbit the orbit of cell to use (xxx_ORBIT)
* @return the marker to use
*/
Marker
getNewMarker
(
unsigned
int
cell
=
DART_ORBIT
,
unsigned
int
thread
=
0
);
Marker
getNewMarker
(
unsigned
int
cell
=
DART_ORBIT
,
unsigned
int
thread
=
0
);
/**
* release a marker of cell.
* @param m the marker to release
*/
void
releaseMarker
(
Marker
m
,
unsigned
int
thread
=
0
);
void
releaseMarker
(
Marker
m
,
unsigned
int
thread
=
0
);
/****************************************
* THREAD MANAGEMENT *
*
THREAD MANAGEMENT
*
****************************************/
public:
/**
...
...
@@ -304,7 +303,6 @@ public:
*/
void
removeThreadMarker
(
unsigned
int
nb
);
/****************************************
* SAVE & LOAD *
****************************************/
...
...
@@ -384,13 +382,13 @@ public:
* @param d a dart of the orbit
* @param f a functor obj
*/
bool
foreach_dart_of_orbit
(
unsigned
int
orbit
,
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
);
bool
foreach_dart_of_orbit
(
unsigned
int
orbit
,
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
);
virtual
bool
foreach_dart_of_vertex
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_edge
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_face
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_volume
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_cc
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_vertex
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_edge
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_face
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_volume
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
virtual
bool
foreach_dart_of_cc
(
Dart
d
,
FunctorType
&
f
,
unsigned
int
thread
=
0
)
=
0
;
/**
* execute functor for each orbit
...
...
@@ -398,7 +396,7 @@ public:
* @param f the functor
* @param good the selector of darts
*/
bool
foreach_orbit
(
unsigned
int
orbit
,
FunctorType
&
f
,
const
FunctorSelect
&
good
=
SelectorTrue
(),
unsigned
int
thread
=
0
);
bool
foreach_orbit
(
unsigned
int
orbit
,
FunctorType
&
f
,
const
FunctorSelect
&
good
=
SelectorTrue
(),
unsigned
int
thread
=
0
);
//! Count the number of orbits of dimension dim in the map
/*! @param dim the dimension of the orbit
...
...
include/Topology/generic/genericmap.hpp
View file @
6346fca0
...
...
@@ -242,9 +242,7 @@ inline void GenericMap::swapEmbeddingContainers(unsigned int orbit1, unsigned in
m_attribs
[
orbit1
].
setOrbit
(
orbit1
)
;
// to update the orbit information
m_attribs
[
orbit2
].
setOrbit
(
orbit2
)
;
// in the contained AttributeMultiVectors
AttributeMultiVector
<
unsigned
int
>*
e
=
m_embeddings
[
orbit1
]
;
m_embeddings
[
orbit1
]
=
m_embeddings
[
orbit2
]
;
m_embeddings
[
orbit2
]
=
e
;
m_embeddings
[
orbit1
]
->
swap
(
m_embeddings
[
orbit2
])
;
for
(
unsigned
int
t
=
0
;
t
<
m_nbThreads
;
++
t
)
{
...
...
include/Topology/map/map2.h
View file @
6346fca0
...
...
@@ -235,13 +235,6 @@ public:
* @param marker
*/
void
closeMap
(
DartMarker
&
marker
);
// TODO a mettre en algo
/**
* Reverse orientation of map (reverse orientation of all faces)
* no dart created, each dart keeps its embedding, only changing phi1 and phi2
*/
void
reverseOrientation
();
//@}
/*! @name Topological Queries
...
...
src/Container/attributeContainer.cpp
View file @
6346fca0
...
...
@@ -125,8 +125,7 @@ const std::string& AttributeContainer::getAttributeName(unsigned int index)
assert
(
index
<
m_tableAttribs
.
size
()
||
!
"getAttributeName: attribute index out of bounds"
);
assert
(
m_tableAttribs
[
index
]
!=
NULL
||
!
"getAttributeName: attribute does not exist"
);
if
(
m_tableAttribs
[
index
]
!=
NULL
)
return
m_tableAttribs
[
index
]
->
getName
()
;
return
m_tableAttribs
[
index
]
->
getName
()
;
}
template
<
typename
T
>
...
...
src/Topology/generic/attribmap.cpp
View file @
6346fca0
...
...
@@ -56,7 +56,9 @@ void AttribMap::addEmbedding(unsigned int orbit)
AttributeContainer
&
cellCont
=
m_attribs
[
orbit
];
for
(
unsigned
int
t
=
0
;
t
<
m_nbThreads
;
++
t
)
{
AttributeMultiVector
<
Mark
>*
amvMark
=
cellCont
.
addAttribute
<
Mark
>
(
"Mark"
)
;
std
::
stringstream
ss
;
ss
<<
"Mark_"
<<
t
;
AttributeMultiVector
<
Mark
>*
amvMark
=
cellCont
.
addAttribute
<
Mark
>
(
ss
.
str
())
;
m_markerTables
[
orbit
][
t
]
=
amvMark
;
}
}
...
...
src/Topology/generic/genericmap.cpp
View file @
6346fca0
...
...
@@ -33,8 +33,7 @@ namespace CGoGN
std
::
map
<
std
::
string
,
RegisteredBaseAttribute
*>*
GenericMap
::
m_attributes_registry_map
=
NULL
;
GenericMap
::
GenericMap
()
:
m_nbThreads
(
1
)
GenericMap
::
GenericMap
()
:
m_nbThreads
(
1
)
{
if
(
m_attributes_registry_map
==
NULL
)
m_attributes_registry_map
=
new
std
::
map
<
std
::
string
,
RegisteredBaseAttribute
*>
;
...
...
@@ -114,7 +113,6 @@ void GenericMap::setDartEmbedding(unsigned int orbit, Dart d, unsigned int emb)
(
*
m_embeddings
[
orbit
])[
d
.
index
]
=
emb
;
}
/****************************************
* ATTRIBUTES MANAGEMENT *
****************************************/
...
...
@@ -150,6 +148,58 @@ bool GenericMap::registerAttribute(const std::string &nameType)
return
true
;
}
/****************************************
* THREAD MANAGEMENT *
****************************************/
void
GenericMap
::
addThreadMarker
(
unsigned
int
nb
)
{
unsigned
int
th
;
for
(
unsigned
int
j
=
0
;
j
<
nb
;
++
j
)
{
th
=
m_nbThreads
;
m_nbThreads
++
;
for
(
unsigned
int
i
=
0
;
i
<
NB_ORBITS
;
++
i
)
{
if
(
isOrbitEmbedded
(
i
))
{
std
::
stringstream
ss
;
ss
<<
"Mark_"
<<
th
;
AttributeContainer
&
cellCont
=
m_attribs
[
i
]
;
AttributeMultiVector
<
Mark
>*
amvMark
=
cellCont
.
addAttribute
<
Mark
>
(
ss
.
str
())
;
m_markerTables
[
i
][
th
]
=
amvMark
;
}
}
}
}
unsigned
int
GenericMap
::
getNbThreadMarkers
()
{
return
m_nbThreads
;
}
void
GenericMap
::
removeThreadMarker
(
unsigned
int
nb
)
{
unsigned
int
th
=
0
;
while
((
m_nbThreads
>
1
)
&&
(
nb
>
0
))
{
th
=
--
m_nbThreads
;
--
nb
;
for
(
unsigned
int
i
=
0
;
i
<
NB_ORBITS
;
++
i
)
{
if
(
isOrbitEmbedded
(
i
))
{
std
::
stringstream
ss
;
ss
<<
"Mark_"
<<
th
;
AttributeContainer
&
cellCont
=
m_attribs
[
i
]
;
cellCont
.
removeAttribute
(
ss
.
str
())
;
m_markerTables
[
i
][
th
]
=
NULL
;
}
}
}
}
/****************************************
* SAVE & LOAD *
...
...
@@ -464,7 +514,6 @@ bool GenericMap::loadMapBin(const std::string& filename)
return
true
;
}
/****************************************
* DARTS TRAVERSALS *
****************************************/
...
...
@@ -524,55 +573,4 @@ unsigned int GenericMap::getNbOrbits(unsigned int orbit, const FunctorSelect& go
return
fcount
.
getNb
();
}
void
GenericMap
::
addThreadMarker
(
unsigned
int
nb
)
{
unsigned
int
th
;
for
(
unsigned
int
j
=
0
;
j
<
nb
;
++
j
)
{
th
=
m_nbThreads
;
m_nbThreads
++
;
for
(
unsigned
int
i
=
0
;
i
<
NB_ORBITS
;
++
i
)
{
if
(
isOrbitEmbedded
(
i
))
{
AttributeContainer
&
cellCont
=
m_attribs
[
i
]
;
std
::
stringstream
ss
;
ss
<<
"Mark_"
<<
th
;
AttributeMultiVector
<
Mark
>*
amvMark
=
cellCont
.
addAttribute
<
Mark
>
(
ss
.
str
())
;
m_markerTables
[
i
][
th
]
=
amvMark
;
}
}
}
}
unsigned
int
GenericMap
::
getNbThreadMarkers
()
{
return
m_nbThreads
;
}
void
GenericMap
::
removeThreadMarker
(
unsigned
int
nb
)
{
unsigned
int
th
=
0
;
while
((
m_nbThreads
>
1
)
&&
(
nb
>
0
))
{
th
=
--
m_nbThreads
;
--
nb
;
for
(
unsigned
int
i
=
0
;
i
<
NB_ORBITS
;
++
i
)
{
if
(
isOrbitEmbedded
(
i
))
{
AttributeContainer
&
cellCont
=
m_attribs
[
i
]
;
std
::
stringstream
ss
;
ss
<<
"Mark_"
<<
th
;
cellCont
.
removeAttribute
(
ss
.
str
())
;
m_markerTables
[
i
][
th
]
=
NULL
;
}
}
}
}
}
// namespace CGoGN
src/Topology/map/map2.cpp
View file @
6346fca0
...
...
@@ -353,46 +353,6 @@ void Map2::closeMap(DartMarker& marker)
}
}
void
Map2
::
reverseOrientation
()
{
DartMarkerNoUnmark
mf
(
*
this
);
// reverse all faces (only phi1 is modified)
for
(
Dart
d
=
begin
();
d
!=
end
();
next
(
d
))
{
if
(
!
mf
.
isMarked
(
d
))
{
reverseFace
(
d
);
mf
.
markOrbit
(
FACE_ORBIT
,
d
);
}
}
// store all new phi2
std
::
vector
<
Dart
>
vd
;
vd
.
reserve
(
getNbDarts
());
for
(
Dart
d
=
begin
();
d
!=
end
();
next
(
d
))
{
Dart
e
=
phi_1
(
phi2
(
phi1
(
d
)));
vd
.
push_back
(
e
);
}
// apply the phi2sew with stored phi2 on all darts
std
::
vector
<
Dart
>::
iterator
id
=
vd
.
begin
();
for
(
Dart
d
=
begin
();
d
!=
end
();
next
(
d
),
++
id
)
{
if
(
mf
.
isMarked
(
d
))
{
mf
.
unmark
(
d
);
// unmark the two darts
mf
.
unmark
(
*
id
);
if
(
phi2
(
d
)
!=
d
)
phi2unsew
(
d
);
// unsew the two darts if necessary
if
(
phi2
(
*
id
)
!=
*
id
)
phi2unsew
(
*
id
);
phi2sew
(
d
,
*
id
);
// sew the darts
}
}
}
/*! @name Topological Queries
* Return or set various topological information
*************************************************************************/
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment