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
Etienne Schmitt
CGoGN
Commits
10c7d948
Commit
10c7d948
authored
Feb 11, 2011
by
Pierre Kraemer
Browse files
ImplicitMaps -> simplification coarsenEdge + collapseEdge retourne un brin du sommet résultat
parent
44019bb7
Changes
10
Hide whitespace changes
Inline
Side-by-side
include/Algo/ImplicitHierarchicalMesh/ihm.hpp
View file @
10c7d948
...
...
@@ -333,6 +333,10 @@ inline unsigned int ImplicitHierarchicalMap::edgeLevel(Dart d)
return
ld
<
ldd
?
ldd
:
ld
;
// insertion levels of its two darts
}
/***************************************************
* ATTRIBUTE HANDLER *
***************************************************/
template
<
typename
T
>
T
&
AttributeHandler_IHM
<
T
>::
operator
[](
Dart
d
)
{
...
...
include/Algo/ImplicitHierarchicalMesh/subdivision.hpp
View file @
10c7d948
...
...
@@ -149,11 +149,9 @@ void coarsenEdge(typename PFP::MAP& map, Dart d, typename PFP::TVEC3& position)
unsigned
int
cur
=
map
.
getCurrentLevel
()
;
Dart
d2
=
map
.
phi2
(
d
)
;
map
.
setCurrentLevel
(
cur
+
1
)
;
map
.
unsewFaces
(
d
)
;
map
.
unsewFaces
(
d2
)
;
map
.
collapseEdge
(
map
.
phi1
(
d
))
;
map
.
collapseEdge
(
map
.
phi1
(
d2
))
;
map
.
sewFaces
(
d
,
d2
)
;
unsigned
int
dl
=
map
.
getDartLevel
(
d2
)
;
map
.
setDartLevel
(
map
.
phi1
(
d2
),
dl
)
;
map
.
collapseEdge
(
d2
)
;
map
.
setCurrentLevel
(
cur
)
;
}
...
...
include/Container/attribmv.hpp
View file @
10c7d948
...
...
@@ -173,13 +173,13 @@ void AttribMultiVect<T>::addBlock()
template
<
typename
T
>
void
AttribMultiVect
<
T
>::
initElt
(
unsigned
int
id
)
{
m_tableData
[
id
/
_BLOCKSIZE_
][
id
%
_BLOCKSIZE_
]
=
T
(
0
);
m_tableData
[
id
/
_BLOCKSIZE_
][
id
%
_BLOCKSIZE_
]
=
T
(
0
);
}
template
<
typename
T
>
void
AttribMultiVect
<
T
>::
copyElt
(
unsigned
int
dst
,
unsigned
int
src
)
{
m_tableData
[
dst
/
_BLOCKSIZE_
][
dst
%
_BLOCKSIZE_
]
=
m_tableData
[
src
/
_BLOCKSIZE_
][
src
%
_BLOCKSIZE_
];
m_tableData
[
dst
/
_BLOCKSIZE_
][
dst
%
_BLOCKSIZE_
]
=
m_tableData
[
src
/
_BLOCKSIZE_
][
src
%
_BLOCKSIZE_
];
}
template
<
typename
T
>
...
...
@@ -192,7 +192,6 @@ void AttribMultiVect<T>::setNbBlocks(unsigned int nbb)
// T* ptr = new T[_BLOCKSIZE_];
// m_tableData.push_back( ptr );
addBlock
();
}
}
else
...
...
include/Topology/generic/embeddedMap2.h
View file @
10c7d948
...
...
@@ -76,7 +76,7 @@ public:
* See 'collapseDegeneratedFace' to see what can happen to edges attributes
* Nothing has to be done for the faces (some degenerate ones can be deleted)
*/
virtual
void
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
=
true
)
;
virtual
Dart
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
=
true
)
;
/**
* No cell is created or deleted
...
...
include/Topology/generic/embeddedMap2.hpp
View file @
10c7d948
...
...
@@ -184,22 +184,22 @@ bool EmbeddedMap2<MAP2>::edgeCanCollapse(Dart d)
}
template
<
typename
MAP2
>
void
EmbeddedMap2
<
MAP2
>::
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
)
Dart
EmbeddedMap2
<
MAP2
>::
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
)
{
Dart
dPrev2
=
MAP2
::
phi2
(
MAP2
::
phi_1
(
d
))
;
unsigned
int
vEmb
=
EMBNULL
;
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
vEmb
=
MAP2
::
getEmbedding
(
d
,
VERTEX_ORBIT
)
;
}
MAP2
::
collapseEdge
(
d
,
delDegenerateFaces
);
Dart
dV
=
MAP2
::
collapseEdge
(
d
,
delDegenerateFaces
);
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
MAP2
::
embedOrbit
(
VERTEX_ORBIT
,
d
Prev2
,
vEmb
)
;
MAP2
::
embedOrbit
(
VERTEX_ORBIT
,
d
V
,
vEmb
)
;
}
return
dV
;
}
template
<
typename
MAP2
>
...
...
include/Topology/gmap/gmap2.h
View file @
10c7d948
...
...
@@ -120,8 +120,9 @@ public:
* was the only link between two border faces
* @param d a dart in the deleted edge
* @param delDegenerateFaces a boolean (default to true)
* @return a dart of the resulting vertex
*/
virtual
void
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
);
virtual
Dart
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
);
/**
* Flip the edge of d. (rotation in phi1 order)
...
...
include/Topology/map/map2.h
View file @
10c7d948
...
...
@@ -132,14 +132,15 @@ public:
//! Collapse an edge (that is deleted) possibly merging its vertices
/*! If delDegenerateFaces is true, the method checks that no degenerate
* faces are buil
d
(faces with less than 3 edges). If it occurs the faces
* faces are buil
t
(faces with less than 3 edges). If it occurs the faces
* are deleted and the adjacencies are updated (see collapseDegeneratedFace).
* \warning This may produce two distinct vertices if the edge
* was the only link between two border faces
* @param d a dart in the deleted edge
* @param delDegenerateFaces a boolean (default to true)
* @return a dart of the resulting vertex
*/
virtual
void
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
=
true
);
virtual
Dart
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
=
true
);
/**
* Flip the edge of d. (rotation in phi1 order)
...
...
src/Algo/ImplicitHierarchicalMesh/ihm.cpp
View file @
10c7d948
...
...
@@ -147,8 +147,13 @@ unsigned int ImplicitHierarchicalMap::faceLevel(Dart d)
++
nbSubd
;
// is treated here
it
=
phi1
(
it
)
;
}
while
(
m_edgeId
[
it
]
==
eId
)
;
// fLevel -= (unsigned int)(log2(nbSubd)) ; // PB WINDOWS log2 n'existe pas sous Visual 2010 !!
fLevel
-=
(
unsigned
int
)(
log
((
double
)
nbSubd
)
/
log
(
2.0
))
;
while
(
nbSubd
>
1
)
{
nbSubd
/=
2
;
--
fLevel
;
}
m_curLevel
=
cur
;
return
fLevel
;
...
...
src/Topology/gmap/gmap2.cpp
View file @
10c7d948
...
...
@@ -86,14 +86,24 @@ void GMap2::cutEdge(Dart d)
}
}
void
GMap2
::
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
=
true
)
Dart
GMap2
::
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
=
true
)
{
Dart
f
;
// A dart in the face to check
Dart
e
=
phi2
(
d
);
// Test if an opposite edge exists
if
(
e
!=
d
)
Dart
resV
;
Dart
e
=
phi2
(
d
);
if
(
e
!=
d
)
// Test if an opposite edge exists
{
f
=
phi1
(
e
);
// A dart in the face of e
phi2unsew
(
d
);
// Unlink the opposite edges
phi2unsew
(
d
);
// Unlink the opposite edges
Dart
f
=
phi1
(
e
)
;
Dart
g
=
phi_1
(
e
)
;
if
(
!
isFaceTriangle
(
e
))
resV
=
f
;
else
if
(
phi2
(
g
)
!=
g
)
resV
=
phi2
(
g
)
;
else
if
(
phi2
(
f
)
!=
f
)
resV
=
phi1
(
phi2
(
f
))
;
if
(
f
!=
e
&&
delDegenerateFaces
)
{
GMap1
::
collapseEdge
(
e
);
// Collapse edge e
...
...
@@ -102,7 +112,20 @@ void GMap2::collapseEdge(Dart d, bool delDegenerateFaces = true)
else
GMap1
::
collapseEdge
(
e
);
// Just collapse edge e
}
f
=
phi1
(
d
);
// A dart in the face of d
Dart
f
=
phi1
(
d
)
;
Dart
g
=
phi_1
(
d
)
;
if
(
resV
==
Dart
::
nil
())
{
if
(
!
isFaceTriangle
(
d
))
resV
=
f
;
else
if
(
phi2
(
g
)
!=
g
)
resV
=
phi2
(
g
)
;
else
if
(
phi2
(
f
)
!=
f
)
resV
=
phi1
(
phi2
(
f
))
;
}
if
(
f
!=
d
&&
delDegenerateFaces
)
{
GMap1
::
collapseEdge
(
d
);
// Collapse edge d
...
...
@@ -110,6 +133,8 @@ void GMap2::collapseEdge(Dart d, bool delDegenerateFaces = true)
}
else
GMap1
::
collapseEdge
(
d
);
// Just collapse edge d
return
resV
;
}
bool
GMap2
::
flipEdge
(
Dart
d
)
...
...
src/Topology/map/map2.cpp
View file @
10c7d948
...
...
@@ -88,14 +88,24 @@ void Map2::cutEdge(Dart d)
}
}
void
Map2
::
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
)
Dart
Map2
::
collapseEdge
(
Dart
d
,
bool
delDegenerateFaces
)
{
Dart
f
;
// A dart in the face to check
Dart
e
=
phi2
(
d
);
// Test if an opposite edge exists
if
(
e
!=
d
)
Dart
resV
;
Dart
e
=
phi2
(
d
);
if
(
e
!=
d
)
// Test if an opposite edge exists
{
f
=
phi1
(
e
);
// A dart in the face of e
phi2unsew
(
d
);
// Unlink the opposite edges
phi2unsew
(
d
);
// Unlink the opposite edges
Dart
f
=
phi1
(
e
)
;
Dart
g
=
phi_1
(
e
)
;
if
(
!
isFaceTriangle
(
e
))
resV
=
f
;
else
if
(
phi2
(
g
)
!=
g
)
resV
=
phi2
(
g
)
;
else
if
(
phi2
(
f
)
!=
f
)
resV
=
phi1
(
phi2
(
f
))
;
if
(
f
!=
e
&&
delDegenerateFaces
)
{
Map1
::
collapseEdge
(
e
);
// Collapse edge e
...
...
@@ -104,7 +114,20 @@ void Map2::collapseEdge(Dart d, bool delDegenerateFaces)
else
Map1
::
collapseEdge
(
e
);
// Just collapse edge e
}
f
=
phi1
(
d
);
// A dart in the face of d
Dart
f
=
phi1
(
d
)
;
Dart
g
=
phi_1
(
d
)
;
if
(
resV
==
Dart
::
nil
())
{
if
(
!
isFaceTriangle
(
d
))
resV
=
f
;
else
if
(
phi2
(
g
)
!=
g
)
resV
=
phi2
(
g
)
;
else
if
(
phi2
(
f
)
!=
f
)
resV
=
phi1
(
phi2
(
f
))
;
}
if
(
f
!=
d
&&
delDegenerateFaces
)
{
Map1
::
collapseEdge
(
d
);
// Collapse edge d
...
...
@@ -112,6 +135,8 @@ void Map2::collapseEdge(Dart d, bool delDegenerateFaces)
}
else
Map1
::
collapseEdge
(
d
);
// Just collapse edge d
return
resV
;
}
bool
Map2
::
flipEdge
(
Dart
d
)
...
...
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