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
Thomas Pitiot
CGoGN
Commits
ef05a9fd
Commit
ef05a9fd
authored
Mar 07, 2011
by
Pierre Kraemer
Browse files
IHM -> ajout simplif subdivision triangles + corrections
parent
7ceecc0e
Changes
4
Hide whitespace changes
Inline
Side-by-side
include/Algo/ImplicitHierarchicalMesh/ihm.hpp
View file @
ef05a9fd
...
...
@@ -347,11 +347,10 @@ T& AttributeHandler_IHM<T>::operator[](Dart d)
unsigned
int
nbSteps
=
m
->
m_curLevel
-
m
->
vertexInsertionLevel
(
d
)
;
unsigned
int
index
=
m
->
getEmbedding
(
d
,
orbit
)
;
if
(
index
==
EMBNULL
&&
nbSteps
==
0
)
if
(
index
==
EMBNULL
)
{
index
=
m
->
embedNewCell
(
orbit
,
d
)
;
m
->
m_nextLevelCell
[
orbit
]
->
operator
[](
index
)
=
EMBNULL
;
return
this
->
m_attrib
->
operator
[](
index
);
}
AttributeContainer
&
cont
=
m
->
getAttributeContainer
(
orbit
)
;
...
...
include/Algo/ImplicitHierarchicalMesh/subdivision.hpp
View file @
ef05a9fd
...
...
@@ -162,13 +162,39 @@ void coarsenFace(typename PFP::MAP& map, Dart d, typename PFP::TVEC3& position)
assert
(
map
.
faceIsSubdividedOnce
(
d
)
||
!
"Trying to coarsen a non-subdivided face or a more than once subdivided face"
)
;
unsigned
int
cur
=
map
.
getCurrentLevel
()
;
map
.
setCurrentLevel
(
cur
+
1
)
;
Dart
cv
=
map
.
phi1
(
map
.
phi1
(
d
))
;
map
.
setCurrentLevel
(
map
.
getMaxLevel
())
;
map
.
deleteVertex
(
cv
)
;
map
.
setCurrentLevel
(
cur
)
;
unsigned
int
degree
=
0
;
Dart
fit
=
d
;
do
{
++
degree
;
fit
=
map
.
phi1
(
fit
)
;
}
while
(
fit
!=
d
)
;
if
(
degree
==
3
)
{
fit
=
d
;
do
{
map
.
setCurrentLevel
(
cur
+
1
)
;
Dart
innerEdge
=
map
.
phi1
(
fit
)
;
map
.
setCurrentLevel
(
map
.
getMaxLevel
())
;
map
.
mergeFaces
(
innerEdge
)
;
map
.
setCurrentLevel
(
cur
)
;
fit
=
map
.
phi1
(
fit
)
;
}
while
(
fit
!=
d
)
;
}
else
{
map
.
setCurrentLevel
(
cur
+
1
)
;
Dart
centralV
=
map
.
phi1
(
map
.
phi1
(
d
))
;
map
.
setCurrentLevel
(
map
.
getMaxLevel
())
;
map
.
deleteVertex
(
centralV
)
;
map
.
setCurrentLevel
(
cur
)
;
}
fit
=
d
;
do
{
if
(
map
.
edgeCanBeCoarsened
(
fit
))
coarsenEdge
<
PFP
>
(
map
,
fit
,
position
)
;
...
...
include/Topology/generic/embeddedMap2.hpp
View file @
ef05a9fd
...
...
@@ -397,17 +397,31 @@ template <typename MAP2>
bool
EmbeddedMap2
<
MAP2
>::
mergeFaces
(
Dart
d
)
{
Dart
dNext
=
MAP2
::
phi1
(
d
)
;
Dart
e
=
MAP2
::
phi2
(
d
)
;
Dart
eNext
=
MAP2
::
phi1
(
e
)
;
unsigned
int
vEmb1
=
EMBNULL
;
unsigned
int
vEmb2
=
EMBNULL
;
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
vEmb1
=
MAP2
::
getDartEmbedding
(
VERTEX_ORBIT
,
d
)
;
vEmb2
=
MAP2
::
getDartEmbedding
(
VERTEX_ORBIT
,
e
)
;
}
unsigned
int
fEmb
=
EMBNULL
;
if
(
MAP2
::
isOrbitEmbedded
(
FACE_ORBIT
))
{
fEmb
=
MAP2
::
getEmbedding
(
d
,
FACE_ORBIT
)
;
if
(
fEmb
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
FACE_ORBIT
,
dNext
,
fEmb
)
;
}
if
(
MAP2
::
mergeFaces
(
d
))
{
if
(
MAP2
::
isOrbitEmbedded
(
VERTEX_ORBIT
))
{
if
(
vEmb1
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
eNext
,
vEmb1
)
;
if
(
vEmb2
!=
EMBNULL
)
MAP2
::
setDartEmbedding
(
VERTEX_ORBIT
,
dNext
,
vEmb2
)
;
}
if
(
MAP2
::
isOrbitEmbedded
(
FACE_ORBIT
))
{
MAP2
::
embedOrbit
(
FACE_ORBIT
,
dNext
,
fEmb
)
;
...
...
src/Algo/ImplicitHierarchicalMesh/ihm.cpp
View file @
ef05a9fd
...
...
@@ -284,7 +284,7 @@ bool ImplicitHierarchicalMap::faceIsSubdividedOnce(Dart d)
++
m_curLevel
;
Dart
cf
=
phi2
(
phi1
(
d
))
;
++
m_curLevel
;
if
(
m_dartLevel
[
phi1
(
d
)]
==
m_curLevel
&&
m_edgeId
[
phi1
(
d
)]
!=
m_edgeId
[
d
])
if
(
m_dartLevel
[
phi1
(
cf
)]
==
m_curLevel
&&
m_edgeId
[
phi1
(
cf
)]
!=
m_edgeId
[
cf
])
subdOnce
=
false
;
--
m_curLevel
;
--
m_curLevel
;
...
...
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