Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
CGoGN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
KennethVanhoey
CGoGN
Commits
9f0583a0
Commit
9f0583a0
authored
Jan 26, 2013
by
Lionel Untereiner
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
changes to computeDual functions
parent
4fadd564
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
391 additions
and
164 deletions
+391
-164
Apps/Examples/volumeExplorer.cpp
Apps/Examples/volumeExplorer.cpp
+1
-1
include/Algo/Modelisation/subdivision.h
include/Algo/Modelisation/subdivision.h
+21
-2
include/Algo/Modelisation/subdivision.hpp
include/Algo/Modelisation/subdivision.hpp
+166
-2
include/Algo/Modelisation/subdivision3.h
include/Algo/Modelisation/subdivision3.h
+4
-6
include/Algo/Modelisation/subdivision3.hpp
include/Algo/Modelisation/subdivision3.hpp
+15
-81
include/Geometry/inclusion.h
include/Geometry/inclusion.h
+1
-0
include/Topology/gmap/gmap2.h
include/Topology/gmap/gmap2.h
+11
-2
include/Topology/gmap/gmap3.h
include/Topology/gmap/gmap3.h
+13
-0
include/Topology/map/map3.h
include/Topology/map/map3.h
+0
-1
include/Utils/convertType.h
include/Utils/convertType.h
+1
-0
src/Topology/gmap/gmap2.cpp
src/Topology/gmap/gmap2.cpp
+16
-0
src/Topology/gmap/gmap3.cpp
src/Topology/gmap/gmap3.cpp
+20
-0
src/Topology/map/map3.cpp
src/Topology/map/map3.cpp
+122
-69
No files found.
Apps/Examples/volumeExplorer.cpp
View file @
9f0583a0
...
...
@@ -200,7 +200,7 @@ void MyQT::cb_initGL()
// create the renders
m_topo_render
=
new
Algo
::
Render
::
GL2
::
Topo3Render
();
m_explode_render
=
new
Algo
::
Render
::
GL2
::
ExplodeVolumeRender
(
true
,
true
);
m_explode_render
=
new
Algo
::
Render
::
GL2
::
ExplodeVolumeRender
(
true
,
true
,
true
);
SelectorDartNoBoundary
<
PFP
::
MAP
>
nb
(
myMap
);
m_topo_render
->
updateData
<
PFP
>
(
myMap
,
position
,
0.8
f
,
0.8
f
,
0.8
f
,
nb
);
...
...
include/Algo/Modelisation/subdivision.h
View file @
9f0583a0
...
...
@@ -115,16 +115,35 @@ void TwoNPlusOneSubdivision(typename PFP::MAP& map, EMBV& attributs, const Funct
template
<
typename
PFP
>
void
DooSabin
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
);
//**
///**
// * Reverse the orientation of the map
// * NOW IN THE MAP
// */
//template <typename PFP>
//void Sqrt3Subdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = allDarts) ;
///**
// * Sqrt(3) subdivision scheme
// */
//template <typename PFP>
//void Sqrt3Subdivision(typename PFP::MAP& map, typename PFP::TVEC3& position, const FunctorSelect& selected = allDarts) ;
template
<
typename
PFP
>
void
computeDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
);
template
<
typename
PFP
>
void
computeBoundaryConstraintDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
);
template
<
typename
PFP
>
void
computeBoundaryConstraintKeepingOldVerticesDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
);
}
// namespace Modelisation
}
}
// namespace Surface
}
// namespace Algo
...
...
include/Algo/Modelisation/subdivision.hpp
View file @
9f0583a0
...
...
@@ -628,7 +628,6 @@ void DooSabin(typename PFP::MAP& map, VertexAttribute<typename PFP::VEC3>& posit
}
}
inline
double
sqrt3_K
(
unsigned
int
n
)
{
switch
(
n
)
...
...
@@ -698,11 +697,176 @@ inline double sqrt3_K(unsigned int n)
// }
//}
template
<
typename
PFP
>
void
computeDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
)
{
// Face Attribute -> after dual new Vertex Attribute
FaceAttribute
<
typename
PFP
::
VEC3
>
positionF
=
map
.
template
getAttribute
<
typename
PFP
::
VEC3
,
FACE
>(
"position"
)
;
if
(
!
positionF
.
isValid
())
positionF
=
map
.
template
addAttribute
<
typename
PFP
::
VEC3
,
FACE
>(
"position"
)
;
}
// namespace Modelisation
// Compute Centroid for the faces
Algo
::
Surface
::
Geometry
::
computeCentroidFaces
<
PFP
>
(
map
,
position
,
positionF
)
;
// Compute the Dual mesh
map
.
computeDual
();
position
=
positionF
;
}
template
<
typename
PFP
>
void
computeBoundaryConstraintDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
)
{
// Face Attribute -> after dual new Vertex Attribute
FaceAttribute
<
typename
PFP
::
VEC3
>
positionF
=
map
.
template
getAttribute
<
typename
PFP
::
VEC3
,
FACE
>(
"position"
)
;
if
(
!
positionF
.
isValid
())
positionF
=
map
.
template
addAttribute
<
typename
PFP
::
VEC3
,
FACE
>(
"position"
)
;
//Triangule boundary faces & compute for each new face the centroid
std
::
vector
<
Dart
>
boundsDart
;
DartMarkerStore
mf
(
map
);
for
(
Dart
dit
=
map
.
begin
()
;
dit
!=
map
.
end
()
;
map
.
next
(
dit
))
{
if
(
!
mf
.
isMarked
(
dit
)
&&
map
.
isBoundaryMarked2
(
dit
))
{
boundsDart
.
push_back
(
dit
);
Dart
db
=
dit
;
Dart
d1
=
map
.
phi1
(
db
);
Dart
dprev
=
map
.
phi_1
(
db
);
map
.
splitFace
(
db
,
d1
)
;
map
.
cutEdge
(
map
.
phi_1
(
db
))
;
positionF
[
dit
]
=
(
position
[
dit
]
+
position
[
map
.
phi2
(
dit
)])
*
typename
PFP
::
REAL
(
0.5
);
mf
.
markOrbit
<
FACE
>
(
dit
);
Dart
x
=
map
.
phi2
(
map
.
phi_1
(
db
))
;
Dart
dd
=
map
.
phi1
(
map
.
phi1
(
map
.
phi1
(
x
)));
while
(
dd
!=
x
)
{
Dart
next
=
map
.
phi1
(
dd
)
;
Dart
prev
=
map
.
phi_1
(
dd
);
map
.
splitFace
(
dd
,
map
.
phi1
(
x
))
;
positionF
[
prev
]
=
(
position
[
prev
]
+
position
[
map
.
phi1
(
prev
)])
*
typename
PFP
::
REAL
(
0.5
);
mf
.
markOrbit
<
FACE
>
(
prev
);
dd
=
next
;
}
positionF
[
dprev
]
=
(
position
[
dprev
]
+
position
[
map
.
phi1
(
dprev
)])
*
typename
PFP
::
REAL
(
0.5
);
mf
.
markOrbit
<
FACE
>
(
dprev
);
}
}
// Compute Centroid for the other faces
Algo
::
Surface
::
Geometry
::
computeCentroidFaces
<
PFP
>
(
map
,
position
,
positionF
)
;
// Fill the holes
for
(
Dart
dit
=
map
.
begin
()
;
dit
!=
map
.
end
()
;
map
.
next
(
dit
))
{
if
(
mf
.
isMarked
(
dit
)
&&
map
.
isBoundaryMarked2
(
dit
))
{
map
.
fillHole
(
dit
);
mf
.
unmarkOrbit
<
FACE
>
(
dit
);
}
}
// Compute the Dual mesh
map
.
computeDual
();
position
=
positionF
;
// Create the new border with the old boundary edges
for
(
std
::
vector
<
Dart
>::
iterator
it
=
boundsDart
.
begin
()
;
it
!=
boundsDart
.
end
()
;
++
it
)
{
map
.
createHole
(
map
.
phi2
(
map
.
phi1
(
*
it
)));
}
}
template
<
typename
PFP
>
void
computeBoundaryConstraintKeepingOldVerticesDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
)
{
// Face Attribute -> after dual new Vertex Attribute
FaceAttribute
<
typename
PFP
::
VEC3
>
positionF
=
map
.
template
getAttribute
<
typename
PFP
::
VEC3
,
FACE
>(
"position"
)
;
if
(
!
positionF
.
isValid
())
positionF
=
map
.
template
addAttribute
<
typename
PFP
::
VEC3
,
FACE
>(
"position"
)
;
//Triangule boundary faces & compute for each new face the centroid
std
::
vector
<
Dart
>
boundsDart
;
DartMarkerStore
mf
(
map
);
for
(
Dart
dit
=
map
.
begin
()
;
dit
!=
map
.
end
()
;
map
.
next
(
dit
))
{
if
(
!
mf
.
isMarked
(
dit
)
&&
map
.
isBoundaryMarked2
(
dit
))
{
boundsDart
.
push_back
(
dit
);
Dart
db
=
dit
;
Dart
d1
=
map
.
phi1
(
db
);
Dart
dprev
=
map
.
phi_1
(
db
);
map
.
splitFace
(
db
,
d1
)
;
map
.
cutEdge
(
map
.
phi_1
(
db
))
;
positionF
[
dit
]
=
(
position
[
dit
]
+
position
[
map
.
phi2
(
dit
)])
*
typename
PFP
::
REAL
(
0.5
);
mf
.
markOrbit
<
FACE
>
(
dit
);
Dart
x
=
map
.
phi2
(
map
.
phi_1
(
db
))
;
Dart
dd
=
map
.
phi1
(
map
.
phi1
(
map
.
phi1
(
x
)));
while
(
dd
!=
x
)
{
Dart
next
=
map
.
phi1
(
dd
)
;
Dart
prev
=
map
.
phi_1
(
dd
);
map
.
splitFace
(
dd
,
map
.
phi1
(
x
))
;
positionF
[
prev
]
=
(
position
[
prev
]
+
position
[
map
.
phi1
(
prev
)])
*
typename
PFP
::
REAL
(
0.5
);
mf
.
markOrbit
<
FACE
>
(
prev
);
dd
=
next
;
}
positionF
[
dprev
]
=
(
position
[
dprev
]
+
position
[
map
.
phi1
(
dprev
)])
*
typename
PFP
::
REAL
(
0.5
);
mf
.
markOrbit
<
FACE
>
(
dprev
);
}
}
// Compute Centroid for the other faces
Algo
::
Surface
::
Geometry
::
computeCentroidFaces
<
PFP
>
(
map
,
position
,
positionF
)
;
// Fill the holes
for
(
Dart
dit
=
map
.
begin
()
;
dit
!=
map
.
end
()
;
map
.
next
(
dit
))
{
if
(
mf
.
isMarked
(
dit
)
&&
map
.
isBoundaryMarked2
(
dit
))
{
map
.
fillHole
(
dit
);
mf
.
unmarkOrbit
<
FACE
>
(
dit
);
}
}
// Compute the Dual mesh
map
.
computeDual
();
//Saving old position VertexAttribute to a FaceAttribute
FaceAttribute
<
typename
PFP
::
VEC3
>
temp
;
temp
=
position
;
position
=
positionF
;
positionF
=
temp
;
// Create the new border with the old boundary edges
for
(
std
::
vector
<
Dart
>::
iterator
it
=
boundsDart
.
begin
()
;
it
!=
boundsDart
.
end
()
;
++
it
)
{
map
.
createHole
(
map
.
phi2
(
map
.
phi1
(
*
it
)));
}
// Manage old vertices with new FaceAttribute
for
(
Dart
dit
=
map
.
begin
()
;
dit
!=
map
.
end
()
;
map
.
next
(
dit
))
{
if
(
!
mf
.
isMarked
(
dit
)
&&
map
.
isBoundaryMarked2
(
dit
))
{
Dart
nd
=
map
.
cutEdge
(
dit
);
position
[
nd
]
=
positionF
[
map
.
phi2
(
dit
)];
mf
.
markOrbit
<
EDGE
>
(
dit
);
mf
.
markOrbit
<
EDGE
>
(
nd
);
}
}
}
}
// namespace Modelisation
}
// namespace Surface
}
// namespace Algo
}
// namespace CGoGN
include/Algo/Modelisation/subdivision3.h
View file @
9f0583a0
...
...
@@ -102,15 +102,13 @@ void catmullClarkVol(typename PFP::MAP& map, VertexAttribute<typename PFP::VEC3>
template
<
typename
PFP
>
void
sqrt3Vol
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
,
const
FunctorSelect
&
selected
=
allDarts
);
///**
// * Dual mesh computation
// */
//template <typename PFP>
//void computeDual3(typename PFP::MAP& map, const FunctorSelect& selected = allDarts) ;
template
<
typename
PFP
>
void
computeDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
);
}
// namespace Modelisation
}
}
// namespace Volume
}
// namespace Algo
...
...
include/Algo/Modelisation/subdivision3.hpp
View file @
9f0583a0
...
...
@@ -716,87 +716,21 @@ void sqrt3Vol(typename PFP::MAP& map, VertexAttribute<typename PFP::VEC3>& posit
}
}
//template <typename PFP>
//void reverseOrientation3(typename PFP::MAP& map)
//{
// DartAttribute<unsigned int> emb0(&map, map.template getEmbeddingAttributeVector<VERTEX>()) ;
// if(emb0.isValid())
// {
// DartAttribute<unsigned int> new_emb0 = map.template addAttribute<unsigned int, DART>("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.removeAttribute(new_emb0) ;
// }
//
// DartAttribute<Dart> phi2 = map.template getAttribute<Dart, DART>("phi2") ;
// DartAttribute<Dart> phi3 = map.template getAttribute<Dart, DART>("phi3") ;
// map.template swapAttributes<Dart>(phi2, phi3) ;
//}
//
//template <typename PFP>
//void computeDual3(typename PFP::MAP& map, const FunctorSelect& selected)
//{
// DartAttribute<Dart> phi1 = map.template getAttribute<Dart, DART>("phi1") ;
// DartAttribute<Dart> phi_1 = map.template getAttribute<Dart, DART>("phi_1") ;
// DartAttribute<Dart> new_phi1 = map.template addAttribute<Dart, DART>("new_phi1") ;
// DartAttribute<Dart> new_phi_1 = map.template addAttribute<Dart, DART>("new_phi_1") ;
//
// DartAttribute<Dart> phi2 = map.template getAttribute<Dart, DART>("phi2") ;
// DartAttribute<Dart> new_phi2 = map.template addAttribute<Dart, DART>("new_phi2") ;
//
// for(Dart d = map.begin(); d != map.end(); map.next(d))
// {
// Dart dd = map.phi2(map.phi3(d)) ;
// new_phi1[d] = dd ;
// new_phi_1[dd] = d ;
//
// Dart ddd = map.phi1(map.phi3(d));
// new_phi2[d] = ddd;
// new_phi2[ddd] = d;
// }
//
// map.template swapAttributes<Dart>(phi1, new_phi1) ;
// map.template swapAttributes<Dart>(phi_1, new_phi_1) ;
// map.template swapAttributes<Dart>(phi2, new_phi2) ;
//
// map.removeAttribute(new_phi1) ;
// map.removeAttribute(new_phi_1) ;
// map.removeAttribute(new_phi2) ;
//
// map.swapEmbeddingContainers(VERTEX, VOLUME) ;
//
// for(Dart d = map.begin(); d != map.end(); map.next(d))
// {
// if(map.isBoundaryMarked(d))
// {
// map.deleteVolume(d);
//// Traversor3VW<typename PFP::MAP> tWV(map, d);
//// std::vector<Dart> v;
//// for(Dart ditW = tWV.begin() ; ditW != tWV.end() ; ditW = tWV.next())
//// {
//// v.push_back(ditW);
//// }
////
//// for(std::vector<Dart>::iterator it = v.begin() ; it != v.end() ; ++it)
//// {
//// map.deleteVolume(*it);
//// }
//
// }
// }
//
//// reverseOrientation3<PFP>(map) ;
//
// //boundary management
//// for(Dart d = map.begin(); d != map.end(); map.next(d))
//// {
//// if(map.isBoundaryMarked(d))
//// {
//// map.deleteVolume(d); //map.template boundaryMarkOrbit<VOLUME>(
//// }
//// }
//}
template
<
typename
PFP
>
void
computeDual
(
typename
PFP
::
MAP
&
map
,
VertexAttribute
<
typename
PFP
::
VEC3
>&
position
)
{
// VolumeAttribute -> after dual new VertexAttribute
VolumeAttribute
<
typename
PFP
::
VEC3
>
positionV
=
map
.
template
getAttribute
<
typename
PFP
::
VEC3
,
VOLUME
>(
"position"
)
;
if
(
!
positionV
.
isValid
())
positionV
=
map
.
template
addAttribute
<
typename
PFP
::
VEC3
,
VOLUME
>(
"position"
)
;
// Compute Centroid for the volumes
Algo
::
Volume
::
Geometry
::
computeCentroidVolumes
<
PFP
>
(
map
,
position
,
positionV
)
;
// Compute the Dual mesh
map
.
computeDual
();
position
=
positionV
;
}
}
//namespace Modelisation
...
...
include/Geometry/inclusion.h
View file @
9f0583a0
...
...
@@ -25,6 +25,7 @@
#ifndef __INCLUSION__
#define __INCLUSION__
#include "Geometry/basic.h"
#include "Geometry/orientation.h"
...
...
include/Topology/gmap/gmap2.h
View file @
9f0583a0
...
...
@@ -439,8 +439,6 @@ public:
* @param fonct functor obj ref
*/
bool
foreach_dart_of_edge1
(
Dart
d
,
FunctorType
&
fonct
,
unsigned
int
thread
=
0
);
//@}
/*! @name Close map after import or creation
...
...
@@ -469,6 +467,17 @@ public:
*/
unsigned
int
closeMap
();
//@}
/*! @name Compute dual
* These functions compute the dual mesh
*************************************************************************/
//@{
//! Dual mesh computation
/*!
*/
void
computeDual
();
//@}
};
}
// namespace CGoGN
...
...
include/Topology/gmap/gmap3.h
View file @
9f0583a0
...
...
@@ -378,6 +378,19 @@ public:
* @return the number of closed holes
*/
unsigned
int
closeMap
();
//@}
/*! @name Compute dual
* These functions compute the dual mesh
*************************************************************************/
//@{
//! Dual mesh computation
/*!
*/
void
computeDual
();
//@}
};
}
// namespace CGoGN
...
...
include/Topology/map/map3.h
View file @
9f0583a0
...
...
@@ -432,7 +432,6 @@ public:
* These functions must be used with care, generally only by import algorithms
*************************************************************************/
//@{
/**
* create a face of map1 marked as boundary
...
...
include/Utils/convertType.h
View file @
9f0583a0
...
...
@@ -27,6 +27,7 @@
#include <assert.h>
#include <vector>
#include <list>
namespace
CGoGN
{
...
...
src/Topology/gmap/gmap2.cpp
View file @
9f0583a0
...
...
@@ -947,4 +947,20 @@ unsigned int GMap2::closeMap()
return
nb
;
}
/*! @name Compute dual
* These functions compute the dual mesh
*************************************************************************/
void
GMap2
::
computeDual
()
{
// DartAttribute<Dart> old_beta0 = this->getAttribute<Dart, DART>("beta0");
// DartAttribute<Dart> old_beta2 = this->getAttribute<Dart, DART>("beta2") ;
//
// swapAttributes<Dart>(old_beta0, old_beta2) ;
//
// swapEmbeddingContainers(VERTEX, FACE) ;
//
// //boundary management ?
}
}
// namespace CGoGN
src/Topology/gmap/gmap3.cpp
View file @
9f0583a0
...
...
@@ -996,4 +996,24 @@ unsigned int GMap3::closeMap()
return
nb
;
}
/*! @name Compute dual
* These functions compute the dual mesh
*************************************************************************/
void
GMap3
::
computeDual
()
{
// DartAttribute<Dart> old_beta0 = getAttribute<Dart, DART>("beta0");
// DartAttribute<Dart> old_beta1 = getAttribute<Dart, DART>("beta1");
// DartAttribute<Dart> old_beta2 = getAttribute<Dart, DART>("beta2");
// DartAttribute<Dart> old_beta3 = getAttribute<Dart, DART>("beta3") ;
//
// swapAttributes<Dart>(old_beta0, old_beta3) ;
// swapAttributes<Dart>(old_beta1, old_beta2) ;
//
// swapEmbeddingContainers(VERTEX, FACE) ;
//
// //boundary management ?
}
}
// namespace CGoGN
src/Topology/map/map3.cpp
View file @
9f0583a0
...
...
@@ -278,8 +278,8 @@ Dart Map3::splitVertex(std::vector<Dart>& vd)
Dart
Map3
::
deleteVertex
(
Dart
d
)
{
if
(
isBoundaryVertex
(
d
))
return
NIL
;
//
if(isBoundaryVertex(d))
//
return NIL ;
// Save the darts around the vertex
// (one dart per face should be enough)
...
...
@@ -301,12 +301,39 @@ Dart Map3::deleteVertex(Dart d)
}
}
std
::
cout
<<
"nb faces "
<<
fstore
.
size
()
<<
std
::
endl
;
Dart
res
=
NIL
;
for
(
std
::
vector
<
Dart
>::
iterator
it
=
fstore
.
begin
()
;
it
!=
fstore
.
end
()
;
++
it
)
{
Dart
fit
=
*
it
;
Dart
end
=
phi_1
(
fit
)
;
fit
=
phi1
(
fit
)
;
if
(
fit
==
end
)
{
std
::
cout
<<
" mmmmmmmmmmmmmmmmmmmmmerrrrrrrrrrrrrrrrrde !!!!!!!!!!!! "
<<
std
::
endl
;
// Dart d2 = phi2(fit) ;
// Dart d23 = phi3(d2) ;
// Dart d3 = phi3(fit) ;
// Dart d32 = phi2(d3) ;
//
// //phi3unsew()
// phi3sew(d3,23);
//
// fit = phi_1(fit);
//
// d2 = phi2(fit) ;
// d23 = phi3(d2) ;
// d3 = phi3(fit) ;
// d32 = phi2(d3) ;
// phi3sew(d3,23);
// Map2::deleteCC(fit);
}
else
{
while
(
fit
!=
end
)
{
Dart
d2
=
phi2
(
fit
)
;
...
...
@@ -324,6 +351,7 @@ Dart Map3::deleteVertex(Dart d)
fit
=
phi1
(
fit
)
;
}
}
}
Map2
::
deleteCC
(
d
)
;
...
...
@@ -1270,60 +1298,86 @@ void Map3::computeDual()
unsigned
int
count
=
0
;
for
(
Dart
d
=
begin
();
d
!=
end
();
next
(
d
))
{
if
(
isBoundaryMarked3
(
d
))
boundaryUnmark
<
3
>
(
d
);
if
(
d
==
1569
)
{
std
::
cout
<<
"d "
<<
std
::
endl
;
Traversor3WE
<
Map3
>
t
(
*
this
,
d
);
for
(
Dart
dit
=
t
.
begin
()
;
dit
!=
t
.
end
()
;
dit
=
t
.
next
())
{
Dart
temp
=
dit
;
do
{
if
(
isBoundaryMarked3
(
d
))
std
::
cout
<<
"d boundary "
<<
std
::
endl
;
temp
=
alpha2
(
temp
);
}
while
(
temp
!=
dit
);
}
if
(
isBoundaryMarked3
(
d
))
std
::
cout
<<
"d boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi1
(
d
)))
std
::
cout
<<
"phi1(d) boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi_1
(
d
)))
std
::
cout
<<
"phi_1(d) boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi2
(
d
)))
std
::
cout
<<
"phi2(d) boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi3
(
d
)))
std
::
cout
<<
"phi3(d) boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi2
(
phi3
(
d
))))
std
::
cout
<<
"phi2(phi3(d)) boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi3
(
phi2
(
d
))))
std
::
cout
<<
"phi3(phi2(d)) boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi1
(
phi3
(
d
))))
std
::
cout
<<
"phi1(phi3(d)) boundary "
<<
std
::
endl
;
if
(
isBoundaryMarked3
(
phi3
(
phi1
(
d
))))
std
::
cout
<<
"phi3(phi1(d)) boundary "
<<
std
::
endl
;
}
if
(
isBoundaryMarked3
(
d
))
{
std
::
vector
<
Dart
>
vbound
;
// for(Dart d = begin(); d != end(); next(d))
// {
// if(isBoundaryMarked3(d) && !isBoundaryMarked3(phi3(d)))
// {
// vbound.push_back(d);
// }
// }
//
// std::cout << "vbound size = " << vbound.size() << std::endl;
//
// for(std::vector<Dart>::iterator it = vbound.begin() ; it != vbound.end() ; ++it)
// {
// Dart d = *it;