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
20067814
Commit
20067814
authored
May 12, 2014
by
Pierre Kraemer
Browse files
Merge branch 'develop' of cgogn:~thery/CGoGNMR into develop
parents
7c7c8ab3
1083e150
Changes
10
Hide whitespace changes
Inline
Side-by-side
Apps/Examples/viewer.cpp
View file @
20067814
...
...
@@ -241,7 +241,7 @@ void Viewer::cb_keyPress(int keycode)
if
(
!
pos2
.
isValid
())
pos2
=
myMap
.
addAttribute
<
VEC3
,
VERTEX
>
(
"pos2"
)
;
for
(
int
i
=
0
;
i
<
10
;
++
i
)
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
foreach_cell
<
VERTEX
>
(
myMap
,
[
&
]
(
Vertex
d
)
{
...
...
@@ -263,7 +263,46 @@ void Viewer::cb_keyPress(int keycode)
updateGL
();
}
break
;
case
'B'
:
{
Utils
::
Chrono
ch
;
ch
.
start
();
VertexAttribute
<
VEC3
,
MAP_IMPL
>
pos2
=
myMap
.
getAttribute
<
VEC3
,
VERTEX
>
(
"pos2"
)
;
if
(
!
pos2
.
isValid
())
pos2
=
myMap
.
addAttribute
<
VEC3
,
VERTEX
>
(
"pos2"
)
;
foreach_cell_EvenOddd
<
VERTEX
>
(
myMap
,
[
&
]
(
Vertex
d
)
{
pos2
[
d
]
=
VEC3
(
0
,
0
,
0
);
int
nb
=
0
;
foreach_adjacent2
<
FACE
>
(
myMap
,
d
,[
&
](
Vertex
e
)
{
pos2
[
d
]
+=
position
[
e
];
nb
++
;
});
pos2
[
d
]
/=
nb
;
},
[
&
]
(
Vertex
d
)
{
position
[
d
]
=
VEC3
(
0
,
0
,
0
);
int
nb
=
0
;
foreach_adjacent2
<
FACE
>
(
myMap
,
d
,[
&
](
Vertex
e
)
{
position
[
d
]
+=
pos2
[
e
];
nb
++
;
});
position
[
d
]
/=
nb
;
},
3
);
std
::
cout
<<
"Even/Odd "
<<
ch
.
elapsed
()
<<
" ms "
<<
std
::
endl
;
Algo
::
Surface
::
Geometry
::
computeNormalVertices
<
PFP
>
(
myMap
,
position
,
normal
)
;
m_positionVBO
->
updateData
(
position
)
;
m_normalVBO
->
updateData
(
normal
)
;
updateGL
();
}
break
;
case
'e'
:
{
...
...
@@ -330,6 +369,49 @@ void Viewer::cb_keyPress(int keycode)
}
break
;
case
'A'
:
{
Utils
::
Chrono
ch
;
ch
.
start
();
TraversorCell
<
MAP
,
VERTEX
>
trav
(
myMap
,
true
);
for
(
unsigned
int
i
=
0
;
i
<
10
;
++
i
)
{
for
(
Cell
<
VERTEX
>
v
=
trav
.
begin
(),
e
=
trav
.
end
();
v
.
dart
!=
e
.
dart
;
v
=
trav
.
next
())
{
// normal[v] = Algo::Surface::Geometry::vertexNormal<PFP>(myMap, v, position) ;
normal
[
v
][
0
]
=
0.0
f
;
}
}
std
::
cout
<<
"Timing 10 traversors "
<<
ch
.
elapsed
()
<<
" ms "
<<
std
::
endl
;
}
break
;
case
'Z'
:
{
Utils
::
Chrono
ch
;
ch
.
start
();
TraversorCell
<
MAP
,
VERTEX
>
trav
(
myMap
,
true
);
TraversorCellEven
<
MAP
,
VERTEX
>
tr1
(
trav
);
TraversorCellOdd
<
MAP
,
VERTEX
>
tr2
(
trav
);
for
(
unsigned
int
i
=
0
;
i
<
5
;
++
i
)
{
for
(
Cell
<
VERTEX
>
v
=
tr1
.
begin
(),
e
=
tr1
.
end
();
v
.
dart
!=
e
.
dart
;
v
=
tr1
.
next
())
{
// normal[v] = Algo::Surface::Geometry::vertexNormal<PFP>(myMap, v, position) ;
normal
[
v
][
0
]
=
0.0
f
;
}
for
(
Cell
<
VERTEX
>
v
=
tr2
.
begin
(),
e
=
tr2
.
end
();
v
.
dart
!=
e
.
dart
;
v
=
tr2
.
next
())
{
// normal[v] = Algo::Surface::Geometry::vertexNormal<PFP>(myMap, v, position) ;
normal
[
v
][
0
]
=
0.0
f
;
}
}
std
::
cout
<<
"Timing 5 traversors even/odd "
<<
ch
.
elapsed
()
<<
" ms "
<<
std
::
endl
;
}
break
;
default:
...
...
@@ -360,7 +442,7 @@ void Viewer::importMesh(std::string& filename)
position
=
myMap
.
getAttribute
<
PFP
::
VEC3
,
VERTEX
>
(
attrNames
[
0
])
;
}
myMap
.
enableQuickTraversal
<
VERTEX
>
()
;
//
myMap.enableQuickTraversal<VERTEX>() ;
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
Algo
::
Render
::
GL2
::
POINTS
)
;
m_render
->
initPrimitives
<
PFP
>
(
myMap
,
Algo
::
Render
::
GL2
::
LINES
)
;
...
...
Apps/Tuto/Attributes/multi_attribs.cpp
View file @
20067814
...
...
@@ -50,7 +50,13 @@ typedef PFP::VEC4 VEC4;
/**
* Example of function that work with any kin of Vertex Attribute
* Example of function that work with any kind of Vertex Attribute (normal/2/3/4)
*
* operators on multi-attribute are limited to:
* affectation
* +, -, +=, -=
* *(double) /(double) *=(double) /=(double)
*
*/
template
<
typename
MAP
,
typename
ATT
>
typename
ATT
::
DATA_TYPE
smooth
(
MAP
&
map
,
Vertex
v
,
const
ATT
&
attributs
)
...
...
Apps/Tuto/Attributes/simple_attribs.cpp
View file @
20067814
...
...
@@ -46,10 +46,11 @@ typedef PFP::MAP::IMPL MAP_IMPL ; // map implementation
typedef
PFP
::
VEC3
VEC3
;
// type of R³ vector
/**
* @brief get attribute
* @param map
* @brief test if map has a Vertex Attribute of VEC3 named name
* @param map the map
* @param name name of attribute
*/
void
byNames
(
MAP
&
map
,
const
std
::
string
&
name
)
void
testVA
byNames
(
MAP
&
map
,
const
std
::
string
&
name
)
{
VertexAttribute
<
VEC3
,
MAP_IMPL
>
testPos
=
map
.
getAttribute
<
VEC3
,
VERTEX
>
(
name
);
if
(
testPos
.
isValid
())
...
...
@@ -60,6 +61,7 @@ void byNames(MAP& map, const std::string& name)
/**
* @brief computeLengthEdges
* Demonstrate usage of 2 attributes on 2 differents orbits.
* @param map the map
* @param pos attribute handler of position of vertices
* @param len attribute handler of length of edges
...
...
@@ -76,10 +78,12 @@ void computeLengthEdges(MAP& map,const VertexAttribute<VEC3, MAP_IMPL>& pos, Edg
});
}
/**
* @brief computeNewPositions Demonstrate the usage of AutoAttributes
*/
void
computeNewPositions
(
MAP
&
map
,
VertexAttribute
<
VEC3
,
MAP_IMPL
>&
pos
)
{
// here we need new and old positions simultaneously so create temporary position
// here we need new and old positions simultaneously so create temporary
attribute
position
VertexAutoAttribute
<
VEC3
,
MAP_IMPL
>
pos2
(
map
);
...
...
@@ -96,7 +100,10 @@ void computeNewPositions(MAP& map, VertexAttribute<VEC3, MAP_IMPL>& pos)
});
// swap attribute position with temporary (constant complexity !)
// only possible with same type and same orbit attribute.
map
.
swapAttributes
(
pos
,
pos2
);
// destruction of VertexAutoAttribute handller remove the attribute from the map.
}
/**
...
...
@@ -134,6 +141,8 @@ int main()
grid
.
embedIntoGrid
(
positionAtt
,
1.
,
1.
,
0.
);
// ATTRIBUTE DECLARATION
// add an attribute of type float on orbit EDGE
EdgeAttribute
<
float
,
MAP_IMPL
>
lengthAtt
=
myMap
.
addAttribute
<
float
,
EDGE
>
(
"length"
);
if
(
!
lengthAtt
.
isValid
())
...
...
@@ -157,6 +166,9 @@ int main()
// define a face from a dart
Face
f
(
d
);
// ATTRIBUTE ACCESS
// [] operator can take a dart, a cell (only same off attribute), or an unsigned inf
// access to any attributes with darts
std
::
cout
<<
positionAtt
[
d
]
<<
std
::
endl
;
...
...
@@ -173,11 +185,15 @@ int main()
// access to FaceAttribute with a Face
std
::
cout
<<
nameAtt
[
f
]
<<
std
::
endl
;
// following line does not compile because of wrong cell type
// std::cout << positionAtt[f]<< std::endl;
// possible to bypass using dart access
// following line does not compile because of wrong cell type
// std::cout << positionAtt[f]<< std::endl;
// possible to bypass using dart access
std
::
cout
<<
positionAtt
[
f
.
dart
]
<<
std
::
endl
;
// access with unsigned int is dangerous, index must be obtain with begin/end/next (see dumpAttribute)
// COPY, REMOVE, SWAP
// possible to have any number of attribute a same ORBIT
VertexAttribute
<
VEC3
,
MAP_IMPL
>
position2Att
=
myMap
.
addAttribute
<
VEC3
,
VERTEX
>
(
"other_position"
);
...
...
@@ -187,14 +203,16 @@ int main()
positionAtt
[
v
]
+=
VEC3
(
0
,
0
,
1
);
computeNewPositions
(
myMap
,
positionAtt
);
dumpAttribute
(
positionAtt
);
byNames
(
myMap
,
"position"
);
//check if there is a Vertex Attribute of VEC3 named position => yes
testVAbyNames
(
myMap
,
"position"
);
myMap
.
removeAttribute
<
VEC3
,
VERTEX
>
(
positionAtt
);
// remove the attribute
myMap
.
removeAttribute
(
positionAtt
);
byNames
(
myMap
,
"position"
);
//check if there is a Vertex Attribute of VEC3 named position => no
testVAbyNames
(
myMap
,
"position"
);
return
0
;
...
...
Apps/Tuto/Traversals/traverse_cells.cpp
View file @
20067814
...
...
@@ -140,5 +140,28 @@ int main()
std
::
cout
<<
"Total="
<<
surf
[
0
]
+
surf
[
1
]
+
surf
[
2
]
+
surf
[
3
]
<<
std
::
endl
;
TraversorV
<
MAP
>
tv0
(
myMap
);
TraversorCellEven
<
MAP
,
VERTEX
>
tv1
(
tv0
);
TraversorCellOdd
<
MAP
,
VERTEX
>
tv2
(
tv0
);
std
::
cout
<<
"PAIR:"
;
for
(
Dart
d
=
tv1
.
begin
();
d
!=
tv1
.
end
();
d
=
tv1
.
next
())
// traverse all vertices (d one dart of each vertex)
std
::
cout
<<
d
<<
" / "
;
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"IMPPAIR:"
;
for
(
Dart
d
=
tv2
.
begin
();
d
!=
tv2
.
end
();
d
=
tv2
.
next
())
// traverse all vertices (d one dart of each vertex)
std
::
cout
<<
d
<<
" / "
;
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"PAIR:"
;
for
(
Dart
d
=
tv1
.
begin
();
d
!=
tv1
.
end
();
d
=
tv1
.
next
())
// traverse all vertices (d one dart of each vertex)
std
::
cout
<<
d
<<
" / "
;
std
::
cout
<<
std
::
endl
;
std
::
cout
<<
"IMPPAIR:"
;
for
(
Dart
d
=
tv2
.
begin
();
d
!=
tv2
.
end
();
d
=
tv2
.
next
())
// traverse all vertices (d one dart of each vertex)
std
::
cout
<<
d
<<
" / "
;
std
::
cout
<<
std
::
endl
;
return
0
;
}
include/Algo/Render/GL2/mapRender.hpp
View file @
20067814
...
...
@@ -27,8 +27,6 @@
#include
"Topology/generic/cellmarker.h"
#include
"Topology/generic/traversor/traversorCell.h"
//#include "Utils/vbo.h"
#include
"Geometry/intersection.h"
#include
"Algo/Geometry/normal.h"
...
...
include/Algo/Topo/simplex.h
0 → 100644
View file @
20067814
/*******************************************************************************
* CGoGN: Combinatorial and Geometric modeling with Generic N-dimensional Maps *
* version 0.1 *
* Copyright (C) 2009-2012, IGG Team, LSIIT, University of Strasbourg *
* *
* This library is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by the *
* Free Software Foundation; either version 2.1 of the License, or (at your *
* option) any later version. *
* *
* This library is distributed in the hope that it will be useful, but WITHOUT *
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License *
* for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this library; if not, write to the Free Software Foundation, *
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
* *
* Web site: http://cgogn.unistra.fr/ *
* Contact information: cgogn@unistra.fr *
* *
*******************************************************************************/
#ifndef __SIMPLEX__
#define __SIMPLEX__
#include
"Topology/generic/cells.h"
namespace
CGoGN
{
namespace
Algo
{
namespace
Topo
{
template
<
typename
MAP
,
unsigned
int
ORBIT
>
bool
isSimplex
(
const
MAP
&
map
,
Dart
d
)
{
if
(
ORBIT
==
VOLUME
)
{
Dart
d1
=
map
.
phi2
(
d
);
Dart
e
=
map
.
phi1
(
d
);
Dart
d2
=
map
.
phi2
(
e
);
e
=
map
.
phi1
(
e
);
Dart
d3
=
map
.
phi2
(
d
);
if
(
map
.
phi1
(
e
)
!=
d
)
// check that face of d is a triangle
return
false
;
if
(
map
.
phi_1
(
d1
)
!=
map
.
template
phi
<
12
>(
d2
))
return
false
;
if
(
map
.
phi_1
(
d2
)
!=
map
.
template
phi
<
12
>(
d3
))
return
false
;
if
(
map
.
phi_1
(
d3
)
!=
map
.
template
phi
<
12
>(
d1
))
return
false
;
if
(
!
map
.
isCycleTriangle
(
d1
))
return
false
;
if
(
!
map
.
isCycleTriangle
(
d2
))
return
false
;
if
(
!
map
.
isCycleTriangle
(
d3
))
return
false
;
return
true
;
}
if
(
ORBIT
==
FACE
)
{
return
map
.
isCycleTriangle
(
d
);
}
return
true
;
}
}
// namespace Topo
}
// namespace Algo
}
// namespace CGoGN
#endif
include/Topology/generic/simplices.h
View file @
20067814
...
...
@@ -27,7 +27,7 @@
#include
<iostream>
#include
"cells.h"
#include
"Algo/Topo/
Generic/
simplex.h"
#include
"Algo/Topo/simplex.h"
namespace
CGoGN
{
...
...
include/Topology/generic/traversor/traversorCell.h
View file @
20067814
...
...
@@ -39,7 +39,7 @@ namespace CGoGN
template
<
typename
MAP
,
unsigned
int
ORBIT
>
class
TraversorCell
//: public Traversor<MAP>
{
pr
ivate
:
pr
otected
:
const
MAP
&
m
;
unsigned
int
dimension
;
...
...
@@ -53,6 +53,9 @@ private:
Cell
<
ORBIT
>
current
;
bool
firstTraversal
;
// just for odd/even versions
TraversorCell
(
const
TraversorCell
<
MAP
,
ORBIT
>&
tc
);
public:
TraversorCell
(
const
MAP
&
map
,
bool
forceDartMarker
=
false
,
unsigned
int
thread
=
0
)
;
...
...
@@ -65,10 +68,40 @@ public:
inline
Cell
<
ORBIT
>
next
()
;
inline
void
skip
(
Cell
<
ORBIT
>
c
);
inline
unsigned
int
nbCells
();
}
;
template
<
typename
MAP
,
unsigned
int
ORBIT
>
class
TraversorCellEven
:
public
TraversorCell
<
MAP
,
ORBIT
>
{
public:
TraversorCellEven
(
const
TraversorCell
<
MAP
,
ORBIT
>&
tra
)
:
TraversorCell
<
MAP
,
ORBIT
>
(
tra
)
{}
~
TraversorCellEven
()
{
this
->
cmark
=
NULL
;
this
->
dmark
=
NULL
;
}
inline
Cell
<
ORBIT
>
begin
()
;
}
;
template
<
typename
MAP
,
unsigned
int
ORBIT
>
class
TraversorCellOdd
:
public
TraversorCell
<
MAP
,
ORBIT
>
{
public:
TraversorCellOdd
(
const
TraversorCell
<
MAP
,
ORBIT
>&
tra
)
:
TraversorCell
<
MAP
,
ORBIT
>
(
tra
)
{}
~
TraversorCellOdd
()
{
this
->
cmark
=
NULL
;
this
->
dmark
=
NULL
;
}
inline
Cell
<
ORBIT
>
begin
()
;
inline
Cell
<
ORBIT
>
next
()
;
}
;
/*
* Executes function f on each ORBIT
*/
...
...
@@ -92,10 +125,34 @@ inline void foreach_cell_until(const MAP& map, FUNC f, bool forceDartMarker = fa
break
;
}
template
<
unsigned
int
ORBIT
,
typename
MAP
,
typename
FUNC
,
typename
FUNC2
>
inline
void
foreach_cell_EvenOddd
(
const
MAP
&
map
,
FUNC
f
,
FUNC2
g
,
unsigned
int
nbpasses
=
1
,
bool
forceDartMarker
=
false
,
unsigned
int
thread
=
0
)
{
TraversorCell
<
MAP
,
ORBIT
>
trav
(
map
,
forceDartMarker
,
thread
);
TraversorCellEven
<
MAP
,
VERTEX
>
tr1
(
trav
);
TraversorCellOdd
<
MAP
,
VERTEX
>
tr2
(
trav
);
for
(
unsigned
int
i
=
0
;
i
<
nbpasses
;
++
i
)
{
for
(
Cell
<
ORBIT
>
c
=
trav
.
begin
(),
e
=
trav
.
end
();
c
.
dart
!=
e
.
dart
;
c
=
trav
.
next
())
f
(
c
);
for
(
Cell
<
ORBIT
>
c
=
trav
.
begin
(),
e
=
trav
.
end
();
c
.
dart
!=
e
.
dart
;
c
=
trav
.
next
())
g
(
c
);
}
}
namespace
Parallel
{
template
<
unsigned
int
ORBIT
,
typename
MAP
,
typename
FUNC
>
void
foreach_cell
(
MAP
&
map
,
FUNC
func
,
unsigned
int
nbth
=
0
,
bool
needMarkers
=
true
);
template
<
unsigned
int
ORBIT
,
typename
MAP
,
typename
FUNC_E
,
typename
FUNC_O
>
void
foreach_cell_EO
(
MAP
&
map
,
FUNC_E
funcEven
,
FUNC_O
funcOdd
,
unsigned
int
nbth
=
0
,
bool
needMarkers
=
true
);
}
template
<
typename
MAP
>
...
...
include/Topology/generic/traversor/traversorCell.hpp
View file @
20067814
...
...
@@ -54,6 +54,25 @@ TraversorCell<MAP, ORBIT>::TraversorCell(const MAP& map, bool forceDartMarker, u
}
}
template
<
typename
MAP
,
unsigned
int
ORBIT
>
unsigned
int
TraversorCell
<
MAP
,
ORBIT
>::
nbCells
()
{
return
m
.
template
getAttributeContainer
<
ORBIT
>().
size
();
}
template
<
typename
MAP
,
unsigned
int
ORBIT
>
TraversorCell
<
MAP
,
ORBIT
>::
TraversorCell
(
const
TraversorCell
<
MAP
,
ORBIT
>&
tc
)
:
m
(
tc
.
m
),
dmark
(
tc
.
dmark
),
cmark
(
tc
.
cmark
),
quickTraversal
(
tc
.
quickTraversal
),
current
(
tc
.
current
),
firstTraversal
(
tc
.
firstTraversal
),
dimension
(
tc
.
dimension
)
{
}
template
<
typename
MAP
,
unsigned
int
ORBIT
>
TraversorCell
<
MAP
,
ORBIT
>::~
TraversorCell
()
{
...
...
@@ -166,6 +185,94 @@ void TraversorCell<MAP, ORBIT>::skip(Cell<ORBIT> c)
template
<
typename
MAP
,
unsigned
int
ORBIT
>
Cell
<
ORBIT
>
TraversorCellEven
<
MAP
,
ORBIT
>::
begin
()
{
Cell
<
ORBIT
>
c
=
TraversorCell
<
MAP
,
ORBIT
>::
begin
();
this
->
firstTraversal
=
true
;
return
c
;
}
template
<
typename
MAP
,
unsigned
int
ORBIT
>
Cell
<
ORBIT
>
TraversorCellOdd
<
MAP
,
ORBIT
>::
begin
()
{
if
(
this
->
quickTraversal
!=
NULL
)
{
this
->
qCurrent
=
this
->
cont
->
begin
()
;
this
->
current
.
dart
=
this
->
quickTraversal
->
operator
[](
this
->
qCurrent
);
}
else
{
this
->
current
.
dart
=
this
->
m
.
begin
()
;
while
(
this
->
current
.
dart
!=
this
->
m
.
end
()
&&
(
this
->
m
.
isBoundaryMarked
(
this
->
dimension
,
this
->
current
.
dart
)
))
this
->
m
.
next
(
this
->
current
.
dart
)
;
if
(
this
->
current
.
dart
==
this
->
m
.
end
())
this
->
current
.
dart
=
NIL
;
else
{
if
(
this
->
dmark
)
this
->
dmark
->
template
unmarkOrbit
<
ORBIT
>(
this
->
current
.
dart
)
;
else
this
->
cmark
->
unmark
(
this
->
current
)
;
}
}
return
this
->
current
;
}
template
<
typename
MAP
,
unsigned
int
ORBIT
>
Cell
<
ORBIT
>
TraversorCellOdd
<
MAP
,
ORBIT
>::
next
()
{
assert
(
this
->
current
.
dart
!=
NIL
);
if
(
this
->
quickTraversal
!=
NULL
)
{
this
->
cont
->
next
(
this
->
qCurrent
)
;
if
(
this
->
qCurrent
!=
this
->
cont
->
end
())
this
->
current
.
dart
=
this
->
quickTraversal
->
operator
[](
this
->
qCurrent
)
;
else
this
->
current
.
dart
=
NIL
;
}
else
{
if
(
this
->
dmark
)
{
bool
ismarked
=
this
->
dmark
->
isMarked
(
this
->
current
.
dart
)
;
while
(
this
->
current
.
dart
!=
NIL
&&
(
!
ismarked
||
this
->
m
.
isBoundaryMarked
(
this
->
dimension
,
this
->
current
.
dart
)))
{
this
->
m
.
next
(
this
->
current
.
dart
)
;
if
(
this
->
current
.
dart
==
this
->
m
.
end
())
this
->
current
.
dart
=
NIL
;
else
ismarked
=
this
->
dmark
->
isMarked
(
this
->
current
.
dart
)
;
}
if
(
this
->
current
.
dart
!=
NIL
)
this
->
dmark
->
template
unmarkOrbit
<
ORBIT
>(
this
->
current
.
dart
)
;
}
else
{
bool
ismarked
=
this
->
cmark
->
isMarked
(
this
->
current
)
;
while
(
this
->
current
.
dart
!=
NIL
&&
(
!
ismarked
||
this
->
m
.
isBoundaryMarked
(
this
->
dimension
,
this
->
current
.
dart
)
))
{
this
->
m
.
next
(
this
->
current
.
dart
)
;
if
(
this
->
current
.
dart
==
this
->
m
.
end
())
this
->
current
.
dart
=
NIL
;
else
ismarked
=
this
->
cmark
->
isMarked
(
this
->
current
)
;
}
if
(
this
->
current
.
dart
!=
NIL
)
this
->
cmark
->
unmark
(
this
->
current
)
;
}
}
return
this
->
current
;
}
namespace
Parallel
{
...
...
include/Utils/textureSticker.h
View file @
20067814
...
...
@@ -25,7 +25,7 @@
#ifndef _CGOGN_TEXTURESTICKER_H_
#define _CGOGN_TEXTURESTICKER_H_
#include
"Utils/vbo.h"
#include
"Utils/vbo
_base
.h"
#include
"Utils/Shaders/shaderSimpleTexture.h"
#include
"Utils/Shaders/shaderTextureDepth.h"
#include
"Utils/gl_def.h"
...
...
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