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
KennethVanhoey
CGoGN
Commits
a119b8e3
Commit
a119b8e3
authored
Jan 29, 2014
by
untereiner
Browse files
changes to MRDAT import and ihm2 management (introducing CPH edge tagging)
parent
e64e829b
Changes
12
Hide whitespace changes
Inline
Side-by-side
include/Algo/Import/importMRDAT.h
View file @
a119b8e3
...
...
@@ -101,6 +101,7 @@ public:
unsigned
int
newEmb
=
vID
[
children
[
0
]
->
indices
[
idx
]]
;
if
(
oldEmb
==
EMBNULL
)
{
//std::cout << "oldEmb == NULL"<< std::endl;
map
.
template
setOrbitEmbedding
<
VERTEX
>(
dd
,
newEmb
)
;
map
.
pushLevel
()
;
for
(
unsigned
int
i
=
map
.
getCurrentLevel
()
+
1
;
i
<=
map
.
getMaxLevel
();
++
i
)
...
...
@@ -111,11 +112,16 @@ public:
map
.
popLevel
()
;
}
else
{
//std::cout << "oldEmb != NULL"<< std::endl;
assert
(
oldEmb
==
newEmb
)
;
}
map
.
decCurrentLevel
()
;
it
=
next
;
}
while
(
it
!=
d
)
;
//embed the 4 children (begin with the center child)
map
.
incCurrentLevel
()
;
Dart
d0
=
map
.
phi2
(
map
.
phi1
(
d
))
;
children
[
0
]
->
embed
<
PFP
>
(
map
,
d0
,
vID
)
;
...
...
@@ -155,6 +161,7 @@ public:
std
::
vector
<
QuadTreeNode
*>
roots
;
std
::
vector
<
Dart
>
darts
;
std
::
vector
<
unsigned
int
>
verticesID
;
unsigned
int
depth
;
~
QuadTree
()
{
...
...
include/Algo/Import/importMRDAT.hpp
View file @
a119b8e3
...
...
@@ -77,7 +77,8 @@ bool importMRDAT(typename PFP::MAP& map, const std::string& filename, std::vecto
std
::
stringstream
oss
(
line
)
;
std
::
string
s
;
oss
>>
s
;
oss
>>
depth
;
oss
>>
qt
.
depth
;
depth
=
qt
.
depth
;
}
std
::
cout
<<
" MR depth -> "
<<
depth
<<
std
::
endl
;
...
...
@@ -253,19 +254,6 @@ bool importMRDAT(typename PFP::MAP& map, const std::string& filename, std::vecto
return
false
;
}
std
::
cout
<<
"..done"
<<
std
::
endl
;
std
::
cout
<<
" Create finer resolution levels.."
<<
std
::
flush
;
for
(
unsigned
int
i
=
0
;
i
<
depth
;
++
i
)
map
.
addNewLevel
(
false
)
;
std
::
cout
<<
"..done"
<<
std
::
endl
;
std
::
cout
<<
" Embed finer resolution levels.."
<<
std
::
flush
;
map
.
setCurrentLevel
(
0
)
;
qt
.
embed
<
PFP
>
(
map
)
;
map
.
setCurrentLevel
(
map
.
getMaxLevel
())
;
std
::
cout
<<
"..done"
<<
std
::
endl
;
return
true
;
...
...
include/Algo/Multiresolution/IHM2/ihm2_PrimalRegular.hpp
View file @
a119b8e3
...
...
@@ -39,8 +39,8 @@ namespace Regular
template
<
typename
PFP
>
IHM2
<
PFP
>::
IHM2
(
typename
PFP
::
MAP
&
map
)
:
m_map
(
map
),
shareVertexEmbeddings
(
true
)
m_map
(
map
),
shareVertexEmbeddings
(
true
)
{
}
...
...
@@ -49,109 +49,113 @@ IHM2<PFP>::IHM2(typename PFP::MAP& map) :
template
<
typename
PFP
>
void
IHM2
<
PFP
>::
addNewLevel
(
bool
triQuad
)
{
unsigned
int
cur
=
m_map
.
getCurrentLevel
()
;
//pushLevel
unsigned
int
cur
=
m_map
.
getCurrentLevel
()
;
//pushLevel
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
()
+
1
)
;
// cut edges
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
)
;
for
(
Dart
d
=
travE
.
begin
();
d
!=
travE
.
end
();
d
=
travE
.
next
())
{
Dart
dd
=
m_map
.
phi2
(
d
)
;
m_map
.
cutEdge
(
d
)
;
unsigned
int
eId
=
m_map
.
getEdgeId
(
d
)
;
m_map
.
setEdgeId
(
m_map
.
phi1
(
d
),
eId
)
;
m_map
.
setEdgeId
(
m_map
.
phi1
(
dd
),
eId
)
;
travE
.
skip
(
d
)
;
travE
.
skip
(
m_map
.
phi1
(
d
))
;
}
// split 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
)
;
m_map
.
decCurrentLevel
();
unsigned
int
degree
=
m_map
.
faceDegree
(
old
)
;
m_map
.
incCurrentLevel
();
if
((
degree
==
3
)
&&
triQuad
)
// if subdividing a triangle
{
Dart
dd
=
m_map
.
phi1
(
old
)
;
Dart
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
// insert a new edge
travF
.
skip
(
dd
)
;
unsigned
int
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
m_map
.
phi_1
(
dd
),
id
)
;
// set the edge id of the inserted
m_map
.
setEdgeId
(
m_map
.
phi_1
(
e
),
id
)
;
// edge to the next available id
dd
=
e
;
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
travF
.
skip
(
dd
)
;
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
m_map
.
phi_1
(
dd
),
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi_1
(
e
),
id
)
;
dd
=
e
;
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
travF
.
skip
(
dd
)
;
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
m_map
.
phi_1
(
dd
),
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi_1
(
e
),
id
)
;
travF
.
skip
(
e
)
;
}
else
// if subdividing a polygonal face
{
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
))
;
Dart
ne2
=
m_map
.
phi2
(
ne
)
;
m_map
.
cutEdge
(
ne
)
;
// cut the new edge to insert the central vertex
travF
.
skip
(
dd
)
;
unsigned
int
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
ne
,
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi2
(
ne
),
id
)
;
// set the edge id of the inserted
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
ne2
,
id
)
;
// edges to the next available ids
m_map
.
setEdgeId
(
m_map
.
phi2
(
ne2
),
id
)
;
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
)
;
Dart
nne
=
m_map
.
phi2
(
m_map
.
phi_1
(
dd
))
;
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
nne
,
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi2
(
nne
),
id
)
;
dd
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
}
travF
.
skip
(
ne
)
;
}
}
m_map
.
setCurrentLevel
(
cur
)
;
// cut edges
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
)
;
for
(
Dart
d
=
travE
.
begin
();
d
!=
travE
.
end
();
d
=
travE
.
next
())
{
Dart
dd
=
m_map
.
phi2
(
d
)
;
m_map
.
cutEdge
(
d
)
;
unsigned
int
eId
=
m_map
.
getEdgeId
(
d
)
;
m_map
.
setEdgeId
(
m_map
.
phi1
(
d
),
eId
)
;
m_map
.
setEdgeId
(
m_map
.
phi1
(
dd
),
eId
)
;
travE
.
skip
(
d
)
;
travE
.
skip
(
m_map
.
phi1
(
d
))
;
}
// split 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
)
;
m_map
.
decCurrentLevel
();
unsigned
int
degree
=
m_map
.
faceDegree
(
old
)
;
m_map
.
incCurrentLevel
();
if
((
degree
==
3
)
&&
triQuad
)
// if subdividing a triangle
{
Dart
dd
=
m_map
.
phi1
(
old
)
;
Dart
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
// insert a new edge
travF
.
skip
(
dd
)
;
//unsigned int id = m_map.getNewEdgeId() ;
unsigned
int
id
=
m_map
.
getTriRefinementEdgeId
(
m_map
.
phi_1
(
dd
));
m_map
.
setEdgeId
(
m_map
.
phi_1
(
dd
),
id
)
;
// set the edge id of the inserted
m_map
.
setEdgeId
(
m_map
.
phi_1
(
e
),
id
)
;
// edge to the next available id
dd
=
e
;
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
travF
.
skip
(
dd
)
;
//id = m_map.getNewEdgeId() ;
id
=
m_map
.
getTriRefinementEdgeId
(
m_map
.
phi_1
(
dd
));
m_map
.
setEdgeId
(
m_map
.
phi_1
(
dd
),
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi_1
(
e
),
id
)
;
dd
=
e
;
e
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
m_map
.
splitFace
(
dd
,
e
)
;
travF
.
skip
(
dd
)
;
//id = m_map.getNewEdgeId() ;
id
=
m_map
.
getTriRefinementEdgeId
(
m_map
.
phi_1
(
dd
));
m_map
.
setEdgeId
(
m_map
.
phi_1
(
dd
),
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi_1
(
e
),
id
)
;
travF
.
skip
(
e
)
;
}
else
// if subdividing a polygonal face
{
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
))
;
Dart
ne2
=
m_map
.
phi2
(
ne
)
;
m_map
.
cutEdge
(
ne
)
;
// cut the new edge to insert the central vertex
travF
.
skip
(
dd
)
;
//unsigned int id = m_map.getNewEdgeId() ;
unsigned
int
id
=
m_map
.
getQuadRefinementEdgeId
(
m_map
.
phi2
(
ne
));
m_map
.
setEdgeId
(
ne
,
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi2
(
ne
),
id
)
;
// set the edge id of the inserted
//id = m_map.getNewEdgeId() ;
id
=
m_map
.
getQuadRefinementEdgeId
(
ne2
);
m_map
.
setEdgeId
(
ne2
,
id
)
;
// edges to the next available ids
m_map
.
setEdgeId
(
m_map
.
phi2
(
ne2
),
id
)
;
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
)
;
Dart
nne
=
m_map
.
phi2
(
m_map
.
phi_1
(
dd
))
;
//id = m_map.getNewEdgeId() ;
id
=
m_map
.
getQuadRefinementEdgeId
(
m_map
.
phi2
(
nne
));
m_map
.
setEdgeId
(
nne
,
id
)
;
m_map
.
setEdgeId
(
m_map
.
phi2
(
nne
),
id
)
;
dd
=
m_map
.
phi1
(
m_map
.
phi1
(
dd
))
;
}
travF
.
skip
(
ne
)
;
}
}
m_map
.
setCurrentLevel
(
cur
)
;
}
template
<
typename
PFP
>
void
IHM2
<
PFP
>::
addLevelFront
()
{
DartMarker
md
(
m_map
);
std
::
vector
<
Dart
>
visitedVertices
;
visitedVertices
.
reserve
(
1024
);
std
::
vector
<
Dart
>
irregVertices
;
irregVertices
.
reserve
(
1024
);
//look for an irregular vertex
...
...
@@ -162,77 +166,154 @@ void IHM2<PFP>::addLevelFront()
if
(
m_map
.
vertexDegree
(
d
)
!=
6
)
{
found
=
true
;
visited
Vertices
.
push_back
(
d
);
irreg
Vertices
.
push_back
(
d
);
}
}
std
::
cout
<<
"d = "
<<
visitedVertices
[
0
]
<<
std
::
endl
;
//found the number of levels
bool
finished
=
false
;
Dart
dit
=
irregVertices
[
0
];
unsigned
int
nbSteps
=
0
;
do
{
dit
=
m_map
.
phi1
(
m_map
.
phi2
(
m_map
.
phi1
(
m_map
.
phi2
(
m_map
.
phi1
(
dit
)))));
++
nbSteps
;
if
(
m_map
.
vertexDegree
(
m_map
.
phi1
(
dit
))
!=
6
)
finished
=
true
;
}
while
(
!
finished
);
for
(
unsigned
int
i
=
0
;
i
<
visitedVertices
.
size
()
;
++
i
)
++
nbSteps
;
unsigned
int
nbLevel
=
0
;
while
(
nbSteps
>
1
)
{
Dart
d
=
visitedVertices
[
i
];
nbSteps
/=
2
;
++
nbLevel
;
}
m_map
.
setMaxLevel
(
nbLevel
);
std
::
cout
<<
"nb levels = "
<<
nbLevel
+
1
<<
std
::
endl
;
Traversor2VE
<
typename
PFP
::
MAP
>
tve
(
m_map
,
d
);
for
(
Dart
eit
=
tve
.
begin
()
;
eit
!=
tve
.
end
()
;
eit
=
tve
.
next
())
unsigned
int
curLevel
=
nbLevel
;
do
{
m_map
.
setCurrentLevel
(
curLevel
);
DartMarker
md
(
m_map
);
std
::
vector
<
Dart
>
visitedVertices
(
irregVertices
);
std
::
cout
<<
"getCurrentLevel = "
<<
m_map
.
getCurrentLevel
()
<<
std
::
endl
;
for
(
unsigned
int
i
=
0
;
i
<
visitedVertices
.
size
()
;
++
i
)
{
//coarse all faces around the vertex
if
(
!
md
.
isMarked
(
eit
))
{
unsigned
int
degree
=
m_map
.
faceDegree
(
eit
);
Dart
d
=
visitedVertices
[
i
];
if
(
degree
==
3
)
Traversor2VE
<
typename
PFP
::
MAP
>
tve
(
m_map
,
d
);
for
(
Dart
eit
=
tve
.
begin
()
;
eit
!=
tve
.
end
()
;
eit
=
tve
.
next
())
{
//coarse all faces around the vertex
if
(
!
md
.
isMarked
(
eit
))
{
Dart
fit1
=
m_map
.
phi2
(
m_map
.
phi1
(
eit
));
Dart
fit2
=
m_map
.
phi1
(
fit1
);
Dart
fit3
=
m_map
.
phi1
(
fit2
);
unsigned
int
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
fit1
,
id
)
;
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
fit2
,
id
)
;
id
=
m_map
.
getNewEdgeId
()
;
m_map
.
setEdgeId
(
fit3
,
id
)
;
md
.
markOrbit
<
FACE
>
(
fit1
);
md
.
markOrbit
<
FACE
>
(
m_map
.
phi2
(
fit2
));
md
.
markOrbit
<
FACE
>
(
m_map
.
phi2
(
fit3
));
md
.
markOrbit
<
FACE
>
(
eit
);
visitedVertices
.
push_back
(
m_map
.
phi_1
(
m_map
.
phi2
(
fit2
)));
visitedVertices
.
push_back
(
m_map
.
phi_1
(
m_map
.
phi2
(
fit3
)));
m_map
.
setDartLevel
(
fit1
,
curLevel
);
m_map
.
setDartLevel
(
m_map
.
phi2
(
fit1
),
curLevel
);
m_map
.
setDartLevel
(
m_map
.
phi1
(
m_map
.
phi2
(
fit1
)),
curLevel
);
m_map
.
setDartLevel
(
fit2
,
curLevel
);
m_map
.
setDartLevel
(
m_map
.
phi2
(
fit2
),
curLevel
);
m_map
.
setDartLevel
(
m_map
.
phi1
(
m_map
.
phi2
(
fit2
)),
curLevel
);
m_map
.
setDartLevel
(
fit3
,
curLevel
);
m_map
.
setDartLevel
(
m_map
.
phi2
(
fit3
),
curLevel
);
m_map
.
setDartLevel
(
m_map
.
phi1
(
m_map
.
phi2
(
fit3
)),
curLevel
);
if
(
curLevel
==
maxLevel
)
{
unsigned
int
id
=
m_map
.
getTriRefinementEdgeId
(
m_map
.
phi2
(
fit1
));
m_map
.
setEdgeId
(
m_map
.
phi2
(
fit1
),
id
);
m_map
.
setEdgeId
(
fit1
,
id
);
id
=
m_map
.
getTriRefinementEdgeId
(
m_map
.
phi2
(
fit2
));
m_map
.
setEdgeId
(
m_map
.
phi2
(
fit2
),
id
);
m_map
.
setEdgeId
(
fit2
,
id
);
id
=
m_map
.
getTriRefinementEdgeId
(
m_map
.
phi2
(
fit3
));
m_map
.
setEdgeId
(
m_map
.
phi2
(
fit3
),
id
);
m_map
.
setEdgeId
(
fit3
,
id
);
}
else
{
}
// if(curLevel == 2)
// {
// unsigned int id = m_map.getTriRefinementEdgeId(m_map.phi2(fit1));
// m_map.setEdgeId(m_map.phi2(fit1), id);
// m_map.setEdgeId(fit1, id);
//m_map.setEdgeId(fit1, id);
// /std::cout << "fit1 = " << fit1 << std::endl;
//std::cout << "m_map.phi2(fit1) = " << m_map.phi2(fit1) << std::endl;
// id = m_map.getTriRefinementEdgeId(m_map.phi2(fit2));
// m_map.setEdgeId(m_map.phi2(fit2), id);
// m_map.setEdgeId(fit2, id);
//m_map.setEdgeId(fit2, id);
//std::cout << "fit2 = " << fit2 << std::endl;
//std::cout << "m_map.phi2(fit2) = " << m_map.phi2(fit2) << std::endl;
// id = m_map.getTriRefinementEdgeId(m_map.phi2(fit3));
// m_map.setEdgeId(m_map.phi2(fit3), id);
// m_map.setEdgeId(fit3, id);
//m_map.setEdgeId(fit3, id);
//std::cout << "fit3 = " << fit3 << std::endl;
//std::cout << "m_map.phi2(fit3) = " << m_map.phi2(fit3) << std::endl;
// }
}
else
{
}
}
}
curLevel
=
curLevel
-
1
;
visitedVertices
.
push_back
(
m_map
.
phi1
(
m_map
.
phi1
(
eit
)));
visitedVertices
.
push_back
(
m_map
.
phi_1
(
m_map
.
phi_1
(
eit
)));
md
.
markOrbit
<
FACE
>
(
eit
);
}
while
(
curLevel
>
1
);
}
}
}
m_map
.
setCurrentLevel
(
nbLevel
);
//m_maxLevel
}
template
<
typename
PFP
>
void
IHM2
<
PFP
>::
analysis
()
{
assert
(
m_map
.
getCurrentLevel
()
>
0
||
!
"analysis : called on level 0"
)
;
assert
(
m_map
.
getCurrentLevel
()
>
0
||
!
"analysis : called on level 0"
)
;
m_map
.
decCurrentLevel
()
;
m_map
.
decCurrentLevel
()
;
for
(
unsigned
int
i
=
0
;
i
<
analysisFilters
.
size
();
++
i
)
(
*
analysisFilters
[
i
])()
;
for
(
unsigned
int
i
=
0
;
i
<
analysisFilters
.
size
();
++
i
)
(
*
analysisFilters
[
i
])()
;
}
template
<
typename
PFP
>
void
IHM2
<
PFP
>::
synthesis
()
{
assert
(
m_map
.
getCurrentLevel
()
<
m_map
.
getMaxLevel
()
||
!
"synthesis : called on max level"
)
;
assert
(
m_map
.
getCurrentLevel
()
<
m_map
.
getMaxLevel
()
||
!
"synthesis : called on max level"
)
;
for
(
unsigned
int
i
=
0
;
i
<
synthesisFilters
.
size
();
++
i
)
(
*
synthesisFilters
[
i
])()
;
for
(
unsigned
int
i
=
0
;
i
<
synthesisFilters
.
size
();
++
i
)
(
*
synthesisFilters
[
i
])()
;
m_map
.
incCurrentLevel
()
;
m_map
.
incCurrentLevel
()
;
}
}
// namespace Regular
...
...
include/Algo/Multiresolution/Map2MR/Masks/catmullClark.h
View file @
a119b8e3
...
...
@@ -75,7 +75,7 @@ public:
np2
+=
m_position
[
dd
]
;
dd
=
m_map
.
phi1
(
dd
)
;
}
while
(
dd
!=
end
)
;
it
=
m_map
.
alpha
1
(
it
)
;
it
=
m_map
.
phi2
(
m_map
.
phi_
1
(
it
)
)
;
}
while
(
it
!=
d
)
;
float
beta
=
3.0
/
(
2.0
*
degree1
)
;
...
...
include/Algo/Multiresolution/Map2MR/map2MR_PrimalRegular.h
View file @
a119b8e3
...
...
@@ -68,7 +68,7 @@ public:
~
Map2MR
();
//if true : tri and quad else quad
void
addNewLevel
(
bool
triQuad
=
true
)
;
void
addNewLevel
(
bool
triQuad
=
true
,
bool
embedNewVertices
=
false
)
;
void
addNewLevelSqrt3
();
...
...
@@ -84,6 +84,8 @@ public:
void
synthesis
()
;
void
addLevelFront
();
void
import
(
Algo
::
Surface
::
Import
::
QuadTree
&
qt
);
}
;
}
// namespace Regular
...
...
include/Algo/Multiresolution/Map2MR/map2MR_PrimalRegular.hpp
View file @
a119b8e3
...
...
@@ -22,6 +22,8 @@
* *
*******************************************************************************/
#include
"Algo/Import/importMRDAT.h"
namespace
CGoGN
{
...
...
@@ -62,7 +64,7 @@ Map2MR<PFP>::~Map2MR()
}
template
<
typename
PFP
>
void
Map2MR
<
PFP
>::
addNewLevel
(
bool
triQuad
)
void
Map2MR
<
PFP
>::
addNewLevel
(
bool
triQuad
,
bool
embedNewVertices
)
{
m_map
.
pushLevel
()
;
...
...
@@ -74,18 +76,22 @@ void Map2MR<PFP>::addNewLevel(bool triQuad)
TraversorE
<
typename
PFP
::
MAP
>
travE
(
m_map
)
;
for
(
Dart
d
=
travE
.
begin
();
d
!=
travE
.
end
();
d
=
travE
.
next
())
{
// if(!shareVertexEmbeddings)
// {
// if(m_map.template getEmbedding<VERTEX>(d) == EMBNULL)
// m_map.template setOrbitEmbeddingOnNewCell<VERTEX>(d) ;
// if(m_map.template getEmbedding<VERTEX>(m_map.phi1(d)) == EMBNULL)
// m_map.template setOrbitEmbeddingOnNewCell<VERTEX>(d) ;
// }
// if(!shareVertexEmbeddings
&& embedNewVertices
)
// {
// if(m_map.template getEmbedding<VERTEX>(d) == EMBNULL)
// m_map.template setOrbitEmbeddingOnNewCell<VERTEX>(d) ;
// if(m_map.template getEmbedding<VERTEX>(m_map.phi1(d)) == EMBNULL)
// m_map.template setOrbitEmbeddingOnNewCell<VERTEX>(d) ;
// }
m_map
.
cutEdge
(
d
)
;
travE
.
skip
(
d
)
;
travE
.
skip
(
m_map
.
phi1
(
d
))
;
//std::cout << "is EMB NULL : " << ( m_map.template getEmbedding<VERTEX>(m_map.phi1(d)) == EMBNULL ? "true" : "false" ) << std::endl;
//if(embedNewVertices)
// m_map.template setOrbitEmbeddingOnNewCell<VERTEX>(m_map.phi1(d)) ;
}
// split faces
...
...
@@ -129,6 +135,9 @@ void Map2MR<PFP>::addNewLevel(bool triQuad)
m_map
.
cutEdge
(
ne
)
;
// cut the new edge to insert the central vertex
travF
.
skip
(
dd
)
;
//if(embedNewVertices)
// m_map.template setOrbitEmbeddingOnNewCell<VERTEX>(m_map.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
...
...
@@ -342,6 +351,24 @@ void Map2MR<PFP>::addLevelFront()
}
}
template
<
typename
PFP
>
void
Map2MR
<
PFP
>::
import
(
Algo
::
Surface
::
Import
::
QuadTree
&
qt
)
{
std
::
cout
<<
" Create finer resolution levels.."
<<
std
::
flush
;
for
(
unsigned
int
i
=
0
;
i
<
qt
.
depth
;
++
i
)
addNewLevel
(
true
,
false
)
;
std
::
cout
<<
"..done"
<<
std
::
endl
;
std
::
cout
<<
" Embed finer resolution levels.."
<<
std
::
flush
;
m_map
.
setCurrentLevel
(
0
)
;
qt
.
embed
<
PFP
>
(
m_map
)
;
m_map
.
setCurrentLevel
(
m_map
.
getMaxLevel
())
;
std
::
cout
<<
"..done"
<<
std
::
endl
;
}
}
// namespace Regular
...
...
include/Topology/generic/genericmap.h