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
David Cazier
CGoGN
Commits
a5d7e670
Commit
a5d7e670
authored
Feb 14, 2011
by
Kenneth Vanhoey
Browse files
Merge branch 'master' of cgogn:~kraemer/CGoGN
parents
c260a5b8
ce36e5a4
Changes
10
Hide whitespace changes
Inline
Side-by-side
include/Algo/ImplicitHierarchicalMesh/ihm.hpp
View file @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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 @
a5d7e670
...
...
@@ -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
(
f
!=
d
&&
!
isFaceTriangle
(
e
))
resV
=
f
;
else
if
(
phi2
(
g
)
!=
g
)
resV
=
phi2
(
g
)
;
else
if
(
f
!=
d
&&
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 @
a5d7e670
...
...
@@ -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
(
f
!=
d
&&
!
isFaceTriangle
(
e
))
resV
=
f
;
else
if
(
phi2
(
g
)
!=
g
)
resV
=
phi2
(
g
)
;
else
if
(
f
!=
d
&&
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