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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Thomas Pitiot
CGoGN
Commits
773d5647
Commit
773d5647
authored
Nov 13, 2012
by
Sylvain Thery
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of cgogn:~cazier/CGoGN
Conflicts: Apps/deprecated/tutoriel.cpp include/Topology/generic/dartmarker.h
parents
42cca519
58dd1c2f
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
1267 additions
and
984 deletions
+1267
-984
Apps/deprecated/tutoriel.cpp
Apps/deprecated/tutoriel.cpp
+34
-306
Apps/deprecated/tutoriel.h
Apps/deprecated/tutoriel.h
+1
-1
include/Algo/MovingObjects/particle_base.h
include/Algo/MovingObjects/particle_base.h
+20
-19
include/Algo/MovingObjects/particle_cell_2D.h
include/Algo/MovingObjects/particle_cell_2D.h
+59
-51
include/Algo/MovingObjects/particle_cell_2D.hpp
include/Algo/MovingObjects/particle_cell_2D.hpp
+197
-199
include/Algo/MovingObjects/particle_cell_2D_memo.h
include/Algo/MovingObjects/particle_cell_2D_memo.h
+27
-14
include/Algo/MovingObjects/particle_cell_2D_memo.hpp
include/Algo/MovingObjects/particle_cell_2D_memo.hpp
+254
-139
include/Algo/MovingObjects/particle_cell_2DandHalf.hpp
include/Algo/MovingObjects/particle_cell_2DandHalf.hpp
+44
-44
include/Algo/MovingObjects/particle_cell_2DandHalf_memo.h
include/Algo/MovingObjects/particle_cell_2DandHalf_memo.h
+61
-0
include/Algo/MovingObjects/particle_cell_2DandHalf_memo.hpp
include/Algo/MovingObjects/particle_cell_2DandHalf_memo.hpp
+307
-0
include/Geometry/vector_gen.h
include/Geometry/vector_gen.h
+45
-42
include/Geometry/vector_gen.hpp
include/Geometry/vector_gen.hpp
+81
-80
include/Topology/generic/dartmarker.h
include/Topology/generic/dartmarker.h
+137
-89
No files found.
Apps/deprecated/tutoriel.cpp
View file @
773d5647
...
@@ -48,13 +48,13 @@
...
@@ -48,13 +48,13 @@
using
namespace
CGoGN
;
using
namespace
CGoGN
;
// déclaration de la classe utilisée pour le TP
// déclaration de la classe utilisée pour le TP
class
Map2TP
;
class
QuadMesh
;
// definition de la structure qui decrit le type de carte utilise
// definition de la structure qui decrit le type de carte utilise
struct
PFP
:
public
PFP_STANDARD
struct
PFP
:
public
PFP_STANDARD
{
{
// definition of the map
// definition of the map
typedef
Map2TP
MAP
;
typedef
QuadMesh
MAP
;
};
};
// fonction qui renvoit vrai (pour sélectioner tous les brins)
// fonction qui renvoit vrai (pour sélectioner tous les brins)
...
@@ -85,7 +85,7 @@ AttributeHandler<PFP::VEC3> normal;
...
@@ -85,7 +85,7 @@ AttributeHandler<PFP::VEC3> normal;
/// Assigner un plongement à un sommet (celui du brin d)
/// Assigner un plongement à un sommet (celui du brin d)
/// embedVertex(d,P);
/// embedVertex(d,P);
class
Map2TP
:
public
Map2
class
QuadMesh
:
public
Embedded
Map2
{
{
private:
private:
// 3 brins de la carte
// 3 brins de la carte
...
@@ -99,263 +99,14 @@ private:
...
@@ -99,263 +99,14 @@ private:
}
}
public:
public:
// Fonction Carre: construit un carre et renvoit un brin
void
createMesh
()
{
Dart
Carre
()
{
Point3D
P
[
4
];
P
[
0
]
=
Point3D
(
0.0
f
,
0.0
f
,
0.0
f
);
P
[
1
]
=
Point3D
(
1.0
f
,
0.0
f
,
0.0
f
);
P
[
2
]
=
Point3D
(
1.0
f
,
1.0
f
,
0.0
f
);
P
[
3
]
=
Point3D
(
0.0
f
,
1.0
f
,
0.0
f
);
Dart
d0
=
newOrientedFace
(
4
);
position
[
d0
]
=
P
[
0
];
Dart
d1
=
phi1
(
d0
);
position
[
d1
]
=
P
[
1
];
Dart
d2
=
phi1
(
d1
);
position
[
d2
]
=
P
[
2
];
Dart
d3
=
phi1
(
d2
);
position
[
d3
]
=
P
[
3
];
return
d0
;
}
// Fonction Triangle: construit un triangle et renvoit un brin
Dart
Triangle
()
{
Point3D
P
[
3
];
P
[
0
]
=
Point3D
(
0.0
f
,
1.1
f
,
0.0
f
);
P
[
1
]
=
Point3D
(
1.0
f
,
1.1
f
,
0.0
f
);
P
[
2
]
=
Point3D
(
0.5
f
,
2.0
f
,
0.0
f
);
Dart
d0
=
newOrientedFace
(
3
);
position
[
d0
]
=
P
[
0
];
Dart
d1
=
phi1
(
d0
);
position
[
d1
]
=
P
[
1
];
Dart
d2
=
phi1
(
d1
);
position
[
d2
]
=
P
[
2
];
return
d0
;
}
// Construit un polygone de taille "size"
Dart
Polygone
(
Point3D
*
P
,
unsigned
size
)
{
Dart
d
=
newOrientedFace
(
size
);
for
(
unsigned
i
=
0
;
i
<
size
;
i
++
)
{
position
[
d
]
=
P
[
i
];
d
=
phi1
(
d
);
}
return
d
;
}
// appel clavier touche 'c'
void
Colle
(
Dart
d
,
Dart
e
)
{
Point3D
p
=
position
[
d
];
Point3D
q
=
position
[
phi1
(
d
)];
phi2sew
(
d
,
e
);
newVertex
(
d
);
position
[
d
]
=
p
;
newVertex
(
e
);
position
[
e
]
=
q
;
}
// appel clavier touche 'm'
void
ColleMilieu
(
Dart
d
,
Dart
e
)
{
Point3D
p1
=
position
[
d
];
Point3D
p2
=
position
[
phi1
(
d
)];
Point3D
q1
=
position
[
e
];
Point3D
q2
=
position
[
phi1
(
e
)];
Point3D
m1
=
(
p1
+
q2
)
/
2
;
Point3D
m2
=
(
q1
+
p2
)
/
2
;;
phi2sew
(
d
,
e
);
newVertex
(
d
);
position
[
d
]
=
m1
;
newVertex
(
e
);
position
[
e
]
=
m2
;
}
// Construit une figure
Dart
MultiFaces
()
{
Point3D
P
[
6
];
P
[
0
]
=
Point3D
(
2.0
f
,
0.0
f
,
0.0
f
);
P
[
1
]
=
Point3D
(
3.0
f
,
0.0
f
,
0.0
f
);
P
[
2
]
=
Point3D
(
3.5
f
,
1.0
f
,
0.0
f
);
P
[
3
]
=
Point3D
(
3.0
f
,
1.8
f
,
0.0
f
);
P
[
4
]
=
Point3D
(
2.0
f
,
1.8
f
,
0.0
f
);
P
[
5
]
=
Point3D
(
1.5
f
,
1.0
f
,
0.0
f
);
Dart
hexa
=
Polygone
(
P
,
6
);
Point3D
Q
[
3
];
Q
[
0
]
=
Point3D
(
2.0
f
,
2.0
f
,
0.0
f
);
Q
[
1
]
=
Point3D
(
3.0
f
,
2.0
f
,
0.0
f
);
Q
[
2
]
=
Point3D
(
2.5
f
,
3.0
f
,
0.0
f
);
Dart
triangle
=
Polygone
(
Q
,
3
);
Point3D
R
[
4
];
R
[
0
]
=
Point3D
(
4.0
f
,
0.0
f
,
0.0
f
);
R
[
1
]
=
Point3D
(
5.0
f
,
0.0
f
,
0.0
f
);
R
[
2
]
=
Point3D
(
5.0
f
,
1.0
f
,
0.0
f
);
R
[
3
]
=
Point3D
(
4.0
f
,
1.0
f
,
0.0
f
);
Dart
carre
=
Polygone
(
R
,
4
);
Point3D
S
[
3
];
S
[
0
]
=
Point3D
(
4.0
f
,
1.2
f
,
0.0
f
);
S
[
1
]
=
Point3D
(
5.0
f
,
1.2
f
,
0.0
f
);
S
[
2
]
=
Point3D
(
4.5
f
,
2.2
f
,
0.0
f
);
Dart
triangle2
=
Polygone
(
S
,
3
);
Dart
haut_carre
=
phi1
(
phi1
(
carre
));
Dart
hexa2
=
phi1
(
phi1
(
phi1
(
hexa
)));
// Test du phi1Sew
// myMap.phi1sew(hexa,hexa2);
// myMap.phi1sew(myMap.phi1(hexa),myMap.phi_1(carre));
// Génére un maillage à la fin
Colle
(
haut_carre
,
triangle2
);
Colle
(
hexa2
,
triangle
);
Colle
(
phi_1
(
triangle2
),
phi_1
(
hexa2
));
Colle
(
phi1
(
hexa
),
phi_1
(
carre
));
return
hexa
;
}
// Fonction de creation de la carte (appelee par le main)
void
createMap
()
{
d_carre
=
Carre
();
d_tri
=
Triangle
();
d_multiFaces
=
MultiFaces
();
Colle
(
phi1
(
phi1
(
d_carre
)),
d_tri
);
Colle
(
phi_1
(
d_multiFaces
),
phi1
(
d_carre
));
Colle
(
phi_1
(
phi_1
(
d_multiFaces
)),
phi1
(
d_tri
));
}
// Touche x
void
coupeFace
(
Dart
d
,
Dart
e
)
{
Point3D
p
=
position
[
phi1
(
d
)];
Point3D
q
=
position
[
phi1
(
e
)];
Dart
dd
=
newOrientedFace
(
2
);
Dart
ee
=
phi1
(
dd
);
phi1sew
(
d
,
dd
);
phi1sew
(
e
,
ee
);
phi2sew
(
dd
,
ee
);
newVertex
(
ee
);
position
[
ee
]
=
p
;
newVertex
(
dd
);
position
[
dd
]
=
q
;
}
}
// Touche y
void
coupeArete
(
Dart
d
)
{
void
coupeArete
(
Dart
d
)
{
Point3D
p
=
position
[
d
];
Point3D
p
=
position
[
d
];
Point3D
q
=
position
[
phi1
(
d
)];
Point3D
q
=
position
[
phi1
(
d
)];
Point3D
milieu
=
(
p
+
q
+
Point3D
(
0.2
f
,
0.2
f
,
0.0
f
)
/* decalage pour voir le point */
)
/
2
;
Point3D
milieu
=
(
p
+
q
+
Point3D
(
0.2
f
,
0.2
f
,
0.0
f
)
/* decalage pour voir le point */
)
/
2
;
Dart
dd
=
newDart
();
phi1sew
(
d
,
dd
);
Dart
e
=
phi2
(
d
);
if
(
e
!=
d
)
{
Dart
ee
=
newDart
();
phi1sew
(
e
,
ee
);
phi2unsew
(
d
);
phi2sew
(
d
,
ee
);
phi2sew
(
e
,
dd
);
}
newVertex
(
dd
);
position
[
dd
]
=
milieu
;
}
// Touche z
void
arrondi
(
Dart
d
)
{
Dart
e
=
phi_1
(
d
);
coupeArete
(
d
);
coupeArete
(
e
);
e
=
phi1
(
e
);
Point3D
P
=
position
[
d
];
Point3D
Q
=
position
[
e
];
Point3D
R
=
position
[
phi1
(
d
)];
Point3D
M
=
(
P
+
P
+
Q
+
R
)
/
4
;
position
[
d
]
=
M
;
}
unsigned
face_size
(
Dart
d
)
{
unsigned
n
=
0
;
Dart
e
=
d
;
do
{
n
++
;
e
=
phi1
(
e
);
}
while
(
e
!=
d
);
return
n
;
}
// Touche p
void
triangule
()
{
Dart
d
;
for
(
d
=
begin
();
d
!=
end
();)
{
if
(
face_size
(
d
)
>
3
)
{
coupeFace
(
d
,
phi1
(
phi1
(
d
)));
}
else
{
next
(
d
);
}
}
}
// Touche q
void
fusionSommet
(
Dart
d
)
{
Point3D
P
=
position
[
d
];
Point3D
Q
=
position
[
phi1
(
d
)];
Point3D
M
=
(
P
+
Q
)
/
2
;
// On attrape des pointeurs sur les brins à manipuler
Dart
dd
=
phi1
(
d
);
Dart
ddd
=
phi1
(
dd
);
Dart
e
=
phi2
(
d
);
Dart
ee
=
phi1
(
e
);
Dart
eee
=
phi1
(
ee
);
Dart
dd2
=
phi2
(
dd
);
Dart
ee2
=
phi2
(
ee
);
Dart
ddd2
=
phi2
(
ddd
);
Dart
eee2
=
phi2
(
eee
);
// On découd les triangles du centre
phi2unsew
(
d
);
phi2unsew
(
dd
);
phi2unsew
(
ee
);
phi2unsew
(
ddd
);
phi2unsew
(
eee
);
// On détruit les 2 triangles
deleteOrientedFace
(
d
);
deleteOrientedFace
(
e
);
// On recout les brins restants
phi2sew
(
dd2
,
ddd2
);
phi2sew
(
ee2
,
eee2
);
// On plonge le sommet central sur le nouveau point calculé
newVertex
(
ddd2
);
position
[
ddd2
]
=
M
;
}
}
// Longueur d'une arête
// Longueur d'une arête
...
@@ -380,13 +131,12 @@ public:
...
@@ -380,13 +131,12 @@ public:
lmin
=
longueur
(
d
);
lmin
=
longueur
(
d
);
}
}
}
}
fusionSommet
(
dmin
);
}
}
};
};
// definition de la carte comme variable globale
// definition de la carte comme variable globale
PFP
::
MAP
my
Map
;
PFP
::
MAP
my
QuadMesh
;
// pile des brins selectionnes (6 max)
// pile des brins selectionnes (6 max)
std
::
vector
<
Dart
>
selected_darts
;
std
::
vector
<
Dart
>
selected_darts
;
...
@@ -420,7 +170,7 @@ void MyQT::drawSelected()
...
@@ -420,7 +170,7 @@ void MyQT::drawSelected()
{
{
const
PFP
::
VEC3
&
P
=
position
[
d
];
const
PFP
::
VEC3
&
P
=
position
[
d
];
m_ds
->
vertex
(
P
);
m_ds
->
vertex
(
P
);
d
=
my
Map
.
phi1
(
d
);
d
=
my
QuadMesh
.
phi1
(
d
);
}
while
(
d
!=
d_faces
[
i
]);
}
while
(
d
!=
d_faces
[
i
]);
m_ds
->
end
();
m_ds
->
end
();
...
@@ -439,7 +189,7 @@ void MyQT::drawSelected()
...
@@ -439,7 +189,7 @@ void MyQT::drawSelected()
Dart
d
=
d_edges
[
i
];
Dart
d
=
d_edges
[
i
];
const
PFP
::
VEC3
&
P
=
position
[
d
];
const
PFP
::
VEC3
&
P
=
position
[
d
];
m_ds
->
vertex
(
P
);
m_ds
->
vertex
(
P
);
d
=
my
Map
.
phi1
(
d
);
d
=
my
QuadMesh
.
phi1
(
d
);
const
PFP
::
VEC3
&
Q
=
position
[
d
];
const
PFP
::
VEC3
&
Q
=
position
[
d
];
m_ds
->
vertex
(
Q
);
m_ds
->
vertex
(
Q
);
}
}
...
@@ -527,17 +277,17 @@ void MyQT::cb_initGL()
...
@@ -527,17 +277,17 @@ void MyQT::cb_initGL()
void
MyQT
::
cb_redraw
()
void
MyQT
::
cb_redraw
()
{
{
// update des normales aux sommets
// update des normales aux sommets
Algo
::
Geometry
::
computeNormalVertices
<
PFP
>
(
my
Map
,
position
,
normal
)
;
Algo
::
Geometry
::
computeNormalVertices
<
PFP
>
(
my
QuadMesh
,
position
,
normal
)
;
// update du VBO position (contexte GL necessaire)
// update du VBO position (contexte GL necessaire)
m_positionVBO
->
updateData
(
position
);
m_positionVBO
->
updateData
(
position
);
m_normalVBO
->
updateData
(
normal
);
m_normalVBO
->
updateData
(
normal
);
// update des primitives du renderer
// update des primitives du renderer
m_render
->
initPrimitives
<
PFP
>
(
my
Map
,
allDarts
,
Algo
::
Render
::
GL2
::
TRIANGLES
);
m_render
->
initPrimitives
<
PFP
>
(
my
QuadMesh
,
CGoGN
::
allDarts
,
Algo
::
Render
::
GL2
::
TRIANGLES
);
m_render
->
initPrimitives
<
PFP
>
(
my
Map
,
allDarts
,
Algo
::
Render
::
GL2
::
LINES
);
m_render
->
initPrimitives
<
PFP
>
(
my
QuadMesh
,
CGoGN
::
allDarts
,
Algo
::
Render
::
GL2
::
LINES
);
m_render_topo
->
updateData
<
PFP
>
(
my
Map
,
position
,
0.9
f
,
0.9
f
);
m_render_topo
->
updateData
<
PFP
>
(
my
QuadMesh
,
position
,
0.9
f
,
0.9
f
);
drawSelected
();
drawSelected
();
if
(
renderTopo
)
if
(
renderTopo
)
...
@@ -593,7 +343,7 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -593,7 +343,7 @@ void MyQT::cb_keyPress(int keycode)
// Sélectionne un brin
// Sélectionne un brin
case
'd'
:
case
'd'
:
Algo
::
Selection
::
dartsRaySelection
<
PFP
>
(
my
Map
,
position
,
rayA
,
AB
,
darts
,
SelectorTrue
());
Algo
::
Selection
::
dartsRaySelection
<
PFP
>
(
my
QuadMesh
,
position
,
rayA
,
AB
,
darts
,
SelectorTrue
());
if
(
!
darts
.
empty
()
&&
selected_darts
.
size
()
<
6
)
if
(
!
darts
.
empty
()
&&
selected_darts
.
size
()
<
6
)
{
{
...
@@ -603,13 +353,13 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -603,13 +353,13 @@ void MyQT::cb_keyPress(int keycode)
// Affiche les informations sur un brin
// Affiche les informations sur un brin
case
'D'
:
case
'D'
:
Algo
::
Selection
::
dartsRaySelection
<
PFP
>
(
my
Map
,
position
,
rayA
,
AB
,
darts
,
SelectorTrue
());
Algo
::
Selection
::
dartsRaySelection
<
PFP
>
(
my
QuadMesh
,
position
,
rayA
,
AB
,
darts
,
SelectorTrue
());
if
(
!
darts
.
empty
())
if
(
!
darts
.
empty
())
{
{
std
::
stringstream
ss
;
std
::
stringstream
ss
;
Dart
d1
=
my
Map
.
phi1
(
darts
[
0
]);
Dart
d1
=
my
QuadMesh
.
phi1
(
darts
[
0
]);
Dart
d2
=
my
Map
.
phi2
(
darts
[
0
]);
Dart
d2
=
my
QuadMesh
.
phi2
(
darts
[
0
]);
ss
<<
"dart:"
<<
darts
[
0
].
index
<<
" /phi1:"
<<
d1
.
index
<<
" /phi2:"
<<
d2
.
index
;
ss
<<
"dart:"
<<
darts
[
0
].
index
<<
" /phi1:"
<<
d1
.
index
<<
" /phi2:"
<<
d2
.
index
;
const
Point3D
&
P
=
position
[
darts
[
0
]];
const
Point3D
&
P
=
position
[
darts
[
0
]];
...
@@ -621,7 +371,7 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -621,7 +371,7 @@ void MyQT::cb_keyPress(int keycode)
// Sélectionne des faces
// Sélectionne des faces
case
'f'
:
case
'f'
:
d_faces
.
clear
();
d_faces
.
clear
();
Algo
::
Selection
::
facesRaySelection
<
PFP
>
(
myMap
,
position
,
SelectorTrue
(),
rayA
,
AB
,
d_faces
);
Algo
::
Selection
::
facesRaySelection
<
PFP
>
(
myQuadMesh
,
position
,
SelectorTrue
(),
rayA
,
AB
,
d_faces
);
if
(
!
d_faces
.
empty
())
if
(
!
d_faces
.
empty
())
{
{
...
@@ -634,15 +384,15 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -634,15 +384,15 @@ void MyQT::cb_keyPress(int keycode)
// Sélectionne des arêtes
// Sélectionne des arêtes
case
'a'
:
case
'a'
:
d_edges
.
clear
();
d_edges
.
clear
();
Algo
::
Selection
::
edgesRaySelection
<
PFP
>
(
my
Map
,
position
,
SelectorTrue
(),
rayA
,
AB
,
d_edges
,
dist
);
Algo
::
Selection
::
edgesRaySelection
<
PFP
>
(
my
QuadMesh
,
position
,
SelectorTrue
(),
rayA
,
AB
,
d_edges
,
dist
);
if
(
!
d_edges
.
empty
())
if
(
!
d_edges
.
empty
())
{
{
std
::
stringstream
ss
;
std
::
stringstream
ss
;
Dart
dd
=
my
Map
.
phi2
(
d_edges
[
0
]);
Dart
dd
=
my
QuadMesh
.
phi2
(
d_edges
[
0
]);
ss
<<
"Arete: dart: "
<<
d_edges
[
0
].
index
<<
" phi1: "
<<
my
Map
.
phi1
(
d_edges
[
0
]).
index
;
ss
<<
"Arete: dart: "
<<
d_edges
[
0
].
index
<<
" phi1: "
<<
my
QuadMesh
.
phi1
(
d_edges
[
0
]).
index
;
if
(
dd
!=
d_edges
[
0
])
if
(
dd
!=
d_edges
[
0
])
ss
<<
" phi2: "
<<
dd
.
index
<<
" phi1: "
<<
my
Map
.
phi1
(
dd
).
index
;
ss
<<
" phi2: "
<<
dd
.
index
<<
" phi1: "
<<
my
QuadMesh
.
phi1
(
dd
).
index
;
statusMsg
(
ss
.
str
().
c_str
());
statusMsg
(
ss
.
str
().
c_str
());
}
}
break
;
break
;
...
@@ -650,12 +400,12 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -650,12 +400,12 @@ void MyQT::cb_keyPress(int keycode)
// Sélectionne des sommets
// Sélectionne des sommets
case
's'
:
case
's'
:
d_vertices
.
clear
();
d_vertices
.
clear
();
Algo
::
Selection
::
verticesRaySelection
<
PFP
>
(
my
Map
,
position
,
rayA
,
AB
,
d_vertices
,
dist
,
SelectorTrue
());
Algo
::
Selection
::
verticesRaySelection
<
PFP
>
(
my
QuadMesh
,
position
,
rayA
,
AB
,
d_vertices
,
dist
,
SelectorTrue
());
if
(
!
d_vertices
.
empty
())
if
(
!
d_vertices
.
empty
())
{
{
std
::
stringstream
ss
;
std
::
stringstream
ss
;
ss
<<
"Sommet: dart: "
<<
d_vertices
[
0
].
index
<<
": "
<<
position
[
d_vertices
[
0
]]
<<
"( id emb:"
<<
my
Map
.
getEmbedding
(
VERTEX
,
d_vertices
[
0
])
<<
")"
<<
std
::
endl
;
;
ss
<<
"Sommet: dart: "
<<
d_vertices
[
0
].
index
<<
": "
<<
position
[
d_vertices
[
0
]]
<<
"( id emb:"
<<
my
QuadMesh
.
getEmbedding
(
VERTEX
,
d_vertices
[
0
])
<<
")"
<<
std
::
endl
;
;
statusMsg
(
ss
.
str
().
c_str
());
statusMsg
(
ss
.
str
().
c_str
());
}
}
break
;
break
;
...
@@ -669,15 +419,6 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -669,15 +419,6 @@ void MyQT::cb_keyPress(int keycode)
switch
(
keycode
)
{
switch
(
keycode
)
{
// Colle 2 arêtes
// Colle 2 arêtes
case
'c'
:
case
'c'
:
myMap
.
Colle
(
selected_darts
[
0
],
selected_darts
[
1
]);
break
;
// Colle 2 arêtes en leur milieu
case
'm'
:
myMap
.
ColleMilieu
(
selected_darts
[
0
],
selected_darts
[
1
]);
break
;
// Coupe une face en 2 avec une nouvelle arête
case
'x'
:
myMap
.
coupeFace
(
selected_darts
[
0
],
selected_darts
[
1
]);
break
;
break
;
}
}
selected_darts
.
clear
();
selected_darts
.
clear
();
...
@@ -693,15 +434,7 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -693,15 +434,7 @@ void MyQT::cb_keyPress(int keycode)
switch
(
keycode
)
{
switch
(
keycode
)
{
// Coupe une arête en 2 avec un nouveau sommet
// Coupe une arête en 2 avec un nouveau sommet
case
'y'
:
case
'y'
:
myMap
.
coupeArete
(
selected_darts
[
0
]);
myQuadMesh
.
coupeArete
(
selected_darts
[
0
]);
break
;
// Arrondi
case
'z'
:
myMap
.
arrondi
(
selected_darts
[
0
]);
break
;
// Fusion de sommet
case
'q'
:
myMap
.
fusionSommet
(
selected_darts
[
0
]);
break
;
break
;
}
}
selected_darts
.
clear
();
selected_darts
.
clear
();
...
@@ -709,14 +442,9 @@ void MyQT::cb_keyPress(int keycode)
...
@@ -709,14 +442,9 @@ void MyQT::cb_keyPress(int keycode)
break
;
break
;
// Opérations globales
// Opérations globales
// Triangulation
case
'p'
:
myMap
.
triangule
();
selected_darts
.
clear
();
break
;
// Simplification
// Simplification
case
'k'
:
case
'k'
:
my
Map
.
simplifie
();
my
QuadMesh
.
simplifie
();
selected_darts
.
clear
();
selected_darts
.
clear
();
break
;
break
;
}
}
...
@@ -732,25 +460,25 @@ int main(int argc, char **argv)
...
@@ -732,25 +460,25 @@ int main(int argc, char **argv)
if
(
argc
==
2
)
{
if
(
argc
==
2
)
{
std
::
vector
<
std
::
string
>
attrNames
;
std
::
vector
<
std
::
string
>
attrNames
;
Algo
::
Import
::
importMesh
<
PFP
>
(
my
Map
,
argv
[
1
],
attrNames
)
;
Algo
::
Import
::
importMesh
<
PFP
>
(
my
QuadMesh
,
argv
[
1
],
attrNames
)
;
position
=
my
Map
.
getAttribute
<
Point3D
>
(
VERTEX
,
attrNames
[
0
])
;
position
=
my
QuadMesh
.
getAttribute
<
Point3D
>
(
VERTEX
,
attrNames
[
0
])
;
normal
=
my
Map
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX
,
"normal"
);
normal
=
my
QuadMesh
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX
,
"normal"
);
Algo
::
Geometry
::
computeNormalVertices
<
PFP
>
(
my
Map
,
position
,
normal
)
;
Algo
::
Geometry
::
computeNormalVertices
<
PFP
>
(
my
QuadMesh
,
position
,
normal
)
;
}
}
else
{
else
{
position
=
my
Map
.
addAttribute
<
Point3D
>
(
VERTEX
,
"position"
);
position
=
my
QuadMesh
.
addAttribute
<
Point3D
>
(
VERTEX
,
"position"
);
normal
=
my
Map
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX
,
"normal"
);
normal
=
my
QuadMesh
.
addAttribute
<
PFP
::
VEC3
>
(
VERTEX
,
"normal"
);
my
Map
.
createMap
();
my
QuadMesh
.
createMesh
();
Algo
::
Geometry
::
computeNormalVertices
<
PFP
>
(
my
Map
,
position
,
normal
)
;
Algo
::
Geometry
::
computeNormalVertices
<
PFP
>
(
my
QuadMesh
,
position
,
normal
)
;
}
}
if
(
my
Map
.
getNbDarts
()
==
0
)
{
if
(
my
QuadMesh
.
getNbDarts
()
==
0
)
{
CGoGNout
<<
"Aucun brin dans la carte. Sortie ..."
<<
CGoGNendl
;
CGoGNout
<<
"Aucun brin dans la carte. Sortie ..."
<<
CGoGNendl
;
exit
(
0
);
exit
(
0
);
}
}
// Parametre de la fenetre en fonction de la taille du maillage à afficher
// Parametre de la fenetre en fonction de la taille du maillage à afficher
Geom
::
BoundingBox
<
Point3D
>
bb
=
Algo
::
Geometry
::
computeBoundingBox
<
PFP
>
(
my
Map
,
position
);
Geom
::
BoundingBox
<
Point3D
>
bb
=
Algo
::
Geometry
::
computeBoundingBox
<
PFP
>
(
my
QuadMesh
,
position
);
float
lWidthObj
=
std
::
max
(
std
::
max
(
bb
.
size
(
0
),
bb
.
size
(
1
)),
bb
.
size
(
2
));
float
lWidthObj
=
std
::
max
(
std
::
max
(
bb
.
size
(
0
),
bb
.
size
(
1
)),
bb
.
size
(
2
));
Point3D
lPosObj
=
(
bb
.
min
()
+
bb
.
max
())
/
2
;
Point3D
lPosObj
=
(
bb
.
min
()
+
bb
.
max
())
/
2
;
sqt
.
setParamObject
(
lWidthObj
,
lPosObj
.
data
());
sqt
.
setParamObject
(
lWidthObj
,
lPosObj
.
data
());
...
...
Apps/deprecated/tutoriel.h
View file @
773d5647
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
#include <iostream>
#include <iostream>
#include "Utils/qtSimple.h"
#include "Utils/
Qt/
qtSimple.h"
// forward definitions (minimize includes)
// forward definitions (minimize includes)
namespace
CGoGN
{
namespace
Algo
{
namespace
Render
{
namespace
GL2
{
class
MapRender
;
}
}
}
}
namespace
CGoGN
{
namespace
Algo
{
namespace
Render
{
namespace
GL2
{
class
MapRender
;
}
}
}
}
...
...
include/Algo/MovingObjects/particle_base.h
View file @
773d5647
#ifndef PARTBASE_H
#ifndef PARTBASE_H
#define PARTBASE_H
#define PARTBASE_H
#include "Geometry/vector_gen.h"
//
#include "Geometry/vector_gen.h"
namespace
CGoGN
namespace
CGoGN
{