Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Sauvage
CGoGN
Commits
b75bfd43
Commit
b75bfd43
authored
Dec 30, 2012
by
Thery Sylvain
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
boundary2/boundary3
parent
3a8ecd23
Changes
31
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
213 additions
and
146 deletions
+213
-146
Apps/Tuto/tuto2.cpp
Apps/Tuto/tuto2.cpp
+1
-1
Apps/Tuto/tuto_oper2.cpp
Apps/Tuto/tuto_oper2.cpp
+6
-6
Apps/Tuto/tuto_oper3.cpp
Apps/Tuto/tuto_oper3.cpp
+3
-3
include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp
include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp
+5
-5
include/Algo/Import/importSvg.hpp
include/Algo/Import/importSvg.hpp
+1
-1
include/Algo/MC/marchingcube.hpp
include/Algo/MC/marchingcube.hpp
+2
-2
include/Algo/Modelisation/subdivision.hpp
include/Algo/Modelisation/subdivision.hpp
+5
-5
include/Algo/Modelisation/tetrahedralization.hpp
include/Algo/Modelisation/tetrahedralization.hpp
+3
-3
include/Algo/Parallel/parallel_foreach.hpp
include/Algo/Parallel/parallel_foreach.hpp
+8
-8
include/Algo/Render/GL2/mapRender.hpp
include/Algo/Render/GL2/mapRender.hpp
+2
-2
include/Algo/Render/GL2/topo3Render.hpp
include/Algo/Render/GL2/topo3Render.hpp
+4
-4
include/Topology/generic/functor.h
include/Topology/generic/functor.h
+9
-3
include/Topology/generic/genericmap.h
include/Topology/generic/genericmap.h
+18
-4
include/Topology/generic/genericmap.hpp
include/Topology/generic/genericmap.hpp
+67
-15
include/Topology/generic/traversor2.hpp
include/Topology/generic/traversor2.hpp
+10
-10
include/Topology/generic/traversor2_closed.hpp
include/Topology/generic/traversor2_closed.hpp
+0
-2
include/Topology/generic/traversor3.hpp
include/Topology/generic/traversor3.hpp
+3
-3
include/Topology/generic/traversorCell.hpp
include/Topology/generic/traversorCell.hpp
+3
-3
include/Topology/gmap/gmap1.hpp
include/Topology/gmap/gmap1.hpp
+3
-3
include/Topology/gmap/gmap2.hpp
include/Topology/gmap/gmap2.hpp
+1
-1
include/Topology/gmap/gmap3.hpp
include/Topology/gmap/gmap3.hpp
+1
-1
include/Topology/map/map1.hpp
include/Topology/map/map1.hpp
+2
-2
include/Topology/map/map2.hpp
include/Topology/map/map2.hpp
+1
-1
include/Topology/map/map3.hpp
include/Topology/map/map3.hpp
+1
-1
src/Topology/generic/genericmap.cpp
src/Topology/generic/genericmap.cpp
+7
-10
src/Topology/gmap/gmap1.cpp
src/Topology/gmap/gmap1.cpp
+4
-4
src/Topology/gmap/gmap2.cpp
src/Topology/gmap/gmap2.cpp
+12
-12
src/Topology/gmap/gmap3.cpp
src/Topology/gmap/gmap3.cpp
+7
-7
src/Topology/map/map1.cpp
src/Topology/map/map1.cpp
+1
-1
src/Topology/map/map2.cpp
src/Topology/map/map2.cpp
+13
-13
src/Topology/map/map3.cpp
src/Topology/map/map3.cpp
+10
-10
No files found.
Apps/Tuto/tuto2.cpp
View file @
b75bfd43
...
...
@@ -110,7 +110,7 @@ void MyQT::createMap()
for
(
Dart
d
=
myMap
.
begin
();
d
!=
myMap
.
end
();
myMap
.
next
(
d
))
{
CGoGNout
<<
"Dart "
<<
d
;
if
(
myMap
.
isBoundaryMarked
(
d
))
if
(
myMap
.
isBoundaryMarked
Current
(
d
))
CGoGNout
<<
" is a boundary dart (implicitly added)"
<<
CGoGNendl
;
else
{
...
...
Apps/Tuto/tuto_oper2.cpp
View file @
b75bfd43
...
...
@@ -197,7 +197,7 @@ void MyQT::createMap(int n)
for
(
Dart
d
=
myMap
.
begin
();
d
!=
myMap
.
end
();
myMap
.
next
(
d
))
{
if
(
dm
.
isMarked
(
d
)
&&
(
!
myMap
.
isBoundaryMarked
(
d
)))
if
(
dm
.
isMarked
(
d
)
&&
(
!
myMap
.
isBoundaryMarked
2
(
d
)))
{
int
n
=
rand
();
float
r
=
float
(
n
&
0x7f
)
/
255.0
f
+
0.25
f
;
...
...
@@ -214,7 +214,7 @@ void MyQT::updateMap()
m_render_topo
->
updateData
<
PFP
>
(
myMap
,
position
,
0.9
f
,
0.9
f
,
nb
);
for
(
Dart
d
=
myMap
.
begin
();
d
!=
myMap
.
end
();
myMap
.
next
(
d
))
{
if
(
dm
.
isMarked
(
d
)
&&
(
!
myMap
.
isBoundaryMarked
(
d
)))
if
(
dm
.
isMarked
(
d
)
&&
(
!
myMap
.
isBoundaryMarked
2
(
d
)))
{
const
Geom
::
Vec3f
&
C
=
colorDarts
[
d
];
if
(
C
*
C
!=
0.0
f
)
...
...
@@ -273,7 +273,7 @@ void MyQT::cb_keyPress(int keycode)
case
'c'
:
for
(
Dart
d
=
myMap
.
begin
();
d
!=
myMap
.
end
();
myMap
.
next
(
d
))
{
if
(
!
myMap
.
isBoundaryMarked
(
d
))
if
(
!
myMap
.
isBoundaryMarked
2
(
d
))
{
int
n
=
rand
();
float
r
=
float
(
n
&
0x7f
)
/
255.0
f
+
0.25
f
;
...
...
@@ -287,7 +287,7 @@ void MyQT::cb_keyPress(int keycode)
case
'g'
:
for
(
Dart
d
=
myMap
.
begin
();
d
!=
myMap
.
end
();
myMap
.
next
(
d
))
{
if
(
!
myMap
.
isBoundaryMarked
(
d
))
if
(
!
myMap
.
isBoundaryMarked
2
(
d
))
{
colorDarts
[
d
]
=
Geom
::
Vec3f
(
0.5
f
,
0.5
f
,
0.5
f
);
m_render_topo
->
setDartColor
(
d
,
0.5
f
,
0.5
f
,
0.5
f
);
...
...
@@ -298,7 +298,7 @@ void MyQT::cb_keyPress(int keycode)
case
'b'
:
for
(
Dart
d
=
myMap
.
begin
();
d
!=
myMap
.
end
();
myMap
.
next
(
d
))
{
if
(
!
myMap
.
isBoundaryMarked
(
d
))
if
(
!
myMap
.
isBoundaryMarked
2
(
d
))
{
colorDarts
[
d
]
=
Geom
::
Vec3f
(
0.0
f
,
0.0
f
,
0.0
f
);
m_render_topo
->
setDartColor
(
d
,
0.0
f
,
0.0
f
,
0.0
f
);
...
...
@@ -388,7 +388,7 @@ void MyQT::importMesh(std::string& filename)
colorDarts
=
myMap
.
addAttribute
<
VEC3
,
DART
>
(
"color"
);
for
(
Dart
d
=
myMap
.
begin
();
d
!=
myMap
.
end
();
myMap
.
next
(
d
))
{
if
(
dm
.
isMarked
(
d
)
&&
(
!
myMap
.
isBoundaryMarked
(
d
)))
if
(
dm
.
isMarked
(
d
)
&&
(
!
myMap
.
isBoundaryMarked
2
(
d
)))
{
int
n
=
rand
();
float
r
=
float
(
n
&
0x7f
)
/
255.0
f
+
0.25
f
;
...
...
Apps/Tuto/tuto_oper3.cpp
View file @
b75bfd43
...
...
@@ -520,7 +520,7 @@ void MyQT::cb_keyPress(int keycode)
// case 'c':
// for (Dart d=myMap.begin(); d!=myMap.end(); myMap.next(d))
// {
// if (!myMap.isBoundaryMarked(d))
// if (!myMap.isBoundaryMarked
3
(d))
// {
// int n = random();
// float r = float(n&0x7f)/255.0f + 0.25f;
...
...
@@ -534,7 +534,7 @@ void MyQT::cb_keyPress(int keycode)
// case 'g':
// for (Dart d=myMap.begin(); d!=myMap.end(); myMap.next(d))
// {
// if (!myMap.isBoundaryMarked(d))
// if (!myMap.isBoundaryMarked
3
(d))
// {
// colorDarts[d] = Geom::Vec3f(0.5f,0.5f,0.5f);
// m_render_topo->setDartColor(d,0.5f,0.5f,0.5f);
...
...
@@ -545,7 +545,7 @@ void MyQT::cb_keyPress(int keycode)
// case 'b':
// for (Dart d=myMap.begin(); d!=myMap.end(); myMap.next(d))
// {
// if (!myMap.isBoundaryMarked(d))
// if (!myMap.isBoundaryMarked
3
(d))
// {
// colorDarts[d] = Geom::Vec3f(0.0f,0.0f,0.0f);
// m_render_topo->setDartColor(d,0.0f,0.0f,0.0f);
...
...
include/Algo/ImplicitHierarchicalMesh/subdivision3.hpp
View file @
b75bfd43
...
...
@@ -41,7 +41,7 @@ void subdivideEdge(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
{
assert
(
map
.
getDartLevel
(
d
)
<=
map
.
getCurrentLevel
()
||
!
"Access to a dart introduced after current level"
)
;
assert
(
!
map
.
edgeIsSubdivided
(
d
)
||
!
"Trying to subdivide an already subdivided edge"
)
;
assert
(
!
map
.
isBoundaryMarked
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
assert
(
!
map
.
isBoundaryMarked
3
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
unsigned
int
eLevel
=
map
.
edgeLevel
(
d
)
;
...
...
@@ -73,7 +73,7 @@ void subdivideFace(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
{
assert
(
map
.
getDartLevel
(
d
)
<=
map
.
getCurrentLevel
()
||
!
"Access to a dart introduced after current level"
)
;
assert
(
!
map
.
faceIsSubdivided
(
d
)
||
!
"Trying to subdivide an already subdivided face"
)
;
assert
(
!
map
.
isBoundaryMarked
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
assert
(
!
map
.
isBoundaryMarked
3
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
unsigned
int
fLevel
=
map
.
faceLevel
(
d
)
;
Dart
old
=
map
.
faceOldestDart
(
d
)
;
...
...
@@ -192,7 +192,7 @@ Dart subdivideVolumeClassic(typename PFP::MAP& map, Dart d, AttributeHandler<typ
{
assert
(
map
.
getDartLevel
(
d
)
<=
map
.
getCurrentLevel
()
||
!
"Access to a dart introduced after current level"
)
;
assert
(
!
map
.
volumeIsSubdivided
(
d
)
||
!
"Trying to subdivide an already subdivided volume"
)
;
assert
(
!
map
.
isBoundaryMarked
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
assert
(
!
map
.
isBoundaryMarked
3
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
unsigned
int
vLevel
=
map
.
volumeLevel
(
d
);
Dart
old
=
map
.
volumeOldestDart
(
d
);
...
...
@@ -524,7 +524,7 @@ Dart subdivideVolumeClassic2(typename PFP::MAP& map, Dart d, AttributeHandler<ty
{
assert
(
map
.
getDartLevel
(
d
)
<=
map
.
getCurrentLevel
()
||
!
"Access to a dart introduced after current level"
)
;
assert
(
!
map
.
volumeIsSubdivided
(
d
)
||
!
"Trying to subdivide an already subdivided volume"
)
;
assert
(
!
map
.
isBoundaryMarked
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
assert
(
!
map
.
isBoundaryMarked
3
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
unsigned
int
vLevel
=
map
.
volumeLevel
(
d
);
Dart
old
=
map
.
volumeOldestDart
(
d
);
...
...
@@ -658,7 +658,7 @@ void subdivideLoop(typename PFP::MAP& map, Dart d, AttributeHandler<typename PFP
{
assert
(
map
.
getDartLevel
(
d
)
<=
map
.
getCurrentLevel
()
||
!
"Access to a dart introduced after current level"
)
;
assert
(
!
map
.
volumeIsSubdivided
(
d
)
||
!
"Trying to subdivide an already subdivided volume"
)
;
assert
(
!
map
.
isBoundaryMarked
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
assert
(
!
map
.
isBoundaryMarked
3
(
d
)
||
!
"Trying to subdivide a dart marked boundary"
);
unsigned
int
vLevel
=
map
.
volumeLevel
(
d
);
Dart
old
=
map
.
volumeOldestDart
(
d
);
...
...
include/Algo/Import/importSvg.hpp
View file @
b75bfd43
...
...
@@ -532,7 +532,7 @@ bool importSVG(typename PFP::MAP& map, const std::string& filename, VertexAttrib
// //close the intersections
// for(Dart d = map.begin();d != map.end(); map.next(d))
// {
// if(map.isBoundaryMarked(map.phi2(d)))
// if(map.isBoundaryMarked
2
(map.phi2(d)))
// map.closeHole(d);
// }
...
...
include/Algo/MC/marchingcube.hpp
View file @
b75bfd43
...
...
@@ -1183,7 +1183,7 @@ void MarchingCube<DataType, Windowing, PFP>::removeFacesOfBoundary(VertexAttribu
DartMarker
mf
(
*
m_map
);
for
(
Dart
d
=
m_map
->
begin
();
d
!=
m_map
->
end
();)
// next done inside loop because of deleteFace
{
if
(
!
mf
.
isMarked
(
d
)
&&
!
m_map
->
isBoundaryMarked
(
d
))
if
(
!
mf
.
isMarked
(
d
)
&&
!
m_map
->
isBoundaryMarked
2
(
d
))
{
Dart
dd
=
d
;
Dart
e
=
m_map
->
phi1
(
d
);
...
...
@@ -1208,7 +1208,7 @@ void MarchingCube<DataType, Windowing, PFP>::removeFacesOfBoundary(VertexAttribu
// vecF.reserve(8192);
// for (Dart d = m_map->begin(); d != m_map->end();m_map->next(d)) // next done inside loop because of deleteFace
// {
// if ((!mf.isMarked(d)) && (!m_map->isBoundaryMarked(d)) )
// if ((!mf.isMarked(d)) && (!m_map->isBoundaryMarked
2
(d)) )
// {
// Dart dd = d;
// Dart e = m_map->phi1(d);
...
...
include/Algo/Modelisation/subdivision.hpp
View file @
b75bfd43
...
...
@@ -134,7 +134,7 @@ void quadranguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSele
// first pass: cut the edges
for
(
Dart
d
=
map
.
begin
();
d
!=
map
.
end
();
map
.
next
(
d
))
{
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
(
d
)
&&
!
me
.
isMarked
(
d
))
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
2
(
d
)
&&
!
me
.
isMarked
(
d
))
{
Dart
f
=
map
.
phi1
(
d
);
Dart
e
=
map
.
cutEdge
(
d
);
...
...
@@ -154,7 +154,7 @@ void quadranguleFaces(typename PFP::MAP& map, EMBV& attributs, const FunctorSele
// second pass: quandrangule faces
for
(
Dart
d
=
map
.
begin
();
d
!=
map
.
end
();
map
.
next
(
d
))
{
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
(
d
)
&&
!
mf
.
isMarked
(
d
))
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
2
(
d
)
&&
!
mf
.
isMarked
(
d
))
{
EMB
center
=
Geometry
::
faceCentroidGen
<
PFP
,
EMBV
,
EMB
>
(
map
,
d
,
attributs
);
// compute center
Dart
cf
=
quadranguleFace
<
PFP
>
(
map
,
d
);
// quadrangule the face
...
...
@@ -188,7 +188,7 @@ void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const Func
// first pass: cut edges
for
(
Dart
d
=
map
.
begin
();
d
!=
map
.
end
();
map
.
next
(
d
))
{
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
(
d
)
&&
!
me
.
isMarked
(
d
))
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
2
(
d
)
&&
!
me
.
isMarked
(
d
))
{
if
(
!
m0
.
isMarked
(
d
))
{
...
...
@@ -222,7 +222,7 @@ void CatmullClarkSubdivision(typename PFP::MAP& map, EMBV& attributs, const Func
// second pass: quandrangule faces
for
(
Dart
d
=
map
.
begin
();
d
!=
map
.
end
();
map
.
next
(
d
))
{
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
(
d
)
&&
mf
.
isMarked
(
d
))
// for each face not subdivided
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
2
(
d
)
&&
mf
.
isMarked
(
d
))
// for each face not subdivided
{
// compute center skip darts of new vertices non embedded
EMB
center
=
AttribOps
::
zero
<
EMB
,
PFP
>
();
...
...
@@ -340,7 +340,7 @@ void LoopSubdivision(typename PFP::MAP& map, EMBV& attributs, const FunctorSelec
// first pass cut edges
for
(
Dart
d
=
map
.
begin
();
d
!=
map
.
end
();
map
.
next
(
d
))
{
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
(
d
)
&&
!
me
.
isMarked
(
d
))
if
(
selected
(
d
)
&&
!
map
.
isBoundaryMarked
2
(
d
)
&&
!
me
.
isMarked
(
d
))
{
if
(
!
m0
.
isMarked
(
d
))
{
...
...
include/Algo/Modelisation/tetrahedralization.hpp
View file @
b75bfd43
...
...
@@ -73,7 +73,7 @@ namespace Tetrahedralization
// //check if all vertices degree is equal to 3 (= no direct adjacent vertex has been split)
// for(std::vector<Dart>::iterator it=dov.begin();vertToTet && it!=dov.end();++it)
// {
// if(!cmv.isMarked(*it) && !map.isBoundaryMarked(*it))
// if(!cmv.isMarked(*it) && !map.isBoundaryMarked
3
(*it))
// {
// cmv.mark(*it);
// vertToTet = (map.phi1(map.phi2(map.phi1(map.phi2(map.phi1(map.phi2(*it))))))==*it); //degree = 3
...
...
@@ -85,7 +85,7 @@ namespace Tetrahedralization
// {
// for(std::vector<Dart>::iterator it=dov.begin();it!=dov.end();++it)
// {
// if(cmv.isMarked(*it) && !map.isBoundaryMarked(*it))
// if(cmv.isMarked(*it) && !map.isBoundaryMarked
3
(*it))
// {
// cmv.unmark(*it);
// cut3Ear<PFP>(map,*it);
...
...
@@ -569,7 +569,7 @@ Dart edgeBisection(typename PFP::MAP& map, Dart d)
std
::
vector
<
Dart
>
edges
;
do
{
if
(
!
map
.
isBoundaryMarked
(
dit
))
if
(
!
map
.
isBoundaryMarked
3
(
dit
))
{
edges
.
push_back
(
map
.
phi_1
(
dit
));
edges
.
push_back
(
map
.
phi_1
(
map
.
phi2
(
map
.
phi_1
(
edges
[
0
]))));
...
...
include/Algo/Parallel/parallel_foreach.hpp
View file @
b75bfd43
...
...
@@ -204,7 +204,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
nbth
*
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
{
cmark
->
mark
(
d
);
vd
[
nb
%
nbth
].
push_back
(
d
);
...
...
@@ -220,7 +220,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
nbth
*
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
{
dmark
->
markOrbit
<
ORBIT
>
(
d
);
vd
[
nb
%
nbth
].
push_back
(
d
);
...
...
@@ -292,7 +292,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
nbth
*
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
{
cmark
->
mark
(
d
);
tempo
[
nb
%
nbth
].
push_back
(
d
);
...
...
@@ -315,7 +315,7 @@ void foreach_cell(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& funcs, bool n
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
nbth
*
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
{
dmark
->
markOrbit
<
ORBIT
>
(
d
);
tempo
[
nb
%
nbth
].
push_back
(
d
);
...
...
@@ -704,7 +704,7 @@ void foreach_cell_all_thread(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& fu
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
{
cmark
->
mark
(
d
);
vd
.
push_back
(
d
);
...
...
@@ -720,7 +720,7 @@ void foreach_cell_all_thread(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& fu
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
{
dmark
->
markOrbit
<
ORBIT
>
(
d
);
vd
.
push_back
(
d
);
...
...
@@ -778,7 +778,7 @@ void foreach_cell_all_thread(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& fu
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
cmark
->
isMarked
(
d
)))
{
cmark
->
mark
(
d
);
tempo
.
push_back
(
d
);
...
...
@@ -799,7 +799,7 @@ void foreach_cell_all_thread(MAP& map, std::vector<FunctorMapThreaded<MAP>*>& fu
unsigned
int
nb
=
0
;
while
((
d
!=
map
.
end
())
&&
(
nb
<
SIZE_BUFFER_THREAD
)
)
{
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
if
(
good
(
d
)
&&
(
!
map
.
isBoundaryMarked
Current
(
d
))
&&
(
!
dmark
->
isMarked
(
d
)))
{
dmark
->
markOrbit
<
ORBIT
>
(
d
);
tempo
.
push_back
(
d
);
...
...
include/Algo/Render/GL2/mapRender.hpp
View file @
b75bfd43
...
...
@@ -336,7 +336,7 @@ void MapRender::initTrianglesOptimized(typename PFP::MAP& map, const FunctorSele
{
std
::
list
<
Dart
>
bound
;
if
(
good
(
dd
)
&&
!
map
.
isBoundaryMarked
(
dd
))
if
(
good
(
dd
)
&&
!
map
.
isBoundaryMarked
Current
(
dd
))
{
if
(
position
==
NULL
)
addTri
<
PFP
>
(
map
,
dd
,
tableIndices
);
...
...
@@ -362,7 +362,7 @@ void MapRender::initTrianglesOptimized(typename PFP::MAP& map, const FunctorSele
{
if
(
!
m
.
isMarked
(
f
))
{
if
(
good
(
f
)
&&
!
map
.
isBoundaryMarked
(
f
))
if
(
good
(
f
)
&&
!
map
.
isBoundaryMarked
Current
(
f
))
{
if
(
position
==
NULL
)
addTri
<
PFP
>
(
map
,
f
,
tableIndices
);
...
...
include/Algo/Render/GL2/topo3Render.hpp
View file @
b75bfd43
...
...
@@ -208,7 +208,7 @@ void Topo3Render::updateDataMap3(typename PFP::MAP& mapx, const VertexAttribute<
m_nbRel2
++
;
}
e
=
mapx
.
phi3
(
d
);
if
(
!
mapx
.
isBoundaryMarked
(
e
)
&&
(
d
<
e
)
&&
good
(
d
)
&&
good
(
e
))
if
(
!
mapx
.
isBoundaryMarked
3
(
e
)
&&
(
d
<
e
)
&&
good
(
d
)
&&
good
(
e
))
{
*
positionF3
++
=
fv2
[
d
];
*
positionF3
++
=
fv2x
[
e
];
...
...
@@ -485,7 +485,7 @@ void Topo3Render::updateDataGMap3(typename PFP::MAP& mapx, const VertexAttribute
m_nbRel2
++
;
}
e
=
map
.
beta3
(
d
);
if
(
!
map
.
isBoundaryMarked
(
e
)
&&
(
d
<
e
))
if
(
!
map
.
isBoundaryMarked
3
(
e
)
&&
(
d
<
e
))
{
*
positionF3
++
=
fv2
[
d
];
*
positionF3
++
=
fv2x
[
e
];
...
...
@@ -504,7 +504,7 @@ void Topo3Render::updateDataGMap3(typename PFP::MAP& mapx, const VertexAttribute
m_nbRel2
++
;
}
e
=
map
.
beta3
(
d
);
if
(
!
map
.
isBoundaryMarked
(
e
)
&&
(
d
<
e
))
if
(
!
map
.
isBoundaryMarked
3
(
e
)
&&
(
d
<
e
))
{
*
positionF3
++
=
fv2
[
d
];
*
positionF3
++
=
fv2x
[
e
];
...
...
@@ -745,7 +745,7 @@ void Topo3Render::computeDartMiddlePositions(typename PFP::MAP& map, DartAttribu
// m_nbRel2++;
// }
// e = map.phi3(d);
// if (!map.isBoundaryMarked(e) && (d < e))
// if (!map.isBoundaryMarked
3
(e) && (d < e))
// {
// *positionF3++ = fv2[d];
// *positionF3++ = fv2x[e];
...
...
include/Topology/generic/functor.h
View file @
b75bfd43
...
...
@@ -146,6 +146,9 @@ public:
FunctorSelect
*
copy
()
const
{
return
new
SelectorEdgeNoBoundary
(
m_map
);}
};
/**
* Selector for darts of boundary (of current dimension)
*/
template
<
typename
MAP
>
class
SelectorDartBoundary
:
public
FunctorSelect
{
...
...
@@ -154,10 +157,13 @@ protected:
MAP
&
m_map
;
public:
SelectorDartBoundary
(
MAP
&
m
)
:
m_map
(
m
)
{}
bool
operator
()(
Dart
d
)
const
{
return
m_map
.
isBoundaryMarked
(
d
);
}
bool
operator
()(
Dart
d
)
const
{
return
m_map
.
isBoundaryMarked
Current
(
d
);
}
FunctorSelect
*
copy
()
const
{
return
new
SelectorDartBoundary
(
m_map
);}
};
/**
* Selector for darts not of boundary (of current dimension)
*/
template
<
typename
MAP
>
class
SelectorDartNoBoundary
:
public
FunctorSelect
...
...
@@ -167,7 +173,7 @@ protected:
MAP
&
m_map
;
public:
SelectorDartNoBoundary
(
MAP
&
m
)
:
m_map
(
m
)
{}
bool
operator
()(
Dart
d
)
const
{
return
!
m_map
.
isBoundaryMarked
(
d
);
}
bool
operator
()(
Dart
d
)
const
{
return
!
m_map
.
isBoundaryMarked
Current
(
d
);
}
FunctorSelect
*
copy
()
const
{
return
new
SelectorDartNoBoundary
(
m_map
);}
};
...
...
@@ -372,7 +378,7 @@ public:
FunctorStoreNotBoundary
(
MAP
&
map
,
std
::
vector
<
Dart
>&
vec
)
:
FunctorMap
<
MAP
>
(
map
),
m_vec
(
vec
)
{}
bool
operator
()(
Dart
d
)
{
if
(
!
this
->
m_map
.
isBoundaryMarked
(
d
))
if
(
!
this
->
m_map
.
isBoundaryMarked
Current
(
d
))
m_vec
.
push_back
(
d
);
return
false
;
}
...
...
include/Topology/generic/genericmap.h
View file @
b75bfd43
...
...
@@ -710,41 +710,55 @@ public:
unsigned
int
degree
(
Dart
d
);
protected:
/// boundary marker
Mark
m_boundaryMarker
;
/// boundary markers
// Mark m_boundaryMarker2 ;
// Mark m_boundaryMarker3 ;
Mark
m_boundaryMarkers
[
2
]
;
// 0 for dim 2 / 1 for dim 3
/**
* mark a dart as belonging to boundary
*/
template
<
unsigned
int
D
>
void
boundaryMark
(
Dart
d
)
;
void
boundaryMark2
(
Dart
d
)
;
void
boundaryMark3
(
Dart
d
)
;
/**
* unmark a dart from the boundary
*/
template
<
unsigned
int
D
>
void
boundaryUnmark
(
Dart
d
)
;
void
boundaryUnmark2
(
Dart
d
)
;
void
boundaryUnmark3
(
Dart
d
)
;
public:
/**
* test if a dart belong to the boundary
*/
template
<
unsigned
int
D
>
bool
isBoundaryMarked
(
Dart
d
)
const
;
bool
isBoundaryMarked2
(
Dart
d
)
const
;
bool
isBoundaryMarked3
(
Dart
d
)
const
;
bool
isBoundaryMarkedCurrent
(
Dart
d
)
const
;
protected:
/**
* mark an orbit of dart as belonging to boundary
*/
template
<
unsigned
int
ORBIT
>
template
<
unsigned
int
ORBIT
,
unsigned
int
DIM
>
void
boundaryMarkOrbit
(
Dart
d
)
;
/**
* unmark an orbit of dart from the boundary
*/
template
<
unsigned
int
ORBIT
>
template
<
unsigned
int
ORBIT
,
unsigned
int
DIM
>
void
boundaryUnmarkOrbit
(
Dart
d
)
;
/**
* clear all boundary markers
*/
template
<
unsigned
int
DIM
>
void
boundaryUnmarkAll
()
;
}
;
...
...
include/Topology/generic/genericmap.hpp
View file @
b75bfd43
...
...
@@ -655,19 +655,8 @@ unsigned int GenericMap::degree(Dart d)
return
fcount
.
getNb
()
;
}
template
<
unsigned
int
ORBIT
>
void
GenericMap
::
boundaryMarkOrbit
(
Dart
d
)
{
FunctorMark
<
GenericMap
>
fm
(
*
this
,
m_boundaryMarker
,
m_markTables
[
DART
][
0
])
;
foreach_dart_of_orbit
<
ORBIT
>
(
d
,
fm
,
0
)
;
}
template
<
unsigned
int
ORBIT
>
void
GenericMap
::
boundaryUnmarkOrbit
(
Dart
d
)
{
FunctorUnmark
<
GenericMap
>
fm
(
*
this
,
m_boundaryMarker
,
m_markTables
[
DART
][
0
])
;
foreach_dart_of_orbit
<
ORBIT
>
(
d
,
fm
,
0
)
;
}
/****************************************
* TOPOLOGICAL ATTRIBUTES MANAGEMENT *
...
...
@@ -697,19 +686,82 @@ inline AttributeMultiVector<Dart>* GenericMap::getRelation(const std::string& na
* BOUNDARY MANAGEMENT *
**************************/
template
<
unsigned
int
D
>
inline
void
GenericMap
::
boundaryMark
(
Dart
d
)
{
m_markTables
[
DART
][
0
]
->
operator
[](
dartIndex
(
d
)).
setMark
(
m_boundaryMarker
);
m_markTables
[
DART
][
0
]
->
operator
[](
dartIndex
(
d
)).
setMark
(
m_boundaryMarker
s
[
D
-
2
]
);
}
template
<
unsigned
int
D
>
inline
void
GenericMap
::
boundaryUnmark
(
Dart
d
)
{
m_markTables
[
DART
][
0
]
->
operator
[](
dartIndex
(
d
)).
unsetMark
(
m_boundaryMarker
);
m_markTables
[
DART
][
0
]
->
operator
[](
dartIndex
(
d
)).
unsetMark
(
m_boundaryMarker
s
[
D
-
2
]
);
}
template
<
unsigned
int
D
>
inline
bool
GenericMap
::
isBoundaryMarked
(
Dart
d
)
const
{
return
m_markTables
[
DART
][
0
]
->
operator
[](
dartIndex
(
d
)).
testMark
(
m_boundaryMarker
);
return
m_markTables
[
DART
][
0
]
->
operator
[](
dartIndex
(
d
)).
testMark
(
m_boundaryMarkers
[
D
-
2
]);
}
inline
bool
GenericMap
::
isBoundaryMarkedCurrent
(
Dart
d
)
const
{
return
m_markTables
[
DART
][
0
]
->
operator
[](
dartIndex
(
d
)).
testMark
(
m_boundaryMarkers
[
this
->
dimension
()
-
2
]);
}
inline
void
GenericMap
::
boundaryMark2
(
Dart
d
)
{
boundaryMark
<
2
>
(
d
);
}
inline
void
GenericMap
::
boundaryUnmark2
(
Dart
d
)
{
boundaryUnmark
<
2
>
(
d
);
}
inline
bool
GenericMap
::
isBoundaryMarked2
(
Dart
d
)
const
{
return
isBoundaryMarked
<
2
>
(
d
);
}
inline
void
GenericMap
::
boundaryMark3
(
Dart
d
)
{
boundaryMark
<
3
>
(
d
);
}
inline
void
GenericMap
::
boundaryUnmark3
(
Dart
d
)
{
boundaryUnmark
<
3
>
(
d
);
}
inline
bool
GenericMap
::
isBoundaryMarked3
(
Dart
d
)
const
{
return
isBoundaryMarked
<
3
>
(
d
);
}
template
<
unsigned
int
ORBIT
,
unsigned
int
DIM
>
void
GenericMap
::
boundaryMarkOrbit
(
Dart
d
)
{
FunctorMark
<
GenericMap
>
fm
(
*
this
,
m_boundaryMarkers
[
DIM
-
2
],
m_markTables
[
DART
][
0
])
;
foreach_dart_of_orbit
<
ORBIT
>
(
d
,
fm
,
0
)
;
}
template
<
unsigned
int
ORBIT
,
unsigned
int
DIM
>
void
GenericMap
::
boundaryUnmarkOrbit
(
Dart
d
)
{
FunctorUnmark
<
GenericMap
>
fm
(
*
this
,
m_boundaryMarkers
[
DIM
-
2
],
m_markTables
[
DART
][
0
])
;
foreach_dart_of_orbit
<
ORBIT
>
(
d
,
fm
,
0
)
;
}
template
<
unsigned
int
DIM
>
void
GenericMap
::
boundaryUnmarkAll
()
{
AttributeContainer
&
cont
=
getAttributeContainer
<
DART
>
()
;
for
(
unsigned
int
i
=
cont
.
begin
();
i
!=
cont
.
end
();
cont
.
next
(
i
))
m_markTables
[
DART
][
0
]
->
operator
[](
i
).
unsetMark
(
m_boundaryMarkers
[
DIM
-
1
]);
}
}
//namespace CGoGN
include/Topology/generic/traversor2.hpp
View file @
b75bfd43
...
...
@@ -66,7 +66,7 @@ Dart Traversor2VE<MAP>::next()
template
<
typename
MAP
>
Traversor2VF
<
MAP
>::
Traversor2VF
(
MAP
&
map
,
Dart
dart
)
:
m
(
map
),
start
(
dart
)
{
if
(
m
.
isBoundaryMarked
(
start
))
// jump over a boundary face
if
(
m
.
isBoundaryMarked
2
(
start
))
// jump over a boundary face
start
=
m
.
phi2
(
m
.
phi_1
(
start
))
;
}
...
...
@@ -89,7 +89,7 @@ Dart Traversor2VF<MAP>::next()
if
(
current
!=
NIL
)
{
current
=
m
.
phi2
(
m
.
phi_1
(
current
))
;
if
(
m
.
isBoundaryMarked
(
current
))
// jump over a boundary face
if
(
m
.
isBoundaryMarked
2
(
current
))
// jump over a boundary face
current
=
m
.
phi2
(
m
.
phi_1
(
current
))
;
if
(
current
==
start
)
current
=
NIL
;
...
...
@@ -135,7 +135,7 @@ Dart Traversor2VVaE<MAP>::next()
template
<
typename
MAP
>
Traversor2VVaF
<
MAP
>::
Traversor2VVaF
(
MAP
&
map
,
Dart
dart
)
:
m
(
map
)
{