-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathOutil.pde
More file actions
215 lines (207 loc) · 5.66 KB
/
Copy pathOutil.pde
File metadata and controls
215 lines (207 loc) · 5.66 KB
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
207
208
209
210
211
212
213
214
215
// L'objet de type Outil sert à proposer des outils pour l'élaboration du treillis.
// Ces objets sont affichés en haut de la fenêtre dans le menu
class Outil {
// Position de l'outil
PVector pos = new PVector(0,0);
// Type de l'outil
char type;
Outil (char type_) {
// Le constructeur de l'outil lui assigne un type représenté par un simple charactère
type = type_;
}
void afficher(PVector pos_) {
// Afficher un cercle avec le type de l'outil écrit au centre
pos = pos_;
float rayon = pos.y;
circle(pos.x, pos.y, rayon);
fill(0);
textSize(20);
textAlign(CENTER, CENTER);
text(type, pos.x, pos.y);
// Surligner l'outil sur laquelle se trouve la souris
if(dist(mouseX, mouseY, pos.x, pos.y) < rayon/2){
fill(100,100);
circle(pos.x, pos.y, rayon);
}
fill(255);
}
}
void ajoutForceNodale(){
if(construTemp){
// Verifier que le curseur est sur un noeud
for(Noeud n : geom.maillage.sommets){
if(dist(mouseX, mouseY, n.pos.x, n.pos.y) < selectNoeud/2){
// Créer une force sur ce noeud
noeudTemp = n;
construTemp = false;
}
}
}else{
noeudTemp.force = new PVector(mouseX - noeudTemp.pos.x, mouseY - noeudTemp.pos.y);
construTemp = true;
}
}void ajoutPressionNodale(){
for(Noeud n : geom.maillage.sommets){
if(dist(mouseX, mouseY, n.pos.x, n.pos.y) < selectNoeud){
n.force = Pression;
}
}
}
void supForceNodale(){
// Verifier que le curseur est sur un noeud
for(Noeud n : geom.maillage.sommets){
if(dist(mouseX, mouseY, n.pos.x, n.pos.y) < selectNoeud){
// Supprimer la force sur ce noeud
n.force = new PVector(0, 0);
}
}
}
void changeAttache(){
// Verifier que le curseur est sur un noeud
for(Noeud n : geom.maillage.sommets){
if(dist(mouseX, mouseY, n.pos.x, n.pos.y) < selectNoeud){
// Changer le type d'attache
if(!n.ux && !n.uy){
n.ux = false;
n.uy = true;
} else if(!n.ux && n.uy){
n.ux=true;
n.uy=false;
}else if(n.ux && !n.uy){
n.ux=true;
n.uy=true;
}else if(n.ux && n.uy){
n.ux=false;
n.uy=false;
}
}
}
}
void mousePressed(){
if(mouseY < 2*outils.get(0).pos.y){
// Si le curseur est préssé dans la zone menu:
for(Outil o : outils){
if(dist(mouseX, mouseY, o.pos.x, o.pos.y) < o.pos.y/2){
typeOutil = o.type;
switch(typeOutil){
case 'N': // Cas neutre
break;
case 'a': // Cas suppression de sommets
if(!(geom.maillage == null)){
geom.maillage = null;
}
if(!(geom.contour == null) && geom.contour.size() >0){
geom.contour.remove(geom.contour.size()-1);
}
break;
case 'O': // Cas suppression du contour
geom.contour= new ArrayList<PVector>();
geom.maillage=null;
break;
case 'M': // Cas Maillage
if(!(geom.contour == null) && geom.contour.size() >2){
geom.maillage(nMaille);
sig = false;
reso=false;
} else println("Rien à Mailler");
break;
case 'f': // Cas suppression force nodale
if(!(geom.maillage == null)){
supForceNodale();
} else println("Pas de maillage");
break;
case 'S': // Cas calcul sigma
if(sig){
sig = false;
break;
}
if(!(geom.maillage == null)){
calculSigma(geom);
sig = true;
} else println("Pas de résolution");
break;
case 'E': // Cas fin de programme
exit();
break;
}
}
}
}
else{
// Sinon, selon le mode du curseur:
switch(typeOutil){
case 'N': // Cas neutre
break;
case 'A': // Cas ajout de sommets
if(!(geom.maillage == null)){
geom.maillage = null;
reso = false;
sig = false;
}
geom.contour.add(new PVector(mouseX, mouseY));
break;
case 'F': // Cas ajout force nodale
if(!(geom.maillage == null)){
ajoutForceNodale();
} else println("Pas de maillage");
break;
case 'f': // Cas suppression force nodale
if(!(geom.maillage == null)){
supForceNodale();
} else println("Pas de maillage");
break;
case 'C': // Cas condition limite
if(!(geom.maillage == null)){
changeAttache();
} else println("Pas de maillage");
break;
}
}
}
void mouseDragged(){
if(mouseY > 2*outils.get(0).pos.y){
switch(typeOutil){
case 'P': // Cas ajout pression nodale
if(!(geom.maillage == null)){
ajoutPressionNodale();
} else println("Pas de maillage");
break;
case 'f': // Cas suppression force nodale
if(!(geom.maillage == null)){
supForceNodale();
} else println("Pas de maillage");
break;
}
}
}
void keyPressed(){
switch(keyCode){
case ' ':
if(!(geom.maillage == null) && geom.contour.size() >2){
double[][] K = matriceRigi(geom);
double[] F = forceConnues(geom);
resolution(geom, K, F);
sig = false;
coefDefo = 1;
} else println("Pas de maillage");
break;
case UP:
coefDefo *=1.2;
break;
case DOWN:
coefDefo /=1.2;
break;
case '0':
coefDefo =1;
break;
case RIGHT:
nMaille ++;
break;
case LEFT:
nMaille --;
break;
case 'p':
Pression = new PVector(0,30);
break;
}
}