1 // Gmsh - Copyright (C) 1997-2021 C. Geuzaine, J.-F. Remacle
2 //
3 // See the LICENSE.txt file in the Gmsh root directory for license information.
4 // Please report all issues on https://gitlab.onelab.info/gmsh/gmsh/issues.
5 //
6 // Contributed by Gilles Marckmann <gilles.marckmann@ec-nantes.fr>
7
8 #include <string>
9 #include <iostream>
10 #include <stdio.h>
11 #include <algorithm>
12 #include "Navigator.h"
13 #include "Trackball.h"
14 #include "Context.h"
15 #include "drawContext.h"
16 #include "gl2ps.h"
17
Navigator(double _freq,drawContext * _ctx)18 Navigator::Navigator(double _freq, drawContext *_ctx)
19 : ax0(0.), ax1(0.), ax0_cur(0.), ax1_cur(0.), speed(0.), awake(true),
20 ctx(_ctx), frequency(_freq)
21 {
22 ctx->camera.init();
23 pad = CTX::instance()->gamepad;
24 along = AXE_Z;
25 mode = PEDESTRIAN;
26 reference_angle = 3.14 * frequency / 5.;
27 reference_speed = 1.5 * frequency * (ctx->camera.Lc) / 25.;
28 }
29
~Navigator()30 Navigator::~Navigator(){};
31
setDrawContext(drawContext * _ctx)32 void Navigator::setDrawContext(drawContext *_ctx)
33 {
34 ctx = _ctx;
35 ctx->camera.init();
36 }
37
setFrequency(double _freq)38 void Navigator::setFrequency(double _freq)
39 {
40 frequency = _freq;
41 reference_angle = 3.14 * frequency / 5.;
42 reference_speed = 1.5 * frequency * (ctx->camera.Lc) / 100.;
43 }
44
setResponseFrequency(double _freq)45 void Navigator::setResponseFrequency(double _freq)
46 {
47 reference_angle = 3.14 * frequency / 5. * (_freq / .01);
48 reference_speed = 1.5 * frequency * (ctx->camera.Lc) / 100. * (_freq / .01);
49 }
50
drawIcons()51 void Navigator::drawIcons()
52 {
53 double l = CTX::instance()->smallAxesSize;
54 double dx = CTX::instance()->smallAxesPos[0] + .5 * l;
55 double dy = 1.25 * l;
56
57 ctx->fix2dCoordinates(&dx, &dy);
58 glMatrixMode(GL_MODELVIEW);
59 glPushMatrix();
60 glLineWidth((float)CTX::instance()->lineWidth);
61 gl2psLineWidth((float)(CTX::instance()->lineWidth *
62 CTX::instance()->print.epsLineWidthFactor));
63
64 glColor4ubv((GLubyte *)&CTX::instance()->color.smallAxes);
65
66 double scale = l / 100.;
67 glEnable(GL_BLEND);
68 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
69 glEnable(GL_LINE_SMOOTH);
70
71 switch(mode) {
72 case PEDESTRIAN:
73 glBegin(GL_LINES);
74 glVertex2d(dx + scale * 3.01052761E+01, dy + scale * 4.07178345E+01);
75 glVertex2d(dx + scale * 3.69660988E+01, dy + scale * 3.01357174E+01);
76 glVertex2d(dx + scale * 3.69660988E+01, dy + scale * 3.01357174E+01);
77 glVertex2d(dx + scale * 4.07505989E+01, dy + scale * 2.80945930E+01);
78 glVertex2d(dx + scale * 4.07505989E+01, dy + scale * 2.80945930E+01);
79 glVertex2d(dx + scale * 4.87266998E+01, dy + scale * 2.00446148E+01);
80 glVertex2d(dx + scale * 4.87266998E+01, dy + scale * 2.00446148E+01);
81 glVertex2d(dx + scale * 5.38157959E+01, dy + scale * 1.13534155E+01);
82 glVertex2d(dx + scale * 5.38157959E+01, dy + scale * 1.13534155E+01);
83 glVertex2d(dx + scale * 5.25646591E+01, dy + scale * 3.44290900E+00);
84 glVertex2d(dx + scale * 5.25646591E+01, dy + scale * 3.44290900E+00);
85 glVertex2d(dx + scale * 5.01248283E+01, dy + scale * 2.56559372E+00);
86 glVertex2d(dx + scale * 5.01248283E+01, dy + scale * 2.56559372E+00);
87 glVertex2d(dx + scale * 5.01248283E+01, dy + scale * 1.18554187E+00);
88 glVertex2d(dx + scale * 5.01248283E+01, dy + scale * 1.18554187E+00);
89 glVertex2d(dx + scale * 5.57356987E+01, dy + scale * 1.18554187E+00);
90 glVertex2d(dx + scale * 5.57356987E+01, dy + scale * 1.18554187E+00);
91 glVertex2d(dx + scale * 5.98938141E+01, dy + scale * 7.02665806E+00);
92 glVertex2d(dx + scale * 5.98938141E+01, dy + scale * 7.02665806E+00);
93 glVertex2d(dx + scale * 6.34061890E+01, dy + scale * 1.35390358E+01);
94 glVertex2d(dx + scale * 6.34061890E+01, dy + scale * 1.35390358E+01);
95 glVertex2d(dx + scale * 6.04280853E+01, dy + scale * 1.56590576E+01);
96 glVertex2d(dx + scale * 6.04280853E+01, dy + scale * 1.56590576E+01);
97 glVertex2d(dx + scale * 5.67851448E+01, dy + scale * 1.66882896E+01);
98 glVertex2d(dx + scale * 5.67851448E+01, dy + scale * 1.66882896E+01);
99 glVertex2d(dx + scale * 5.56003265E+01, dy + scale * 1.87117329E+01);
100 glVertex2d(dx + scale * 5.56003265E+01, dy + scale * 1.87117329E+01);
101 glVertex2d(dx + scale * 5.12019005E+01, dy + scale * 2.62234058E+01);
102 glVertex2d(dx + scale * 5.12019005E+01, dy + scale * 2.62234058E+01);
103 glVertex2d(dx + scale * 4.87266998E+01, dy + scale * 3.04505730E+01);
104 glVertex2d(dx + scale * 4.87266998E+01, dy + scale * 3.04505730E+01);
105 glVertex2d(dx + scale * 4.26556816E+01, dy + scale * 3.47723503E+01);
106 glVertex2d(dx + scale * 4.26556816E+01, dy + scale * 3.47723503E+01);
107 glVertex2d(dx + scale * 4.11023293E+01, dy + scale * 3.66784554E+01);
108 glVertex2d(dx + scale * 4.11023293E+01, dy + scale * 3.66784554E+01);
109 glVertex2d(dx + scale * 4.07505989E+01, dy + scale * 3.88915939E+01);
110 glVertex2d(dx + scale * 4.07505989E+01, dy + scale * 3.88915939E+01);
111 glVertex2d(dx + scale * 3.96205177E+01, dy + scale * 4.60021973E+01);
112 glVertex2d(dx + scale * 3.96205177E+01, dy + scale * 4.60021973E+01);
113 glVertex2d(dx + scale * 3.76618462E+01, dy + scale * 5.14492989E+01);
114 glVertex2d(dx + scale * 3.76618462E+01, dy + scale * 5.14492989E+01);
115 glVertex2d(dx + scale * 3.82070084E+01, dy + scale * 5.48961716E+01);
116 glVertex2d(dx + scale * 3.82070084E+01, dy + scale * 5.48961716E+01);
117 glVertex2d(dx + scale * 3.82070084E+01, dy + scale * 5.79802170E+01);
118 glVertex2d(dx + scale * 3.82070084E+01, dy + scale * 5.79802170E+01);
119 glVertex2d(dx + scale * 3.69349632E+01, dy + scale * 6.15177956E+01);
120 glVertex2d(dx + scale * 3.69349632E+01, dy + scale * 6.15177956E+01);
121 glVertex2d(dx + scale * 3.25736656E+01, dy + scale * 6.68695145E+01);
122 glVertex2d(dx + scale * 3.25736656E+01, dy + scale * 6.68695145E+01);
123 glVertex2d(dx + scale * 3.18467827E+01, dy + scale * 7.03163834E+01);
124 glVertex2d(dx + scale * 3.18467827E+01, dy + scale * 7.03163834E+01);
125 glVertex2d(dx + scale * 3.38457108E+01, dy + scale * 7.73915405E+01);
126 glVertex2d(dx + scale * 3.38457108E+01, dy + scale * 7.73915405E+01);
127 glVertex2d(dx + scale * 3.38457108E+01, dy + scale * 8.45574112E+01);
128 glVertex2d(dx + scale * 3.38457108E+01, dy + scale * 8.45574112E+01);
129 glVertex2d(dx + scale * 3.38457108E+01, dy + scale * 8.58094559E+01);
130 glVertex2d(dx + scale * 3.45101509E+01, dy + scale * 5.14492989E+01);
131 glVertex2d(dx + scale * 3.01052761E+01, dy + scale * 4.07178345E+01);
132 glVertex2d(dx + scale * 1.95475960E+01, dy + scale * 7.45358734E+01);
133 glVertex2d(dx + scale * 2.16000557E+01, dy + scale * 6.88279419E+01);
134 glVertex2d(dx + scale * 2.16000557E+01, dy + scale * 6.88279419E+01);
135 glVertex2d(dx + scale * 2.16000557E+01, dy + scale * 6.32443161E+01);
136 glVertex2d(dx + scale * 2.16000557E+01, dy + scale * 6.32443161E+01);
137 glVertex2d(dx + scale * 2.39542980E+01, dy + scale * 5.92237206E+01);
138 glVertex2d(dx + scale * 2.39542980E+01, dy + scale * 5.92237206E+01);
139 glVertex2d(dx + scale * 2.06011562E+01, dy + scale * 5.10545654E+01);
140 glVertex2d(dx + scale * 2.06011562E+01, dy + scale * 5.10545654E+01);
141 glVertex2d(dx + scale * 1.91084385E+01, dy + scale * 4.16166077E+01);
142 glVertex2d(dx + scale * 1.91084385E+01, dy + scale * 4.16166077E+01);
143 glVertex2d(dx + scale * 1.89741859E+01, dy + scale * 3.61561012E+01);
144 glVertex2d(dx + scale * 1.89741859E+01, dy + scale * 3.61561012E+01);
145 glVertex2d(dx + scale * 1.80558548E+01, dy + scale * 3.29056969E+01);
146 glVertex2d(dx + scale * 1.80558548E+01, dy + scale * 3.29056969E+01);
147 glVertex2d(dx + scale * 1.80558548E+01, dy + scale * 2.96775036E+01);
148 glVertex2d(dx + scale * 1.80558548E+01, dy + scale * 2.96775036E+01);
149 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 2.55330906E+01);
150 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 2.55330906E+01);
151 glVertex2d(dx + scale * 1.53084030E+01, dy + scale * 1.60425396E+01);
152 glVertex2d(dx + scale * 1.53084030E+01, dy + scale * 1.60425396E+01);
153 glVertex2d(dx + scale * 1.19248409E+01, dy + scale * 9.76899910E+00);
154 glVertex2d(dx + scale * 1.19248409E+01, dy + scale * 9.76899910E+00);
155 glVertex2d(dx + scale * 1.04403715E+01, dy + scale * 1.05696316E+01);
156 glVertex2d(dx + scale * 1.04403715E+01, dy + scale * 1.05696316E+01);
157 glVertex2d(dx + scale * 7.35945797E+00, dy + scale * 8.76561642E+00);
158 glVertex2d(dx + scale * 7.35945797E+00, dy + scale * 8.76561642E+00);
159 glVertex2d(dx + scale * 4.11787891E+00, dy + scale * 8.65881157E+00);
160 glVertex2d(dx + scale * 4.11787891E+00, dy + scale * 8.65881157E+00);
161 glVertex2d(dx + scale * 1.94821942E+00, dy + scale * 9.27180004E+00);
162 glVertex2d(dx + scale * 1.94821942E+00, dy + scale * 9.27180004E+00);
163 glVertex2d(dx + scale * 2.77175337E-01, dy + scale * 8.18839359E+00);
164 glVertex2d(dx + scale * 2.77175337E-01, dy + scale * 8.18839359E+00);
165 glVertex2d(dx + scale * 1.94821942E+00, dy + scale * 5.61097956E+00);
166 glVertex2d(dx + scale * 1.94821942E+00, dy + scale * 5.61097956E+00);
167 glVertex2d(dx + scale * 6.22622919E+00, dy + scale * 2.56559372E+00);
168 glVertex2d(dx + scale * 6.22622919E+00, dy + scale * 2.56559372E+00);
169 glVertex2d(dx + scale * 1.11108894E+01, dy + scale * 1.18554187E+00);
170 glVertex2d(dx + scale * 1.11108894E+01, dy + scale * 1.18554187E+00);
171 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 1.18554187E+00);
172 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 1.18554187E+00);
173 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 7.02665806E+00);
174 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 7.02665806E+00);
175 glVertex2d(dx + scale * 1.65164566E+01, dy + scale * 8.18839359E+00);
176 glVertex2d(dx + scale * 1.65164566E+01, dy + scale * 8.18839359E+00);
177 glVertex2d(dx + scale * 2.46518440E+01, dy + scale * 2.32723999E+01);
178 glVertex2d(dx + scale * 2.46518440E+01, dy + scale * 2.32723999E+01);
179 glVertex2d(dx + scale * 2.46518440E+01, dy + scale * 3.04505730E+01);
180 glVertex2d(dx + scale * 2.46518440E+01, dy + scale * 3.04505730E+01);
181 glVertex2d(dx + scale * 2.58728657E+01, dy + scale * 3.47723503E+01);
182 glVertex2d(dx + scale * 2.58728657E+01, dy + scale * 3.47723503E+01);
183 glVertex2d(dx + scale * 3.01052761E+01, dy + scale * 4.07178345E+01);
184 glVertex2d(dx + scale * 2.75617714E+01, dy + scale * 8.75848465E+01);
185 glVertex2d(dx + scale * 3.76618462E+01, dy + scale * 8.47312927E+01);
186 glVertex2d(dx + scale * 3.76618462E+01, dy + scale * 8.47312927E+01);
187 glVertex2d(dx + scale * 3.92328835E+01, dy + scale * 8.36129227E+01);
188 glVertex2d(dx + scale * 3.92328835E+01, dy + scale * 8.36129227E+01);
189 glVertex2d(dx + scale * 4.11023293E+01, dy + scale * 7.90666428E+01);
190 glVertex2d(dx + scale * 4.11023293E+01, dy + scale * 7.90666428E+01);
191 glVertex2d(dx + scale * 4.46455917E+01, dy + scale * 7.30154266E+01);
192 glVertex2d(dx + scale * 4.46455917E+01, dy + scale * 7.30154266E+01);
193 glVertex2d(dx + scale * 4.62260017E+01, dy + scale * 7.03163834E+01);
194 glVertex2d(dx + scale * 4.62260017E+01, dy + scale * 7.03163834E+01);
195 glVertex2d(dx + scale * 4.56109505E+01, dy + scale * 6.64276276E+01);
196 glVertex2d(dx + scale * 4.56109505E+01, dy + scale * 6.64276276E+01);
197 glVertex2d(dx + scale * 4.56109505E+01, dy + scale * 6.53531952E+01);
198 glVertex2d(dx + scale * 4.56109505E+01, dy + scale * 6.53531952E+01);
199 glVertex2d(dx + scale * 4.87266998E+01, dy + scale * 6.36727524E+01);
200 glVertex2d(dx + scale * 4.87266998E+01, dy + scale * 6.36727524E+01);
201 glVertex2d(dx + scale * 5.15070915E+01, dy + scale * 6.64276276E+01);
202 glVertex2d(dx + scale * 5.15070915E+01, dy + scale * 6.64276276E+01);
203 glVertex2d(dx + scale * 5.15070915E+01, dy + scale * 6.88279419E+01);
204 glVertex2d(dx + scale * 5.15070915E+01, dy + scale * 6.88279419E+01);
205 glVertex2d(dx + scale * 4.95096855E+01, dy + scale * 7.22391281E+01);
206 glVertex2d(dx + scale * 4.95096855E+01, dy + scale * 7.22391281E+01);
207 glVertex2d(dx + scale * 4.58495522E+01, dy + scale * 8.24180374E+01);
208 glVertex2d(dx + scale * 4.58495522E+01, dy + scale * 8.24180374E+01);
209 glVertex2d(dx + scale * 4.32594948E+01, dy + scale * 8.68413620E+01);
210 glVertex2d(dx + scale * 4.32594948E+01, dy + scale * 8.68413620E+01);
211 glVertex2d(dx + scale * 4.18205223E+01, dy + scale * 8.72479095E+01);
212 glVertex2d(dx + scale * 4.18205223E+01, dy + scale * 8.72479095E+01);
213 glVertex2d(dx + scale * 3.02508583E+01, dy + scale * 9.19968338E+01);
214 glVertex2d(dx + scale * 3.02508583E+01, dy + scale * 9.19968338E+01);
215 glVertex2d(dx + scale * 2.86896305E+01, dy + scale * 9.26376648E+01);
216 glVertex2d(dx + scale * 2.86896305E+01, dy + scale * 9.26376648E+01);
217 glVertex2d(dx + scale * 2.80653210E+01, dy + scale * 9.37038651E+01);
218 glVertex2d(dx + scale * 2.80653210E+01, dy + scale * 9.37038651E+01);
219 glVertex2d(dx + scale * 2.71819935E+01, dy + scale * 9.52124176E+01);
220 glVertex2d(dx + scale * 2.71819935E+01, dy + scale * 9.52124176E+01);
221 glVertex2d(dx + scale * 2.96779137E+01, dy + scale * 9.61099014E+01);
222 glVertex2d(dx + scale * 2.96779137E+01, dy + scale * 9.61099014E+01);
223 glVertex2d(dx + scale * 3.02764988E+01, dy + scale * 9.90064621E+01);
224 glVertex2d(dx + scale * 3.02764988E+01, dy + scale * 9.90064621E+01);
225 glVertex2d(dx + scale * 2.92283592E+01, dy + scale * 1.05601486E+02);
226 glVertex2d(dx + scale * 2.92283592E+01, dy + scale * 1.05601486E+02);
227 glVertex2d(dx + scale * 2.25053406E+01, dy + scale * 1.08361038E+02);
228 glVertex2d(dx + scale * 2.25053406E+01, dy + scale * 1.08361038E+02);
229 glVertex2d(dx + scale * 1.72556629E+01, dy + scale * 1.05287109E+02);
230 glVertex2d(dx + scale * 1.72556629E+01, dy + scale * 1.05287109E+02);
231 glVertex2d(dx + scale * 1.52413979E+01, dy + scale * 9.81576691E+01);
232 glVertex2d(dx + scale * 1.52413979E+01, dy + scale * 9.81576691E+01);
233 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 9.25170364E+01);
234 glVertex2d(dx + scale * 1.72696590E+01, dy + scale * 9.25170364E+01);
235 glVertex2d(dx + scale * 2.16000557E+01, dy + scale * 9.32052612E+01);
236 glVertex2d(dx + scale * 2.16000557E+01, dy + scale * 9.32052612E+01);
237 glVertex2d(dx + scale * 2.31259499E+01, dy + scale * 8.89617233E+01);
238 glVertex2d(dx + scale * 2.31259499E+01, dy + scale * 8.89617233E+01);
239 glVertex2d(dx + scale * 2.01361866E+01, dy + scale * 8.34183350E+01);
240 glVertex2d(dx + scale * 2.01361866E+01, dy + scale * 8.34183350E+01);
241 glVertex2d(dx + scale * 1.86794548E+01, dy + scale * 8.07173691E+01);
242 glVertex2d(dx + scale * 1.86794548E+01, dy + scale * 8.07173691E+01);
243 glVertex2d(dx + scale * 1.86794548E+01, dy + scale * 7.69501953E+01);
244 glVertex2d(dx + scale * 1.86794548E+01, dy + scale * 7.69501953E+01);
245 glVertex2d(dx + scale * 1.98941078E+01, dy + scale * 7.35722198E+01);
246 glVertex2d(dx + scale * 1.38444281E+01, dy + scale * 7.19181519E+01);
247 glVertex2d(dx + scale * 1.31145697E+01, dy + scale * 7.24377136E+01);
248 glVertex2d(dx + scale * 1.31145697E+01, dy + scale * 7.24377136E+01);
249 glVertex2d(dx + scale * 7.04405022E+00, dy + scale * 7.85644531E+01);
250 glVertex2d(dx + scale * 7.04405022E+00, dy + scale * 7.85644531E+01);
251 glVertex2d(dx + scale * 6.26990461E+00, dy + scale * 8.07173691E+01);
252 glVertex2d(dx + scale * 6.26990461E+00, dy + scale * 8.07173691E+01);
253 glVertex2d(dx + scale * 6.94693804E+00, dy + scale * 8.31137161E+01);
254 glVertex2d(dx + scale * 6.94693804E+00, dy + scale * 8.31137161E+01);
255 glVertex2d(dx + scale * 6.52368259E+00, dy + scale * 8.57768860E+01);
256 glVertex2d(dx + scale * 6.52368259E+00, dy + scale * 8.57768860E+01);
257 glVertex2d(dx + scale * 5.51406002E+00, dy + scale * 8.63214188E+01);
258 glVertex2d(dx + scale * 5.51406002E+00, dy + scale * 8.63214188E+01);
259 glVertex2d(dx + scale * 2.57401466E+00, dy + scale * 8.62266617E+01);
260 glVertex2d(dx + scale * 2.57401466E+00, dy + scale * 8.62266617E+01);
261 glVertex2d(dx + scale * 2.63223171E-01, dy + scale * 8.29805756E+01);
262 glVertex2d(dx + scale * 2.63223171E-01, dy + scale * 8.29805756E+01);
263 glVertex2d(dx + scale * 5.74481070E-01, dy + scale * 8.10221024E+01);
264 glVertex2d(dx + scale * 5.74481070E-01, dy + scale * 8.10221024E+01);
265 glVertex2d(dx + scale * 3.50635505E+00, dy + scale * 7.89349899E+01);
266 glVertex2d(dx + scale * 3.50635505E+00, dy + scale * 7.89349899E+01);
267 glVertex2d(dx + scale * 4.06134844E+00, dy + scale * 7.73915405E+01);
268 glVertex2d(dx + scale * 4.06134844E+00, dy + scale * 7.73915405E+01);
269 glVertex2d(dx + scale * 1.02916317E+01, dy + scale * 6.82235336E+01);
270 glVertex2d(dx + scale * 1.02916317E+01, dy + scale * 6.82235336E+01);
271 glVertex2d(dx + scale * 1.35903749E+01, dy + scale * 6.68695145E+01);
272 glVertex2d(dx + scale * 1.35903749E+01, dy + scale * 6.68695145E+01);
273 glVertex2d(dx + scale * 1.50925760E+01, dy + scale * 6.74096756E+01);
274 glVertex2d(dx + scale * 1.50925760E+01, dy + scale * 6.74096756E+01);
275 glVertex2d(dx + scale * 2.02666225E+01, dy + scale * 7.25362473E+01);
276 glVertex2d(dx + scale * 1.33335953E+01, dy + scale * 7.23014450E+01);
277 glVertex2d(dx + scale * 1.86794548E+01, dy + scale * 7.88337784E+01);
278 glEnd();
279 break;
280 case DIVER:
281 glBegin(GL_LINES);
282 glVertex2d(dx + scale * 4.70261803E+01, dy + scale * 3.19546795E+01);
283 glVertex2d(dx + scale * 4.34834213E+01, dy + scale * 3.27708626E+01);
284 glVertex2d(dx + scale * 4.34834213E+01, dy + scale * 3.27708626E+01);
285 glVertex2d(dx + scale * 4.13941002E+01, dy + scale * 3.19546795E+01);
286 glVertex2d(dx + scale * 4.13941002E+01, dy + scale * 3.19546795E+01);
287 glVertex2d(dx + scale * 3.96319656E+01, dy + scale * 3.27708626E+01);
288 glVertex2d(dx + scale * 4.70261803E+01, dy + scale * 3.19546795E+01);
289 glVertex2d(dx + scale * 6.37407417E+01, dy + scale * 2.29766846E+01);
290 glVertex2d(dx + scale * 6.37407417E+01, dy + scale * 2.29766846E+01);
291 glVertex2d(dx + scale * 6.88277817E+01, dy + scale * 2.83272076E+01);
292 glVertex2d(dx + scale * 6.88277817E+01, dy + scale * 2.83272076E+01);
293 glVertex2d(dx + scale * 7.49140625E+01, dy + scale * 3.19546795E+01);
294 glVertex2d(dx + scale * 7.49140625E+01, dy + scale * 3.19546795E+01);
295 glVertex2d(dx + scale * 7.75205078E+01, dy + scale * 3.05546646E+01);
296 glVertex2d(dx + scale * 5.73819389E+01, dy + scale * 1.82609520E+01);
297 glVertex2d(dx + scale * 6.51033478E+01, dy + scale * 1.64820938E+01);
298 glVertex2d(dx + scale * 6.51033478E+01, dy + scale * 1.64820938E+01);
299 glVertex2d(dx + scale * 6.72513809E+01, dy + scale * 1.64820938E+01);
300 glVertex2d(dx + scale * 6.72513809E+01, dy + scale * 1.64820938E+01);
301 glVertex2d(dx + scale * 6.88277817E+01, dy + scale * 1.81401482E+01);
302 glVertex2d(dx + scale * 6.88277817E+01, dy + scale * 1.81401482E+01);
303 glVertex2d(dx + scale * 7.75205078E+01, dy + scale * 3.05546646E+01);
304 glVertex2d(dx + scale * 7.75205078E+01, dy + scale * 3.05546646E+01);
305 glVertex2d(dx + scale * 7.91115646E+01, dy + scale * 3.05546646E+01);
306 glVertex2d(dx + scale * 7.91115646E+01, dy + scale * 3.05546646E+01);
307 glVertex2d(dx + scale * 7.96394882E+01, dy + scale * 3.28461914E+01);
308 glVertex2d(dx + scale * 7.96394882E+01, dy + scale * 3.28461914E+01);
309 glVertex2d(dx + scale * 8.69550934E+01, dy + scale * 3.72063484E+01);
310 glVertex2d(dx + scale * 8.69550934E+01, dy + scale * 3.72063484E+01);
311 glVertex2d(dx + scale * 9.21887970E+01, dy + scale * 3.60006065E+01);
312 glVertex2d(dx + scale * 9.21887970E+01, dy + scale * 3.60006065E+01);
313 glVertex2d(dx + scale * 9.73070221E+01, dy + scale * 4.33102036E+01);
314 glVertex2d(dx + scale * 9.73070221E+01, dy + scale * 4.33102036E+01);
315 glVertex2d(dx + scale * 9.48979111E+01, dy + scale * 4.38652153E+01);
316 glVertex2d(dx + scale * 9.48979111E+01, dy + scale * 4.38652153E+01);
317 glVertex2d(dx + scale * 7.96394882E+01, dy + scale * 3.86619072E+01);
318 glVertex2d(dx + scale * 7.96394882E+01, dy + scale * 3.86619072E+01);
319 glVertex2d(dx + scale * 7.41574936E+01, dy + scale * 3.60006065E+01);
320 glVertex2d(dx + scale * 7.41574936E+01, dy + scale * 3.60006065E+01);
321 glVertex2d(dx + scale * 7.35288086E+01, dy + scale * 3.32717209E+01);
322 glVertex2d(dx + scale * 7.35288086E+01, dy + scale * 3.32717209E+01);
323 glVertex2d(dx + scale * 7.49140625E+01, dy + scale * 3.19546795E+01);
324 glVertex2d(dx + scale * 7.25460358E+01, dy + scale * 2.34503746E+01);
325 glVertex2d(dx + scale * 7.35393219E+01, dy + scale * 2.14043198E+01);
326 glVertex2d(dx + scale * 7.35393219E+01, dy + scale * 2.14043198E+01);
327 glVertex2d(dx + scale * 7.72988739E+01, dy + scale * 2.26863708E+01);
328 glVertex2d(dx + scale * 7.72988739E+01, dy + scale * 2.26863708E+01);
329 glVertex2d(dx + scale * 8.08417358E+01, dy + scale * 1.53884392E+01);
330 glVertex2d(dx + scale * 8.08417358E+01, dy + scale * 1.53884392E+01);
331 glVertex2d(dx + scale * 9.27881927E+01, dy + scale * 5.54670620E+00);
332 glVertex2d(dx + scale * 9.27881927E+01, dy + scale * 5.54670620E+00);
333 glVertex2d(dx + scale * 1.00075905E+02, dy + scale * 8.03190613E+00);
334 glVertex2d(dx + scale * 1.00075905E+02, dy + scale * 8.03190613E+00);
335 glVertex2d(dx + scale * 8.60352936E+01, dy + scale * 1.99065475E+01);
336 glVertex2d(dx + scale * 8.60352936E+01, dy + scale * 1.99065475E+01);
337 glVertex2d(dx + scale * 7.86158524E+01, dy + scale * 2.84351845E+01);
338 glVertex2d(dx + scale * 7.86158524E+01, dy + scale * 2.84351845E+01);
339 glVertex2d(dx + scale * 7.69795456E+01, dy + scale * 2.67141228E+01);
340 glVertex2d(dx + scale * 7.69795456E+01, dy + scale * 2.67141228E+01);
341 glVertex2d(dx + scale * 7.41574936E+01, dy + scale * 2.57517700E+01);
342 glVertex2d(dx + scale * 7.30426788E+01, dy + scale * 2.24273472E+01);
343 glVertex2d(dx + scale * 7.14492264E+01, dy + scale * 2.18839607E+01);
344 glVertex2d(dx + scale * 6.16945724E+01, dy + scale * 2.40757561E+01);
345 glVertex2d(dx + scale * 6.62687149E+01, dy + scale * 2.56355934E+01);
346 glVertex2d(dx + scale * 3.96319656E+01, dy + scale * 3.27708626E+01);
347 glVertex2d(dx + scale * 2.45886974E+01, dy + scale * 3.97385635E+01);
348 glVertex2d(dx + scale * 2.45886974E+01, dy + scale * 3.97385635E+01);
349 glVertex2d(dx + scale * 2.06685200E+01, dy + scale * 3.97385635E+01);
350 glVertex2d(dx + scale * 5.73819389E+01, dy + scale * 1.82609520E+01);
351 glVertex2d(dx + scale * 5.58739510E+01, dy + scale * 2.29766846E+01);
352 glVertex2d(dx + scale * 5.58739510E+01, dy + scale * 2.29766846E+01);
353 glVertex2d(dx + scale * 5.10441551E+01, dy + scale * 2.47799721E+01);
354 glVertex2d(dx + scale * 5.10441551E+01, dy + scale * 2.47799721E+01);
355 glVertex2d(dx + scale * 3.96319656E+01, dy + scale * 3.27708626E+01);
356 glVertex2d(dx + scale * 1.71485100E+01, dy + scale * 3.83634911E+01);
357 glVertex2d(dx + scale * 2.31309643E+01, dy + scale * 3.34350243E+01);
358 glVertex2d(dx + scale * 2.31309643E+01, dy + scale * 3.34350243E+01);
359 glVertex2d(dx + scale * 3.66521492E+01, dy + scale * 3.01534729E+01);
360 glVertex2d(dx + scale * 3.66521492E+01, dy + scale * 3.01534729E+01);
361 glVertex2d(dx + scale * 4.84622536E+01, dy + scale * 2.18839607E+01);
362 glVertex2d(dx + scale * 4.84622536E+01, dy + scale * 2.18839607E+01);
363 glVertex2d(dx + scale * 5.24489517E+01, dy + scale * 1.73012562E+01);
364 glVertex2d(dx + scale * 5.24489517E+01, dy + scale * 1.73012562E+01);
365 glVertex2d(dx + scale * 5.73819389E+01, dy + scale * 1.82609520E+01);
366 glVertex2d(dx + scale * 2.31120663E+01, dy + scale * 2.08601875E+01);
367 glVertex2d(dx + scale * 2.65303173E+01, dy + scale * 1.84667053E+01);
368 glVertex2d(dx + scale * 2.65303173E+01, dy + scale * 1.84667053E+01);
369 glVertex2d(dx + scale * 2.76829071E+01, dy + scale * 1.88597527E+01);
370 glVertex2d(dx + scale * 2.76829071E+01, dy + scale * 1.88597527E+01);
371 glVertex2d(dx + scale * 2.98293095E+01, dy + scale * 2.46085243E+01);
372 glVertex2d(dx + scale * 2.98293095E+01, dy + scale * 2.46085243E+01);
373 glVertex2d(dx + scale * 2.20083504E+01, dy + scale * 2.88094444E+01);
374 glVertex2d(dx + scale * 2.20083504E+01, dy + scale * 2.88094444E+01);
375 glVertex2d(dx + scale * 1.73340797E+01, dy + scale * 3.05546646E+01);
376 glVertex2d(dx + scale * 1.73340797E+01, dy + scale * 3.05546646E+01);
377 glVertex2d(dx + scale * 1.43467293E+01, dy + scale * 3.55669289E+01);
378 glVertex2d(dx + scale * 1.43467293E+01, dy + scale * 3.55669289E+01);
379 glVertex2d(dx + scale * 1.43467293E+01, dy + scale * 3.66936073E+01);
380 glVertex2d(dx + scale * 2.31120663E+01, dy + scale * 2.08601875E+01);
381 glVertex2d(dx + scale * 1.77385178E+01, dy + scale * 2.08601875E+01);
382 glVertex2d(dx + scale * 1.77385178E+01, dy + scale * 2.08601875E+01);
383 glVertex2d(dx + scale * 1.45902586E+01, dy + scale * 2.89193249E+01);
384 glVertex2d(dx + scale * 1.45902586E+01, dy + scale * 2.89193249E+01);
385 glVertex2d(dx + scale * 1.09701309E+01, dy + scale * 3.08638268E+01);
386 glVertex2d(dx + scale * 1.09701309E+01, dy + scale * 3.08638268E+01);
387 glVertex2d(dx + scale * 1.09701309E+01, dy + scale * 3.19546795E+01);
388 glVertex2d(dx + scale * 1.09701309E+01, dy + scale * 3.19546795E+01);
389 glVertex2d(dx + scale * 1.02964087E+01, dy + scale * 2.72419567E+01);
390 glVertex2d(dx + scale * 1.02964087E+01, dy + scale * 2.72419567E+01);
391 glVertex2d(dx + scale * 1.43467293E+01, dy + scale * 1.33082447E+01);
392 glVertex2d(dx + scale * 1.43467293E+01, dy + scale * 1.33082447E+01);
393 glVertex2d(dx + scale * 1.55345182E+01, dy + scale * 9.59382534E+00);
394 glVertex2d(dx + scale * 1.55345182E+01, dy + scale * 9.59382534E+00);
395 glVertex2d(dx + scale * 1.72489243E+01, dy + scale * 9.19886017E+00);
396 glVertex2d(dx + scale * 1.72489243E+01, dy + scale * 9.19886017E+00);
397 glVertex2d(dx + scale * 1.69032230E+01, dy + scale * 1.32596684E+01);
398 glVertex2d(dx + scale * 1.69032230E+01, dy + scale * 1.32596684E+01);
399 glVertex2d(dx + scale * 1.31571884E+01, dy + scale * 2.49741650E+01);
400 glVertex2d(dx + scale * 1.31571884E+01, dy + scale * 2.49741650E+01);
401 glVertex2d(dx + scale * 1.69212170E+01, dy + scale * 2.29523678E+01);
402 glVertex2d(dx + scale * 3.90322609E+01, dy + scale * 1.84667053E+01);
403 glVertex2d(dx + scale * 5.05798721E+01, dy + scale * 1.94497623E+01);
404 glVertex2d(dx + scale * 2.31120663E+01, dy + scale * 2.08601875E+01);
405 glVertex2d(dx + scale * 3.18689404E+01, dy + scale * 1.13308659E+01);
406 glVertex2d(dx + scale * 3.18689404E+01, dy + scale * 1.13308659E+01);
407 glVertex2d(dx + scale * 3.67675819E+01, dy + scale * 1.42504940E+01);
408 glVertex2d(dx + scale * 3.67675819E+01, dy + scale * 1.42504940E+01);
409 glVertex2d(dx + scale * 3.90322609E+01, dy + scale * 1.84667053E+01);
410 glVertex2d(dx + scale * 4.70261803E+01, dy + scale * 3.19546795E+01);
411 glVertex2d(dx + scale * 4.75925865E+01, dy + scale * 3.30091743E+01);
412 glVertex2d(dx + scale * 4.75925865E+01, dy + scale * 3.30091743E+01);
413 glVertex2d(dx + scale * 4.81551323E+01, dy + scale * 3.54509926E+01);
414 glVertex2d(dx + scale * 4.81551323E+01, dy + scale * 3.54509926E+01);
415 glVertex2d(dx + scale * 4.75925865E+01, dy + scale * 3.66097794E+01);
416 glVertex2d(dx + scale * 4.75925865E+01, dy + scale * 3.66097794E+01);
417 glVertex2d(dx + scale * 4.65963593E+01, dy + scale * 3.86619072E+01);
418 glVertex2d(dx + scale * 4.65963593E+01, dy + scale * 3.86619072E+01);
419 glVertex2d(dx + scale * 2.57703133E+01, dy + scale * 4.64376678E+01);
420 glVertex2d(dx + scale * 2.57703133E+01, dy + scale * 4.64376678E+01);
421 glVertex2d(dx + scale * 2.36515903E+01, dy + scale * 4.62573013E+01);
422 glVertex2d(dx + scale * 2.36515903E+01, dy + scale * 4.62573013E+01);
423 glVertex2d(dx + scale * 2.06685200E+01, dy + scale * 4.50919800E+01);
424 glVertex2d(dx + scale * 2.06685200E+01, dy + scale * 4.50919800E+01);
425 glVertex2d(dx + scale * 2.02995567E+01, dy + scale * 4.41037750E+01);
426 glVertex2d(dx + scale * 4.15640564E+01, dy + scale * 2.67141228E+01);
427 glVertex2d(dx + scale * 3.90322609E+01, dy + scale * 1.84667053E+01);
428 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.55669289E+01);
429 glVertex2d(dx + scale * 3.22941685E+00, dy + scale * 3.47821503E+01);
430 glVertex2d(dx + scale * 1.57866726E+01, dy + scale * 3.79439583E+01);
431 glVertex2d(dx + scale * 1.53819942E+01, dy + scale * 4.26975594E+01);
432 glVertex2d(dx + scale * 1.53819942E+01, dy + scale * 4.26975594E+01);
433 glVertex2d(dx + scale * 1.34937668E+01, dy + scale * 4.58656845E+01);
434 glVertex2d(dx + scale * 1.34937668E+01, dy + scale * 4.58656845E+01);
435 glVertex2d(dx + scale * 9.24889469E+00, dy + scale * 4.68436165E+01);
436 glVertex2d(dx + scale * 9.24889469E+00, dy + scale * 4.68436165E+01);
437 glVertex2d(dx + scale * 6.85485315E+00, dy + scale * 4.68436165E+01);
438 glVertex2d(dx + scale * 6.85485315E+00, dy + scale * 4.68436165E+01);
439 glVertex2d(dx + scale * 2.90823507E+00, dy + scale * 4.44914017E+01);
440 glVertex2d(dx + scale * 2.90823507E+00, dy + scale * 4.44914017E+01);
441 glVertex2d(dx + scale * 2.90823507E+00, dy + scale * 4.07268143E+01);
442 glVertex2d(dx + scale * 5.95178938E+00, dy + scale * 3.35593605E+01);
443 glVertex2d(dx + scale * 5.95178938E+00, dy + scale * 3.16901569E+01);
444 glVertex2d(dx + scale * 5.95178938E+00, dy + scale * 3.16901569E+01);
445 glVertex2d(dx + scale * 7.64524508E+00, dy + scale * 3.16901569E+01);
446 glVertex2d(dx + scale * 7.64524508E+00, dy + scale * 3.16901569E+01);
447 glVertex2d(dx + scale * 1.12084312E+01, dy + scale * 3.38138428E+01);
448 glVertex2d(dx + scale * 1.12084312E+01, dy + scale * 3.38138428E+01);
449 glVertex2d(dx + scale * 1.73539886E+01, dy + scale * 3.62145729E+01);
450 glVertex2d(dx + scale * 1.73539886E+01, dy + scale * 3.62145729E+01);
451 glVertex2d(dx + scale * 2.15019493E+01, dy + scale * 3.78349495E+01);
452 glVertex2d(dx + scale * 2.15019493E+01, dy + scale * 3.78349495E+01);
453 glVertex2d(dx + scale * 2.46490135E+01, dy + scale * 3.97106285E+01);
454 glVertex2d(dx + scale * 2.46490135E+01, dy + scale * 3.97106285E+01);
455 glVertex2d(dx + scale * 2.73888340E+01, dy + scale * 4.13435822E+01);
456 glVertex2d(dx + scale * 2.73888340E+01, dy + scale * 4.13435822E+01);
457 glVertex2d(dx + scale * 2.86334686E+01, dy + scale * 4.46771202E+01);
458 glVertex2d(dx + scale * 2.86334686E+01, dy + scale * 4.46771202E+01);
459 glVertex2d(dx + scale * 2.71944695E+01, dy + scale * 4.76413078E+01);
460 glVertex2d(dx + scale * 2.71944695E+01, dy + scale * 4.76413078E+01);
461 glVertex2d(dx + scale * 2.39893608E+01, dy + scale * 4.83796997E+01);
462 glVertex2d(dx + scale * 2.39893608E+01, dy + scale * 4.83796997E+01);
463 glVertex2d(dx + scale * 1.62659492E+01, dy + scale * 4.59099236E+01);
464 glVertex2d(dx + scale * 1.62659492E+01, dy + scale * 4.59099236E+01);
465 glVertex2d(dx + scale * 1.52036419E+01, dy + scale * 4.47925949E+01);
466 glVertex2d(dx + scale * 1.52036419E+01, dy + scale * 4.47925949E+01);
467 glVertex2d(dx + scale * 1.52036419E+01, dy + scale * 4.29968033E+01);
468 glVertex2d(dx + scale * 8.08595753E+00, dy + scale * 3.58040657E+01);
469 glVertex2d(dx + scale * 5.95178938E+00, dy + scale * 3.35593605E+01);
470 glVertex2d(dx + scale * 1.56476307E+01, dy + scale * 4.10665283E+01);
471 glVertex2d(dx + scale * 1.93166199E+01, dy + scale * 4.10665283E+01);
472 glVertex2d(dx + scale * 1.93166199E+01, dy + scale * 4.10665283E+01);
473 glVertex2d(dx + scale * 2.33771973E+01, dy + scale * 4.10665283E+01);
474 glVertex2d(dx + scale * 2.33771973E+01, dy + scale * 4.10665283E+01);
475 glVertex2d(dx + scale * 2.33771973E+01, dy + scale * 4.26527710E+01);
476 glVertex2d(dx + scale * 2.33771973E+01, dy + scale * 4.26527710E+01);
477 glVertex2d(dx + scale * 2.13850403E+01, dy + scale * 4.40476913E+01);
478 glVertex2d(dx + scale * 2.13850403E+01, dy + scale * 4.40476913E+01);
479 glVertex2d(dx + scale * 1.70507278E+01, dy + scale * 4.36787071E+01);
480 glVertex2d(dx + scale * 1.70507278E+01, dy + scale * 4.36787071E+01);
481 glVertex2d(dx + scale * 1.55381908E+01, dy + scale * 4.08627815E+01);
482 glVertex2d(dx + scale * 5.44178314E+01, dy + scale * 5.39478874E+00);
483 glVertex2d(dx + scale * 5.19188347E+01, dy + scale * 1.05424643E+01);
484 glVertex2d(dx + scale * 5.19188347E+01, dy + scale * 1.05424643E+01);
485 glVertex2d(dx + scale * 4.79111748E+01, dy + scale * 1.68014603E+01);
486 glVertex2d(dx + scale * 4.79111748E+01, dy + scale * 1.68014603E+01);
487 glVertex2d(dx + scale * 4.09703102E+01, dy + scale * 2.47799721E+01);
488 glVertex2d(dx + scale * 1.97410069E+01, dy + scale * 2.08601875E+01);
489 glVertex2d(dx + scale * 3.03358269E+01, dy + scale * 1.29992170E+01);
490 glVertex2d(dx + scale * 3.34980812E+01, dy + scale * 1.23018475E+01);
491 glVertex2d(dx + scale * 4.00906754E+01, dy + scale * 6.03390121E+00);
492 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.55669289E+01);
493 glVertex2d(dx + scale * 5.95178938E+00, dy + scale * 3.35593605E+01);
494 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.55669289E+01);
495 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.72466736E+01);
496 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.72466736E+01);
497 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.80246620E+01);
498 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.80246620E+01);
499 glVertex2d(dx + scale * 6.44296885E+00, dy + scale * 3.80246620E+01);
500 glVertex2d(dx + scale * 6.44296885E+00, dy + scale * 3.80246620E+01);
501 glVertex2d(dx + scale * 7.81519079E+00, dy + scale * 3.80246620E+01);
502 glVertex2d(dx + scale * 7.81519079E+00, dy + scale * 3.80246620E+01);
503 glVertex2d(dx + scale * 9.44908714E+00, dy + scale * 4.10665283E+01);
504 glVertex2d(dx + scale * 9.44908714E+00, dy + scale * 4.10665283E+01);
505 glVertex2d(dx + scale * 7.57615042E+00, dy + scale * 4.31311188E+01);
506 glVertex2d(dx + scale * 7.57615042E+00, dy + scale * 4.31311188E+01);
507 glVertex2d(dx + scale * 3.57823205E+00, dy + scale * 4.07483292E+01);
508 glVertex2d(dx + scale * 3.57823205E+00, dy + scale * 4.07483292E+01);
509 glVertex2d(dx + scale * 2.90823507E+00, dy + scale * 3.95009766E+01);
510 glVertex2d(dx + scale * 2.90823507E+00, dy + scale * 3.95009766E+01);
511 glVertex2d(dx + scale * 8.70941460E-01, dy + scale * 3.73581619E+01);
512 glVertex2d(dx + scale * 8.70941460E-01, dy + scale * 3.73581619E+01);
513 glVertex2d(dx + scale * 3.22941685E+00, dy + scale * 3.47821503E+01);
514 glVertex2d(dx + scale * 3.22941685E+00, dy + scale * 3.47821503E+01);
515 glVertex2d(dx + scale * 5.23835278E+00, dy + scale * 3.55669289E+01);
516 glVertex2d(dx + scale * 5.53392906E+01, dy + scale * 5.84212208E+00);
517 glVertex2d(dx + scale * 5.34963722E+01, dy + scale * 4.94745588E+00);
518 glVertex2d(dx + scale * 5.34963722E+01, dy + scale * 4.94745588E+00);
519 glVertex2d(dx + scale * 5.33497162E+01, dy + scale * 2.90410757E+00);
520 glVertex2d(dx + scale * 5.33497162E+01, dy + scale * 2.90410757E+00);
521 glVertex2d(dx + scale * 5.50459785E+01, dy + scale * 1.75542593E+00);
522 glVertex2d(dx + scale * 5.50459785E+01, dy + scale * 1.75542593E+00);
523 glVertex2d(dx + scale * 5.68888969E+01, dy + scale * 2.65009236E+00);
524 glVertex2d(dx + scale * 5.68888969E+01, dy + scale * 2.65009236E+00);
525 glVertex2d(dx + scale * 5.70355530E+01, dy + scale * 4.69344044E+00);
526 glVertex2d(dx + scale * 5.70355530E+01, dy + scale * 4.69344044E+00);
527 glVertex2d(dx + scale * 5.53392906E+01, dy + scale * 5.84212208E+00);
528 glVertex2d(dx + scale * 4.06703568E+01, dy + scale * 6.64360666E+00);
529 glVertex2d(dx + scale * 3.95109940E+01, dy + scale * 5.42419529E+00);
530 glVertex2d(dx + scale * 3.95109940E+01, dy + scale * 5.42419529E+00);
531 glVertex2d(dx + scale * 3.99873543E+01, dy + scale * 3.81045246E+00);
532 glVertex2d(dx + scale * 3.99873543E+01, dy + scale * 3.81045246E+00);
533 glVertex2d(dx + scale * 4.16230736E+01, dy + scale * 3.41612053E+00);
534 glVertex2d(dx + scale * 4.16230736E+01, dy + scale * 3.41612053E+00);
535 glVertex2d(dx + scale * 4.20994339E+01, dy + scale * 1.80237734E+00);
536 glVertex2d(dx + scale * 4.20994339E+01, dy + scale * 1.80237734E+00);
537 glVertex2d(dx + scale * 4.37351570E+01, dy + scale * 1.40804553E+00);
538 glVertex2d(dx + scale * 4.37351570E+01, dy + scale * 1.40804553E+00);
539 glVertex2d(dx + scale * 4.48945198E+01, dy + scale * 2.62745667E+00);
540 glVertex2d(dx + scale * 4.48945198E+01, dy + scale * 2.62745667E+00);
541 glVertex2d(dx + scale * 4.44181595E+01, dy + scale * 4.24119997E+00);
542 glVertex2d(dx + scale * 4.44181595E+01, dy + scale * 4.24119997E+00);
543 glVertex2d(dx + scale * 4.27824364E+01, dy + scale * 4.63553190E+00);
544 glVertex2d(dx + scale * 4.27824364E+01, dy + scale * 4.63553190E+00);
545 glVertex2d(dx + scale * 4.23060799E+01, dy + scale * 6.24927473E+00);
546 glVertex2d(dx + scale * 4.23060799E+01, dy + scale * 6.24927473E+00);
547 glVertex2d(dx + scale * 4.06703568E+01, dy + scale * 6.64360666E+00);
548 glVertex2d(dx + scale * 2.04135437E+01, dy + scale * 5.37603645E+01);
549 glVertex2d(dx + scale * 2.09234962E+01, dy + scale * 5.39400024E+01);
550 glVertex2d(dx + scale * 2.09234962E+01, dy + scale * 5.39400024E+01);
551 glVertex2d(dx + scale * 2.10229034E+01, dy + scale * 5.44714508E+01);
552 glVertex2d(dx + scale * 2.10229034E+01, dy + scale * 5.44714508E+01);
553 glVertex2d(dx + scale * 2.06123581E+01, dy + scale * 5.48232651E+01);
554 glVertex2d(dx + scale * 2.06123581E+01, dy + scale * 5.48232651E+01);
555 glVertex2d(dx + scale * 2.01024036E+01, dy + scale * 5.46436272E+01);
556 glVertex2d(dx + scale * 2.01024036E+01, dy + scale * 5.46436272E+01);
557 glVertex2d(dx + scale * 2.00029964E+01, dy + scale * 5.41121788E+01);
558 glVertex2d(dx + scale * 2.00029964E+01, dy + scale * 5.41121788E+01);
559 glVertex2d(dx + scale * 2.04135437E+01, dy + scale * 5.37603645E+01);
560 glVertex2d(dx + scale * 2.92241192E+01, dy + scale * 5.89225616E+01);
561 glVertex2d(dx + scale * 2.92241192E+01, dy + scale * 6.01559525E+01);
562 glVertex2d(dx + scale * 2.92241192E+01, dy + scale * 6.01559525E+01);
563 glVertex2d(dx + scale * 2.81559734E+01, dy + scale * 6.07726440E+01);
564 glVertex2d(dx + scale * 2.81559734E+01, dy + scale * 6.07726440E+01);
565 glVertex2d(dx + scale * 2.70878277E+01, dy + scale * 6.01559525E+01);
566 glVertex2d(dx + scale * 2.70878277E+01, dy + scale * 6.01559525E+01);
567 glVertex2d(dx + scale * 2.70878277E+01, dy + scale * 5.89225616E+01);
568 glVertex2d(dx + scale * 2.70878277E+01, dy + scale * 5.89225616E+01);
569 glVertex2d(dx + scale * 2.81559734E+01, dy + scale * 5.83058662E+01);
570 glVertex2d(dx + scale * 2.81559734E+01, dy + scale * 5.83058662E+01);
571 glVertex2d(dx + scale * 2.92241192E+01, dy + scale * 5.89225616E+01);
572 glVertex2d(dx + scale * 4.00748558E+01, dy + scale * 6.66682663E+01);
573 glVertex2d(dx + scale * 4.00748558E+01, dy + scale * 6.86397629E+01);
574 glVertex2d(dx + scale * 4.00748558E+01, dy + scale * 6.86397629E+01);
575 glVertex2d(dx + scale * 3.83674927E+01, dy + scale * 6.96255112E+01);
576 glVertex2d(dx + scale * 3.83674927E+01, dy + scale * 6.96255112E+01);
577 glVertex2d(dx + scale * 3.66601257E+01, dy + scale * 6.86397629E+01);
578 glVertex2d(dx + scale * 3.66601257E+01, dy + scale * 6.86397629E+01);
579 glVertex2d(dx + scale * 3.66601257E+01, dy + scale * 6.66682663E+01);
580 glVertex2d(dx + scale * 3.66601257E+01, dy + scale * 6.66682663E+01);
581 glVertex2d(dx + scale * 3.83674927E+01, dy + scale * 6.56825180E+01);
582 glVertex2d(dx + scale * 3.83674927E+01, dy + scale * 6.56825180E+01);
583 glVertex2d(dx + scale * 4.00748558E+01, dy + scale * 6.66682663E+01);
584 glVertex2d(dx + scale * 3.55498581E+01, dy + scale * 5.91182632E+01);
585 glVertex2d(dx + scale * 3.62619553E+01, dy + scale * 5.99602509E+01);
586 glVertex2d(dx + scale * 3.62619553E+01, dy + scale * 5.99602509E+01);
587 glVertex2d(dx + scale * 3.58888245E+01, dy + scale * 6.09979362E+01);
588 glVertex2d(dx + scale * 3.58888245E+01, dy + scale * 6.09979362E+01);
589 glVertex2d(dx + scale * 3.48035927E+01, dy + scale * 6.11936378E+01);
590 glVertex2d(dx + scale * 3.48035927E+01, dy + scale * 6.11936378E+01);
591 glVertex2d(dx + scale * 3.40914955E+01, dy + scale * 6.03516541E+01);
592 glVertex2d(dx + scale * 3.40914955E+01, dy + scale * 6.03516541E+01);
593 glVertex2d(dx + scale * 3.44646263E+01, dy + scale * 5.93139648E+01);
594 glVertex2d(dx + scale * 3.44646263E+01, dy + scale * 5.93139648E+01);
595 glVertex2d(dx + scale * 3.55498581E+01, dy + scale * 5.91182632E+01);
596 glEnd();
597 break;
598 default: break;
599 }
600
601 glDisable(GL_BLEND);
602 glDisable(GL_LINE_SMOOTH);
603 glPopMatrix();
604 }
605
move()606 void Navigator::move()
607 {
608 if(pad->toggle(pad->button_map[3])) {
609 switch(mode) {
610 case PEDESTRIAN: mode = DIVER; break;
611 case DIVER: mode = PEDESTRIAN; break;
612 default: break;
613 }
614 }
615 // reset 1:1
616 if(pad->toggle(pad->button_map[8])) {
617 ctx->camera.lookAtCg();
618 reference_speed = 1.5 * frequency * (ctx->camera.Lc) / 100.;
619 }
620 // change the plane
621 if(pad->toggle(pad->button_map[0])) ctx->camera.lookAtCg();
622 if(pad->toggle(pad->button_map[1])) {
623 switch(along) {
624 case AXE_X:
625 along = AXE_Y;
626 ctx->camera.alongY();
627 break;
628 case AXE_Y:
629 along = AXE_Z;
630 ctx->camera.alongZ();
631 break;
632 case AXE_Z:
633 along = AXE_X;
634 ctx->camera.alongX();
635 break;
636 default: break;
637 }
638 }
639 // reset vertical axe or invers it
640 if(pad->toggle(pad->button_map[2])) {
641 switch(along) {
642 case AXE_X: ctx->camera.upZ(); break;
643 case AXE_Y: ctx->camera.upX(); break;
644 case AXE_Z: ctx->camera.upY(); break;
645 default: break;
646 }
647 }
648 // head movement is damped to avoid nausea
649 if(pad->button[pad->button_map[4]]) {
650 ax0 = int(pad->axe[pad->axe_map[0]] * 10) / 10.;
651 ax1 = int(pad->axe[pad->axe_map[1]] * 10) / 10.;
652 if(ax1 > 0.) ax0 = -ax0;
653 }
654 else {
655 ax0 = 0.;
656 ax1 = 0.;
657 }
658 if((ax0 - ax0_cur) > 0.) {
659 ax0_cur = ax0_cur + std::min((ax0 - ax0_cur), 0.005);
660 }
661 else {
662 ax0_cur = ax0_cur + std::max((ax0 - ax0_cur), -0.005);
663 }
664
665 if((ax1 - ax1_cur) > 0.) {
666 ax1_cur = ax1_cur + std::min((ax1 - ax1_cur), 0.005);
667 }
668 else {
669 ax1_cur = ax1_cur + std::max((ax1 - ax1_cur), -0.005);
670 }
671
672 azimut = -(ax0_cur) * (2. * ctx->camera.aperture * 0.01745329);
673 elevation = (ax1_cur) * (2. * ctx->camera.aperture * 0.01745329);
674
675 //========================================================
676
677 switch(mode) {
678 case PEDESTRIAN:
679 //------------------------------------------
680 // accelaration
681 if(!pad->button[pad->button_map[4]]) {
682 if(pad->axe[pad->axe_map[1]] != 0.) {
683 acc = -pad->axe[pad->axe_map[1]] * ctx->camera.Lc / 500. * frequency;
684 if(acc > 0.) { speed = reference_speed + acc; }
685 else {
686 speed = reference_speed + 2. * acc;
687 }
688 speed = std::max(speed, (frequency * ctx->camera.Lc / 1000.));
689 reference_speed = std::min(speed, (frequency * (ctx->camera.Lc)));
690 /*
691 std::cout<<"acc: "<< acc << std::endl;
692 std::cout<<"lc: "<< ctx->camera.Lc << std::endl;
693 std::cout<<"vitesse: "<< reference_speed << std::endl;
694 */
695 }
696 }
697 lift = -.25 * pad->axe[pad->axe_map[5]] * reference_speed;
698 lateral = 0.25 * pad->axe[pad->axe_map[4]] * reference_speed;
699 angular_lat = -1.0 * (pad->axe[pad->axe_map[2]]) * reference_angle;
700 // walk else run
701 if(pad->button[pad->button_map[6]]) {
702 speed = -1.0 * pad->axe[pad->axe_map[3]] * reference_speed;
703 }
704 else {
705 speed = -4.0 * (pad->axe[pad->axe_map[3]]) * reference_speed;
706 }
707 ctx->camera.move_and_look(speed, lateral, lift, 0., 0., angular_lat, azimut,
708 elevation);
709 //-------------------------------------
710
711 break; // end of mode PESDESTRIAN
712
713 case DIVER:
714 //-------------------------------------
715 // accelaration
716 // pad->affiche();
717 if(!pad->button[pad->button_map[4]]) {
718 angular_fr = 1.0 * (pad->axe[pad->axe_map[0]]) * reference_angle;
719 if(pad->axe[pad->axe_map[1]] != 0.) {
720 acc = -pad->axe[pad->axe_map[1]] * ctx->camera.Lc / 1000. * frequency;
721 if(acc > 0.) { speed = reference_speed + acc; }
722 else {
723 speed = reference_speed + 2. * acc;
724 }
725 speed = std::max(speed, (frequency * ctx->camera.Lc / 1000.));
726 reference_speed = std::min(speed, (frequency * (ctx->camera.Lc)));
727 }
728 if(pad->button[pad->button_map[6]]) { speed = reference_speed; }
729 else {
730 speed = 0.;
731 }
732 }
733
734 lift = -.25 * pad->axe[pad->axe_map[5]] * reference_speed;
735 lateral = 0.25 * pad->axe[pad->axe_map[4]] * reference_speed;
736 angular_lat = -1.0 * (pad->axe[pad->axe_map[2]]) * reference_angle;
737 angular_up = 1.0 * (pad->axe[pad->axe_map[3]]) * reference_angle;
738
739 ctx->camera.move_and_look(speed, lateral, lift, angular_fr, angular_up,
740 angular_lat, azimut, elevation);
741 //-------------------------------------
742 break; // end of mode DIVER
743
744 case PLANE: break; // end of mode PLANE
745
746 case CAR: break; // end of mode CAR
747
748 default: break;
749
750 } // end of switch(mode)
751 }
752