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