-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathediteur_trajectoire.cpp
206 lines (181 loc) · 9.04 KB
/
editeur_trajectoire.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
#include "editeur_trajectoire.h"
uint32_t EditeurTrajectoire::ET_point_actuel=0;
float EditeurTrajectoire::ET_vitesse_deplacement=0.1;
float EditeurTrajectoire::ET_position_trajectoire=0.;
float EditeurTrajectoire::ET_pas_position_trajectoire=0.005;
char EditeurTrajectoire::ET_fichier_trajectoire[]={"trajectoires/trajectoire_edit.traj"};
//Position actuelle: x,y,z rotations: roulis, tangage, lacet
//Ne pas oublier de rafraichir ces coordonnées, et de les lire à la sortie
float EditeurTrajectoire::ET_x;
float EditeurTrajectoire::ET_y;
float EditeurTrajectoire::ET_z;
float EditeurTrajectoire::ET_r;
float EditeurTrajectoire::ET_t;
float EditeurTrajectoire::ET_l;
vector<Trajectoire*> EditeurTrajectoire::liste_trajectoires;
uint16_t EditeurTrajectoire::trajectoire_courante=0;
//============================================
// Edition des trajectoires
//============================================
void EditeurTrajectoire::init()
{
//trajectoire_courante=new Trajectoire();
trajectoire_courante=0;
}
void EditeurTrajectoire::ajoute_trajectoire(Trajectoire* trajectoire)
{
liste_trajectoires.push_back(trajectoire);
}
void EditeurTrajectoire::destruction_trajectoires()
{
//if(trajectoire_courante!=NULL)delete trajectoire_courante;
trajectoire_courante=0;
liste_trajectoires.clear();
}
//===================================================
// Affiche les trajectoires
//===================================================
void EditeurTrajectoire::affiche_trajectoires()
{
uint16_t i;
for(i=0;i<liste_trajectoires.size();i++)
{
if(i==trajectoire_courante)affiche_trajectoire(i,true);
else affiche_trajectoire(i,false);
}
}
void EditeurTrajectoire::affiche_trajectoire(uint16_t trajectoire_id,bool drapeau_active)
{
//glLoadIdentity();
glUseProgram(0);
glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
//glDisable(GL_DEPTH_TEST);
//oeil_1->positionne_scene(t);
Trajectoire* ma_trajectoire=liste_trajectoires[trajectoire_id];
if(drapeau_active)
{
glLineWidth(2.);
ma_trajectoire->affiche_courbe(20,0x80ffff00);
ma_trajectoire->affiche_points(0xf0ff0000,5);
ma_trajectoire->affiche_point(ET_point_actuel,0xffff6060,8);
}
else
{
glLineWidth(2.);
ma_trajectoire->affiche_courbe(20,0x40ffffff);
ma_trajectoire->affiche_points(0x40ffffff,4);
}
glEnable(GL_LIGHTING);
glDisable(GL_BLEND);
//glEnable(GL_DEPTH_TEST);ma_trajectoire
}
void EditeurTrajectoire::edit_trajectoire(int key,bool etat)
{
if(liste_trajectoires.empty()) return;
if(trajectoire_courante>=liste_trajectoires.size()) trajectoire_courante=liste_trajectoires.size()-1;
Trajectoire* ma_trajectoire=liste_trajectoires[trajectoire_courante];
if(ET_point_actuel>=ma_trajectoire->renvoie_nombre_points())ET_point_actuel=ma_trajectoire->renvoie_nombre_points()-1;
float coordonnees_trajectoire[3];
if(etat)
{
switch (key)
{
case GLFW_KEY_KP_DIVIDE:
ET_vitesse_deplacement*=0.5;cout<<"Pas="<<ET_vitesse_deplacement<<endl;
ET_pas_position_trajectoire*=0.5;cout<<"Pas trajectoire="<<ET_pas_position_trajectoire<<endl;
break;
case GLFW_KEY_KP_MULTIPLY:
ET_vitesse_deplacement*=2.;cout<<"Pas="<<ET_vitesse_deplacement<<endl;
ET_pas_position_trajectoire*=2.;cout<<"Pas trajectoire="<<ET_pas_position_trajectoire<<endl;
break;
case GLFW_KEY_ENTER: //ENTREE
ma_trajectoire->ajoute_point(ET_x,ET_y,ET_z);
ET_point_actuel=ma_trajectoire->renvoie_nombre_points()-1;
break;
case GLFW_KEY_DELETE: //SUPPR
ma_trajectoire->supprime_point(ET_point_actuel);
if (ET_point_actuel>=ma_trajectoire->renvoie_nombre_points())ET_point_actuel=ma_trajectoire->renvoie_nombre_points()-1;
break;
case GLFW_KEY_Q:
ma_trajectoire->deplace_point(ET_point_actuel,-ET_vitesse_deplacement,0.,0.);
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
case GLFW_KEY_S:
ma_trajectoire->deplace_point(ET_point_actuel,ET_vitesse_deplacement,0.,0.);
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
case GLFW_KEY_A:
ma_trajectoire->deplace_point(ET_point_actuel,0.,ET_vitesse_deplacement,0.);
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
case GLFW_KEY_W:
ma_trajectoire->deplace_point(ET_point_actuel,0.,-ET_vitesse_deplacement,0.);
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
case GLFW_KEY_Z:
ma_trajectoire->deplace_point(ET_point_actuel,0.,0.,-ET_vitesse_deplacement);
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
case GLFW_KEY_X:
ma_trajectoire->deplace_point(ET_point_actuel,0.,0.,ET_vitesse_deplacement);
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
case GLFW_KEY_KP_ENTER:
ma_trajectoire->determine_point(ET_point_actuel,ET_x,ET_y,ET_z);
break;
case GLFW_KEY_C:
ET_position_trajectoire-=ET_pas_position_trajectoire;
cout<<"Position trajectoire t="<<ET_position_trajectoire;
ma_trajectoire->renvoie_position(ET_position_trajectoire,coordonnees_trajectoire);
ET_x=coordonnees_trajectoire[0];
ET_y=coordonnees_trajectoire[1];
ET_z=coordonnees_trajectoire[2];
cout<<" Coordonnées X:"<<coordonnees_trajectoire[0]<<" Y:"<<coordonnees_trajectoire[1]<<" Z:"<<coordonnees_trajectoire[2]<<endl;
break;
case GLFW_KEY_V:
ET_position_trajectoire+=ET_pas_position_trajectoire;
cout<<"Position trajectoire t="<<ET_position_trajectoire;
ma_trajectoire->renvoie_position(ET_position_trajectoire,coordonnees_trajectoire);
ET_x=coordonnees_trajectoire[0];
ET_y=coordonnees_trajectoire[1];
ET_z=coordonnees_trajectoire[2];
cout<<" Coordonnées X:"<<coordonnees_trajectoire[0]<<" Y:"<<coordonnees_trajectoire[1]<<" Z:"<<coordonnees_trajectoire[2]<<endl;
break;
case GLFW_KEY_P:
cout<<"Position éditée: "<<ET_x<<","<<ET_y<<","<<ET_z<<","
<<ET_r<<","<<ET_t<<","<<ET_l<<endl;
break;
case GLFW_KEY_KP_ADD:
ET_point_actuel++;
if (ET_point_actuel>=ma_trajectoire->renvoie_nombre_points())ET_point_actuel=ma_trajectoire->renvoie_nombre_points()-1;
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
case GLFW_KEY_KP_SUBTRACT:
if (ET_point_actuel!=0)ET_point_actuel--;
ma_trajectoire->affiche_position_point(ET_point_actuel);
break;
//Touches F..
case GLFW_KEY_F1:
if (ma_trajectoire->sauve_trajectoire(ma_trajectoire->nom)) cout<<"Trajectoire "<<ma_trajectoire->nom<<" sauvée avec succès!"<<endl;
break;
case GLFW_KEY_F2:
if (ma_trajectoire->charge_trajectoire(ma_trajectoire->nom))
{
cout<<"Trajectoire "<<ma_trajectoire->nom<<" chargée avec succès!"<<endl;
ET_point_actuel=0;
}
break;
//Gestion des trajectoires:
case GLFW_KEY_TAB:
trajectoire_courante++;
if(trajectoire_courante>=liste_trajectoires.size()) trajectoire_courante=0;
ma_trajectoire=liste_trajectoires[trajectoire_courante];
cout<<"Trajectoire courante: "<<ma_trajectoire->nom<<endl;
default:
break;
}
}
}