├── .gitignore
├── LICENSE.md
├── Makefile
├── README.md
├── SeaTraffic-ReadMe.html
├── SeaTraffic
├── 64
│ └── .gitignore
├── .gitignore
├── Aframax_tanker.py
├── Aframax_tanker_Black.obj
├── Aframax_tanker_Blue.blend
├── Aframax_tanker_Blue.obj
├── Aframax_tanker_Grey.obj
├── Aframax_tanker_Sky.obj
├── Damen_2006.blend
├── Damen_2006_Green.obj
├── Damen_2006_Red.obj
├── Damen_2006_Sky.obj
├── Damen_2006_White.obj
├── Damen_2010.blend
├── Damen_2010.dds
├── Damen_2010.obj
├── Damen_2010.xcf
├── Damen_2010_LIT.dds
├── Damen_4212.blend
├── Damen_4212.dds
├── Damen_4212.xcf
├── Damen_4212_Blue.obj
├── Damen_4212_Green.obj
├── Damen_4212_LIT.dds
├── Damen_4212_Orange.obj
├── Damen_4212_Sky.obj
├── Osm_linkage.png
├── River_crossing.blend
├── River_crossing.dds
├── River_crossing.obj
├── River_crossing_LIT.dds
├── Tanker.dds
├── Tanker.xcf
├── Tanker_LIT.dds
├── buildroutes.py
├── enhancedby_opensceneryx_logo.png
├── routes.txt
├── wake.dds
├── wake.xcf
├── wake_big.blend
├── wake_big.obj
├── wake_med.blend
├── wake_med.obj
├── wake_sml.blend
└── wake_sml.obj
├── src
├── .gdbinit
├── .gitignore
├── .lldbinit
├── Makefile.lin
├── Makefile.mac
├── Makefile.win
├── models.c
├── routes.c
├── seatraffic.c
└── seatraffic.h
└── version.mak
/.gitignore:
--------------------------------------------------------------------------------
1 | *.bak
2 | *.zip
3 |
4 | *.blend1
5 | *.blend2
6 | *.blend3
7 |
8 | .DS_Store
9 | Thumbs.db
10 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | GNU LESSER GENERAL PUBLIC LICENSE
2 | Version 2.1, February 1999
3 |
4 | Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6 | Everyone is permitted to copy and distribute verbatim copies
7 | of this license document, but changing it is not allowed.
8 |
9 | (This is the first released version of the Lesser GPL. It also counts
10 | as the successor of the GNU Library Public License, version 2, hence
11 | the version number 2.1.)
12 |
13 | Preamble
14 |
15 | The licenses for most software are designed to take away your
16 | freedom to share and change it. By contrast, the GNU General Public
17 | Licenses are intended to guarantee your freedom to share and change
18 | free software--to make sure the software is free for all its users.
19 |
20 | This license, the Lesser General Public License, applies to some
21 | specially designated software packages--typically libraries--of the
22 | Free Software Foundation and other authors who decide to use it. You
23 | can use it too, but we suggest you first think carefully about whether
24 | this license or the ordinary General Public License is the better
25 | strategy to use in any particular case, based on the explanations below.
26 |
27 | When we speak of free software, we are referring to freedom of use,
28 | not price. Our General Public Licenses are designed to make sure that
29 | you have the freedom to distribute copies of free software (and charge
30 | for this service if you wish); that you receive source code or can get
31 | it if you want it; that you can change the software and use pieces of
32 | it in new free programs; and that you are informed that you can do
33 | these things.
34 |
35 | To protect your rights, we need to make restrictions that forbid
36 | distributors to deny you these rights or to ask you to surrender these
37 | rights. These restrictions translate to certain responsibilities for
38 | you if you distribute copies of the library or if you modify it.
39 |
40 | For example, if you distribute copies of the library, whether gratis
41 | or for a fee, you must give the recipients all the rights that we gave
42 | you. You must make sure that they, too, receive or can get the source
43 | code. If you link other code with the library, you must provide
44 | complete object files to the recipients, so that they can relink them
45 | with the library after making changes to the library and recompiling
46 | it. And you must show them these terms so they know their rights.
47 |
48 | We protect your rights with a two-step method: (1) we copyright the
49 | library, and (2) we offer you this license, which gives you legal
50 | permission to copy, distribute and/or modify the library.
51 |
52 | To protect each distributor, we want to make it very clear that
53 | there is no warranty for the free library. Also, if the library is
54 | modified by someone else and passed on, the recipients should know
55 | that what they have is not the original version, so that the original
56 | author's reputation will not be affected by problems that might be
57 | introduced by others.
58 |
59 | Finally, software patents pose a constant threat to the existence of
60 | any free program. We wish to make sure that a company cannot
61 | effectively restrict the users of a free program by obtaining a
62 | restrictive license from a patent holder. Therefore, we insist that
63 | any patent license obtained for a version of the library must be
64 | consistent with the full freedom of use specified in this license.
65 |
66 | Most GNU software, including some libraries, is covered by the
67 | ordinary GNU General Public License. This license, the GNU Lesser
68 | General Public License, applies to certain designated libraries, and
69 | is quite different from the ordinary General Public License. We use
70 | this license for certain libraries in order to permit linking those
71 | libraries into non-free programs.
72 |
73 | When a program is linked with a library, whether statically or using
74 | a shared library, the combination of the two is legally speaking a
75 | combined work, a derivative of the original library. The ordinary
76 | General Public License therefore permits such linking only if the
77 | entire combination fits its criteria of freedom. The Lesser General
78 | Public License permits more lax criteria for linking other code with
79 | the library.
80 |
81 | We call this license the "Lesser" General Public License because it
82 | does Less to protect the user's freedom than the ordinary General
83 | Public License. It also provides other free software developers Less
84 | of an advantage over competing non-free programs. These disadvantages
85 | are the reason we use the ordinary General Public License for many
86 | libraries. However, the Lesser license provides advantages in certain
87 | special circumstances.
88 |
89 | For example, on rare occasions, there may be a special need to
90 | encourage the widest possible use of a certain library, so that it becomes
91 | a de-facto standard. To achieve this, non-free programs must be
92 | allowed to use the library. A more frequent case is that a free
93 | library does the same job as widely used non-free libraries. In this
94 | case, there is little to gain by limiting the free library to free
95 | software only, so we use the Lesser General Public License.
96 |
97 | In other cases, permission to use a particular library in non-free
98 | programs enables a greater number of people to use a large body of
99 | free software. For example, permission to use the GNU C Library in
100 | non-free programs enables many more people to use the whole GNU
101 | operating system, as well as its variant, the GNU/Linux operating
102 | system.
103 |
104 | Although the Lesser General Public License is Less protective of the
105 | users' freedom, it does ensure that the user of a program that is
106 | linked with the Library has the freedom and the wherewithal to run
107 | that program using a modified version of the Library.
108 |
109 | The precise terms and conditions for copying, distribution and
110 | modification follow. Pay close attention to the difference between a
111 | "work based on the library" and a "work that uses the library". The
112 | former contains code derived from the library, whereas the latter must
113 | be combined with the library in order to run.
114 |
115 | GNU LESSER GENERAL PUBLIC LICENSE
116 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117 |
118 | 0. This License Agreement applies to any software library or other
119 | program which contains a notice placed by the copyright holder or
120 | other authorized party saying it may be distributed under the terms of
121 | this Lesser General Public License (also called "this License").
122 | Each licensee is addressed as "you".
123 |
124 | A "library" means a collection of software functions and/or data
125 | prepared so as to be conveniently linked with application programs
126 | (which use some of those functions and data) to form executables.
127 |
128 | The "Library", below, refers to any such software library or work
129 | which has been distributed under these terms. A "work based on the
130 | Library" means either the Library or any derivative work under
131 | copyright law: that is to say, a work containing the Library or a
132 | portion of it, either verbatim or with modifications and/or translated
133 | straightforwardly into another language. (Hereinafter, translation is
134 | included without limitation in the term "modification".)
135 |
136 | "Source code" for a work means the preferred form of the work for
137 | making modifications to it. For a library, complete source code means
138 | all the source code for all modules it contains, plus any associated
139 | interface definition files, plus the scripts used to control compilation
140 | and installation of the library.
141 |
142 | Activities other than copying, distribution and modification are not
143 | covered by this License; they are outside its scope. The act of
144 | running a program using the Library is not restricted, and output from
145 | such a program is covered only if its contents constitute a work based
146 | on the Library (independent of the use of the Library in a tool for
147 | writing it). Whether that is true depends on what the Library does
148 | and what the program that uses the Library does.
149 |
150 | 1. You may copy and distribute verbatim copies of the Library's
151 | complete source code as you receive it, in any medium, provided that
152 | you conspicuously and appropriately publish on each copy an
153 | appropriate copyright notice and disclaimer of warranty; keep intact
154 | all the notices that refer to this License and to the absence of any
155 | warranty; and distribute a copy of this License along with the
156 | Library.
157 |
158 | You may charge a fee for the physical act of transferring a copy,
159 | and you may at your option offer warranty protection in exchange for a
160 | fee.
161 |
162 | 2. You may modify your copy or copies of the Library or any portion
163 | of it, thus forming a work based on the Library, and copy and
164 | distribute such modifications or work under the terms of Section 1
165 | above, provided that you also meet all of these conditions:
166 |
167 | a) The modified work must itself be a software library.
168 |
169 | b) You must cause the files modified to carry prominent notices
170 | stating that you changed the files and the date of any change.
171 |
172 | c) You must cause the whole of the work to be licensed at no
173 | charge to all third parties under the terms of this License.
174 |
175 | d) If a facility in the modified Library refers to a function or a
176 | table of data to be supplied by an application program that uses
177 | the facility, other than as an argument passed when the facility
178 | is invoked, then you must make a good faith effort to ensure that,
179 | in the event an application does not supply such function or
180 | table, the facility still operates, and performs whatever part of
181 | its purpose remains meaningful.
182 |
183 | (For example, a function in a library to compute square roots has
184 | a purpose that is entirely well-defined independent of the
185 | application. Therefore, Subsection 2d requires that any
186 | application-supplied function or table used by this function must
187 | be optional: if the application does not supply it, the square
188 | root function must still compute square roots.)
189 |
190 | These requirements apply to the modified work as a whole. If
191 | identifiable sections of that work are not derived from the Library,
192 | and can be reasonably considered independent and separate works in
193 | themselves, then this License, and its terms, do not apply to those
194 | sections when you distribute them as separate works. But when you
195 | distribute the same sections as part of a whole which is a work based
196 | on the Library, the distribution of the whole must be on the terms of
197 | this License, whose permissions for other licensees extend to the
198 | entire whole, and thus to each and every part regardless of who wrote
199 | it.
200 |
201 | Thus, it is not the intent of this section to claim rights or contest
202 | your rights to work written entirely by you; rather, the intent is to
203 | exercise the right to control the distribution of derivative or
204 | collective works based on the Library.
205 |
206 | In addition, mere aggregation of another work not based on the Library
207 | with the Library (or with a work based on the Library) on a volume of
208 | a storage or distribution medium does not bring the other work under
209 | the scope of this License.
210 |
211 | 3. You may opt to apply the terms of the ordinary GNU General Public
212 | License instead of this License to a given copy of the Library. To do
213 | this, you must alter all the notices that refer to this License, so
214 | that they refer to the ordinary GNU General Public License, version 2,
215 | instead of to this License. (If a newer version than version 2 of the
216 | ordinary GNU General Public License has appeared, then you can specify
217 | that version instead if you wish.) Do not make any other change in
218 | these notices.
219 |
220 | Once this change is made in a given copy, it is irreversible for
221 | that copy, so the ordinary GNU General Public License applies to all
222 | subsequent copies and derivative works made from that copy.
223 |
224 | This option is useful when you wish to copy part of the code of
225 | the Library into a program that is not a library.
226 |
227 | 4. You may copy and distribute the Library (or a portion or
228 | derivative of it, under Section 2) in object code or executable form
229 | under the terms of Sections 1 and 2 above provided that you accompany
230 | it with the complete corresponding machine-readable source code, which
231 | must be distributed under the terms of Sections 1 and 2 above on a
232 | medium customarily used for software interchange.
233 |
234 | If distribution of object code is made by offering access to copy
235 | from a designated place, then offering equivalent access to copy the
236 | source code from the same place satisfies the requirement to
237 | distribute the source code, even though third parties are not
238 | compelled to copy the source along with the object code.
239 |
240 | 5. A program that contains no derivative of any portion of the
241 | Library, but is designed to work with the Library by being compiled or
242 | linked with it, is called a "work that uses the Library". Such a
243 | work, in isolation, is not a derivative work of the Library, and
244 | therefore falls outside the scope of this License.
245 |
246 | However, linking a "work that uses the Library" with the Library
247 | creates an executable that is a derivative of the Library (because it
248 | contains portions of the Library), rather than a "work that uses the
249 | library". The executable is therefore covered by this License.
250 | Section 6 states terms for distribution of such executables.
251 |
252 | When a "work that uses the Library" uses material from a header file
253 | that is part of the Library, the object code for the work may be a
254 | derivative work of the Library even though the source code is not.
255 | Whether this is true is especially significant if the work can be
256 | linked without the Library, or if the work is itself a library. The
257 | threshold for this to be true is not precisely defined by law.
258 |
259 | If such an object file uses only numerical parameters, data
260 | structure layouts and accessors, and small macros and small inline
261 | functions (ten lines or less in length), then the use of the object
262 | file is unrestricted, regardless of whether it is legally a derivative
263 | work. (Executables containing this object code plus portions of the
264 | Library will still fall under Section 6.)
265 |
266 | Otherwise, if the work is a derivative of the Library, you may
267 | distribute the object code for the work under the terms of Section 6.
268 | Any executables containing that work also fall under Section 6,
269 | whether or not they are linked directly with the Library itself.
270 |
271 | 6. As an exception to the Sections above, you may also combine or
272 | link a "work that uses the Library" with the Library to produce a
273 | work containing portions of the Library, and distribute that work
274 | under terms of your choice, provided that the terms permit
275 | modification of the work for the customer's own use and reverse
276 | engineering for debugging such modifications.
277 |
278 | You must give prominent notice with each copy of the work that the
279 | Library is used in it and that the Library and its use are covered by
280 | this License. You must supply a copy of this License. If the work
281 | during execution displays copyright notices, you must include the
282 | copyright notice for the Library among them, as well as a reference
283 | directing the user to the copy of this License. Also, you must do one
284 | of these things:
285 |
286 | a) Accompany the work with the complete corresponding
287 | machine-readable source code for the Library including whatever
288 | changes were used in the work (which must be distributed under
289 | Sections 1 and 2 above); and, if the work is an executable linked
290 | with the Library, with the complete machine-readable "work that
291 | uses the Library", as object code and/or source code, so that the
292 | user can modify the Library and then relink to produce a modified
293 | executable containing the modified Library. (It is understood
294 | that the user who changes the contents of definitions files in the
295 | Library will not necessarily be able to recompile the application
296 | to use the modified definitions.)
297 |
298 | b) Use a suitable shared library mechanism for linking with the
299 | Library. A suitable mechanism is one that (1) uses at run time a
300 | copy of the library already present on the user's computer system,
301 | rather than copying library functions into the executable, and (2)
302 | will operate properly with a modified version of the library, if
303 | the user installs one, as long as the modified version is
304 | interface-compatible with the version that the work was made with.
305 |
306 | c) Accompany the work with a written offer, valid for at
307 | least three years, to give the same user the materials
308 | specified in Subsection 6a, above, for a charge no more
309 | than the cost of performing this distribution.
310 |
311 | d) If distribution of the work is made by offering access to copy
312 | from a designated place, offer equivalent access to copy the above
313 | specified materials from the same place.
314 |
315 | e) Verify that the user has already received a copy of these
316 | materials or that you have already sent this user a copy.
317 |
318 | For an executable, the required form of the "work that uses the
319 | Library" must include any data and utility programs needed for
320 | reproducing the executable from it. However, as a special exception,
321 | the materials to be distributed need not include anything that is
322 | normally distributed (in either source or binary form) with the major
323 | components (compiler, kernel, and so on) of the operating system on
324 | which the executable runs, unless that component itself accompanies
325 | the executable.
326 |
327 | It may happen that this requirement contradicts the license
328 | restrictions of other proprietary libraries that do not normally
329 | accompany the operating system. Such a contradiction means you cannot
330 | use both them and the Library together in an executable that you
331 | distribute.
332 |
333 | 7. You may place library facilities that are a work based on the
334 | Library side-by-side in a single library together with other library
335 | facilities not covered by this License, and distribute such a combined
336 | library, provided that the separate distribution of the work based on
337 | the Library and of the other library facilities is otherwise
338 | permitted, and provided that you do these two things:
339 |
340 | a) Accompany the combined library with a copy of the same work
341 | based on the Library, uncombined with any other library
342 | facilities. This must be distributed under the terms of the
343 | Sections above.
344 |
345 | b) Give prominent notice with the combined library of the fact
346 | that part of it is a work based on the Library, and explaining
347 | where to find the accompanying uncombined form of the same work.
348 |
349 | 8. You may not copy, modify, sublicense, link with, or distribute
350 | the Library except as expressly provided under this License. Any
351 | attempt otherwise to copy, modify, sublicense, link with, or
352 | distribute the Library is void, and will automatically terminate your
353 | rights under this License. However, parties who have received copies,
354 | or rights, from you under this License will not have their licenses
355 | terminated so long as such parties remain in full compliance.
356 |
357 | 9. You are not required to accept this License, since you have not
358 | signed it. However, nothing else grants you permission to modify or
359 | distribute the Library or its derivative works. These actions are
360 | prohibited by law if you do not accept this License. Therefore, by
361 | modifying or distributing the Library (or any work based on the
362 | Library), you indicate your acceptance of this License to do so, and
363 | all its terms and conditions for copying, distributing or modifying
364 | the Library or works based on it.
365 |
366 | 10. Each time you redistribute the Library (or any work based on the
367 | Library), the recipient automatically receives a license from the
368 | original licensor to copy, distribute, link with or modify the Library
369 | subject to these terms and conditions. You may not impose any further
370 | restrictions on the recipients' exercise of the rights granted herein.
371 | You are not responsible for enforcing compliance by third parties with
372 | this License.
373 |
374 | 11. If, as a consequence of a court judgment or allegation of patent
375 | infringement or for any other reason (not limited to patent issues),
376 | conditions are imposed on you (whether by court order, agreement or
377 | otherwise) that contradict the conditions of this License, they do not
378 | excuse you from the conditions of this License. If you cannot
379 | distribute so as to satisfy simultaneously your obligations under this
380 | License and any other pertinent obligations, then as a consequence you
381 | may not distribute the Library at all. For example, if a patent
382 | license would not permit royalty-free redistribution of the Library by
383 | all those who receive copies directly or indirectly through you, then
384 | the only way you could satisfy both it and this License would be to
385 | refrain entirely from distribution of the Library.
386 |
387 | If any portion of this section is held invalid or unenforceable under any
388 | particular circumstance, the balance of the section is intended to apply,
389 | and the section as a whole is intended to apply in other circumstances.
390 |
391 | It is not the purpose of this section to induce you to infringe any
392 | patents or other property right claims or to contest validity of any
393 | such claims; this section has the sole purpose of protecting the
394 | integrity of the free software distribution system which is
395 | implemented by public license practices. Many people have made
396 | generous contributions to the wide range of software distributed
397 | through that system in reliance on consistent application of that
398 | system; it is up to the author/donor to decide if he or she is willing
399 | to distribute software through any other system and a licensee cannot
400 | impose that choice.
401 |
402 | This section is intended to make thoroughly clear what is believed to
403 | be a consequence of the rest of this License.
404 |
405 | 12. If the distribution and/or use of the Library is restricted in
406 | certain countries either by patents or by copyrighted interfaces, the
407 | original copyright holder who places the Library under this License may add
408 | an explicit geographical distribution limitation excluding those countries,
409 | so that distribution is permitted only in or among countries not thus
410 | excluded. In such case, this License incorporates the limitation as if
411 | written in the body of this License.
412 |
413 | 13. The Free Software Foundation may publish revised and/or new
414 | versions of the Lesser General Public License from time to time.
415 | Such new versions will be similar in spirit to the present version,
416 | but may differ in detail to address new problems or concerns.
417 |
418 | Each version is given a distinguishing version number. If the Library
419 | specifies a version number of this License which applies to it and
420 | "any later version", you have the option of following the terms and
421 | conditions either of that version or of any later version published by
422 | the Free Software Foundation. If the Library does not specify a
423 | license version number, you may choose any version ever published by
424 | the Free Software Foundation.
425 |
426 | 14. If you wish to incorporate parts of the Library into other free
427 | programs whose distribution conditions are incompatible with these,
428 | write to the author to ask for permission. For software which is
429 | copyrighted by the Free Software Foundation, write to the Free
430 | Software Foundation; we sometimes make exceptions for this. Our
431 | decision will be guided by the two goals of preserving the free status
432 | of all derivatives of our free software and of promoting the sharing
433 | and reuse of software generally.
434 |
435 | NO WARRANTY
436 |
437 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446 |
447 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456 | DAMAGES.
457 |
458 | END OF TERMS AND CONDITIONS
459 |
460 | How to Apply These Terms to Your New Libraries
461 |
462 | If you develop a new library, and you want it to be of the greatest
463 | possible use to the public, we recommend making it free software that
464 | everyone can redistribute and change. You can do so by permitting
465 | redistribution under these terms (or, alternatively, under the terms of the
466 | ordinary General Public License).
467 |
468 | To apply these terms, attach the following notices to the library. It is
469 | safest to attach them to the start of each source file to most effectively
470 | convey the exclusion of warranty; and each file should have at least the
471 | "copyright" line and a pointer to where the full notice is found.
472 |
473 | {description}
474 | Copyright (C) {year} {fullname}
475 |
476 | This library is free software; you can redistribute it and/or
477 | modify it under the terms of the GNU Lesser General Public
478 | License as published by the Free Software Foundation; either
479 | version 2.1 of the License, or (at your option) any later version.
480 |
481 | This library is distributed in the hope that it will be useful,
482 | but WITHOUT ANY WARRANTY; without even the implied warranty of
483 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484 | Lesser General Public License for more details.
485 |
486 | You should have received a copy of the GNU Lesser General Public
487 | License along with this library; if not, write to the Free Software
488 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
489 | USA
490 |
491 | Also add information on how to contact you by electronic and paper mail.
492 |
493 | You should also get your employer (if you work as a programmer) or your
494 | school, if any, to sign a "copyright disclaimer" for the library, if
495 | necessary. Here is a sample; alter the names:
496 |
497 | Yoyodyne, Inc., hereby disclaims all copyright interest in the
498 | library `Frob' (a library for tweaking knobs) written by James Random
499 | Hacker.
500 |
501 | {signature of Ty Coon}, 1 April 1990
502 | Ty Coon, President of Vice
503 |
504 | That's all there is to it!
505 |
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 | include version.mak
2 |
3 | TARGET=$(PROJECT)_$(VER).zip
4 |
5 | INSTALLDIR=~/Desktop/X-Plane\ 10/Resources/plugins
6 |
7 | FILES=$(PROJECT)-ReadMe.html $(PROJECT)/lin.xpl $(PROJECT)/mac.xpl $(PROJECT)/win.xpl $(PROJECT)/32/win.xpl $(PROJECT)/64/lin.xpl $(PROJECT)/64/win.xpl $(PROJECT)/buildroutes.py $(PROJECT)/routes.txt $(PROJECT)/enhancedby_opensceneryx_logo.png $(PROJECT)/Osm_linkage.png $(PROJECT)/Tanker.dds $(PROJECT)/Tanker_LIT.dds $(PROJECT)/Aframax_tanker_Black.obj $(PROJECT)/Aframax_tanker_Blue.obj $(PROJECT)/Aframax_tanker_Grey.obj $(PROJECT)/Aframax_tanker_Sky.obj $(PROJECT)/Damen_2006_Green.obj $(PROJECT)/Damen_2006_Sky.obj $(PROJECT)/Damen_2006_Red.obj $(PROJECT)/Damen_2006_White.obj $(PROJECT)/Damen_2010.dds $(PROJECT)/Damen_2010_LIT.dds $(PROJECT)/Damen_2010.obj $(PROJECT)/Damen_4212.dds $(PROJECT)/Damen_4212_LIT.dds $(PROJECT)/Damen_4212_Blue.obj $(PROJECT)/Damen_4212_Green.obj $(PROJECT)/Damen_4212_Orange.obj $(PROJECT)/Damen_4212_Sky.obj $(PROJECT)/River_crossing.dds $(PROJECT)/River_crossing_LIT.dds $(PROJECT)/River_crossing.obj $(PROJECT)/wake.dds $(PROJECT)/wake_big.obj $(PROJECT)/wake_med.obj $(PROJECT)/wake_sml.obj
8 |
9 | all: $(TARGET)
10 |
11 | clean:
12 | rm $(TARGET)
13 |
14 | install: $(TARGET)
15 | rm -rf $(INSTALLDIR)/$(PROJECT)
16 | unzip -o -d $(INSTALLDIR) $(TARGET)
17 |
18 | $(TARGET): $(FILES)
19 | chmod +x $(PROJECT)/*.xpl $(PROJECT)/32/*.xpl $(PROJECT)/64/*.xpl
20 | rm -f $(TARGET)
21 | zip -MM $(TARGET) $+
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | SeaTraffic plugin for X-Plane®
2 | ====
3 |
4 | This [X-Plane](x-plane.com) plugin displays ships moving along real-life routes.
5 |
6 | The repo contains the artwork assets and the source code for the X-Plane plugin. User oriented documention is contained in the file [SeaTraffic-ReadMe.html](http://htmlpreview.github.io/?https://raw.githubusercontent.com/Marginal/SeaTraffic/master/SeaTraffic-ReadMe.html).
7 |
8 | Building the plugin
9 | ----
10 | The plugin is built from the `src` directory.
11 |
12 | Mac 32 & 64 bit fat binary:
13 |
14 | make -f Makefile.mac
15 |
16 | Linux 32 & 64 bit binaries:
17 |
18 | make -f Makefile.lin
19 |
20 | Windows 32 or 64 bit binary:
21 |
22 | vcvarsall [target]
23 | nmake -f Makefile.win
24 |
25 | Building the routes list
26 | ----
27 | The routes list is built from the `SeaTraffic` directory, and requires Python 2.x.
28 |
29 | buildroutes.py
30 |
--------------------------------------------------------------------------------
/SeaTraffic-ReadMe.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | SeaTraffic
8 |
9 |
19 |
20 |
21 |
28 |
29 |
30 | SeaTraffic plugin for X-Plane®
31 |
32 | Overview
33 | This X-Plane plugin displays ships moving along real-life routes.
34 |
35 | Requirements
36 | This plugin can be used with X-Plane 9 or later. It relies on the OpenSceneryX Object Library for some of its ship models.
37 |
38 | Installation
39 |
40 | - If you do not already have the OpenSceneryX Object Library installed, download and install it.
41 |
55 | - Copy or move the
SeaTraffic
folder from within this archive into the X-Plane/Resources/plugins
folder.
56 |
57 |
58 | Options
59 | If the plugin is installed correctly, you will see a SeaTraffic entry in X-Plane’s Plugins menu. This offers one option:
60 |
61 | - Draw routes in Local Map
62 | - Controls whether routes and current ship positions are shown in X-Plane’s Location → Local Map.
63 |
64 | The plugin obeys the following settings in X-Plane’s Settings → Rendering Options:
65 |
66 | - number of objects
67 | - Controls the maximum number of ships.
68 | - shadow detail (X-Plane 10 or later)
69 | - Ships are shown with shadows when this is set to “global (low)” or above.
70 | - water reflection detail
71 | - Ships are shown with reflections and wakes when this is set to “medium” or above.
72 |
73 |
74 |
75 | Adding / modifying routes
76 | This plugin uses ferry routes extracted from the OpenStreetMap project. If you find that a ferry route is missing or incorrect you can sign up to the project and add or modify the route. Start by reading the Beginners’ guide and other info on the Main Page.
77 | The OpenStreetMap “way” tags for creating a ferry route are described here and here. This plugin uses these tags to choose which type of ship to display. At minimum you should set the following tags:
78 |
79 | - route = ferry
80 | - name = route name
81 | - ref = line number or route code (if applicable)
82 | - motor_vehicle = yes / no
83 |
84 | You can further specify the type and size of ship with the following tags:
85 |
86 | - ferry = tourist / cruise (if applicable)
87 | - hgv = yes / no
88 | - motorcar = yes / no
89 | - foot = yes / no
90 |
91 |
92 | Getting your new / modified route into X-Plane
93 | This plugin doesn’t read ferry routes directly from the OpenStreetMap servers (that would be too slow). Instead, it contains a pre-computed database of routes. In order to visualise your new or modified ferry route(s) in X-Plane you can either:
94 |
95 | - wait for the author to release a new version of the plugin, or
96 | - wait about an hour for your edits to appear on the OpenStreetMap servers, then re-generate the plugin’s database by running the script
X-Plane/Resources/plugins/SeaTraffic/buildroutes.py
(Windows users must install Python 2.7 in order to run this script).
97 |
98 |
99 |
100 |
101 | Replacing ship models
102 | You can use X-Plane’s library system to replace the plugin’s built-in ship models. EXPORT object(s) from your scenery package with the following ‹virtual path(s)›:
103 |
104 | - marginal/seatraffic/tourist.obj
105 | - marginal/seatraffic/cruise.obj
106 | - marginal/seatraffic/ped/sml.obj
107 | - marginal/seatraffic/ped/med.obj
108 | - marginal/seatraffic/veh/sml.obj
109 | - marginal/seatraffic/veh/med.obj
110 | - marginal/seatraffic/veh/big.obj
111 |
112 | You must use the REGION statement in your library.txt file to restrict the use of your ship models to your geographical area of interest. Ships starting their journey within your region will use your model(s), but any ships arriving from outside of your region will still use the default models.
113 | You must restart X-Plane to see the effect of changes to your library.txt file - X-Plane only looks for and reads scenery libraries once at startup.
114 | Refer to this example scenery package for a worked example.
115 |
116 | Troubleshooting
117 |
118 | - There is no SeaTraffic entry in X-Plane’s Plugins menu, and I don't see any ships at all:
119 | - Open the file Log.txt in the X-Plane folder and search for a message SeaTraffic: Missing REGION statement for customization of ship ‹virtual path›.
120 | If you see this message then you haven't correctly used a REGION for your ship model(s) in your library.txt file.
121 | -
122 | - I see the default ship models instead of my ship models:
123 | - Check that you’re overriding the appropriate ‹virtual path(s)› (listed above) in your library.txt file.
124 | Check that you’re using the REGION_RECT statement correctly in your library.txt file.
125 | -
126 | - I see ship wakes, but I don't see my ship models:
127 | - Search in Log.txt for error messages from the SeaTraffic plugin and/or from X-Plane containing your ship object’s filename.
128 |
129 |
130 |
131 |
132 | Acknowledgements
133 | “X-Plane” is a registered trademark of Laminar Research.
134 | Medium vehicle ferry courtesy of Roy Leonard.
135 |
136 | License
137 | This kit is licensed under the GNU LGPL v2.1 license.
138 | It uses map data © OpenStreetMap contributors, licensed under the Open Data Commons Open Database License (ODbL).
139 |
140 |
141 |
142 |
143 |
144 | Version 1.31 © 2012-2015 Jonathan Harris
145 |  |
146 |
147 |
148 |
149 | |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
--------------------------------------------------------------------------------
/SeaTraffic/.gitignore:
--------------------------------------------------------------------------------
1 | # Placeholder to create directory for output
2 | *.xpl
3 | *.exp
4 | *.lib
5 | *.idb
6 | *.pdb
7 | *.csv
8 | *.osm
9 |
--------------------------------------------------------------------------------
/SeaTraffic/64/.gitignore:
--------------------------------------------------------------------------------
1 | # Placeholder to create directory for output
2 | *.xpl
3 | *.exp
4 | *.lib
5 | *.idb
6 | *.pdb
7 |
--------------------------------------------------------------------------------
/SeaTraffic/Aframax_tanker.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python
2 |
3 | pattern='Aframax_tanker_%s.obj'
4 |
5 | for (name, udelta) in [('Sky',0.125), ('Grey',0.5), ('Black', 0.625)]:
6 | infile =file(pattern % 'Blue', 'rU')
7 | outfile=file(pattern % name, 'w')
8 | for line in infile:
9 | if line.startswith('VT'):
10 | c=line.split()
11 | if (c[7] in ['0.9063', '0.9688'] and c[8] in ['0.0313', '0.0938']):
12 | d=map(float, c[1:])
13 | d[6] -= udelta
14 | outfile.write('VT\t%9.4f %9.4f %9.4f\t%6.3f %6.3f %6.3f\t%6.4f %6.4f\n' % tuple(d))
15 | else:
16 | outfile.write(line)
17 | else:
18 | outfile.write(line)
19 | infile.close()
20 | outfile.close()
21 |
--------------------------------------------------------------------------------
/SeaTraffic/Aframax_tanker_Blue.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Aframax_tanker_Blue.blend
--------------------------------------------------------------------------------
/SeaTraffic/Damen_2006.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_2006.blend
--------------------------------------------------------------------------------
/SeaTraffic/Damen_2006_Red.obj:
--------------------------------------------------------------------------------
1 | I
2 | 800
3 | OBJ
4 |
5 | TEXTURE Damen_4212.dds
6 | TEXTURE_LIT Damen_4212_LIT.dds
7 | POINT_COUNTS 1098 0 0 1776
8 |
9 | VT 0.6000 1.6000 0.1000 0.042 0.383 -0.923 0.1563 0.0938
10 | VT 0.6000 1.4000 0.1000 0.045 0.000 -0.999 0.2188 0.0938
11 | VT 1.7000 1.4000 0.2000 0.116 0.000 -0.993 0.2188 0.0313
12 | VT 1.7000 1.6000 0.2000 0.107 0.381 -0.918 0.1563 0.0313
13 | VT -0.6000 1.6000 0.1000 -0.042 0.383 -0.923 0.1563 0.0938
14 | VT -1.7000 1.6000 0.2000 -0.107 0.381 -0.918 0.1563 0.0313
15 | VT -1.7000 1.4000 0.2000 -0.116 0.000 -0.993 0.2188 0.0313
16 | VT -0.6000 1.4000 0.1000 -0.045 0.000 -0.999 0.2188 0.0938
17 | VT 1.7000 1.4000 0.2000 0.116 0.000 -0.993 0.1563 0.0938
18 | VT 2.4000 1.4000 0.3000 0.141 0.000 -0.990 0.2188 0.0938
19 | VT 2.4000 1.6000 0.3000 0.131 0.380 -0.915 0.2188 0.0313
20 | VT -1.7000 1.4000 0.2000 -0.116 0.000 -0.993 0.1563 0.0938
21 | VT -2.4000 1.6000 0.3000 -0.131 0.380 -0.915 0.2188 0.0313
22 | VT -2.4000 1.4000 0.3000 -0.141 0.000 -0.990 0.2188 0.0938
23 | VT 2.6000 1.4000 0.7000 0.932 0.000 -0.362 0.1563 0.0938
24 | VT 2.6000 1.6000 0.7000 0.906 0.263 -0.333 0.2188 0.0938
25 | VT 2.4000 1.6000 0.3000 0.881 0.247 -0.404 0.2188 0.0313
26 | VT 2.4000 1.4000 0.3000 0.894 0.000 -0.447 0.1563 0.0313
27 | VT -2.6000 1.4000 0.7000 -0.932 0.000 -0.362 0.1563 0.0938
28 | VT -2.4000 1.4000 0.3000 -0.894 0.000 -0.447 0.1563 0.0313
29 | VT -2.4000 1.6000 0.3000 -0.881 0.247 -0.404 0.2188 0.0313
30 | VT -2.6000 1.6000 0.7000 -0.906 0.263 -0.333 0.2188 0.0938
31 | VT 2.6000 1.6000 0.7000 0.906 0.263 -0.333 0.1563 0.0938
32 | VT 2.6000 1.4000 0.7000 0.932 0.000 -0.362 0.2188 0.0938
33 | VT 2.8000 1.4000 1.4000 0.977 0.000 -0.212 0.2188 0.0313
34 | VT 2.8000 1.6000 1.4000 0.943 0.265 -0.203 0.1563 0.0313
35 | VT -2.6000 1.6000 0.7000 -0.906 0.263 -0.333 0.1563 0.0938
36 | VT -2.8000 1.6000 1.4000 -0.943 0.265 -0.203 0.1563 0.0313
37 | VT -2.8000 1.4000 1.4000 -0.977 0.000 -0.212 0.2188 0.0313
38 | VT -2.6000 1.4000 0.7000 -0.932 0.000 -0.362 0.2188 0.0938
39 | VT 2.8000 1.6000 1.4000 0.943 0.265 -0.203 0.1563 0.0938
40 | VT 2.8000 1.4000 1.4000 0.977 0.000 -0.212 0.2188 0.0938
41 | VT 3.1000 1.4000 3.4000 0.994 0.000 -0.107 0.2188 0.0313
42 | VT 3.1000 1.6000 3.4000 0.964 0.243 -0.105 0.1563 0.0313
43 | VT -2.8000 1.6000 1.4000 -0.943 0.265 -0.203 0.1563 0.0938
44 | VT -3.1000 1.6000 3.4000 -0.964 0.243 -0.105 0.1563 0.0313
45 | VT -3.1000 1.4000 3.4000 -0.994 0.000 -0.107 0.2188 0.0313
46 | VT -2.8000 1.4000 1.4000 -0.977 0.000 -0.212 0.2188 0.0938
47 | VT 3.1000 1.4000 3.4000 0.994 0.000 -0.107 0.1563 0.0938
48 | VT 3.2500 1.4000 5.7000 1.000 0.000 -0.033 0.2188 0.0938
49 | VT 3.2500 1.6000 5.7000 0.972 0.231 -0.032 0.2188 0.0313
50 | VT -3.1000 1.4000 3.4000 -0.994 0.000 -0.107 0.1563 0.0938
51 | VT -3.2500 1.6000 5.7000 -0.972 0.231 -0.032 0.2188 0.0313
52 | VT -3.2500 1.4000 5.7000 -1.000 0.000 -0.033 0.2188 0.0938
53 | VT -0.0000 1.4000 0.1000 -0.000 0.000 -1.000 0.1563 0.0938
54 | VT 0.6000 1.6000 0.1000 0.042 0.383 -0.923 0.2188 0.0313
55 | VT -0.0000 1.6000 0.1000 -0.000 0.383 -0.924 0.1563 0.0313
56 | VT -0.6000 1.6000 0.1000 -0.042 0.383 -0.923 0.2188 0.0313
57 | VT 0.6000 1.4000 -0.0000 0.045 0.000 -0.999 0.2813 0.0938
58 | VT 0.6000 1.2000 -0.0000 0.045 0.000 -0.999 0.3438 0.0938
59 | VT 1.7000 1.2000 0.1000 0.107 0.000 -0.994 0.3438 0.0313
60 | VT 1.7000 1.4000 0.1000 0.107 0.000 -0.994 0.2813 0.0313
61 | VT -0.6000 1.4000 0.0000 -0.045 0.000 -0.999 0.2813 0.0938
62 | VT -1.7000 1.4000 0.1000 -0.107 0.000 -0.994 0.2813 0.0313
63 | VT -1.7000 1.2000 0.1000 -0.107 0.000 -0.994 0.3438 0.0313
64 | VT -0.6000 1.2000 0.0000 -0.045 0.000 -0.999 0.3438 0.0938
65 | VT 1.7000 1.2000 0.1000 0.107 0.000 -0.994 0.2813 0.0938
66 | VT 2.5000 1.2000 0.2000 0.124 0.000 -0.992 0.3438 0.0938
67 | VT 2.5000 1.4000 0.2000 0.124 0.000 -0.992 0.3438 0.0313
68 | VT -1.7000 1.2000 0.1000 -0.107 0.000 -0.994 0.2813 0.0938
69 | VT -2.5000 1.4000 0.2000 -0.124 0.000 -0.992 0.3438 0.0313
70 | VT -2.5000 1.2000 0.2000 -0.124 0.000 -0.992 0.3438 0.0938
71 | VT 3.3500 1.2000 5.7000 1.000 0.000 -0.033 0.2813 0.0938
72 | VT 3.3500 1.2000 19.5000 1.000 0.000 -0.000 0.3438 0.0938
73 | VT 3.3500 1.4000 19.5000 1.000 0.000 -0.000 0.3438 0.0313
74 | VT 3.3500 1.4000 5.7000 1.000 0.000 -0.033 0.2813 0.0313
75 | VT -3.3500 1.2000 5.7000 -1.000 0.000 -0.033 0.2813 0.0938
76 | VT -3.3500 1.4000 5.7000 -1.000 0.000 -0.033 0.2813 0.0313
77 | VT -3.3500 1.4000 19.5000 -1.000 0.000 0.000 0.3438 0.0313
78 | VT -3.3500 1.2000 19.5000 -1.000 0.000 0.000 0.3438 0.0938
79 | VT 2.5000 1.4000 0.2000 0.928 0.000 -0.371 0.2813 0.0938
80 | VT 2.5000 1.2000 0.2000 0.928 0.000 -0.371 0.3438 0.0938
81 | VT 2.7000 1.2000 0.7000 0.946 0.000 -0.324 0.3438 0.0313
82 | VT 2.7000 1.4000 0.7000 0.946 0.000 -0.324 0.2813 0.0313
83 | VT -2.5000 1.4000 0.2000 -0.928 0.000 -0.371 0.2813 0.0938
84 | VT -2.7000 1.4000 0.7000 -0.946 0.000 -0.324 0.2813 0.0313
85 | VT -2.7000 1.2000 0.7000 -0.946 0.000 -0.324 0.3438 0.0313
86 | VT -2.5000 1.2000 0.2000 -0.928 0.000 -0.371 0.3438 0.0938
87 | VT 2.7000 1.4000 0.7000 0.946 0.000 -0.324 0.2813 0.0938
88 | VT 2.7000 1.2000 0.7000 0.946 0.000 -0.324 0.3438 0.0938
89 | VT 2.9000 1.2000 1.4000 0.977 0.000 -0.212 0.3438 0.0313
90 | VT 2.9000 1.4000 1.4000 0.977 0.000 -0.212 0.2813 0.0313
91 | VT -2.7000 1.4000 0.7000 -0.946 0.000 -0.324 0.2813 0.0938
92 | VT -2.9000 1.4000 1.4000 -0.977 0.000 -0.212 0.2813 0.0313
93 | VT -2.9000 1.2000 1.4000 -0.977 0.000 -0.212 0.3438 0.0313
94 | VT -2.7000 1.2000 0.7000 -0.946 0.000 -0.324 0.3438 0.0938
95 | VT 2.9000 1.4000 1.4000 0.977 0.000 -0.212 0.2813 0.0938
96 | VT 2.9000 1.2000 1.4000 0.977 0.000 -0.212 0.3438 0.0938
97 | VT 3.2000 1.2000 3.4000 0.994 0.000 -0.107 0.3438 0.0313
98 | VT 3.2000 1.4000 3.4000 0.994 0.000 -0.107 0.2813 0.0313
99 | VT -2.9000 1.4000 1.4000 -0.977 0.000 -0.212 0.2813 0.0938
100 | VT -3.2000 1.4000 3.4000 -0.994 0.000 -0.107 0.2813 0.0313
101 | VT -3.2000 1.2000 3.4000 -0.994 0.000 -0.107 0.3438 0.0313
102 | VT -2.9000 1.2000 1.4000 -0.977 0.000 -0.212 0.3438 0.0938
103 | VT 3.2000 1.2000 3.4000 0.994 0.000 -0.107 0.2813 0.0938
104 | VT 3.3500 1.2000 5.7000 1.000 0.000 -0.033 0.3438 0.0938
105 | VT 3.3500 1.4000 5.7000 1.000 0.000 -0.033 0.3438 0.0313
106 | VT -3.2000 1.2000 3.4000 -0.994 0.000 -0.107 0.2813 0.0938
107 | VT -3.3500 1.4000 5.7000 -1.000 0.000 -0.033 0.3438 0.0313
108 | VT -3.3500 1.2000 5.7000 -1.000 0.000 -0.033 0.3438 0.0938
109 | VT 3.3500 1.4000 19.5000 0.000 0.000 1.000 0.2813 0.0938
110 | VT 3.3500 1.2000 19.5000 0.000 0.000 1.000 0.3438 0.0938
111 | VT 0.0000 1.2000 19.5000 0.000 0.000 1.000 0.3438 0.0313
112 | VT 0.0000 1.4000 19.5000 0.000 0.000 1.000 0.2813 0.0313
113 | VT -3.3500 1.4000 19.5000 0.000 0.000 1.000 0.2813 0.0938
114 | VT -3.3500 1.2000 19.5000 0.000 0.000 1.000 0.3438 0.0938
115 | VT -0.0000 1.2000 -0.0000 -0.000 0.000 -1.000 0.2813 0.0938
116 | VT 0.6000 1.4000 -0.0000 0.045 0.000 -0.999 0.3438 0.0313
117 | VT -0.0000 1.4000 -0.0000 -0.000 0.000 -1.000 0.2813 0.0313
118 | VT -0.6000 1.4000 0.0000 -0.045 0.000 -0.999 0.3438 0.0313
119 | VT 1.7000 1.6000 0.2000 0.107 0.381 -0.918 0.1563 0.0938
120 | VT 1.7000 1.8000 0.4000 0.047 0.903 -0.426 0.2188 0.0938
121 | VT 0.6000 1.8000 0.3000 0.018 0.909 -0.417 0.2188 0.0313
122 | VT 0.6000 1.6000 0.1000 0.042 0.383 -0.923 0.1563 0.0313
123 | VT -1.7000 1.6000 0.2000 -0.107 0.381 -0.918 0.1563 0.0938
124 | VT -0.6000 1.6000 0.1000 -0.042 0.383 -0.923 0.1563 0.0313
125 | VT -0.6000 1.8000 0.3000 -0.018 0.909 -0.417 0.2188 0.0313
126 | VT -1.7000 1.8000 0.4000 -0.047 0.903 -0.426 0.2188 0.0938
127 | VT 2.4000 1.8000 0.5000 0.040 0.945 -0.325 0.1563 0.0938
128 | VT 1.7000 1.6000 0.2000 0.107 0.381 -0.918 0.2188 0.0313
129 | VT 2.4000 1.6000 0.3000 0.131 0.380 -0.915 0.1563 0.0313
130 | VT -2.4000 1.8000 0.5000 -0.040 0.945 -0.325 0.1563 0.0938
131 | VT -2.4000 1.6000 0.3000 -0.131 0.380 -0.915 0.1563 0.0313
132 | VT -1.7000 1.6000 0.2000 -0.107 0.381 -0.918 0.2188 0.0313
133 | VT 2.5000 1.8500 0.9000 0.816 0.506 -0.279 0.2188 0.0938
134 | VT 2.4000 1.8000 0.5000 0.812 0.478 -0.335 0.2188 0.0313
135 | VT 2.4000 1.6000 0.3000 0.881 0.247 -0.404 0.1563 0.0313
136 | VT -2.4000 1.6000 0.3000 -0.881 0.247 -0.404 0.1563 0.0313
137 | VT -2.4000 1.8000 0.5000 -0.812 0.478 -0.335 0.2188 0.0313
138 | VT -2.5000 1.8500 0.9000 -0.816 0.506 -0.279 0.2188 0.0938
139 | VT 2.6500 1.9000 1.6000 0.840 0.512 -0.179 0.2188 0.0938
140 | VT 2.5000 1.8500 0.9000 0.816 0.506 -0.279 0.2188 0.0313
141 | VT 2.6000 1.6000 0.7000 0.906 0.263 -0.333 0.1563 0.0313
142 | VT -2.6000 1.6000 0.7000 -0.906 0.263 -0.333 0.1563 0.0313
143 | VT -2.5000 1.8500 0.9000 -0.816 0.506 -0.279 0.2188 0.0313
144 | VT -2.6500 1.9000 1.6000 -0.840 0.512 -0.179 0.2188 0.0938
145 | VT 3.1000 1.6000 3.4000 0.964 0.243 -0.105 0.1563 0.0938
146 | VT 2.9000 2.0000 3.5000 0.877 0.471 -0.097 0.2188 0.0938
147 | VT 2.6500 1.9000 1.6000 0.840 0.512 -0.179 0.2188 0.0313
148 | VT -3.1000 1.6000 3.4000 -0.964 0.243 -0.105 0.1563 0.0938
149 | VT -2.6500 1.9000 1.6000 -0.840 0.512 -0.179 0.2188 0.0313
150 | VT -2.9000 2.0000 3.5000 -0.877 0.471 -0.097 0.2188 0.0938
151 | VT 3.0500 2.0000 5.7000 0.892 0.450 -0.030 0.1563 0.0938
152 | VT 3.1000 1.6000 3.4000 0.964 0.243 -0.105 0.2188 0.0313
153 | VT 3.2500 1.6000 5.7000 0.972 0.231 -0.032 0.1563 0.0313
154 | VT -3.0500 2.0000 5.7000 -0.892 0.450 -0.030 0.1563 0.0938
155 | VT -3.2500 1.6000 5.7000 -0.972 0.231 -0.032 0.1563 0.0313
156 | VT -3.1000 1.6000 3.4000 -0.964 0.243 -0.105 0.2188 0.0313
157 | VT 0.6000 1.8000 0.3000 0.018 0.909 -0.417 0.1563 0.0938
158 | VT -0.0000 1.8000 0.3000 -0.000 0.911 -0.413 0.2188 0.0938
159 | VT -0.0000 1.6000 0.1000 -0.000 0.383 -0.924 0.2188 0.0313
160 | VT -0.6000 1.8000 0.3000 -0.018 0.909 -0.417 0.1563 0.0938
161 | VT 3.0500 2.0000 19.2000 0.894 0.447 -0.000 0.1563 0.0938
162 | VT 3.0500 2.0000 17.1000 0.894 0.447 -0.000 0.2188 0.0938
163 | VT 3.2500 1.6000 17.1000 0.973 0.230 -0.000 0.2188 0.0313
164 | VT 3.2500 1.6000 19.4000 0.973 0.230 -0.000 0.1563 0.0313
165 | VT -3.0500 2.0000 19.2000 -0.894 0.447 0.000 0.1563 0.0938
166 | VT -3.2500 1.6000 19.4000 -0.973 0.230 0.000 0.1563 0.0313
167 | VT -3.2500 1.6000 17.1000 -0.973 0.230 0.000 0.2188 0.0313
168 | VT -3.0500 2.0000 17.1000 -0.894 0.447 0.000 0.2188 0.0938
169 | VT 3.2500 1.6000 15.3000 0.973 0.230 -0.000 0.1563 0.0938
170 | VT 3.0500 2.0000 15.3000 0.894 0.447 -0.000 0.2188 0.0938
171 | VT 3.0500 2.0000 5.7000 0.892 0.450 -0.030 0.2188 0.0313
172 | VT -3.2500 1.6000 15.3000 -0.973 0.230 0.000 0.1563 0.0938
173 | VT -3.0500 2.0000 5.7000 -0.892 0.450 -0.030 0.2188 0.0313
174 | VT -3.0500 2.0000 15.3000 -0.894 0.447 0.000 0.2188 0.0938
175 | VT 3.2500 1.6000 17.1000 0.973 0.230 -0.000 0.1563 0.0938
176 | VT 3.2500 1.4000 17.1000 1.000 0.000 -0.000 0.2188 0.0938
177 | VT 3.2500 1.4000 19.4000 1.000 0.000 -0.000 0.2188 0.0313
178 | VT -3.2500 1.6000 17.1000 -0.973 0.230 0.000 0.1563 0.0938
179 | VT -3.2500 1.4000 19.4000 -1.000 0.000 0.000 0.2188 0.0313
180 | VT -3.2500 1.4000 17.1000 -1.000 0.000 0.000 0.2188 0.0938
181 | VT 3.2500 1.4000 5.7000 1.000 0.000 -0.033 0.1563 0.0938
182 | VT 3.2500 1.4000 15.3000 1.000 0.000 -0.000 0.2188 0.0938
183 | VT 3.2500 1.6000 15.3000 0.973 0.230 -0.000 0.2188 0.0313
184 | VT -3.2500 1.4000 5.7000 -1.000 0.000 -0.033 0.1563 0.0938
185 | VT -3.2500 1.6000 15.3000 -0.973 0.230 0.000 0.2188 0.0313
186 | VT -3.2500 1.4000 15.3000 -1.000 0.000 0.000 0.2188 0.0938
187 | VT 1.7000 1.8300 0.7000 0.007 0.995 -0.098 0.1563 0.0938
188 | VT 0.6000 1.8200 0.6000 0.002 0.997 -0.075 0.2188 0.0938
189 | VT 1.7000 1.8000 0.4000 0.047 0.903 -0.426 0.1563 0.0313
190 | VT -1.7000 1.8300 0.7000 -0.007 0.995 -0.098 0.1563 0.0938
191 | VT -1.7000 1.8000 0.4000 -0.047 0.903 -0.426 0.1563 0.0313
192 | VT -0.6000 1.8200 0.6000 -0.002 0.997 -0.075 0.2188 0.0938
193 | VT 2.2000 1.8400 0.8000 0.007 0.994 -0.110 0.1563 0.0938
194 | VT 1.7000 1.8300 0.7000 0.007 0.995 -0.098 0.2188 0.0938
195 | VT 1.7000 1.8000 0.4000 0.047 0.903 -0.426 0.2188 0.0313
196 | VT 2.4000 1.8000 0.5000 0.040 0.945 -0.325 0.1563 0.0313
197 | VT -2.2000 1.8400 0.8000 -0.007 0.994 -0.110 0.1563 0.0938
198 | VT -2.4000 1.8000 0.5000 -0.040 0.945 -0.325 0.1563 0.0313
199 | VT -1.7000 1.8000 0.4000 -0.047 0.903 -0.426 0.2188 0.0313
200 | VT -1.7000 1.8300 0.7000 -0.007 0.995 -0.098 0.2188 0.0938
201 | VT 0.6000 1.8200 0.6000 0.002 0.997 -0.075 0.1563 0.0938
202 | VT -0.0000 1.8200 0.6000 -0.000 0.998 -0.067 0.2188 0.0938
203 | VT -0.0000 1.8000 0.3000 -0.000 0.911 -0.413 0.2188 0.0313
204 | VT 0.6000 1.8000 0.3000 0.018 0.909 -0.417 0.1563 0.0313
205 | VT -0.6000 1.8200 0.6000 -0.002 0.997 -0.075 0.1563 0.0938
206 | VT -0.6000 1.8000 0.3000 -0.018 0.909 -0.417 0.1563 0.0313
207 | VT 2.6500 1.6000 19.4000 0.000 0.230 0.973 0.1563 0.0938
208 | VT 2.6500 2.0000 19.2000 0.000 0.447 0.894 0.2188 0.0938
209 | VT 3.0500 2.0000 19.2000 0.000 0.447 0.894 0.2188 0.0313
210 | VT 3.2500 1.6000 19.4000 0.000 0.230 0.973 0.1563 0.0313
211 | VT -2.6500 1.6000 19.4000 0.000 0.230 0.973 0.1563 0.0938
212 | VT -3.2500 1.6000 19.4000 0.000 0.230 0.973 0.1563 0.0313
213 | VT -3.0500 2.0000 19.2000 0.000 0.447 0.894 0.2188 0.0313
214 | VT -2.6500 2.0000 19.2000 0.000 0.447 0.894 0.2188 0.0938
215 | VT 3.2500 1.4000 19.4000 0.000 0.000 1.000 0.1563 0.0938
216 | VT 2.6500 1.4000 19.4000 0.000 0.000 1.000 0.2188 0.0938
217 | VT 2.6500 1.6000 19.4000 0.000 0.230 0.973 0.2188 0.0313
218 | VT -3.2500 1.4000 19.4000 0.000 0.000 1.000 0.1563 0.0938
219 | VT -2.6500 1.6000 19.4000 0.000 0.230 0.973 0.2188 0.0313
220 | VT -2.6500 1.4000 19.4000 0.000 0.000 1.000 0.2188 0.0938
221 | VT 2.6500 2.0000 17.1000 0.000 1.000 -0.000 0.1563 0.0938
222 | VT 3.0500 2.0000 17.1000 0.000 1.000 -0.000 0.2188 0.0938
223 | VT 3.0500 2.0000 19.2000 0.000 1.000 -0.000 0.2188 0.0313
224 | VT 2.6500 2.0000 19.2000 0.000 1.000 -0.000 0.1563 0.0313
225 | VT -2.6500 2.0000 17.1000 0.000 1.000 -0.000 0.1563 0.0938
226 | VT -2.6500 2.0000 19.2000 0.000 1.000 -0.000 0.1563 0.0313
227 | VT -3.0500 2.0000 19.2000 0.000 1.000 -0.000 0.2188 0.0313
228 | VT -3.0500 2.0000 17.1000 0.000 1.000 -0.000 0.2188 0.0938
229 | VT 2.6500 2.0000 5.7000 0.000 1.000 -0.000 0.1563 0.0938
230 | VT 3.0500 2.0000 5.7000 0.000 1.000 -0.000 0.2188 0.0938
231 | VT 3.0500 2.0000 15.3000 0.000 1.000 -0.000 0.2188 0.0313
232 | VT 2.6500 2.0000 15.3000 0.000 1.000 -0.000 0.1563 0.0313
233 | VT -2.6500 2.0000 5.7000 0.000 1.000 -0.000 0.1563 0.0938
234 | VT -2.6500 2.0000 15.3000 0.000 1.000 -0.000 0.1563 0.0313
235 | VT -3.0500 2.0000 15.3000 0.000 1.000 -0.000 0.2188 0.0313
236 | VT -3.0500 2.0000 5.7000 0.000 1.000 -0.000 0.2188 0.0938
237 | VT 3.2500 1.4000 17.1000 -0.000 0.000 -1.000 0.2188 0.0938
238 | VT 3.2500 1.6000 17.1000 -0.000 0.000 -1.000 0.2188 0.0313
239 | VT 2.6500 1.4000 17.1000 -0.000 0.000 -1.000 0.1563 0.0313
240 | VT -2.6500 1.4000 17.1000 -0.000 0.000 -1.000 0.1563 0.0313
241 | VT -3.2500 1.6000 17.1000 -0.000 0.000 -1.000 0.2188 0.0313
242 | VT -3.2500 1.4000 17.1000 -0.000 0.000 -1.000 0.2188 0.0938
243 | VT 2.6500 1.4000 17.1000 -0.000 0.000 -1.000 0.2188 0.0938
244 | VT 3.0500 2.0000 17.1000 -0.000 0.000 -1.000 0.1563 0.0313
245 | VT -3.0500 2.0000 17.1000 0.000 0.000 -1.000 0.1563 0.0313
246 | VT -2.6500 1.4000 17.1000 0.000 0.000 -1.000 0.2188 0.0938
247 | VT 2.6500 2.0000 17.1000 0.000 0.000 -1.000 0.2188 0.0938
248 | VT 2.6500 1.4000 17.1000 0.000 0.000 -1.000 0.2188 0.0313
249 | VT -2.6500 1.4000 17.1000 -0.000 0.000 -1.000 0.2188 0.0313
250 | VT -2.6500 2.0000 17.1000 -0.000 0.000 -1.000 0.2188 0.0938
251 | VT 3.2500 1.6000 15.3000 0.000 0.000 1.000 0.2188 0.0938
252 | VT 3.2500 1.4000 15.3000 0.000 0.000 1.000 0.2188 0.0313
253 | VT 2.6500 1.4000 15.3000 0.000 0.000 1.000 0.1563 0.0313
254 | VT -2.6500 1.4000 15.3000 0.000 0.000 1.000 0.1563 0.0313
255 | VT -3.2500 1.4000 15.3000 0.000 0.000 1.000 0.2188 0.0313
256 | VT -3.2500 1.6000 15.3000 0.000 0.000 1.000 0.2188 0.0938
257 | VT 2.6500 1.4000 15.3000 0.000 0.000 1.000 0.2188 0.0313
258 | VT 3.0500 2.0000 15.3000 0.000 0.000 1.000 0.1563 0.0313
259 | VT -3.0500 2.0000 15.3000 0.000 0.000 1.000 0.1563 0.0313
260 | VT -2.6500 1.4000 15.3000 0.000 0.000 1.000 0.2188 0.0313
261 | VT 2.6500 1.4000 15.3000 0.000 0.000 1.000 0.2188 0.0938
262 | VT 2.6500 2.0000 15.3000 0.000 0.000 1.000 0.2188 0.0313
263 | VT -2.6500 2.0000 15.3000 0.000 0.000 1.000 0.2188 0.0313
264 | VT -2.6500 1.4000 15.3000 0.000 0.000 1.000 0.2188 0.0938
265 | VT 2.6500 1.4000 17.1000 -1.000 0.000 0.000 0.2188 0.0938
266 | VT 2.6500 2.0000 17.1000 -1.000 0.000 0.000 0.2188 0.0313
267 | VT 2.6500 2.0000 19.2000 -1.000 0.000 0.000 0.1563 0.0313
268 | VT -2.6500 2.0000 19.2000 1.000 0.000 -0.000 0.1563 0.0313
269 | VT -2.6500 2.0000 17.1000 1.000 0.000 -0.000 0.2188 0.0313
270 | VT -2.6500 1.4000 17.1000 1.000 0.000 -0.000 0.2188 0.0938
271 | VT 2.6500 2.0000 19.2000 -1.000 0.000 -0.000 0.2188 0.0313
272 | VT 2.6500 1.4000 19.4000 -1.000 0.000 -0.000 0.1563 0.0313
273 | VT -2.6500 1.4000 19.4000 1.000 0.000 -0.000 0.1563 0.0313
274 | VT -2.6500 2.0000 19.2000 1.000 0.000 -0.000 0.2188 0.0313
275 | VT 2.6500 2.0000 19.2000 -1.000 0.000 -0.000 0.2188 0.0938
276 | VT 2.6500 1.6000 19.4000 -1.000 0.000 -0.000 0.2188 0.0313
277 | VT -2.6500 1.6000 19.4000 1.000 0.000 -0.000 0.2188 0.0313
278 | VT -2.6500 2.0000 19.2000 1.000 0.000 -0.000 0.2188 0.0938
279 | VT 2.6500 2.0000 3.6000 -0.006 1.000 -0.025 0.2188 0.0938
280 | VT 2.9000 2.0000 3.5000 -0.006 1.000 -0.025 0.2188 0.0313
281 | VT 3.0500 2.0000 5.7000 0.000 1.000 -0.000 0.1563 0.0313
282 | VT -3.0500 2.0000 5.7000 0.000 1.000 -0.000 0.1563 0.0313
283 | VT -2.9000 2.0000 3.5000 0.006 1.000 -0.025 0.2188 0.0313
284 | VT -2.6500 2.0000 3.6000 0.006 1.000 -0.025 0.2188 0.0938
285 | VT 2.9000 2.0000 3.5000 -0.006 1.000 -0.025 0.1563 0.0938
286 | VT 2.4800 1.9100 1.8000 -0.011 0.998 -0.058 0.2188 0.0313
287 | VT 2.6500 1.9000 1.6000 -0.011 0.998 -0.058 0.1563 0.0313
288 | VT -2.9000 2.0000 3.5000 0.006 1.000 -0.025 0.1563 0.0938
289 | VT -2.6500 1.9000 1.6000 0.011 0.998 -0.058 0.1563 0.0313
290 | VT -2.4800 1.9100 1.8000 0.011 0.998 -0.058 0.2188 0.0313
291 | VT 2.6500 1.9000 1.6000 -0.011 0.998 -0.058 0.1563 0.0938
292 | VT 2.4800 1.9100 1.8000 -0.011 0.998 -0.058 0.2188 0.0938
293 | VT 2.3500 1.8600 1.0500 -0.004 0.996 -0.087 0.2188 0.0313
294 | VT 2.5000 1.8500 0.9000 -0.004 0.996 -0.087 0.1563 0.0313
295 | VT -2.6500 1.9000 1.6000 0.011 0.998 -0.058 0.1563 0.0938
296 | VT -2.5000 1.8500 0.9000 0.004 0.996 -0.087 0.1563 0.0313
297 | VT -2.3500 1.8600 1.0500 0.004 0.996 -0.087 0.2188 0.0313
298 | VT -2.4800 1.9100 1.8000 0.011 0.998 -0.058 0.2188 0.0938
299 | VT 2.5000 1.8500 0.9000 -0.004 0.996 -0.087 0.1563 0.0938
300 | VT 2.3500 1.8600 1.0500 -0.004 0.996 -0.087 0.2188 0.0938
301 | VT 2.2000 1.8400 0.8000 0.007 0.994 -0.110 0.2188 0.0313
302 | VT -2.5000 1.8500 0.9000 0.004 0.996 -0.087 0.1563 0.0938
303 | VT -2.2000 1.8400 0.8000 -0.007 0.994 -0.110 0.2188 0.0313
304 | VT -2.3500 1.8600 1.0500 0.004 0.996 -0.087 0.2188 0.0938
305 | VT 1.7000 1.4000 0.7000 -0.143 0.000 0.990 0.4063 0.0938
306 | VT 0.6000 1.4000 0.6000 -0.045 0.000 0.999 0.4688 0.0938
307 | VT 0.6000 1.8200 0.6000 -0.045 0.000 0.999 0.4688 0.0313
308 | VT 1.7000 1.8300 0.7000 -0.143 0.000 0.990 0.4063 0.0313
309 | VT -1.7000 1.4000 0.7000 0.143 0.000 0.990 0.4063 0.0938
310 | VT -1.7000 1.8300 0.7000 0.143 0.000 0.990 0.4063 0.0313
311 | VT -0.6000 1.8200 0.6000 0.045 0.000 0.999 0.4688 0.0313
312 | VT -0.6000 1.4000 0.6000 0.045 0.000 0.999 0.4688 0.0938
313 | VT 2.2000 1.4000 0.8000 -0.196 0.000 0.981 0.4063 0.0938
314 | VT 1.7000 1.4000 0.7000 -0.143 0.000 0.990 0.4688 0.0938
315 | VT 1.7000 1.8300 0.7000 -0.143 0.000 0.990 0.4688 0.0313
316 | VT 2.2000 1.8400 0.8000 -0.196 0.000 0.981 0.4063 0.0313
317 | VT -2.2000 1.4000 0.8000 0.196 0.000 0.981 0.4063 0.0938
318 | VT -2.2000 1.8400 0.8000 0.196 0.000 0.981 0.4063 0.0313
319 | VT -1.7000 1.8300 0.7000 0.143 0.000 0.990 0.4688 0.0313
320 | VT -1.7000 1.4000 0.7000 0.143 0.000 0.990 0.4688 0.0938
321 | VT 0.6000 1.4000 0.6000 -0.045 0.000 0.999 0.4063 0.0938
322 | VT -0.0000 1.4000 0.6000 0.000 0.000 1.000 0.4688 0.0938
323 | VT -0.0000 1.8200 0.6000 0.000 0.000 1.000 0.4688 0.0313
324 | VT 0.6000 1.8200 0.6000 -0.045 0.000 0.999 0.4063 0.0313
325 | VT -0.6000 1.4000 0.6000 0.045 0.000 0.999 0.4063 0.0938
326 | VT -0.6000 1.8200 0.6000 0.045 0.000 0.999 0.4063 0.0313
327 | VT 2.6500 1.4000 3.6000 -0.999 0.000 0.047 0.4063 0.0938
328 | VT 2.4800 1.4000 1.8000 -0.991 0.000 0.133 0.4688 0.0938
329 | VT 2.4800 1.9100 1.8000 -0.991 0.000 0.133 0.4688 0.0313
330 | VT 2.6500 2.0000 3.6000 -0.999 0.000 0.047 0.4063 0.0313
331 | VT -2.6500 1.4000 3.6000 0.999 0.000 0.047 0.4063 0.0938
332 | VT -2.6500 2.0000 3.6000 0.999 0.000 0.047 0.4063 0.0313
333 | VT -2.4800 1.9100 1.8000 0.991 0.000 0.133 0.4688 0.0313
334 | VT -2.4800 1.4000 1.8000 0.991 0.000 0.133 0.4688 0.0938
335 | VT 2.4800 1.4000 1.8000 -0.991 0.000 0.133 0.4063 0.0938
336 | VT 2.3500 1.4000 1.0500 -0.937 0.000 0.348 0.4688 0.0938
337 | VT 2.3500 1.8600 1.0500 -0.937 0.000 0.348 0.4688 0.0313
338 | VT 2.4800 1.9100 1.8000 -0.991 0.000 0.133 0.4063 0.0313
339 | VT -2.4800 1.4000 1.8000 0.991 0.000 0.133 0.4063 0.0938
340 | VT -2.4800 1.9100 1.8000 0.991 0.000 0.133 0.4063 0.0313
341 | VT -2.3500 1.8600 1.0500 0.937 0.000 0.348 0.4688 0.0313
342 | VT -2.3500 1.4000 1.0500 0.937 0.000 0.348 0.4688 0.0938
343 | VT 2.3500 1.4000 1.0500 -0.937 0.000 0.348 0.4063 0.0938
344 | VT 2.2000 1.4000 0.8000 -0.858 0.000 0.514 0.4688 0.0938
345 | VT 2.2000 1.8400 0.8000 -0.858 0.000 0.514 0.4688 0.0313
346 | VT 2.3500 1.8600 1.0500 -0.937 0.000 0.348 0.4063 0.0313
347 | VT -2.3500 1.4000 1.0500 0.937 0.000 0.348 0.4063 0.0938
348 | VT -2.3500 1.8600 1.0500 0.937 0.000 0.348 0.4063 0.0313
349 | VT -2.2000 1.8400 0.8000 0.858 0.000 0.514 0.4688 0.0313
350 | VT -2.2000 1.4000 0.8000 0.858 0.000 0.514 0.4688 0.0938
351 | VT 2.6500 1.4000 5.0000 -1.000 0.000 0.000 0.4063 0.0938
352 | VT 2.6500 1.4000 3.6000 -0.999 0.000 0.047 0.4688 0.0938
353 | VT 2.6500 2.0000 3.6000 -0.999 0.000 0.047 0.4688 0.0313
354 | VT 2.6500 2.0000 5.0000 -1.000 0.000 0.000 0.4063 0.0313
355 | VT -2.6500 1.4000 5.0000 1.000 0.000 -0.000 0.4063 0.0938
356 | VT -2.6500 2.0000 5.0000 1.000 0.000 -0.000 0.4063 0.0313
357 | VT -2.6500 2.0000 3.6000 0.999 0.000 0.047 0.4688 0.0313
358 | VT -2.6500 1.4000 3.6000 0.999 0.000 0.047 0.4688 0.0938
359 | VT 1.4000 1.4000 1.7000 -0.000 1.000 0.000 0.4688 0.0938
360 | VT 0.6000 1.4000 0.6000 -0.000 1.000 0.000 0.4688 0.0313
361 | VT 1.7000 1.4000 0.7000 -0.000 1.000 0.000 0.4063 0.0313
362 | VT -1.7000 1.4000 0.7000 0.000 1.000 0.000 0.4063 0.0313
363 | VT -0.6000 1.4000 0.6000 0.000 1.000 0.000 0.4688 0.0313
364 | VT -1.4000 1.4000 1.7000 0.000 1.000 0.000 0.4688 0.0938
365 | VT 2.6500 1.4000 5.0000 -0.000 1.000 -0.000 0.4688 0.0938
366 | VT 1.5000 1.4000 5.0000 -0.000 1.000 -0.000 0.4688 0.0313
367 | VT 1.5000 1.4000 3.6000 -0.000 1.000 -0.000 0.4063 0.0313
368 | VT -1.5000 1.4000 3.6000 -0.000 1.000 -0.000 0.4063 0.0313
369 | VT -1.5000 1.4000 5.0000 -0.000 1.000 -0.000 0.4688 0.0313
370 | VT -2.6500 1.4000 5.0000 -0.000 1.000 -0.000 0.4688 0.0938
371 | VT 0.6000 1.4000 0.6000 -0.000 1.000 0.000 0.4688 0.0938
372 | VT 1.4000 1.4000 1.7000 -0.000 1.000 0.000 0.4688 0.0313
373 | VT -0.0000 1.4000 1.6000 -0.000 1.000 0.000 0.4063 0.0313
374 | VT -1.4000 1.4000 1.7000 0.000 1.000 0.000 0.4688 0.0313
375 | VT -0.6000 1.4000 0.6000 0.000 1.000 0.000 0.4688 0.0938
376 | VT -0.0000 1.4000 0.6000 0.000 1.000 0.000 0.4688 0.0938
377 | VT 2.4800 1.4000 1.8000 -0.000 1.000 0.000 0.4688 0.0938
378 | VT 1.5000 1.4000 3.1000 -0.000 1.000 0.000 0.4688 0.0313
379 | VT 1.4000 1.4000 1.7000 -0.000 1.000 0.000 0.4063 0.0313
380 | VT -1.4000 1.4000 1.7000 0.000 1.000 0.000 0.4063 0.0313
381 | VT -1.5000 1.4000 3.1000 0.000 1.000 0.000 0.4688 0.0313
382 | VT -2.4800 1.4000 1.8000 0.000 1.000 0.000 0.4688 0.0938
383 | VT 1.5000 1.4000 3.6000 -0.000 1.000 -0.000 0.4688 0.0313
384 | VT 2.6500 1.4000 3.6000 -0.000 1.000 -0.000 0.4063 0.0313
385 | VT -2.6500 1.4000 3.6000 0.000 1.000 -0.000 0.4063 0.0313
386 | VT -1.5000 1.4000 3.6000 0.000 1.000 -0.000 0.4688 0.0313
387 | VT 2.3500 1.4000 1.0500 -0.000 1.000 0.000 0.4063 0.0313
388 | VT -2.3500 1.4000 1.0500 0.000 1.000 0.000 0.4063 0.0313
389 | VT 2.3500 1.4000 1.0500 -0.000 1.000 0.000 0.4688 0.0938
390 | VT -2.3500 1.4000 1.0500 0.000 1.000 0.000 0.4688 0.0938
391 | VT 2.2000 1.4000 0.8000 0.000 1.000 -0.000 0.4688 0.0938
392 | VT 2.3500 1.4000 1.0500 0.000 1.000 -0.000 0.4688 0.0313
393 | VT -2.3500 1.4000 1.0500 0.000 1.000 -0.000 0.4688 0.0313
394 | VT -2.2000 1.4000 0.8000 0.000 1.000 -0.000 0.4688 0.0938
395 | VT 2.6500 1.4000 3.6000 -0.000 1.000 0.000 0.4688 0.0938
396 | VT 1.5000 1.4000 3.1000 -0.000 1.000 0.000 0.4063 0.0313
397 | VT -1.5000 1.4000 3.1000 0.000 1.000 -0.000 0.4063 0.0313
398 | VT -2.6500 1.4000 3.6000 0.000 1.000 -0.000 0.4688 0.0938
399 | VT 2.6500 1.4000 3.6000 -0.000 1.000 0.000 0.4688 0.0313
400 | VT -2.6500 1.4000 3.6000 0.000 1.000 0.000 0.4688 0.0313
401 | VT -0.0000 1.4000 0.1000 0.000 1.000 -0.000 0.2813 0.0938
402 | VT -0.0000 1.4000 -0.0000 0.000 1.000 -0.000 0.3438 0.0938
403 | VT 0.6000 1.4000 -0.0000 0.000 1.000 -0.000 0.3438 0.0313
404 | VT 0.6000 1.4000 0.1000 0.000 1.000 -0.000 0.2813 0.0313
405 | VT -0.6000 1.4000 0.1000 0.000 1.000 -0.000 0.2813 0.0313
406 | VT -0.6000 1.4000 0.0000 0.000 1.000 -0.000 0.3438 0.0313
407 | VT 0.6000 1.4000 -0.0000 0.000 1.000 -0.000 0.2813 0.0938
408 | VT 1.7000 1.4000 0.1000 0.000 1.000 -0.000 0.3438 0.0938
409 | VT 1.7000 1.4000 0.2000 0.000 1.000 -0.000 0.3438 0.0313
410 | VT -0.6000 1.4000 0.0000 0.000 1.000 -0.000 0.2813 0.0938
411 | VT -1.7000 1.4000 0.2000 0.000 1.000 -0.000 0.3438 0.0313
412 | VT -1.7000 1.4000 0.1000 0.000 1.000 -0.000 0.3438 0.0938
413 | VT 1.7000 1.4000 0.1000 0.000 1.000 -0.000 0.2813 0.0938
414 | VT 2.5000 1.4000 0.2000 0.000 1.000 -0.000 0.3438 0.0938
415 | VT 2.4000 1.4000 0.3000 0.000 1.000 -0.000 0.3438 0.0313
416 | VT 1.7000 1.4000 0.2000 0.000 1.000 -0.000 0.2813 0.0313
417 | VT -1.7000 1.4000 0.1000 0.000 1.000 -0.000 0.2813 0.0938
418 | VT -1.7000 1.4000 0.2000 0.000 1.000 -0.000 0.2813 0.0313
419 | VT -2.4000 1.4000 0.3000 0.000 1.000 -0.000 0.3438 0.0313
420 | VT -2.5000 1.4000 0.2000 0.000 1.000 -0.000 0.3438 0.0938
421 | VT 2.5000 1.4000 0.2000 0.000 1.000 -0.000 0.2813 0.0938
422 | VT 2.7000 1.4000 0.7000 0.000 1.000 -0.000 0.3438 0.0938
423 | VT 2.6000 1.4000 0.7000 0.000 1.000 -0.000 0.3438 0.0313
424 | VT 2.4000 1.4000 0.3000 0.000 1.000 -0.000 0.2813 0.0313
425 | VT -2.5000 1.4000 0.2000 0.000 1.000 -0.000 0.2813 0.0938
426 | VT -2.4000 1.4000 0.3000 0.000 1.000 -0.000 0.2813 0.0313
427 | VT -2.6000 1.4000 0.7000 0.000 1.000 -0.000 0.3438 0.0313
428 | VT -2.7000 1.4000 0.7000 0.000 1.000 -0.000 0.3438 0.0938
429 | VT 2.7000 1.4000 0.7000 0.000 1.000 -0.000 0.2813 0.0938
430 | VT 2.9000 1.4000 1.4000 0.000 1.000 -0.000 0.3438 0.0938
431 | VT 2.8000 1.4000 1.4000 0.000 1.000 -0.000 0.3438 0.0313
432 | VT 2.6000 1.4000 0.7000 0.000 1.000 -0.000 0.2813 0.0313
433 | VT -2.7000 1.4000 0.7000 0.000 1.000 -0.000 0.2813 0.0938
434 | VT -2.6000 1.4000 0.7000 0.000 1.000 -0.000 0.2813 0.0313
435 | VT -2.8000 1.4000 1.4000 0.000 1.000 -0.000 0.3438 0.0313
436 | VT -2.9000 1.4000 1.4000 0.000 1.000 -0.000 0.3438 0.0938
437 | VT 2.9000 1.4000 1.4000 0.000 1.000 -0.000 0.2813 0.0938
438 | VT 3.2000 1.4000 3.4000 0.000 1.000 -0.000 0.3438 0.0938
439 | VT 3.1000 1.4000 3.4000 0.000 1.000 -0.000 0.3438 0.0313
440 | VT 2.8000 1.4000 1.4000 0.000 1.000 -0.000 0.2813 0.0313
441 | VT -2.9000 1.4000 1.4000 0.000 1.000 -0.000 0.2813 0.0938
442 | VT -2.8000 1.4000 1.4000 0.000 1.000 -0.000 0.2813 0.0313
443 | VT -3.1000 1.4000 3.4000 0.000 1.000 -0.000 0.3438 0.0313
444 | VT -3.2000 1.4000 3.4000 0.000 1.000 -0.000 0.3438 0.0938
445 | VT 3.1000 1.4000 3.4000 0.000 1.000 -0.000 0.2813 0.0938
446 | VT 3.3500 1.4000 5.7000 0.000 1.000 -0.000 0.3438 0.0313
447 | VT 3.2500 1.4000 5.7000 0.000 1.000 -0.000 0.2813 0.0313
448 | VT -3.1000 1.4000 3.4000 0.000 1.000 -0.000 0.2813 0.0938
449 | VT -3.2500 1.4000 5.7000 0.000 1.000 -0.000 0.2813 0.0313
450 | VT -3.3500 1.4000 5.7000 0.000 1.000 -0.000 0.3438 0.0313
451 | VT 3.3500 1.4000 5.7000 0.000 1.000 -0.000 0.3438 0.0938
452 | VT 3.3500 1.4000 19.5000 0.000 1.000 -0.000 0.3438 0.0313
453 | VT 3.2500 1.4000 15.3000 0.000 1.000 -0.000 0.2813 0.0313
454 | VT -3.2500 1.4000 15.3000 0.000 1.000 -0.000 0.2813 0.0313
455 | VT -3.3500 1.4000 19.5000 0.000 1.000 -0.000 0.3438 0.0313
456 | VT -3.3500 1.4000 5.7000 0.000 1.000 -0.000 0.3438 0.0938
457 | VT 3.2500 1.4000 5.7000 0.000 1.000 -0.000 0.3438 0.0938
458 | VT -3.2500 1.4000 5.7000 0.000 1.000 -0.000 0.3438 0.0938
459 | VT 0.0000 1.4000 19.5000 0.000 1.000 -0.000 0.2813 0.0938
460 | VT 0.0000 1.4000 19.3000 0.000 1.000 -0.000 0.3438 0.0938
461 | VT 3.1500 1.4000 19.3000 0.000 1.000 -0.000 0.3438 0.0313
462 | VT 3.3500 1.4000 19.5000 0.000 1.000 -0.000 0.2813 0.0313
463 | VT -3.3500 1.4000 19.5000 0.000 1.000 -0.000 0.2813 0.0313
464 | VT -3.1500 1.4000 19.3000 0.000 1.000 -0.000 0.3438 0.0313
465 | VT 3.1500 1.4000 19.3000 0.000 1.000 -0.000 0.2813 0.0938
466 | VT 3.1500 1.4000 15.2000 0.000 1.000 -0.000 0.3438 0.0938
467 | VT 3.2500 1.4000 15.3000 0.000 1.000 -0.000 0.3438 0.0313
468 | VT -3.1500 1.4000 19.3000 0.000 1.000 -0.000 0.2813 0.0938
469 | VT -3.2500 1.4000 15.3000 0.000 1.000 -0.000 0.3438 0.0313
470 | VT -3.1500 1.4000 15.2000 0.000 1.000 -0.000 0.3438 0.0938
471 | VT 0.0000 1.4000 19.3000 0.000 1.000 -0.000 0.4688 0.0938
472 | VT 0.0000 1.4000 14.8000 0.000 1.000 -0.000 0.4688 0.0313
473 | VT 1.0000 1.4000 14.8000 0.000 1.000 -0.000 0.4063 0.0313
474 | VT -1.0000 1.4000 14.8000 0.000 1.000 -0.000 0.4063 0.0313
475 | VT 3.1500 1.4000 19.3000 0.000 1.000 -0.000 0.4688 0.0938
476 | VT 0.0000 1.4000 19.3000 0.000 1.000 -0.000 0.4688 0.0313
477 | VT -3.1500 1.4000 19.3000 0.000 1.000 -0.000 0.4688 0.0938
478 | VT 1.0000 1.4000 14.8000 0.000 1.000 -0.000 0.4688 0.0313
479 | VT 2.5000 1.4000 15.2000 0.000 1.000 -0.000 0.4063 0.0313
480 | VT -2.5000 1.4000 15.2000 0.000 1.000 -0.000 0.4063 0.0313
481 | VT -1.0000 1.4000 14.8000 0.000 1.000 -0.000 0.4688 0.0313
482 | VT 2.5000 1.4000 15.2000 0.000 1.000 -0.000 0.4688 0.0938
483 | VT 2.5000 1.4000 14.8000 0.000 1.000 -0.000 0.4063 0.0313
484 | VT -2.5000 1.4000 14.8000 0.000 1.000 -0.000 0.4063 0.0313
485 | VT -2.5000 1.4000 15.2000 0.000 1.000 -0.000 0.4688 0.0938
486 | VT 2.5000 1.4000 15.2000 0.000 1.000 -0.000 0.4688 0.0313
487 | VT 3.0000 1.4000 15.2000 0.000 1.000 -0.000 0.4063 0.0313
488 | VT -3.0000 1.4000 15.2000 0.000 1.000 -0.000 0.4063 0.0313
489 | VT -2.5000 1.4000 15.2000 0.000 1.000 -0.000 0.4688 0.0313
490 | VT 3.0000 1.4000 15.2000 0.000 1.000 -0.000 0.4688 0.0313
491 | VT 3.1500 1.4000 15.2000 0.000 1.000 -0.000 0.4063 0.0313
492 | VT -3.1500 1.4000 15.2000 0.000 1.000 -0.000 0.4063 0.0313
493 | VT -3.0000 1.4000 15.2000 0.000 1.000 -0.000 0.4688 0.0313
494 | VT 3.0500 2.6000 15.4000 0.000 1.000 -0.000 0.4063 0.0938
495 | VT 3.0500 2.6000 17.0000 0.000 1.000 -0.000 0.4688 0.0938
496 | VT 2.9500 2.6000 17.0000 0.000 1.000 -0.000 0.4688 0.0313
497 | VT 2.9500 2.6000 15.4000 0.000 1.000 -0.000 0.4063 0.0313
498 | VT -3.0500 2.6000 15.4000 0.000 1.000 -0.000 0.4063 0.0938
499 | VT -2.9500 2.6000 15.4000 0.000 1.000 -0.000 0.4063 0.0313
500 | VT -2.9500 2.6000 17.0000 0.000 1.000 -0.000 0.4688 0.0313
501 | VT -3.0500 2.6000 17.0000 0.000 1.000 -0.000 0.4688 0.0938
502 | VT 2.9500 2.6000 17.0000 0.000 0.000 1.000 0.4063 0.0938
503 | VT 3.0500 2.6000 17.0000 0.000 0.000 1.000 0.4688 0.0938
504 | VT 3.0500 1.4000 17.0000 0.000 0.000 1.000 0.4688 0.0313
505 | VT 2.9500 1.4000 17.0000 0.000 0.000 1.000 0.4063 0.0313
506 | VT -2.9500 2.6000 17.0000 0.000 0.000 1.000 0.4063 0.0938
507 | VT -2.9500 1.4000 17.0000 0.000 0.000 1.000 0.4063 0.0313
508 | VT -3.0500 1.4000 17.0000 0.000 0.000 1.000 0.4688 0.0313
509 | VT -3.0500 2.6000 17.0000 0.000 0.000 1.000 0.4688 0.0938
510 | VT 2.9500 1.4000 15.4000 -0.000 0.000 -1.000 0.4063 0.0938
511 | VT 3.0500 1.4000 15.4000 -0.000 0.000 -1.000 0.4688 0.0938
512 | VT 3.0500 2.6000 15.4000 -0.000 0.000 -1.000 0.4688 0.0313
513 | VT 2.9500 2.6000 15.4000 -0.000 0.000 -1.000 0.4063 0.0313
514 | VT -2.9500 1.4000 15.4000 -0.000 0.000 -1.000 0.4063 0.0938
515 | VT -2.9500 2.6000 15.4000 -0.000 0.000 -1.000 0.4063 0.0313
516 | VT -3.0500 2.6000 15.4000 -0.000 0.000 -1.000 0.4688 0.0313
517 | VT -3.0500 1.4000 15.4000 -0.000 0.000 -1.000 0.4688 0.0938
518 | VT 3.0500 1.4000 15.4000 1.000 0.000 -0.000 0.4063 0.0938
519 | VT 3.0500 1.4000 17.0000 1.000 0.000 -0.000 0.4688 0.0938
520 | VT 3.0500 2.6000 17.0000 1.000 0.000 -0.000 0.4688 0.0313
521 | VT 3.0500 2.6000 15.4000 1.000 0.000 -0.000 0.4063 0.0313
522 | VT -3.0500 1.4000 15.4000 -1.000 0.000 0.000 0.4063 0.0938
523 | VT -3.0500 2.6000 15.4000 -1.000 0.000 0.000 0.4063 0.0313
524 | VT -3.0500 2.6000 17.0000 -1.000 0.000 0.000 0.4688 0.0313
525 | VT -3.0500 1.4000 17.0000 -1.000 0.000 0.000 0.4688 0.0938
526 | VT 2.9500 2.6000 17.0000 -1.000 0.000 0.000 0.4063 0.0938
527 | VT 2.9500 1.4000 17.0000 -1.000 0.000 0.000 0.4688 0.0938
528 | VT 2.9500 1.4000 15.4000 -1.000 0.000 0.000 0.4688 0.0313
529 | VT 2.9500 2.6000 15.4000 -1.000 0.000 0.000 0.4063 0.0313
530 | VT -2.9500 2.6000 17.0000 1.000 0.000 -0.000 0.4063 0.0938
531 | VT -2.9500 2.6000 15.4000 1.000 0.000 -0.000 0.4063 0.0313
532 | VT -2.9500 1.4000 15.4000 1.000 0.000 -0.000 0.4688 0.0313
533 | VT -2.9500 1.4000 17.0000 1.000 0.000 -0.000 0.4688 0.0938
534 | VT 3.0000 3.0000 15.4000 1.000 0.000 -0.000 0.2188 0.0938
535 | VT 3.0000 3.3000 12.8000 1.000 0.000 -0.000 0.2188 0.0313
536 | VT 3.0000 3.1000 13.1000 1.000 0.000 -0.000 0.1563 0.0313
537 | VT -3.0000 3.1000 13.1000 -1.000 0.000 0.000 0.1563 0.0313
538 | VT -3.0000 3.3000 12.8000 -1.000 0.000 0.000 0.2188 0.0313
539 | VT -3.0000 3.0000 15.4000 -1.000 0.000 0.000 0.2188 0.0938
540 | VT 3.0000 1.4000 15.2000 1.000 0.000 -0.000 0.8125 0.4258
541 | VT 3.0000 2.8000 15.2000 1.000 0.000 -0.000 0.8125 0.5781
542 | VT 3.0000 2.0000 13.6000 1.000 0.000 -0.000 0.6211 0.4922
543 | VT -3.0000 2.0000 13.6000 -1.000 0.000 0.000 0.6211 0.4922
544 | VT -3.0000 2.8000 15.2000 -1.000 0.000 0.000 0.8125 0.5781
545 | VT -3.0000 1.4000 15.2000 -1.000 0.000 0.000 0.8125 0.4258
546 | VT 2.9600 2.0000 4.9000 0.999 -0.002 -0.046 0.2188 0.0938
547 | VT 3.0000 3.1000 5.7000 0.999 -0.012 -0.032 0.2188 0.0313
548 | VT 2.9500 3.3000 5.0000 0.998 -0.005 -0.071 0.1563 0.0313
549 | VT -2.9500 3.3000 5.0000 -0.998 -0.005 -0.071 0.1563 0.0313
550 | VT -3.0000 3.1000 5.7000 -0.999 -0.012 -0.032 0.2188 0.0313
551 | VT -2.9600 2.0000 4.9000 -0.999 -0.002 -0.046 0.2188 0.0938
552 | VT 2.8800 2.0000 3.6000 0.998 0.012 -0.061 0.2188 0.0938
553 | VT 2.9600 2.0000 4.9000 0.999 -0.002 -0.046 0.2188 0.0313
554 | VT -2.9600 2.0000 4.9000 -0.999 -0.002 -0.046 0.2188 0.0313
555 | VT -2.8800 2.0000 3.6000 -0.998 0.012 -0.061 0.2188 0.0938
556 | VT 3.0000 2.8000 15.2000 1.000 0.000 -0.000 0.2188 0.0938
557 | VT 3.0000 3.0000 15.4000 1.000 0.000 -0.000 0.2188 0.0313
558 | VT -3.0000 3.0000 15.4000 -1.000 0.000 0.000 0.2188 0.0313
559 | VT -3.0000 2.8000 15.2000 -1.000 0.000 0.000 0.2188 0.0938
560 | VT 3.0000 3.1000 13.1000 1.000 0.000 -0.000 0.5625 0.6133
561 | VT -3.0000 3.1000 13.1000 -1.000 0.000 0.000 0.5625 0.6133
562 | VT 3.0000 3.5000 18.0000 1.000 0.000 -0.000 0.2188 0.0938
563 | VT 3.0000 3.0000 15.4000 1.000 0.000 -0.000 0.1563 0.0313
564 | VT -3.0000 3.0000 15.4000 -1.000 0.000 0.000 0.1563 0.0313
565 | VT -3.0000 3.5000 18.0000 -1.000 0.000 0.000 0.2188 0.0938
566 | VT 3.0000 3.3000 18.1000 1.000 0.000 -0.000 0.2188 0.0938
567 | VT 3.0000 3.5000 18.0000 1.000 0.000 -0.000 0.2188 0.0313
568 | VT -3.0000 3.5000 18.0000 -1.000 0.000 0.000 0.2188 0.0313
569 | VT -3.0000 3.3000 18.1000 -1.000 0.000 0.000 0.2188 0.0938
570 | VT 3.0000 3.5000 5.5000 1.000 -0.010 -0.021 0.2188 0.0938
571 | VT 2.9500 3.3000 5.0000 0.998 -0.005 -0.071 0.2188 0.0313
572 | VT 3.0000 3.1000 5.7000 0.999 -0.012 -0.032 0.1563 0.0313
573 | VT -3.0000 3.1000 5.7000 -0.999 -0.012 -0.032 0.1563 0.0313
574 | VT -2.9500 3.3000 5.0000 -0.998 -0.005 -0.071 0.2188 0.0313
575 | VT -3.0000 3.5000 5.5000 -1.000 -0.010 -0.021 0.2188 0.0938
576 | VT 3.0000 3.3000 6.0000 1.000 0.000 -0.000 0.2188 0.0938
577 | VT 3.0000 3.5000 5.5000 1.000 -0.010 -0.021 0.2188 0.0313
578 | VT -3.0000 3.5000 5.5000 -1.000 -0.010 -0.021 0.2188 0.0313
579 | VT -3.0000 3.3000 6.0000 -1.000 0.000 0.000 0.2188 0.0938
580 | VT 2.6500 3.3000 5.0000 -0.000 0.876 -0.482 0.1563 0.0938
581 | VT 2.6500 2.0000 3.6000 -0.000 0.733 -0.680 0.2188 0.0938
582 | VT 2.8800 2.0000 3.6000 -0.000 0.733 -0.680 0.2188 0.0313
583 | VT 2.9500 3.3000 5.0000 -0.000 0.845 -0.535 0.1563 0.0313
584 | VT -2.6500 3.3000 5.0000 -0.000 0.876 -0.482 0.1563 0.0938
585 | VT -2.9500 3.3000 5.0000 -0.000 0.845 -0.535 0.1563 0.0313
586 | VT -2.8800 2.0000 3.6000 -0.000 0.733 -0.680 0.2188 0.0313
587 | VT -2.6500 2.0000 3.6000 -0.000 0.733 -0.680 0.2188 0.0938
588 | VT 1.5000 3.3000 5.0000 -0.000 0.000 -1.000 0.125 0.5
589 | VT 1.5000 1.4000 5.0000 -0.000 0.000 -1.000 0.125 0.25
590 | VT 2.6500 2.0000 5.0000 -0.000 0.000 -1.000 0.0 0.3289
591 | VT -2.6500 2.0000 5.0000 -0.000 0.000 -1.000 0.0 0.3289
592 | VT -1.5000 1.4000 5.0000 -0.000 0.000 -1.000 0.125 0.25
593 | VT -1.5000 3.3000 5.0000 -0.000 0.000 -1.000 0.125 0.5
594 | VT 2.6500 3.3000 5.0000 -0.000 0.000 -1.000 0.0 0.5
595 | VT -2.6500 3.3000 5.0000 -0.000 0.000 -1.000 0.0 0.5
596 | VT 2.6500 1.4000 5.0000 -0.000 0.000 -1.000 0.0 0.25
597 | VT -2.6500 1.4000 5.0000 -0.000 0.000 -1.000 0.0 0.25
598 | VT 2.6500 2.0000 5.0000 -1.000 0.000 0.000 0.2188 0.0938
599 | VT 2.6500 2.0000 3.6000 -1.000 0.000 0.000 0.2188 0.0313
600 | VT 2.6500 3.3000 5.0000 -1.000 0.000 0.000 0.1563 0.0313
601 | VT -2.6500 3.3000 5.0000 1.000 0.000 -0.000 0.1563 0.0313
602 | VT -2.6500 2.0000 3.6000 1.000 0.000 -0.000 0.2188 0.0313
603 | VT -2.6500 2.0000 5.0000 1.000 0.000 -0.000 0.2188 0.0938
604 | VT 3.0000 3.3000 18.1000 0.000 0.447 0.894 0.2188 0.0938
605 | VT 0.0000 3.3000 18.1000 0.000 0.447 0.894 0.2188 0.0313
606 | VT 1.5000 3.5000 18.0000 0.000 0.447 0.894 0.1563 0.0313
607 | VT -1.5000 3.5000 18.0000 0.000 0.447 0.894 0.1563 0.0313
608 | VT -3.0000 3.3000 18.1000 0.000 0.447 0.894 0.2188 0.0938
609 | VT 1.5000 3.5000 18.0000 0.000 0.447 0.894 0.2188 0.0313
610 | VT 3.0000 3.5000 18.0000 0.000 0.447 0.894 0.1563 0.0313
611 | VT -3.0000 3.5000 18.0000 0.000 0.447 0.894 0.1563 0.0313
612 | VT -1.5000 3.5000 18.0000 0.000 0.447 0.894 0.2188 0.0313
613 | VT 0.0000 3.3000 18.1000 0.000 0.447 0.894 0.2188 0.0938
614 | VT 0.0000 3.5000 18.0000 0.000 0.447 0.894 0.2188 0.0313
615 | VT 3.0000 3.5000 18.0000 0.000 1.000 -0.000 0.2188 0.0938
616 | VT 1.5000 3.5000 18.0000 0.000 1.000 -0.000 0.2188 0.0313
617 | VT 1.5000 3.5000 17.7000 0.000 1.000 -0.000 0.1563 0.0313
618 | VT -1.5000 3.5000 17.7000 0.000 1.000 -0.000 0.1563 0.0313
619 | VT -1.5000 3.5000 18.0000 0.000 1.000 -0.000 0.2188 0.0313
620 | VT -3.0000 3.5000 18.0000 0.000 1.000 -0.000 0.2188 0.0938
621 | VT 0.0000 3.5000 17.7000 0.000 1.000 -0.000 0.1563 0.0938
622 | VT 1.5000 3.5000 17.7000 0.000 1.000 -0.000 0.2188 0.0938
623 | VT 0.0000 3.5000 18.0000 0.000 1.000 -0.000 0.1563 0.0313
624 | VT -1.5000 3.5000 17.7000 0.000 1.000 -0.000 0.2188 0.0938
625 | VT 0.0000 3.6000 17.7000 0.000 0.000 1.000 0.0313 0.0938
626 | VT 1.5000 3.6000 17.7000 0.000 0.000 1.000 0.0938 0.0938
627 | VT 1.5000 3.5000 17.7000 0.000 0.000 1.000 0.0938 0.0313
628 | VT 0.0000 3.5000 17.7000 0.000 0.000 1.000 0.0313 0.0313
629 | VT -1.5000 3.5000 17.7000 0.000 0.000 1.000 0.0938 0.0313
630 | VT -1.5000 3.6000 17.7000 0.000 0.000 1.000 0.0938 0.0938
631 | VT 1.5000 3.6000 17.7000 0.000 1.000 -0.000 0.0938 0.0938
632 | VT 0.0000 3.6000 17.7000 0.000 1.000 -0.000 0.0938 0.0313
633 | VT 1.5000 3.6000 5.5000 0.000 1.000 -0.000 0.0313 0.0313
634 | VT -1.5000 3.6000 5.5000 0.000 1.000 -0.000 0.0313 0.0313
635 | VT -1.5000 3.6000 17.7000 0.000 1.000 -0.000 0.0938 0.0938
636 | VT 1.5000 3.6000 5.5000 0.000 1.000 -0.000 0.0938 0.0938
637 | VT -0.0000 3.6000 3.6000 -0.000 0.992 -0.126 0.0313 0.0313
638 | VT -1.5000 3.6000 5.5000 0.000 1.000 -0.000 0.0938 0.0938
639 | VT 1.5000 3.6000 3.6000 -0.000 0.982 -0.189 0.0938 0.0938
640 | VT 1.5000 3.6000 5.5000 0.000 1.000 -0.000 0.0938 0.0313
641 | VT -1.5000 3.6000 5.5000 0.000 1.000 -0.000 0.0938 0.0313
642 | VT -1.5000 3.6000 3.6000 -0.000 0.982 -0.189 0.0938 0.0938
643 | VT -0.0000 3.4000 3.1000 -0.000 0.855 -0.518 0.0313 0.0938
644 | VT 1.5000 3.4000 3.1000 0.005 0.855 -0.518 0.0938 0.0938
645 | VT 1.5000 3.6000 3.6000 -0.000 0.982 -0.189 0.0938 0.0313
646 | VT -1.5000 3.6000 3.6000 -0.000 0.982 -0.189 0.0938 0.0313
647 | VT -1.5000 3.4000 3.1000 -0.005 0.855 -0.518 0.0938 0.0938
648 | VT -0.0000 1.4000 1.6000 -0.000 -0.164 -0.986 0.0313 0.0938
649 | VT 1.4000 1.4000 1.7000 0.070 -0.164 -0.984 0.0938 0.0938
650 | VT 1.4000 2.0000 1.6000 0.070 -0.164 -0.984 0.0938 0.0313
651 | VT -0.0000 2.0000 1.5000 -0.000 -0.164 -0.986 0.0313 0.0313
652 | VT -1.4000 2.0000 1.6000 -0.070 -0.164 -0.984 0.0938 0.0313
653 | VT -1.4000 1.4000 1.7000 -0.070 -0.164 -0.984 0.0938 0.0938
654 | VT 1.5000 1.4000 5.0000 1.000 0.000 -0.000 0.0938 0.0938
655 | VT 1.5000 3.3000 5.0000 1.000 0.000 -0.000 0.0938 0.0313
656 | VT 1.5000 1.4000 3.6000 1.000 0.000 -0.000 0.0313 0.0313
657 | VT -1.5000 1.4000 3.6000 -1.000 0.000 0.000 0.0313 0.0313
658 | VT -1.5000 3.3000 5.0000 -1.000 0.000 0.000 0.0938 0.0313
659 | VT -1.5000 1.4000 5.0000 -1.000 0.000 0.000 0.0938 0.0938
660 | VT 1.5000 3.3000 5.0000 1.000 0.000 -0.000 0.0938 0.0938
661 | VT 1.5000 3.5000 5.5000 1.000 0.000 -0.000 0.0938 0.0313
662 | VT 1.5000 3.6000 5.5000 1.000 0.000 -0.000 0.0313 0.0313
663 | VT -1.5000 3.6000 5.5000 -1.000 0.000 0.000 0.0313 0.0313
664 | VT -1.5000 3.5000 5.5000 -1.000 0.000 0.000 0.0938 0.0313
665 | VT -1.5000 3.3000 5.0000 -1.000 0.000 0.000 0.0938 0.0938
666 | VT 1.5000 3.6000 3.6000 1.000 0.000 -0.000 0.0938 0.0938
667 | VT -1.5000 3.6000 3.6000 -1.000 0.000 0.000 0.0938 0.0938
668 | VT 3.0000 2.0000 9.4000 1.000 0.000 0.000 0.4375 0.6406
669 | VT 3.0000 3.3000 9.4000 1.000 0.000 0.000 0.4375 0.875
670 | VT 3.0000 3.3000 6.0000 1.000 0.000 0.000 0.1186 0.875
671 | VT -3.0000 3.3000 6.0000 -1.000 0.000 0.000 0.1186 0.875
672 | VT -3.0000 3.3000 9.4000 -1.000 0.000 0.000 0.4375 0.875
673 | VT -3.0000 2.0000 9.4000 -1.000 0.000 0.000 0.4375 0.6406
674 | VT 3.0000 3.1000 5.7000 1.000 -0.000 0.000 0.0898 0.8359
675 | VT -3.0000 3.1000 5.7000 -1.000 -0.000 0.000 0.0898 0.8359
676 | VT 3.0000 2.0000 9.4000 1.000 -0.030 -0.009 0.4375 0.6406
677 | VT 3.0000 3.1000 5.7000 1.000 -0.030 -0.009 0.0898 0.8359
678 | VT 2.9600 2.0000 4.9000 1.000 -0.030 -0.009 0.0156 0.6406
679 | VT -2.9600 2.0000 4.9000 -1.000 -0.030 -0.009 0.0156 0.6406
680 | VT -3.0000 3.1000 5.7000 -1.000 -0.030 -0.009 0.0898 0.8359
681 | VT -3.0000 2.0000 9.4000 -1.000 -0.030 -0.009 0.4375 0.6406
682 | VT 3.0000 3.3000 12.8000 1.000 0.000 -0.000 0.8814 0.875
683 | VT 3.0000 3.3000 9.4000 1.000 0.000 -0.000 0.5625 0.875
684 | VT 3.0000 2.0000 9.4000 1.000 0.000 -0.000 0.5625 0.6406
685 | VT -3.0000 2.0000 9.4000 -1.000 0.000 -0.000 0.5625 0.6406
686 | VT -3.0000 3.3000 9.4000 -1.000 0.000 -0.000 0.5625 0.875
687 | VT -3.0000 3.3000 12.8000 -1.000 0.000 -0.000 0.8814 0.875
688 | VT 3.0000 3.1000 13.1000 1.000 -0.000 -0.000 0.9102 0.8359
689 | VT -3.0000 3.1000 13.1000 -1.000 -0.000 -0.000 0.9102 0.8359
690 | VT 3.0000 2.0000 13.6000 1.000 -0.000 -0.000 0.957 0.6406
691 | VT -3.0000 2.0000 13.6000 -1.000 -0.000 -0.000 0.957 0.6406
692 | VT 3.0000 3.3000 9.4000 1.000 0.000 -0.000 0.2188 0.0313
693 | VT 3.0000 3.5000 5.5000 1.000 -0.010 -0.021 0.1563 0.0313
694 | VT -3.0000 3.5000 5.5000 -1.000 -0.010 -0.021 0.1563 0.0313
695 | VT -3.0000 3.3000 9.4000 -1.000 0.000 0.000 0.2188 0.0313
696 | VT 3.0000 3.5000 5.5000 1.000 -0.010 -0.021 0.1563 0.0938
697 | VT 3.0000 3.3000 9.4000 1.000 0.000 -0.000 0.2188 0.0938
698 | VT 3.0000 3.5000 18.0000 1.000 0.000 -0.000 0.1563 0.0313
699 | VT -3.0000 3.5000 5.5000 -1.000 -0.010 -0.021 0.1563 0.0938
700 | VT -3.0000 3.5000 18.0000 -1.000 0.000 0.000 0.1563 0.0313
701 | VT -3.0000 3.3000 9.4000 -1.000 0.000 0.000 0.2188 0.0938
702 | VT 2.6500 3.5000 5.5000 -0.000 0.982 -0.189 0.1563 0.0938
703 | VT 2.6500 3.3000 5.0000 -0.000 0.876 -0.482 0.2188 0.0938
704 | VT 2.9500 3.3000 5.0000 -0.000 0.845 -0.535 0.2188 0.0313
705 | VT 3.0000 3.5000 5.5000 -0.000 0.992 -0.126 0.1563 0.0313
706 | VT -2.6500 3.5000 5.5000 -0.000 0.982 -0.189 0.1563 0.0938
707 | VT -3.0000 3.5000 5.5000 -0.000 0.992 -0.126 0.1563 0.0313
708 | VT -2.9500 3.3000 5.0000 -0.000 0.845 -0.535 0.2188 0.0313
709 | VT -2.6500 3.3000 5.0000 -0.000 0.876 -0.482 0.2188 0.0938
710 | VT 1.5000 3.3000 5.0000 -0.000 0.928 -0.371 0.1563 0.0938
711 | VT 2.6500 3.5000 5.5000 -0.000 0.982 -0.189 0.2188 0.0313
712 | VT 1.5000 3.5000 5.5000 -0.000 0.982 -0.189 0.1563 0.0313
713 | VT -1.5000 3.3000 5.0000 -0.000 0.928 -0.371 0.1563 0.0938
714 | VT -1.5000 3.5000 5.5000 -0.000 0.982 -0.189 0.1563 0.0313
715 | VT -2.6500 3.5000 5.5000 -0.000 0.982 -0.189 0.2188 0.0313
716 | VT 1.5000 3.5000 13.3000 0.000 1.000 -0.000 0.1914 0.7383
717 | VT 1.5000 3.5000 5.5000 0.000 1.000 -0.000 0.9336 0.7383
718 | VT 2.6500 3.5000 5.5000 0.000 1.000 -0.000 0.9336 0.8711
719 | VT 2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.1914 0.8711
720 | VT -1.5000 3.5000 13.3000 0.000 1.000 -0.000 0.1914 0.7383
721 | VT -2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.1914 0.8711
722 | VT -2.6500 3.5000 5.5000 0.000 1.000 -0.000 0.9336 0.8711
723 | VT -1.5000 3.5000 5.5000 0.000 1.000 -0.000 0.9336 0.7383
724 | VT 2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.2188 0.0938
725 | VT 3.0000 3.5000 18.0000 0.000 1.000 -0.000 0.2188 0.0313
726 | VT -3.0000 3.5000 18.0000 0.000 1.000 -0.000 0.2188 0.0313
727 | VT -2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.2188 0.0938
728 | VT 1.5000 3.5000 13.3000 0.000 1.000 -0.000 0.2188 0.0938
729 | VT 2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.2188 0.0313
730 | VT -2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.2188 0.0313
731 | VT -1.5000 3.5000 13.3000 0.000 1.000 -0.000 0.2188 0.0938
732 | VT 3.0000 3.5000 5.5000 0.000 1.000 -0.000 0.2188 0.0938
733 | VT 2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.1563 0.0313
734 | VT -2.7000 3.5000 13.3000 0.000 1.000 -0.000 0.1563 0.0313
735 | VT -3.0000 3.5000 5.5000 0.000 1.000 -0.000 0.2188 0.0938
736 | VT 2.6500 3.5000 5.5000 0.000 1.000 -0.000 0.2188 0.0938
737 | VT 3.0000 3.5000 5.5000 0.000 1.000 -0.000 0.2188 0.0313
738 | VT -3.0000 3.5000 5.5000 0.000 1.000 -0.000 0.2188 0.0313
739 | VT -2.6500 3.5000 5.5000 0.000 1.000 -0.000 0.2188 0.0938
740 | VT 1.5000 3.6000 17.7000 1.000 0.000 -0.000 0.0938 0.0938
741 | VT 1.5000 3.5000 13.3000 1.000 0.000 -0.000 0.0938 0.0313
742 | VT 1.5000 3.5000 17.7000 1.000 0.000 -0.000 0.0313 0.0313
743 | VT -1.5000 3.5000 17.7000 -1.000 0.000 0.000 0.0313 0.0313
744 | VT -1.5000 3.5000 13.3000 -1.000 0.000 0.000 0.0938 0.0313
745 | VT -1.5000 3.6000 17.7000 -1.000 0.000 0.000 0.0938 0.0938
746 | VT 1.5000 3.5000 13.3000 1.000 0.000 -0.000 0.0938 0.0938
747 | VT 1.5000 3.6000 5.5000 1.000 0.000 -0.000 0.0938 0.0313
748 | VT 1.5000 3.5000 5.5000 1.000 0.000 -0.000 0.0313 0.0313
749 | VT -1.5000 3.5000 5.5000 -1.000 0.000 0.000 0.0313 0.0313
750 | VT -1.5000 3.6000 5.5000 -1.000 0.000 0.000 0.0938 0.0313
751 | VT -1.5000 3.5000 13.3000 -1.000 0.000 0.000 0.0938 0.0938
752 | VT 1.5000 3.6000 17.7000 1.000 0.000 -0.000 0.0938 0.0313
753 | VT -1.5000 3.6000 17.7000 -1.000 0.000 0.000 0.0938 0.0313
754 | VT 1.5000 3.2000 4.0000 1.000 0.000 -0.000 0.0938 0.0313
755 | VT 1.5000 3.3000 5.0000 1.000 0.000 -0.000 0.0313 0.0313
756 | VT -1.5000 3.3000 5.0000 -1.000 0.000 0.000 0.0313 0.0313
757 | VT -1.5000 3.2000 4.0000 -1.000 0.000 0.000 0.0938 0.0313
758 | VT 1.5000 3.4000 3.1000 0.999 0.022 -0.044 0.0938 0.0938
759 | VT 1.5000 3.6000 3.6000 1.000 0.000 -0.000 0.0313 0.0313
760 | VT -1.5000 3.6000 3.6000 -1.000 0.000 0.000 0.0313 0.0313
761 | VT -1.5000 3.4000 3.1000 -0.999 0.022 -0.044 0.0938 0.0938
762 | VT 1.5000 3.2000 3.0000 0.997 0.035 -0.069 0.0938 0.0938
763 | VT 1.5000 3.4000 3.1000 0.999 0.022 -0.044 0.0313 0.0313
764 | VT -1.5000 3.4000 3.1000 -0.999 0.022 -0.044 0.0313 0.0313
765 | VT -1.5000 3.2000 3.0000 -0.997 0.035 -0.069 0.0938 0.0938
766 | VT 1.4600 2.2000 2.2300 0.998 -0.010 -0.067 0.0938 0.0938
767 | VT 1.4500 2.3500 2.0800 0.993 0.045 -0.110 0.0938 0.0313
768 | VT 1.4000 2.0000 1.6000 0.992 0.030 -0.125 0.0313 0.0313
769 | VT -1.4000 2.0000 1.6000 -0.992 0.030 -0.125 0.0313 0.0313
770 | VT -1.4500 2.3500 2.0800 -0.993 0.045 -0.110 0.0938 0.0313
771 | VT -1.4600 2.2000 2.2300 -0.998 -0.010 -0.067 0.0938 0.0938
772 | VT 1.5000 3.2000 4.0000 1.000 0.000 -0.000 0.0938 0.0938
773 | VT 1.5000 3.0000 4.0000 1.000 0.000 -0.000 0.0938 0.0313
774 | VT -1.5000 3.0000 4.0000 -1.000 0.000 0.000 0.0938 0.0313
775 | VT -1.5000 3.2000 4.0000 -1.000 0.000 0.000 0.0938 0.0938
776 | VT 1.5000 3.0000 4.0000 1.000 0.000 -0.000 0.0313 0.0938
777 | VT 1.5000 2.2000 3.0500 1.000 -0.001 -0.019 0.0938 0.0938
778 | VT 1.5000 1.4000 3.6000 1.000 0.000 -0.000 0.0938 0.0313
779 | VT -1.5000 3.0000 4.0000 -1.000 0.000 0.000 0.0313 0.0938
780 | VT -1.5000 1.4000 3.6000 -1.000 0.000 0.000 0.0938 0.0313
781 | VT -1.5000 2.2000 3.0500 -1.000 -0.001 -0.019 0.0938 0.0938
782 | VT 1.4000 1.4000 1.7000 0.997 -0.021 -0.081 0.0938 0.0938
783 | VT 1.4600 2.2000 2.2300 0.998 -0.010 -0.067 0.0938 0.0313
784 | VT -1.4600 2.2000 2.2300 -0.998 -0.010 -0.067 0.0938 0.0313
785 | VT -1.4000 1.4000 1.7000 -0.997 -0.021 -0.081 0.0938 0.0938
786 | VT 1.5000 1.4000 3.1000 0.999 -0.010 -0.040 0.0938 0.0313
787 | VT -1.5000 1.4000 3.1000 -0.999 -0.010 -0.040 0.0938 0.0313
788 | VT 1.5000 1.4000 3.1000 0.999 -0.010 -0.040 0.0938 0.0938
789 | VT 1.4000 1.4000 1.7000 0.997 -0.021 -0.081 0.0313 0.0313
790 | VT -1.4000 1.4000 1.7000 -0.997 -0.021 -0.081 0.0313 0.0313
791 | VT -1.5000 1.4000 3.1000 -0.999 -0.010 -0.040 0.0938 0.0938
792 | VT 1.5000 1.4000 3.1000 0.999 -0.010 -0.040 0.0313 0.0313
793 | VT -1.5000 1.4000 3.1000 -0.999 -0.010 -0.040 0.0313 0.0313
794 | VT 2.9500 3.3000 15.2000 0.000 0.000 1.000 0.2188 0.0938
795 | VT 3.0000 2.8000 15.2000 0.000 0.000 1.000 0.2188 0.0313
796 | VT 2.5000 3.3000 15.2000 0.000 0.000 1.000 0.1563 0.0313
797 | VT -2.5000 3.3000 15.2000 0.000 0.000 1.000 0.1563 0.0313
798 | VT -3.0000 2.8000 15.2000 0.000 0.000 1.000 0.2188 0.0313
799 | VT -2.9500 3.3000 15.2000 0.000 0.000 1.000 0.2188 0.0938
800 | VT 2.5000 3.3000 15.2000 -0.000 0.000 1.000 0.2188 0.0938
801 | VT 2.5000 1.4000 15.2000 -0.000 0.000 1.000 0.1563 0.0313
802 | VT -2.5000 1.4000 15.2000 0.000 0.000 1.000 0.1563 0.0313
803 | VT -2.5000 3.3000 15.2000 0.000 0.000 1.000 0.2188 0.0938
804 | VT 3.0000 2.8000 15.2000 0.000 -0.000 1.000 0.2188 0.0938
805 | VT 3.0000 1.4000 15.2000 0.000 -0.000 1.000 0.2188 0.0313
806 | VT -3.0000 1.4000 15.2000 0.000 -0.000 1.000 0.2188 0.0313
807 | VT -3.0000 2.8000 15.2000 0.000 -0.000 1.000 0.2188 0.0938
808 | VT 2.9500 3.3000 15.2000 -0.990 -0.126 0.058 0.2188 0.0938
809 | VT 3.0000 3.0000 15.4000 -0.990 -0.126 0.058 0.2188 0.0313
810 | VT 3.0000 2.8000 15.2000 -0.990 -0.099 0.099 0.1563 0.0313
811 | VT -3.0000 2.8000 15.2000 0.990 -0.099 0.099 0.1563 0.0313
812 | VT -3.0000 3.0000 15.4000 0.990 -0.126 0.058 0.2188 0.0313
813 | VT -2.9500 3.3000 15.2000 0.990 -0.126 0.058 0.2188 0.0938
814 | VT 3.0000 3.3000 18.1000 -0.988 -0.153 0.017 0.2188 0.0313
815 | VT 3.0000 3.0000 15.4000 -0.990 -0.126 0.058 0.1563 0.0313
816 | VT -3.0000 3.0000 15.4000 0.990 -0.126 0.058 0.1563 0.0313
817 | VT -3.0000 3.3000 18.1000 0.988 -0.153 0.017 0.2188 0.0313
818 | VT 2.5000 3.3000 15.2000 -1.000 0.000 -0.000 0.1563 0.0938
819 | VT 2.5000 1.4000 15.2000 -1.000 0.000 -0.000 0.2188 0.0938
820 | VT 2.5000 1.4000 14.8000 -1.000 0.000 -0.000 0.2188 0.0313
821 | VT 2.5000 3.3000 14.8000 -1.000 0.000 -0.000 0.1563 0.0313
822 | VT -2.5000 3.3000 15.2000 1.000 0.000 -0.000 0.1563 0.0938
823 | VT -2.5000 3.3000 14.8000 1.000 0.000 -0.000 0.1563 0.0313
824 | VT -2.5000 1.4000 14.8000 1.000 0.000 -0.000 0.2188 0.0313
825 | VT -2.5000 1.4000 15.2000 1.000 0.000 -0.000 0.2188 0.0938
826 | VT 2.5000 1.4000 14.8000 -0.000 -0.000 1.000 0.1563 0.0938
827 | VT 1.0000 1.4000 14.8000 -0.000 -0.000 1.000 0.2188 0.0938
828 | VT 1.0000 3.3000 14.8000 -0.000 -0.000 1.000 0.2188 0.0313
829 | VT 2.5000 3.3000 14.8000 -0.000 -0.000 1.000 0.1563 0.0313
830 | VT -2.5000 1.4000 14.8000 0.000 -0.000 1.000 0.1563 0.0938
831 | VT -2.5000 3.3000 14.8000 0.000 -0.000 1.000 0.1563 0.0313
832 | VT -1.0000 3.3000 14.8000 0.000 -0.000 1.000 0.2188 0.0313
833 | VT -1.0000 1.4000 14.8000 0.000 -0.000 1.000 0.2188 0.0938
834 | VT 1.0000 1.4000 14.8000 0.000 -0.000 1.000 0.125 0.25
835 | VT 0.0000 1.4000 14.8000 0.000 -0.000 1.000 0.0 0.25
836 | VT 0.0000 3.3000 14.8000 0.000 -0.000 1.000 0.0 0.5
837 | VT 1.0000 3.3000 14.8000 0.000 -0.000 1.000 0.125 0.5
838 | VT -1.0000 1.4000 14.8000 0.000 -0.000 1.000 0.125 0.25
839 | VT -1.0000 3.3000 14.8000 0.000 -0.000 1.000 0.125 0.5
840 | VT 1.5000 3.0000 4.0000 1.000 0.000 -0.000 0.5117 0.4453
841 | VT 1.5000 2.7000 3.0250 1.000 0.000 -0.000 0.625 0.375
842 | VT 1.5000 2.2000 3.0500 1.000 0.000 -0.000 0.5117 0.2578
843 | VT -1.5000 2.2000 3.0500 -1.000 0.000 0.000 0.5117 0.2578
844 | VT -1.5000 2.7000 3.0250 -1.000 0.000 0.000 0.625 0.375
845 | VT -1.5000 3.0000 4.0000 -1.000 0.000 0.000 0.5117 0.4453
846 | VT 1.4600 2.2000 2.2300 0.999 -0.002 -0.049 0.7383 0.2578
847 | VT 1.5000 2.2000 3.0500 0.999 -0.002 -0.049 0.5117 0.2578
848 | VT 1.5000 2.7000 3.0250 0.999 -0.002 -0.049 0.625 0.375
849 | VT -1.5000 2.7000 3.0250 -0.999 -0.002 -0.049 0.625 0.375
850 | VT -1.5000 2.2000 3.0500 -0.999 -0.002 -0.049 0.5117 0.2578
851 | VT -1.4600 2.2000 2.2300 -0.999 -0.002 -0.049 0.7383 0.2578
852 | VT 1.5000 3.2000 4.0000 1.000 0.000 -0.000 0.5117 0.4766
853 | VT 1.5000 2.7000 3.0250 1.000 0.001 -0.026 0.625 0.375
854 | VT -1.5000 2.7000 3.0250 -1.000 0.001 -0.026 0.625 0.375
855 | VT -1.5000 3.2000 4.0000 -1.000 0.000 0.000 0.5117 0.4766
856 | VT 1.5000 3.2000 3.0000 0.997 0.035 -0.069 0.6289 0.4766
857 | VT -1.5000 3.2000 3.0000 -0.997 0.035 -0.069 0.6289 0.4766
858 | VT 1.4500 2.3500 2.0800 0.993 0.045 -0.110 0.7383 0.4766
859 | VT -1.4500 2.3500 2.0800 -0.993 0.045 -0.110 0.7383 0.4766
860 | VT 1.4600 2.2000 2.2300 0.998 -0.010 -0.067 0.7383 0.2578
861 | VT -1.4600 2.2000 2.2300 -0.998 -0.010 -0.067 0.7383 0.2578
862 | VT -0.0000 2.3500 1.9000 -0.000 0.741 -0.672 0.0313 0.0625
863 | VT -0.0000 2.0000 1.5000 -0.000 0.743 -0.669 0.0313 0.0938
864 | VT 1.4000 2.0000 1.6000 0.043 0.743 -0.668 0.0938 0.0938
865 | VT 1.4300 2.3500 1.9800 0.036 0.740 -0.671 0.0938 0.0625
866 | VT -1.4300 2.3500 1.9800 -0.036 0.740 -0.671 0.0938 0.0625
867 | VT -1.4000 2.0000 1.6000 -0.043 0.743 -0.668 0.0938 0.0938
868 | VT 1.4500 2.3500 2.0800 0.993 0.045 -0.110 0.0938 0.0938
869 | VT 1.4300 2.3500 1.9800 0.977 0.119 -0.177 0.0313 0.0625
870 | VT 1.4000 2.0000 1.6000 0.992 0.030 -0.125 0.0313 0.0938
871 | VT -1.4000 2.0000 1.6000 -0.992 0.030 -0.125 0.0313 0.0938
872 | VT -1.4300 2.3500 1.9800 -0.977 0.119 -0.177 0.0313 0.0625
873 | VT -1.4500 2.3500 2.0800 -0.993 0.045 -0.110 0.0938 0.0938
874 | VT -0.0000 3.4000 3.1000 -0.000 0.855 -0.518 0.0313 0.0313
875 | VT -0.0000 3.2500 2.9000 -0.000 0.749 -0.663 0.0313 0.0469
876 | VT 1.4900 3.2500 2.9500 0.020 0.748 -0.663 0.0938 0.0469
877 | VT 1.5000 3.4000 3.1000 0.005 0.855 -0.518 0.0938 0.0313
878 | VT -1.5000 3.4000 3.1000 -0.005 0.855 -0.518 0.0938 0.0313
879 | VT -1.4900 3.2500 2.9500 -0.020 0.748 -0.663 0.0938 0.0469
880 | VT -0.0000 3.2500 2.9000 -0.000 0.749 -0.663 0.4688 0.4727
881 | VT -0.0000 2.3500 1.9000 -0.000 0.741 -0.672 0.4688 0.2617
882 | VT 1.4300 2.3500 1.9800 0.036 0.740 -0.671 0.2617 0.2617
883 | VT 1.4900 3.2500 2.9500 0.020 0.748 -0.663 0.2617 0.4727
884 | VT -1.4900 3.2500 2.9500 -0.020 0.748 -0.663 0.2617 0.4727
885 | VT -1.4300 2.3500 1.9800 -0.036 0.740 -0.671 0.2617 0.2617
886 | VT 1.5000 3.2000 3.0000 0.997 0.035 -0.069 0.0938 0.0313
887 | VT 1.4900 3.2500 2.9500 0.985 0.088 -0.146 0.0313 0.0469
888 | VT -1.4900 3.2500 2.9500 -0.985 0.088 -0.146 0.0313 0.0469
889 | VT -1.5000 3.2000 3.0000 -0.997 0.035 -0.069 0.0938 0.0313
890 | VT 0.0600 3.6000 3.9000 1.000 -0.000 0.000 0.1563 0.0938
891 | VT 0.0600 3.6000 4.1000 1.000 -0.000 0.000 0.2188 0.0938
892 | VT 0.0600 4.4000 4.2000 1.000 -0.000 0.000 0.2188 0.0313
893 | VT 0.0600 4.4000 4.1000 1.000 -0.000 0.000 0.1563 0.0313
894 | VT -0.0600 3.6000 3.9000 -1.000 -0.000 0.000 0.1563 0.0938
895 | VT -0.0600 4.4000 4.1000 -1.000 -0.000 0.000 0.1563 0.0313
896 | VT -0.0600 4.4000 4.2000 -1.000 -0.000 0.000 0.2188 0.0313
897 | VT -0.0600 3.6000 4.1000 -1.000 -0.000 0.000 0.2188 0.0938
898 | VT -0.0000 3.6000 3.9000 0.000 0.242 -0.970 0.1563 0.0938
899 | VT 0.0600 3.6000 3.9000 0.000 0.242 -0.970 0.2188 0.0938
900 | VT 0.0600 4.4000 4.1000 0.000 0.242 -0.970 0.2188 0.0313
901 | VT -0.0000 4.4000 4.1000 0.000 0.242 -0.970 0.1563 0.0313
902 | VT -0.0600 4.4000 4.1000 -0.000 0.242 -0.970 0.2188 0.0313
903 | VT -0.0600 3.6000 3.9000 -0.000 0.242 -0.970 0.2188 0.0938
904 | VT -0.0000 4.4000 4.2000 -0.000 -0.124 0.992 0.1563 0.0938
905 | VT 0.0600 4.4000 4.2000 -0.000 -0.124 0.992 0.2188 0.0938
906 | VT 0.0600 3.6000 4.1000 -0.000 -0.124 0.992 0.2188 0.0313
907 | VT -0.0000 3.6000 4.1000 -0.000 -0.124 0.992 0.1563 0.0313
908 | VT -0.0600 3.6000 4.1000 0.000 -0.124 0.992 0.2188 0.0313
909 | VT -0.0600 4.4000 4.2000 0.000 -0.124 0.992 0.2188 0.0938
910 | VT -0.0000 4.4000 4.1000 0.000 1.000 -0.000 0.1563 0.0938
911 | VT 0.0600 4.4000 4.1000 0.000 1.000 -0.000 0.2188 0.0938
912 | VT 0.0600 4.4000 4.2000 0.000 1.000 -0.000 0.2188 0.0313
913 | VT -0.0000 4.4000 4.2000 0.000 1.000 -0.000 0.1563 0.0313
914 | VT -0.0600 4.4000 4.2000 -0.000 1.000 -0.000 0.2188 0.0313
915 | VT -0.0600 4.4000 4.1000 -0.000 1.000 -0.000 0.2188 0.0938
916 | VT 1.5500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0313 0.0938
917 | VT 1.5500 1.2000 5.7000 -1.000 -0.002 -0.033 0.0938 0.0938
918 | VT 1.5500 0.7500 19.4000 -1.000 0.000 0.000 0.0938 0.0313
919 | VT 1.5500 0.1000 19.4000 -1.000 0.000 0.000 0.0313 0.0313
920 | VT -1.5500 0.1000 5.7500 0.999 -0.002 -0.033 0.0313 0.0938
921 | VT -1.5500 0.1000 19.4000 1.000 0.000 -0.000 0.0313 0.0313
922 | VT -1.5500 0.7500 19.4000 1.000 0.000 -0.000 0.0938 0.0313
923 | VT -1.5500 1.2000 5.7000 1.000 -0.002 -0.033 0.0938 0.0938
924 | VT 1.5500 0.7500 19.4000 0.000 0.000 1.000 0.0313 0.0938
925 | VT 3.2500 1.2000 19.4000 0.000 0.000 1.000 0.0938 0.0938
926 | VT 3.2500 0.1000 19.4000 0.000 0.000 1.000 0.0938 0.0313
927 | VT 1.5500 0.1000 19.4000 0.000 0.000 1.000 0.0313 0.0313
928 | VT -1.5500 0.7500 19.4000 0.000 0.000 1.000 0.0313 0.0938
929 | VT -1.5500 0.1000 19.4000 0.000 0.000 1.000 0.0313 0.0313
930 | VT -3.2500 0.1000 19.4000 0.000 0.000 1.000 0.0938 0.0313
931 | VT -3.2500 1.2000 19.4000 0.000 0.000 1.000 0.0938 0.0938
932 | VT 3.2500 -1.0000 19.4000 0.000 0.000 1.000 0.0313 0.0938
933 | VT 1.5500 -1.0000 19.4000 0.000 0.000 1.000 0.0938 0.0938
934 | VT 1.5500 0.1000 19.4000 0.000 0.000 1.000 0.0938 0.0313
935 | VT 3.2500 0.1000 19.4000 0.000 0.000 1.000 0.0313 0.0313
936 | VT -3.2500 -1.0000 19.4000 0.000 0.000 1.000 0.0313 0.0938
937 | VT -3.2500 0.1000 19.4000 0.000 0.000 1.000 0.0313 0.0313
938 | VT -1.5500 0.1000 19.4000 0.000 0.000 1.000 0.0938 0.0313
939 | VT -1.5500 -1.0000 19.4000 0.000 0.000 1.000 0.0938 0.0938
940 | VT 1.5500 -1.0000 5.8000 -0.999 -0.002 -0.034 0.0313 0.0938
941 | VT 1.5500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0938 0.0938
942 | VT 1.5500 0.1000 19.4000 -1.000 0.000 0.000 0.0938 0.0313
943 | VT 1.5500 -1.0000 19.4000 -1.000 0.000 0.000 0.0313 0.0313
944 | VT -1.5500 -1.0000 5.8000 0.999 -0.002 -0.034 0.0313 0.0938
945 | VT -1.5500 -1.0000 19.4000 1.000 0.000 -0.000 0.0313 0.0313
946 | VT -1.5500 0.1000 19.4000 1.000 0.000 -0.000 0.0938 0.0313
947 | VT -1.5500 0.1000 5.7500 0.999 -0.002 -0.033 0.0938 0.0938
948 | VT 3.2500 0.1000 19.4000 1.000 0.000 -0.000 0.0313 0.0938
949 | VT 3.2500 1.2000 19.4000 1.000 0.000 -0.000 0.0938 0.0938
950 | VT 3.2500 1.2000 5.7000 1.000 -0.002 -0.033 0.0938 0.0313
951 | VT 3.2500 0.1000 5.7500 0.999 -0.002 -0.033 0.0313 0.0313
952 | VT -3.2500 0.1000 19.4000 -1.000 0.000 0.000 0.0313 0.0938
953 | VT -3.2500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0313 0.0313
954 | VT -3.2500 1.2000 5.7000 -1.000 -0.002 -0.033 0.0938 0.0313
955 | VT -3.2500 1.2000 19.4000 -1.000 0.000 0.000 0.0938 0.0938
956 | VT 3.2500 -1.0000 19.4000 1.000 0.000 -0.000 0.0313 0.0938
957 | VT 3.2500 0.1000 19.4000 1.000 0.000 -0.000 0.0938 0.0938
958 | VT 3.2500 0.1000 5.7500 0.999 -0.002 -0.033 0.0938 0.0313
959 | VT 3.2500 -1.0000 5.8000 0.999 -0.002 -0.034 0.0313 0.0313
960 | VT -3.2500 -1.0000 19.4000 -1.000 0.000 0.000 0.0313 0.0938
961 | VT -3.2500 -1.0000 5.8000 -0.999 -0.002 -0.034 0.0313 0.0313
962 | VT -3.2500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0938 0.0313
963 | VT -3.2500 0.1000 19.4000 -1.000 0.000 0.000 0.0938 0.0938
964 | VT 2.6000 0.1000 0.8500 0.931 -0.049 -0.362 0.0313 0.0938
965 | VT 2.6000 1.2000 0.7000 0.931 -0.049 -0.362 0.0938 0.0938
966 | VT 2.4000 1.2000 0.3000 0.893 -0.061 -0.446 0.0938 0.0313
967 | VT 2.4000 0.1000 0.4500 0.893 -0.061 -0.446 0.0313 0.0313
968 | VT -2.6000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0313 0.0938
969 | VT -2.4000 0.1000 0.4500 -0.893 -0.061 -0.446 0.0313 0.0313
970 | VT -2.4000 1.2000 0.3000 -0.893 -0.061 -0.446 0.0938 0.0313
971 | VT -2.6000 1.2000 0.7000 -0.931 -0.049 -0.362 0.0938 0.0938
972 | VT 2.6000 -1.0000 1.0000 0.931 -0.049 -0.362 0.0313 0.0938
973 | VT 2.6000 0.1000 0.8500 0.931 -0.049 -0.362 0.0938 0.0938
974 | VT 2.4000 0.1000 0.4500 0.893 -0.061 -0.446 0.0938 0.0313
975 | VT 2.4000 -1.0000 0.6000 0.893 -0.061 -0.446 0.0313 0.0313
976 | VT -2.6000 -1.0000 1.0000 -0.931 -0.049 -0.362 0.0313 0.0938
977 | VT -2.4000 -1.0000 0.6000 -0.893 -0.061 -0.446 0.0313 0.0313
978 | VT -2.4000 0.1000 0.4500 -0.893 -0.061 -0.446 0.0938 0.0313
979 | VT -2.6000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0938 0.0938
980 | VT 2.8000 0.1000 1.5500 0.977 -0.027 -0.214 0.0313 0.0938
981 | VT 2.8000 1.2000 1.4000 0.977 -0.027 -0.213 0.0938 0.0938
982 | VT 2.6000 1.2000 0.7000 0.931 -0.049 -0.362 0.0938 0.0313
983 | VT 2.6000 0.1000 0.8500 0.931 -0.049 -0.362 0.0313 0.0313
984 | VT -2.8000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0313 0.0938
985 | VT -2.6000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0313 0.0313
986 | VT -2.6000 1.2000 0.7000 -0.931 -0.049 -0.362 0.0938 0.0313
987 | VT -2.8000 1.2000 1.4000 -0.977 -0.027 -0.213 0.0938 0.0938
988 | VT 2.8000 -1.0000 1.7000 0.976 -0.028 -0.215 0.0313 0.0938
989 | VT 2.8000 0.1000 1.5500 0.977 -0.027 -0.214 0.0938 0.0938
990 | VT 2.6000 0.1000 0.8500 0.931 -0.049 -0.362 0.0938 0.0313
991 | VT 2.6000 -1.0000 1.0000 0.931 -0.049 -0.362 0.0313 0.0313
992 | VT -2.8000 -1.0000 1.7000 -0.976 -0.028 -0.215 0.0313 0.0938
993 | VT -2.6000 -1.0000 1.0000 -0.931 -0.049 -0.362 0.0313 0.0313
994 | VT -2.6000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0938 0.0313
995 | VT -2.8000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0938 0.0938
996 | VT 3.1000 0.1000 3.5000 0.994 -0.011 -0.109 0.0313 0.0938
997 | VT 3.1000 1.2000 3.4000 0.994 -0.011 -0.108 0.0938 0.0938
998 | VT 2.8000 1.2000 1.4000 0.977 -0.027 -0.213 0.0938 0.0313
999 | VT 2.8000 0.1000 1.5500 0.977 -0.027 -0.214 0.0313 0.0313
1000 | VT -3.1000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0313 0.0938
1001 | VT -2.8000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0313 0.0313
1002 | VT -2.8000 1.2000 1.4000 -0.977 -0.027 -0.213 0.0938 0.0313
1003 | VT -3.1000 1.2000 3.4000 -0.994 -0.011 -0.108 0.0938 0.0938
1004 | VT 3.1000 -1.0000 3.6000 0.994 -0.011 -0.111 0.0313 0.0938
1005 | VT 3.1000 0.1000 3.5000 0.994 -0.011 -0.109 0.0938 0.0938
1006 | VT 2.8000 0.1000 1.5500 0.977 -0.027 -0.214 0.0938 0.0313
1007 | VT 2.8000 -1.0000 1.7000 0.976 -0.028 -0.215 0.0313 0.0313
1008 | VT -3.1000 -1.0000 3.6000 -0.994 -0.011 -0.111 0.0313 0.0938
1009 | VT -2.8000 -1.0000 1.7000 -0.976 -0.028 -0.215 0.0313 0.0313
1010 | VT -2.8000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0938 0.0313
1011 | VT -3.1000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0938 0.0938
1012 | VT 3.2500 0.1000 5.7500 0.999 -0.002 -0.033 0.0313 0.0938
1013 | VT 3.2500 1.2000 5.7000 1.000 -0.002 -0.033 0.0938 0.0938
1014 | VT 3.1000 1.2000 3.4000 0.994 -0.011 -0.108 0.0938 0.0313
1015 | VT 3.1000 0.1000 3.5000 0.994 -0.011 -0.109 0.0313 0.0313
1016 | VT -3.2500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0313 0.0938
1017 | VT -3.1000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0313 0.0313
1018 | VT -3.1000 1.2000 3.4000 -0.994 -0.011 -0.108 0.0938 0.0313
1019 | VT -3.2500 1.2000 5.7000 -1.000 -0.002 -0.033 0.0938 0.0938
1020 | VT 3.2500 -1.0000 5.8000 0.999 -0.002 -0.034 0.0313 0.0938
1021 | VT 3.2500 0.1000 5.7500 0.999 -0.002 -0.033 0.0938 0.0938
1022 | VT 3.1000 0.1000 3.5000 0.994 -0.011 -0.109 0.0938 0.0313
1023 | VT 3.1000 -1.0000 3.6000 0.994 -0.011 -0.111 0.0313 0.0313
1024 | VT -3.2500 -1.0000 5.8000 -0.999 -0.002 -0.034 0.0313 0.0938
1025 | VT -3.1000 -1.0000 3.6000 -0.994 -0.011 -0.111 0.0313 0.0313
1026 | VT -3.1000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0938 0.0313
1027 | VT -3.2500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0938 0.0938
1028 | VT 1.7000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0313 0.0938
1029 | VT 1.7000 1.2000 3.4000 -0.994 -0.011 -0.108 0.0938 0.0938
1030 | VT 1.5500 1.2000 5.7000 -1.000 -0.002 -0.033 0.0938 0.0313
1031 | VT 1.5500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0313 0.0313
1032 | VT -1.7000 0.1000 3.5000 0.994 -0.011 -0.109 0.0313 0.0938
1033 | VT -1.5500 0.1000 5.7500 0.999 -0.002 -0.033 0.0313 0.0313
1034 | VT -1.5500 1.2000 5.7000 1.000 -0.002 -0.033 0.0938 0.0313
1035 | VT -1.7000 1.2000 3.4000 0.994 -0.011 -0.108 0.0938 0.0938
1036 | VT 1.7000 -1.0000 3.6000 -0.994 -0.011 -0.111 0.0313 0.0938
1037 | VT 1.7000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0938 0.0938
1038 | VT 1.5500 0.1000 5.7500 -0.999 -0.002 -0.033 0.0938 0.0313
1039 | VT 1.5500 -1.0000 5.8000 -0.999 -0.002 -0.034 0.0313 0.0313
1040 | VT -1.7000 -1.0000 3.6000 0.994 -0.011 -0.111 0.0313 0.0938
1041 | VT -1.5500 -1.0000 5.8000 0.999 -0.002 -0.034 0.0313 0.0313
1042 | VT -1.5500 0.1000 5.7500 0.999 -0.002 -0.033 0.0938 0.0313
1043 | VT -1.7000 0.1000 3.5000 0.994 -0.011 -0.109 0.0938 0.0938
1044 | VT 2.0000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0313 0.0938
1045 | VT 2.0000 1.2000 1.4000 -0.977 -0.027 -0.213 0.0938 0.0938
1046 | VT 1.7000 1.2000 3.4000 -0.994 -0.011 -0.108 0.0938 0.0313
1047 | VT 1.7000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0313 0.0313
1048 | VT -2.0000 0.1000 1.5500 0.977 -0.027 -0.214 0.0313 0.0938
1049 | VT -1.7000 0.1000 3.5000 0.994 -0.011 -0.109 0.0313 0.0313
1050 | VT -1.7000 1.2000 3.4000 0.994 -0.011 -0.108 0.0938 0.0313
1051 | VT -2.0000 1.2000 1.4000 0.977 -0.027 -0.213 0.0938 0.0938
1052 | VT 2.0000 -1.0000 1.7000 -0.976 -0.028 -0.215 0.0313 0.0938
1053 | VT 2.0000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0938 0.0938
1054 | VT 1.7000 0.1000 3.5000 -0.994 -0.011 -0.109 0.0938 0.0313
1055 | VT 1.7000 -1.0000 3.6000 -0.994 -0.011 -0.111 0.0313 0.0313
1056 | VT -2.0000 -1.0000 1.7000 0.976 -0.028 -0.215 0.0313 0.0938
1057 | VT -1.7000 -1.0000 3.6000 0.994 -0.011 -0.111 0.0313 0.0313
1058 | VT -1.7000 0.1000 3.5000 0.994 -0.011 -0.109 0.0938 0.0313
1059 | VT -2.0000 0.1000 1.5500 0.977 -0.027 -0.214 0.0938 0.0938
1060 | VT 2.2000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0313 0.0938
1061 | VT 2.2000 1.2000 0.7000 -0.931 -0.049 -0.362 0.0938 0.0938
1062 | VT 2.0000 1.2000 1.4000 -0.977 -0.027 -0.213 0.0938 0.0313
1063 | VT 2.0000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0313 0.0313
1064 | VT -2.2000 0.1000 0.8500 0.931 -0.049 -0.362 0.0313 0.0938
1065 | VT -2.0000 0.1000 1.5500 0.977 -0.027 -0.214 0.0313 0.0313
1066 | VT -2.0000 1.2000 1.4000 0.977 -0.027 -0.213 0.0938 0.0313
1067 | VT -2.2000 1.2000 0.7000 0.931 -0.049 -0.362 0.0938 0.0938
1068 | VT 2.2000 -1.0000 1.0000 -0.931 -0.049 -0.362 0.0313 0.0938
1069 | VT 2.2000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0938 0.0938
1070 | VT 2.0000 0.1000 1.5500 -0.977 -0.027 -0.214 0.0938 0.0313
1071 | VT 2.0000 -1.0000 1.7000 -0.976 -0.028 -0.215 0.0313 0.0313
1072 | VT -2.2000 -1.0000 1.0000 0.931 -0.049 -0.362 0.0313 0.0938
1073 | VT -2.0000 -1.0000 1.7000 0.976 -0.028 -0.215 0.0313 0.0313
1074 | VT -2.0000 0.1000 1.5500 0.977 -0.027 -0.214 0.0938 0.0313
1075 | VT -2.2000 0.1000 0.8500 0.931 -0.049 -0.362 0.0938 0.0938
1076 | VT 2.4000 0.1000 0.4500 -0.893 -0.061 -0.446 0.0313 0.0938
1077 | VT 2.4000 1.2000 0.3000 -0.893 -0.061 -0.446 0.0938 0.0938
1078 | VT 2.2000 1.2000 0.7000 -0.931 -0.049 -0.362 0.0938 0.0313
1079 | VT 2.2000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0313 0.0313
1080 | VT -2.4000 0.1000 0.4500 0.893 -0.061 -0.446 0.0313 0.0938
1081 | VT -2.2000 0.1000 0.8500 0.931 -0.049 -0.362 0.0313 0.0313
1082 | VT -2.2000 1.2000 0.7000 0.931 -0.049 -0.362 0.0938 0.0313
1083 | VT -2.4000 1.2000 0.3000 0.893 -0.061 -0.446 0.0938 0.0938
1084 | VT 2.4000 -1.0000 0.6000 -0.893 -0.061 -0.446 0.0313 0.0938
1085 | VT 2.4000 0.1000 0.4500 -0.893 -0.061 -0.446 0.0938 0.0938
1086 | VT 2.2000 0.1000 0.8500 -0.931 -0.049 -0.362 0.0938 0.0313
1087 | VT 2.2000 -1.0000 1.0000 -0.931 -0.049 -0.362 0.0313 0.0313
1088 | VT -2.4000 -1.0000 0.6000 0.893 -0.061 -0.446 0.0313 0.0938
1089 | VT -2.2000 -1.0000 1.0000 0.931 -0.049 -0.362 0.0313 0.0313
1090 | VT -2.2000 0.1000 0.8500 0.931 -0.049 -0.362 0.0938 0.0313
1091 | VT -2.4000 0.1000 0.4500 0.893 -0.061 -0.446 0.0938 0.0938
1092 | VT 1.4000 0.9000 19.4000 -0.707 -0.707 -0.023 0.0938 0.0938
1093 | VT 1.5500 0.7500 19.4000 -0.707 -0.707 -0.023 0.0938 0.0313
1094 | VT 1.5500 1.2000 5.7000 -0.707 -0.707 -0.023 0.0313 0.0313
1095 | VT -1.5500 1.2000 5.7000 0.707 -0.707 -0.023 0.0313 0.0313
1096 | VT -1.5500 0.7500 19.4000 0.707 -0.707 -0.023 0.0938 0.0313
1097 | VT -1.4000 0.9000 19.4000 0.707 -0.707 -0.023 0.0938 0.0938
1098 | VT 0.0000 1.2000 19.4000 0.000 0.000 1.000 0.0938 0.0938
1099 | VT 1.4000 0.9000 19.4000 0.000 0.000 1.000 0.0938 0.0313
1100 | VT 0.0000 0.9000 19.4000 0.000 0.000 1.000 0.0313 0.0313
1101 | VT -1.4000 0.9000 19.4000 0.000 0.000 1.000 0.0938 0.0313
1102 | VT 0.0000 1.2000 19.4000 0.000 0.000 1.000 0.0313 0.0313
1103 | VT 1.5500 0.7500 19.4000 0.000 0.000 1.000 0.0938 0.0313
1104 | VT 1.4000 0.9000 19.4000 0.000 0.000 1.000 0.0313 0.0313
1105 | VT -1.4000 0.9000 19.4000 -0.000 0.000 1.000 0.0313 0.0313
1106 | VT -1.5500 0.7500 19.4000 -0.000 0.000 1.000 0.0938 0.0313
1107 |
1108 | IDX10 915 916 917 915 917 918 919 920 921 919
1109 | IDX10 921 922 923 924 925 923 925 926 927 928
1110 | IDX10 929 927 929 930 1089 1090 1091 1091 1092 1089
1111 | IDX10 1093 1092 922 1096 1097 922 1015 1016 1017 1015
1112 | IDX10 1017 1018 1067 1068 1069 1067 1069 1070 1035 1036
1113 | IDX10 1037 1035 1037 1038 1011 1012 1013 1011 1013 1014
1114 | IDX10 1007 1008 1009 1007 1009 1010 1003 1004 1005 1003
1115 | IDX10 1005 1006 999 1000 1001 999 1001 1002 1051 1052
1116 | IDX10 1053 1051 1053 1054 1059 1060 1061 1059 1061 1062
1117 | IDX10 1027 1028 1029 1027 1029 1030 995 996 997 995
1118 | IDX10 997 998 991 992 993 991 993 994 987 988
1119 | IDX10 989 987 989 990 983 984 985 983 985 986
1120 | IDX10 979 980 981 979 981 982 975 976 977 975
1121 | IDX10 977 978 1075 1076 1077 1075 1077 1078 1043 1044
1122 | IDX10 1045 1043 1045 1046 1083 1084 1085 971 972 973
1123 | IDX10 971 973 974 967 968 969 967 969 970 963
1124 | IDX10 964 965 963 965 966 959 960 961 959 961
1125 | IDX10 962 955 956 957 955 957 958 951 952 953
1126 | IDX10 951 953 954 947 948 949 947 949 950 916
1127 | IDX10 1090 1093 916 1094 1095 879 755 880 880 864
1128 | IDX10 863 880 863 879 885 886 887 885 887 888
1129 | IDX10 901 902 903 901 903 904 901 904 905 901
1130 | IDX10 905 906 865 866 867 865 867 868 877 754
1131 | IDX10 878 877 878 860 877 860 859 862 863 864
1132 | IDX10 853 854 855 853 855 856 871 875 876 871
1133 | IDX10 876 872 859 860 861 853 857 858 853 858
1134 | IDX10 854 871 872 873 871 873 874 865 869 870
1135 | IDX10 865 870 866 799 800 801 802 803 804 834
1136 | IDX10 835 836 840 841 842 848 845 850 848 846
1137 | IDX10 845 889 890 891 889 891 892 799 805 806
1138 | IDX10 807 808 804 850 845 852 836 845 846 825
1139 | IDX10 826 827 825 827 828 809 810 811 809 811
1140 | IDX10 812 817 818 819 817 819 820 895 898 899
1141 | IDX10 895 899 900 895 896 897 895 897 898 831
1142 | IDX10 832 833 837 838 839 843 844 831 844 843
1143 | IDX10 847 851 844 849 849 844 847 881 882 883
1144 | IDX10 881 883 884 889 892 893 889 893 894 1063
1145 | IDX10 1064 1065 1063 1065 1066 829 830 827 829 827
1146 | IDX10 826 813 814 815 813 815 816 821 822 823
1147 | IDX10 821 823 824 907 908 909 907 909 910 911
1148 | IDX10 912 913 911 913 914 931 932 933 931 933
1149 | IDX10 934 1039 1040 1041 1039 1041 1042 1055 1056 1057
1150 | IDX10 1055 1057 1058 1086 1087 1088 943 944 945 943
1151 | IDX10 945 946 785 786 787 791 786 792 793 789
1152 | IDX10 794 795 796 792 793 797 798 757 758 759
1153 | IDX10 701 694 702 701 702 703 768 774 783 773
1154 | IDX10 774 759 779 774 780 731 732 733 704 705
1155 | IDX10 706 704 706 700 690 691 529 690 529 692
1156 | IDX10 687 688 526 687 526 689 737 738 739 737
1157 | IDX10 743 653 788 789 790 670 671 672 667 668
1158 | IDX10 669 662 663 664 666 662 664 659 660 661
1159 | IDX10 659 661 665 673 674 675 679 673 675 675
1160 | IDX10 681 679 567 683 684 654 655 656 654 649
1161 | IDX10 658 639 642 643 639 643 644 639 640 641
1162 | IDX10 639 641 642 634 635 636 634 636 628 657
1163 | IDX10 745 746 749 745 750 753 745 754 763 764
1164 | IDX10 746 767 768 769 767 769 746 768 777 647
1165 | IDX10 634 628 637 634 637 638 697 698 699 697
1166 | IDX10 699 700 595 596 597 609 717 718 598 596
1167 | IDX10 599 685 686 570 707 708 709 707 709 710
1168 | IDX10 711 712 713 711 713 714 784 775 772 760
1169 | IDX10 761 762 648 649 650 734 735 736 654 744
1170 | IDX10 742 751 748 752 770 747 771 770 771 772
1171 | IDX10 648 778 772 693 694 695 693 695 696 604
1172 | IDX10 605 597 595 600 601 602 603 599 598 605
1173 | IDX10 604 606 607 608 609 610 611 715 716 608
1174 | IDX10 719 720 608 609 721 722 723 716 724 725
1175 | IDX10 717 726 676 677 678 676 678 680 680 682
1176 | IDX10 676 760 775 776 781 775 782 612 613 607
1177 | IDX10 612 607 614 612 614 610 612 610 615 616
1178 | IDX10 617 618 616 618 619 622 623 624 625 623
1179 | IDX10 626 627 623 628 645 646 647 657 646 653
1180 | IDX10 628 623 629 616 619 620 616 620 621 630
1181 | IDX10 631 628 628 632 633 740 741 742 755 748
1182 | IDX10 756 727 728 724 579 580 581 582 583 584
1183 | IDX10 579 581 585 586 582 584 580 587 581 582
1184 | IDX10 588 583 589 590 591 561 562 563 651 652
1185 | IDX10 653 725 729 730 575 576 577 575 577 578
1186 | IDX10 540 545 546 540 541 542 564 565 566 571
1187 | IDX10 572 573 571 573 574 528 549 550 535 534
1188 | IDX10 552 555 529 556 555 559 560 537 538 539
1189 | IDX10 543 544 539 525 526 527 513 514 515 513
1190 | IDX10 515 516 528 529 530 485 486 487 485 487
1191 | IDX10 488 279 280 281 279 281 275 198 199 200
1192 | IDX10 198 200 201 212 213 214 212 214 215 216
1193 | IDX10 217 218 216 218 219 202 203 204 202 204
1194 | IDX10 205 220 221 222 220 222 223 224 225 226
1195 | IDX10 224 226 227 220 270 271 220 271 272 224
1196 | IDX10 273 274 224 274 275 206 207 208 206 208
1197 | IDX10 201 209 203 210 209 210 211 242 243 244
1198 | IDX10 245 246 247 242 248 249 250 251 247 252
1199 | IDX10 253 249 250 254 255 181 182 116 181 116
1200 | IDX10 183 188 189 190 188 190 191 196 197 194
1201 | IDX10 196 194 193 178 179 112 178 112 180 184
1202 | IDX10 185 186 184 186 187 192 193 194 192 194
1203 | IDX10 195 282 283 284 282 284 285 286 287 288
1204 | IDX10 286 288 289 293 189 294 293 294 295 290
1205 | IDX10 291 292 290 292 187 276 270 277 276 277
1206 | IDX10 278 175 146 176 175 176 177 256 257 258
1207 | IDX10 172 173 174 172 174 144 169 157 170 169
1208 | IDX10 170 171 166 167 168 166 168 155 160 161
1209 | IDX10 162 160 162 144 156 157 158 156 158 159
1210 | IDX10 163 146 164 163 164 165 151 115 150 151
1211 | IDX10 150 149 148 149 150 148 150 113 142 137
1212 | IDX10 143 142 143 144 152 153 154 152 154 155
1213 | IDX10 34 133 134 34 134 135 139 27 140 139
1214 | IDX10 140 141 145 146 147 145 147 141 26 127
1215 | IDX10 128 26 128 129 22 124 125 22 125 126
1216 | IDX10 30 130 131 30 131 132 114 115 116 114
1217 | IDX10 116 117 121 122 123 121 123 117 110 111
1218 | IDX10 112 110 112 113 118 111 119 118 119 120
1219 | IDX10 104 103 102 104 102 105 97 91 98 97
1220 | IDX10 98 99 86 87 88 86 88 89 136 137
1221 | IDX10 138 136 138 25 94 95 96 94 96 89
1222 | IDX10 78 79 80 78 80 81 74 75 76 74
1223 | IDX10 76 77 82 83 84 82 84 85 90 91
1224 | IDX10 92 90 92 93 66 67 68 66 68 69
1225 | IDX10 62 63 64 62 64 65 100 101 102 100
1226 | IDX10 102 103 56 57 58 56 58 51 70 71
1227 | IDX10 72 70 72 73 52 53 54 52 54 55
1228 | IDX10 59 53 60 59 60 61 48 49 50 48
1229 | IDX10 50 51 106 49 107 106 107 108 106 108
1230 | IDX10 109 106 109 55 44 1 45 44 45 46
1231 | IDX10 44 46 47 44 47 7 41 35 42 41
1232 | IDX10 42 43 38 39 40 38 40 33 34 35
1233 | IDX10 36 34 36 37 30 31 32 30 32 33
1234 | IDX10 531 532 533 489 490 491 489 491 492 521
1235 | IDX10 522 523 521 523 524 445 441 449 534 535
1236 | IDX10 536 564 569 570 505 506 507 505 507 508
1237 | IDX10 450 451 452 450 452 453 450 454 455 450
1238 | IDX10 455 451 493 494 495 493 495 496 456 457
1239 | IDX10 458 456 458 453 547 548 527 551 533 532
1240 | IDX10 553 526 554 557 558 554 459 454 460 459
1241 | IDX10 460 461 462 463 464 465 463 462 466 467
1242 | IDX10 464 465 467 468 466 469 470 509 510 511
1243 | IDX10 509 511 512 567 568 563 26 27 28 26
1244 | IDX10 28 29 22 23 24 22 24 25 18 19
1245 | IDX10 20 18 20 21 228 229 230 231 232 233
1246 | IDX10 234 229 235 236 232 237 238 239 235 236
1247 | IDX10 240 241 259 260 261 256 262 263 264 265
1248 | IDX10 261 266 267 263 264 268 269 471 472 468
1249 | IDX10 497 498 499 497 499 500 296 297 298 296
1250 | IDX10 298 299 14 15 16 14 16 17 300 301
1251 | IDX10 302 300 302 303 11 5 12 11 12 13
1252 | IDX10 8 9 10 8 10 3 4 5 6 4
1253 | IDX10 6 7 304 305 306 304 306 307 312 313
1254 | IDX10 314 312 314 315 316 317 314 316 314 313
1255 | IDX10 0 1 2 0 2 3 350 351 352 353
1256 | IDX10 354 355 356 357 358 359 360 361 362 363
1257 | IDX10 364 364 365 366 367 351 364 364 354 367
1258 | IDX10 356 374 375 379 365 373 380 363 352 382
1259 | IDX10 383 352 386 374 387 388 391 373 392 393
1260 | IDX10 394 392 394 395 398 399 400 398 400 395
1261 | IDX10 408 409 410 408 410 411 416 417 418 416
1262 | IDX10 418 419 424 425 426 424 426 427 432 433
1263 | IDX10 434 432 434 435 439 440 441 439 441 435
1264 | IDX10 445 446 447 318 319 320 318 320 321 368
1265 | IDX10 369 370 368 390 387 412 413 414 412 414
1266 | IDX10 415 322 323 324 322 324 325 326 327 328
1267 | IDX10 326 328 329 428 429 430 428 430 431 330
1268 | IDX10 331 332 330 332 333 371 372 373 376 377
1269 | IDX10 361 368 363 378 436 429 437 436 437 438
1270 | IDX10 442 443 444 334 335 336 334 336 337 338
1271 | IDX10 339 340 338 340 341 353 365 381 353 384
1272 | IDX10 385 392 396 397 392 397 393 401 396 402
1273 | IDX10 401 402 403 404 405 406 404 406 407 342
1274 | IDX10 343 344 342 344 345 420 421 422 420 422
1275 | IDX10 423 346 347 348 346 348 349 388 377 389
1276 | IDX10 473 469 474 475 472 476 466 477 478 592
1277 | IDX10 593 594 479 480 468 747 748 658 747 765
1278 | IDX10 766 1019 1020 1021 1019 1021 1022 517 518 519
1279 | IDX10 517 519 520 448 437 444 939 940 941 939
1280 | IDX10 941 942 466 481 482 483 484 468 308 309
1281 | IDX10 310 308 310 311 1071 1072 1073 1071 1073 1074
1282 | IDX10 1079 1080 1081 1079 1081 1082 501 502 503 501
1283 | IDX10 503 504 1023 1024 1025 1023 1025 1026 1031 1032
1284 | IDX10 1033 1031 1033 1034 1047 1048 1049 1047 1049 1050
1285 | IDX 935
1286 | IDX 936
1287 | IDX 937
1288 | IDX 935
1289 | IDX 937
1290 | IDX 938
1291 |
1292 | TRIS 0 1776
1293 | LIGHT_NAMED ship_nav_left -3.2000 3.3000 5.5000
1294 | LIGHT_NAMED ship_nav_right 3.2000 3.3000 5.5000
1295 | LIGHT_NAMED ship_nav_tail 0.0000 3.4000 18.2000
1296 | LIGHT_NAMED ship_mast_powered 0.0000 4.6000 4.0000
1297 |
--------------------------------------------------------------------------------
/SeaTraffic/Damen_2010.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_2010.blend
--------------------------------------------------------------------------------
/SeaTraffic/Damen_2010.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_2010.dds
--------------------------------------------------------------------------------
/SeaTraffic/Damen_2010.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_2010.xcf
--------------------------------------------------------------------------------
/SeaTraffic/Damen_2010_LIT.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_2010_LIT.dds
--------------------------------------------------------------------------------
/SeaTraffic/Damen_4212.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_4212.blend
--------------------------------------------------------------------------------
/SeaTraffic/Damen_4212.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_4212.dds
--------------------------------------------------------------------------------
/SeaTraffic/Damen_4212.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_4212.xcf
--------------------------------------------------------------------------------
/SeaTraffic/Damen_4212_LIT.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Damen_4212_LIT.dds
--------------------------------------------------------------------------------
/SeaTraffic/Osm_linkage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Osm_linkage.png
--------------------------------------------------------------------------------
/SeaTraffic/River_crossing.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/River_crossing.blend
--------------------------------------------------------------------------------
/SeaTraffic/River_crossing.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/River_crossing.dds
--------------------------------------------------------------------------------
/SeaTraffic/River_crossing_LIT.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/River_crossing_LIT.dds
--------------------------------------------------------------------------------
/SeaTraffic/Tanker.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Tanker.dds
--------------------------------------------------------------------------------
/SeaTraffic/Tanker.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Tanker.xcf
--------------------------------------------------------------------------------
/SeaTraffic/Tanker_LIT.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/Tanker_LIT.dds
--------------------------------------------------------------------------------
/SeaTraffic/buildroutes.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python
2 | # -*- coding: utf-8 -*-
3 | #
4 | # Build maritime routes, categorised by traffic type = [ leisure | tourist | cruise | ped/sml | ped/med | veh/sml | veh/med | veh/big | cargo | tanker | mil ]
5 | #
6 | # Top-level documentation: http://wiki.openstreetmap.org/wiki/Marine_navigation and http://wiki.openstreetmap.org/wiki/Marine_Mapping
7 | #
8 | # Primary way tags for ped/* and veh/* :
9 | # route = ferry
10 | # name =
11 | # ref =
12 | # motor_vehicle = yes|no
13 | # hgv = yes|no
14 | # motorcar = yes|no
15 | # foot = yes|no
16 | # See http://wiki.openstreetmap.org/wiki/Tag:route=ferry
17 | #
18 | # Primary way tags for tourist :
19 | # route = ferry
20 | # name =
21 | # ref =
22 | # ferry = tourist
23 | # See http://wiki.openstreetmap.org/wiki/Proposed_features/ferry
24 | #
25 | # Primary way tags for cruise :
26 | # route = cruise
27 | # name =
28 | # ref =
29 | # or:
30 | # route = ferry
31 | # ferry = cruise
32 | # name =
33 | # ref =
34 | # See http://wiki.openstreetmap.org/wiki/Proposed_features/ferry
35 | #
36 | # Primary tags for leisure :
37 | # not implemented - perhaps look for node|area with tag leisure=marina and create routes around it
38 | # See http://wiki.openstreetmap.org/wiki/Tag:leisure=marina
39 | #
40 | # Primary tags for cargo | tanker :
41 | # not implemented - perhaps look for way with tag seamark:type=separation_lane (only ~100 hits in OSM database)
42 | # See http://wiki.openstreetmap.org/wiki/OpenSeaMap/Seamark_Tag_Values
43 | # or perhaps look for way with tag mooring=commercial and create routes around it (only ~50 hits in OSM database)
44 | # See http://wiki.openstreetmap.org/wiki/Key:mooring
45 | # or perhaps look for way with tag man_made=pier and create routes around it
46 | # See http://wiki.openstreetmap.org/wiki/Tag:man_made=pier
47 | #
48 | # Primary tags for mil :
49 | # not implemented - perhaps look for node|area with tag military=naval_base and create routes around it
50 | # See http://wiki.openstreetmap.org/wiki/Tag:military=naval_base
51 | #
52 | #
53 |
54 |
55 | import codecs
56 | from operator import attrgetter
57 | from math import acos, cos, sin, radians
58 | from sys import exit
59 | from urllib2 import urlopen
60 | from xml.parsers.expat import ParserCreate
61 |
62 | # http://wiki.openstreetmap.org/wiki/Overpass_API
63 | server='http://overpass-api.de/api/interpreter'
64 |
65 | timeout=1800 # server and client timout [s]
66 |
67 | radius=6378145 # from sim/physics/earth_radius_m
68 |
69 |
70 | class Node:
71 |
72 | def __init__(self, id, lat,lon):
73 | self.id=id # just for debugging
74 | self.lat=lat
75 | self.lon=lon
76 | self.ways=[] # Ways that use this node
77 |
78 | def __repr__(self):
79 | return "%11.7f %12.7f" % (self.lat, self.lon)
80 |
81 | def distanceto(self, to):
82 | a1=radians(self.lat)
83 | b1=radians(self.lon)
84 | a2=radians(to.lat)
85 | b2=radians(to.lon)
86 | if a1==a2 and b1==b2: return 0
87 | x=(cos(a1)*cos(b1)*cos(a2)*cos(b2) + cos(a1)*sin(b1)*cos(a2)*sin(b2) + sin(a1)*sin(a2))
88 | if x>=1: return 0
89 | return radius * acos(x)
90 |
91 |
92 | class Way:
93 |
94 | DEFAULTNAME='Unnamed'
95 | def __init__(self, id):
96 | self.id=id # just for debugging
97 | self.name=Way.DEFAULTNAME
98 | self.nodes=[]
99 | self.length=0
100 | self.cruise=None
101 | self.hgv=None
102 | self.car=None
103 | self.vehicle=None
104 | self.foot=None
105 | self.tourist=None
106 |
107 | def __repr__(self):
108 | return "%-10d %s %s" % (self.id, self.name, self.nodes)
109 |
110 | def removefrom(self, ways):
111 | # Remove this way from ways, tidying up nodes
112 | for i in range(len(self.nodes)):
113 | node=self.nodes[i]
114 | if self in node.ways: # might be already removed if this way is a loop
115 | node.ways.remove(self)
116 | ways.remove(self)
117 |
118 | for i in range(1, len(self.nodes)-1):
119 | node=self.nodes[i]
120 | while node.ways:
121 | # way forks - remove the fork too
122 | node.ways[0].removefrom(ways)
123 |
124 |
125 | class Parser:
126 |
127 | def __init__(self):
128 | self.parser=ParserCreate()
129 | self.parser.StartElementHandler = self.startelement
130 | self.parser.EndElementHandler = self.endelement
131 | self.currentway=None
132 |
133 | def parse(self, data):
134 | self.parser.Parse(data)
135 |
136 | def OSMbool(self, value):
137 | # http://wiki.openstreetmap.org/wiki/Key:access
138 | if value in ['yes', 'permissive', 'designated', 'private', 'official']:
139 | return True
140 | elif value in ['no', 'delivery']:
141 | return False
142 | elif value in ['unknown']:
143 | return None # http://thedailywtf.com/Articles/What_Is_Truth_0x3f_.aspx
144 | else:
145 | try:
146 | int(value) # e.g.
147 | return True
148 | except:
149 | assert False, value # fail on random crud so we can decide what to do with it
150 | return False
151 |
152 | def startelement(self, name, attributes):
153 | if name=='node':
154 | nodes[int(attributes['id'])]=Node(int(attributes['id']), float(attributes['lat']), float(attributes['lon']))
155 | elif name=='way':
156 | self.currentway=Way(int(attributes['id']))
157 | ways.append(self.currentway)
158 | elif name=='meta':
159 | global datadate
160 | datadate=attributes['osm_base']
161 | elif not self.currentway:
162 | pass # ignore tags etc unless we're in the middle of a Way definition
163 | elif name=='nd':
164 | node=nodes[int(attributes['ref'])] # assumes referenced node has already been parsed
165 | node.ways.append(self.currentway)
166 | self.currentway.nodes.append(node)
167 | elif name=='tag':
168 | tag=attributes['k']
169 | value=attributes['v']
170 | if tag==('name'):
171 | self.currentway.name=value.strip(' "\'-')
172 | elif tag.startswith('name'): # Pick any language-specific name if no generic name
173 | if self.currentway.name==Way.DEFAULTNAME:
174 | self.currentway.name=value.strip(' "\'-')
175 | elif tag=='ref':
176 | self.currentway.name+=(" #"+value) # relies on tags being alphabetically sorted so that ref comes after name
177 | elif tag=='hgv':
178 | self.currentway.hgv=self.OSMbool(value)
179 | elif tag=='motorcar':
180 | self.currentway.car=self.OSMbool(value)
181 | elif tag=='motor_vehicle':
182 | self.currentway.vehicle=self.OSMbool(value)
183 | elif tag=='foot':
184 | self.currentway.foot=self.OSMbool(value)
185 | elif tag=='ferry':
186 | # http://wiki.openstreetmap.org/wiki/Proposed_features/ferry
187 | if value.startswith('crui'):
188 | self.currentway.cruise=True
189 | elif value=='tourist':
190 | self.currentway.tourist=True
191 | elif value in ['trunk', 'primary', 'secondary']:
192 | if self.currentway.hgv is not False: self.currentway.hgv=True
193 | elif value in ['tertiary']:
194 | if self.currentway.hgv is not True: self.currentway.hgv=False
195 | if self.currentway.car is not False: self.currentway.car=True
196 | elif value in ['local','express_boat']:
197 | if self.currentway.vehicle is not True: self.currentway.vehicle=False
198 | if self.currentway.foot is not False: self.currentway.foot=True
199 | elif tag=='route':
200 | if value=='cruise':
201 | self.currentway.cruise=True
202 | assert value in ['ferry','cruise'], self.currentway.id
203 |
204 | def endelement(self, name):
205 | if name=='way':
206 | self.currentway.name=self.currentway.name[:128] # Completely arbitrary limit. (Note may be larger after utf-8 encoding).
207 | for i in range(0, len(self.currentway.nodes)-1):
208 | self.currentway.length+=self.currentway.nodes[i].distanceto(self.currentway.nodes[i+1])
209 | self.currentway=None
210 |
211 |
212 | # main #################################################################
213 |
214 | if True:
215 | bbox=''
216 | #bbox='(50.5,1,51.5,2)' # limit to Dover/Calais area for testing
217 | print "Querying %s - this will take a while" % server
218 | h=urlopen('%s?data=[timeout:%d];(way[route~"^ferry$|^cruise$"][bridge!~"."]%s;>;);out;' % (server, timeout, bbox), timeout=timeout)
219 | print "Downloading results"
220 | data=h.read()
221 | h.close()
222 | h=open('routes.osm', 'w') # dump XML for analysis
223 | h.write(data)
224 | h.close()
225 | else:
226 | # use an existing file instead, obtained with: wget -S -T0 -O routes.osm 'http://overpass-api.de/api/interpreter?data=[timeout:1800];(way[route~"^ferry$|^cruise$"][bridge!~"."];>;);out;'
227 | h=open('routes.osm')
228 | data=h.read()
229 | h.close()
230 |
231 | datadate=None
232 | nodes={} # Node by id
233 | ways=[] # List so sort is stable
234 |
235 | parser=Parser()
236 | parser.parse(data)
237 | if not ways:
238 | print "Query failed!"
239 | exit(1)
240 |
241 | # Dump raw data for analysis - open in Excel with Data->Import or Data->Get External Data
242 | h=codecs.open('routes.csv', 'w', 'utf-8')
243 | h.write('way,name,length,vehicle,hgv,car,foot,cruise,tourist\n')
244 | for way in ways:
245 | h.write('%d,"%s",%d,%s,%s,%s,%s,%s,%s\n' % ((way.id, way.name.replace('"', '""'), way.length) + tuple(['' if x is None else x for x in way.vehicle, way.hgv, way.car, way.foot, way.cruise, way.tourist])))
246 | h.close()
247 |
248 | # arbitrary constants
249 | LENGTH_CUTOFF=50 # want to allow eg Woolwich ferry and Glastonbury-Rocky Hill
250 | LENGTH_PED_MED=2000 # assume foot-only access over this length is a medium-sized boat
251 | LENGTH_VEH_MED=2000 # assume coastal or inland (e.g. François Lake Ferry=3km)
252 | LENGTH_VEH_BIG=20000 # assume seagoing over 20km
253 | LENGTH_UNK_PED=500 # assume unspecified is foot-only under this length
254 |
255 |
256 | # Process ##############################################################
257 |
258 | # look for ways that share nodes
259 | # this code assumes that we have no extraneous nodes - i.e. nodes that link to a way not in 'ways' - so filter out any
260 | # unwanted ways in the original OSM query
261 | nways=len(ways)
262 | nmerged=nforked=nmess=0
263 | for node in nodes.itervalues():
264 | if len(node.ways)<=1: continue # common case
265 | # for simplicity we just examine the longest way at each node
266 | node.ways.sort(key=attrgetter('length'), reverse=True)
267 | way0=node.ways[0]
268 |
269 | # check for loop e.g. "whale watching" in Guerrero Negro, Mexico
270 | while len(node.ways)>1:
271 | if way0==node.ways[1]:
272 | #print node, way0.name, 'loop'
273 | if not way0.cruise and not way0.hgv and not way0.car:
274 | way0.tourist=True # Assume loops are tourist boats
275 | node.ways.pop(0)
276 | else:
277 | break
278 |
279 | # check for single logical route split into multiple routes e.g. "14 / Actv" in Venice
280 | i=1
281 | while i=LENGTH_CUTOFF, ways), key=attrgetter('name'))
344 |
345 | print("%d OSM Ways, of which %d were merged, %d rejected forks, %d too small.\nResulting in %d routes, %d of which are a mess." % (nways, nmerged, nforked, len(ways)-len(sortedways), len(sortedways), nmess))
346 |
347 |
348 | h=codecs.open('routes.txt', 'w', 'utf-8')
349 | h.write(u'\uFEFF# OSM export %s\n# Map data \u00A9 OpenStreetMap contributors - http://www.openstreetmap.org/, licensed under ODbL - http://opendatacommons.org/licenses/odbl/\n\n' % datadate) # start with BOM to signify this is utf-8
350 | for way in sortedways:
351 |
352 | if way.cruise:
353 | ferrytype='cruise'
354 | elif way.tourist:
355 | ferrytype='tourist'
356 | elif way.vehicle is False or (way.foot and not (way.hgv or way.car)) or (way.car is False and not way.hgv):
357 | if way.length>=LENGTH_PED_MED:
358 | ferrytype='ped/med'
359 | else:
360 | ferrytype='ped/sml'
361 | elif way.hgv: # HGV explicitly allowed - don't use small ferry
362 | if way.length>=LENGTH_VEH_BIG:
363 | ferrytype='veh/big'
364 | else:
365 | ferrytype='veh/med'
366 | elif way.hgv is False or (way.car and not way.hgv): # HGV explicitly or implicitly denied - don't use big ferry
367 | if way.length>=LENGTH_VEH_MED:
368 | ferrytype='veh/med'
369 | else:
370 | ferrytype='veh/sml'
371 | elif way.vehicle or way.foot is False:
372 | if way.length>=LENGTH_VEH_BIG:
373 | ferrytype='veh/big'
374 | elif way.length>=LENGTH_VEH_MED:
375 | ferrytype='veh/med'
376 | else:
377 | ferrytype='veh/sml'
378 | else:
379 | # No access specified - roughly 50% of cases
380 | assert way.vehicle is None and way.hgv is None and way.car is None and way.foot is None, way.id
381 | if way.length>=LENGTH_VEH_BIG:
382 | ferrytype='veh/big'
383 | elif way.length>=LENGTH_VEH_MED:
384 | ferrytype='veh/med'
385 | elif way.length>=LENGTH_UNK_PED:
386 | ferrytype='veh/sml'
387 | else:
388 | ferrytype='ped/sml'
389 |
390 | h.write('%s\t%s\n' % (ferrytype, way.name))
391 | for node in way.nodes:
392 | h.write('%s\n' % node)
393 | h.write('\n')
394 | h.close()
395 |
396 |
--------------------------------------------------------------------------------
/SeaTraffic/enhancedby_opensceneryx_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/enhancedby_opensceneryx_logo.png
--------------------------------------------------------------------------------
/SeaTraffic/wake.dds:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/wake.dds
--------------------------------------------------------------------------------
/SeaTraffic/wake.xcf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/wake.xcf
--------------------------------------------------------------------------------
/SeaTraffic/wake_big.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/wake_big.blend
--------------------------------------------------------------------------------
/SeaTraffic/wake_big.obj:
--------------------------------------------------------------------------------
1 | I
2 | 800
3 | OBJ
4 |
5 | TEXTURE wake.dds
6 | TEXTURE_LIT wake_LIT.dds
7 | POINT_COUNTS 12 0 0 18
8 |
9 | VT 40.0000 0.0000 460.0000 0.000 1.000 -0.000 0.0 0.0156
10 | VT -40.0000 0.0000 460.0000 0.000 1.000 -0.000 0.5 0.0156
11 | VT -40.0000 0.0000 140.0000 0.000 1.000 -0.000 0.5 1.0
12 | VT 40.0000 0.0000 140.0000 0.000 1.000 -0.000 0.0 1.0
13 | VT 32.3301 0.1000 52.1410 0.000 1.000 -0.000 1.0 0.0
14 | VT 25.4019 0.1000 56.1410 0.000 1.000 -0.000 0.5 0.0
15 | VT 5.4019 0.1000 21.5000 0.000 1.000 -0.000 0.5 4.0
16 | VT 12.3301 0.1000 17.5000 0.000 1.000 -0.000 1.0 4.0
17 | VT -12.3301 0.1000 17.5000 0.000 1.000 -0.000 1.0 4.0
18 | VT -5.4019 0.1000 21.5000 0.000 1.000 -0.000 0.5 4.0
19 | VT -25.4019 0.1000 56.1410 0.000 1.000 -0.000 0.5 0.0
20 | VT -32.3301 0.1000 52.1410 0.000 1.000 -0.000 1.0 0.0
21 |
22 | IDX10 0 1 2 0 2 3 4 5 6 4
23 | IDX 6
24 | IDX 7
25 | IDX 8
26 | IDX 9
27 | IDX 10
28 | IDX 8
29 | IDX 10
30 | IDX 11
31 |
32 | ####_alpha
33 | TRIS 0 18
34 |
35 | # Built with Blender 2.49. Exported with XPlane2Blender 3.11.
36 |
--------------------------------------------------------------------------------
/SeaTraffic/wake_med.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/wake_med.blend
--------------------------------------------------------------------------------
/SeaTraffic/wake_med.obj:
--------------------------------------------------------------------------------
1 | I
2 | 800
3 | OBJ
4 |
5 | TEXTURE wake.dds
6 | TEXTURE_LIT wake_LIT.dds
7 | POINT_COUNTS 12 0 0 18
8 |
9 | VT 18.0000 0.1000 120.0000 0.000 1.000 -0.000 0.0 0.0156
10 | VT -18.0000 0.1000 120.0000 0.000 1.000 -0.000 0.5 0.0156
11 | VT -18.0000 0.1000 36.0000 0.000 1.000 -0.000 0.5 1.0
12 | VT 18.0000 0.1000 36.0000 0.000 1.000 -0.000 0.0 1.0
13 | VT 16.3301 0.1000 22.8205 0.000 1.000 -0.000 1.0 0.0
14 | VT 12.0000 0.1000 25.3205 0.000 1.000 -0.000 0.5 0.0
15 | VT 2.0000 0.1000 8.0000 0.000 1.000 -0.000 0.5 2.0
16 | VT 6.3301 0.1000 5.5000 0.000 1.000 -0.000 1.0 2.0
17 | VT -6.3301 0.1000 5.5000 0.000 1.000 -0.000 1.0 2.0
18 | VT -2.0000 0.1000 8.0000 0.000 1.000 -0.000 0.5 2.0
19 | VT -12.0000 0.1000 25.3205 0.000 1.000 -0.000 0.5 0.0
20 | VT -16.3301 0.1000 22.8205 0.000 1.000 -0.000 1.0 0.0
21 |
22 | IDX10 0 1 2 0 2 3 4 5 6 4
23 | IDX 6
24 | IDX 7
25 | IDX 8
26 | IDX 9
27 | IDX 10
28 | IDX 8
29 | IDX 10
30 | IDX 11
31 |
32 | ####_alpha
33 | TRIS 0 18
34 |
35 | # Built with Blender 2.49. Exported with XPlane2Blender 3.11.
36 |
--------------------------------------------------------------------------------
/SeaTraffic/wake_sml.blend:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Marginal/SeaTraffic/d1639ea06eed15a3f93d754af1948ca6596ffa9d/SeaTraffic/wake_sml.blend
--------------------------------------------------------------------------------
/SeaTraffic/wake_sml.obj:
--------------------------------------------------------------------------------
1 | I
2 | 800
3 | OBJ
4 |
5 | TEXTURE wake.dds
6 | POINT_COUNTS 12 0 0 18
7 |
8 | VT 9.0000 0.0500 60.0000 0.000 1.000 -0.000 0.0 0.0156
9 | VT -9.0000 0.0500 60.0000 0.000 1.000 -0.000 0.5 0.0156
10 | VT -9.0000 0.0500 18.0000 0.000 1.000 -0.000 0.5 1.0
11 | VT 9.0000 0.0500 18.0000 0.000 1.000 -0.000 0.0 1.0
12 | VT 8.1651 0.0500 10.4103 0.000 1.000 -0.000 1.0 0.0
13 | VT 6.0000 0.0500 11.6603 0.000 1.000 -0.000 0.5 0.0
14 | VT 1.0000 0.0500 3.0000 0.000 1.000 -0.000 0.5 2.0
15 | VT 3.1651 0.0500 1.7500 0.000 1.000 -0.000 1.0 2.0
16 | VT -3.1651 0.0500 1.7500 0.000 1.000 -0.000 1.0 2.0
17 | VT -1.0000 0.0500 3.0000 0.000 1.000 -0.000 0.5 2.0
18 | VT -6.0000 0.0500 11.6603 0.000 1.000 -0.000 0.5 0.0
19 | VT -8.1651 0.0500 10.4103 0.000 1.000 -0.000 1.0 0.0
20 |
21 | IDX10 0 1 2 0 2 3 4 5 6 4
22 | IDX 6
23 | IDX 7
24 | IDX 8
25 | IDX 9
26 | IDX 10
27 | IDX 8
28 | IDX 10
29 | IDX 11
30 |
31 | TRIS 0 18
32 |
--------------------------------------------------------------------------------
/src/.gdbinit:
--------------------------------------------------------------------------------
1 | file "~/Desktop/X-Plane 10/X-Plane.app/Contents/MacOS/X-Plane"
2 | set args --no_crash_reporter
3 |
--------------------------------------------------------------------------------
/src/.gitignore:
--------------------------------------------------------------------------------
1 | *.bak
2 | *.d
3 | *.o
4 | *.obj
5 | *.pdb
6 | *.ncb
7 | *.xpl
8 |
--------------------------------------------------------------------------------
/src/.lldbinit:
--------------------------------------------------------------------------------
1 | target create "~/Desktop/X-Plane 10/X-Plane.app/Contents/MacOS/X-Plane"
2 | settings set target.run-args -- --no_crash_reporter
3 |
--------------------------------------------------------------------------------
/src/Makefile.lin:
--------------------------------------------------------------------------------
1 | # -*-Makefile-*-
2 | # Setup for building on Ubuntu x86_64 with multilib support, plus:
3 | # sudo ln -s mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
4 | # sudo ln -s libGLU.so.1 /usr/lib/i386-linux-gnu/libGLU.so
5 |
6 | include ../version.mak
7 |
8 | XPSDK=../../XPSDK213
9 |
10 | CC=gcc
11 | #BUILD=-g -DDEBUG
12 | #LDFLAGS=
13 | BUILD=-O3 -s -DNDEBUG
14 | LDFLAGS=-Wl,-x
15 | DEFINES=-DAPL=0 -DIBM=0 -DLIN=1 -DVERSION=$(VERSION)
16 | INC=-I$(XPSDK)/CHeaders/XPLM -I$(XPSDK)/CHeaders/Widgets
17 | CFLAGS=-march=core2 -ffast-math -pipe -Wall -Wdouble-promotion -Winline -Wno-missing-braces -static-libgcc -shared -fPIC -fvisibility=hidden -fshort-enums $(BUILD) $(DEFINES) $(INC)
18 |
19 | VPATH=
20 | SRC=models.c routes.c seatraffic.c
21 | LIBS=-lGLU -lGL
22 | TARGETDIR=../$(PROJECT)
23 |
24 | ############################################################################
25 |
26 | BUILD_32=$(shell uname)32
27 | OBJS_32=$(addprefix $(BUILD_32)/, $(addsuffix .o, $(basename $(notdir $(SRC)))))
28 | TARGET_32=$(TARGETDIR)/lin.xpl
29 | BUILD_64=$(shell uname)64
30 | OBJS_64=$(addprefix $(BUILD_64)/, $(addsuffix .o, $(basename $(notdir $(SRC)))))
31 | TARGET_64=$(TARGETDIR)/64/lin.xpl
32 | TARGET=$(TARGET_32) $(TARGET_64)
33 |
34 | RM=rm -f
35 | CP=cp -p
36 | MD=mkdir -p
37 |
38 | .PHONY: all clean install
39 |
40 | all: $(TARGET_32) $(TARGET_64)
41 |
42 | install: $(TARGET_32) $(TARGET_64)
43 | $(MD) /media/jonathan/Desktop/X-Plane\ 9/Resources/plugins/$(PROJECT)
44 | $(CP) $(TARGET_32) /media/jonathan/Desktop/X-Plane\ 9/Resources/plugins/$(PROJECT)/
45 | $(MD) /media/jonathan/Desktop/X-Plane\ 10/Resources/plugins/$(PROJECT)/
46 | $(CP) $(TARGET_32) /media/jonathan/Desktop/X-Plane\ 10/Resources/plugins/$(PROJECT)/
47 | $(MD) /media/jonathan/Desktop/X-Plane\ 10/Resources/plugins/$(PROJECT)/64
48 | $(CP) $(TARGET_64) /media/jonathan/Desktop/X-Plane\ 10/Resources/plugins/$(PROJECT)/64/
49 |
50 | $(TARGET_32): $(OBJS_32) | $(TARGETDIR)
51 | $(CC) $(CFLAGS) $(LDFLAGS) -m32 -o $@ $+ $(LIBS)
52 |
53 | $(TARGET_64): $(OBJS_64) | $(TARGETDIR)/64
54 | $(CC) $(CFLAGS) $(LDFLAGS) -m64 -o $@ $+ $(LIBS)
55 |
56 | $(OBJS_32): | $(BUILD_32)
57 |
58 | $(OBJS_64): | $(BUILD_64)
59 |
60 | $(BUILD_32):
61 | $(MD) $(BUILD_32)
62 |
63 | $(BUILD_64):
64 | $(MD) $(BUILD_64)
65 |
66 | $(BUILD_32)/%.o: %.c
67 | $(CC) $(CFLAGS) -m32 -c -o $@ $<
68 | @$(CC) $(CFLAGS) -m32 -MM $< | sed -e 's|$*.o|$@|' > $(@:.o=.d)
69 |
70 | $(BUILD_64)/%.o: %.c
71 | $(CC) $(CFLAGS) -m64 -c -o $@ $<
72 | @$(CC) $(CFLAGS) -m64 -MM $< | sed -e 's|$*.o|$@|' > $(@:.o=.d)
73 |
74 | $(TARGETDIR):
75 | $(MD) $(TARGETDIR)
76 |
77 | $(TARGETDIR)/64:
78 | $(MD) $(TARGETDIR)/64
79 |
80 | clean:
81 | $(RM) *~ *.bak $(OBJS_32) $(OBJS_32:.o=.d) $(OBJS_64) $(OBJS_64:.o=.d) $(TARGET_32) $(TARGET_64)
82 |
--------------------------------------------------------------------------------
/src/Makefile.mac:
--------------------------------------------------------------------------------
1 | # -*-Makefile-*-
2 |
3 | include ../version.mak
4 |
5 | XPSDK=../../XPSDK213
6 |
7 | CC=gcc
8 | #BUILD=-g -DDEBUG
9 | #LDFLAGS=
10 | BUILD=-O3 -DNDEBUG
11 | LDFLAGS=-Wl,-x
12 | DEFINES=-DAPL=1 -DIBM=0 -DLIN=0 -DVERSION=$(VERSION)
13 | INC=-F$(XPSDK)/Libraries/Mac -I$(XPSDK)/CHeaders/XPLM -I$(XPSDK)/CHeaders/Widgets
14 | CFLAGS=-arch ppc -arch i586 -arch x86_64 -ffast-math -pipe -Wall -Winline -Wno-missing-braces -bundle -fvisibility=hidden -mmacosx-version-min=10.4 $(BUILD) $(DEFINES) $(INC)
15 |
16 | VPATH=
17 | SRC=models.c routes.c seatraffic.c
18 | LIBS=-framework XPLM -framework XPWidgets -framework OpenGL -framework CoreFoundation
19 | TARGETDIR=../$(PROJECT)
20 |
21 | ############################################################################
22 |
23 | BUILDDIR=$(shell uname)
24 | OBJS=$(addprefix $(BUILDDIR)/, $(addsuffix .o, $(basename $(notdir $(SRC)))))
25 | TARGET=../$(PROJECT)/mac.xpl
26 |
27 | RM=rm -f
28 | CP=cp -p
29 | MD=mkdir -p
30 |
31 | .PHONY: all clean install
32 |
33 | all: $(TARGET)
34 |
35 | install: $(TARGET)
36 | $(MD) ~/Desktop/X-Plane\ 9/Resources/plugins/$(PROJECT)
37 | $(CP) $(TARGET) ~/Desktop/X-Plane\ 9/Resources/plugins/$(PROJECT)/
38 | $(MD) ~/Desktop/X-Plane\ 10/Resources/plugins/$(PROJECT)
39 | $(CP) $(TARGET) ~/Desktop/X-Plane\ 10/Resources/plugins/$(PROJECT)/
40 |
41 | $(TARGET): $(OBJS)| $(TARGETDIR)
42 | $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $+ $(LIBS)
43 |
44 | $(OBJS): | $(BUILDDIR)
45 |
46 | $(BUILDDIR):
47 | $(MD) $(BUILDDIR)
48 |
49 | $(BUILDDIR)/%.o: %.c
50 | $(CC) $(CFLAGS) -c -o $@ $<
51 | @$(CC) $(BUILD) $(DEFINES) $(INC) -MM $< | sed -e 's|$*.o|$@|' > $(@:.o=.d)
52 |
53 | $(TARGETDIR):
54 | $(MD) $(TARGETDIR)
55 |
56 | clean:
57 | $(RM) *~ *.bak $(OBJS) $(OBJS:.o=.d) $(TARGET)
58 |
59 | # pull in dependency info
60 | -include $(OBJS:.o=.d)
61 |
--------------------------------------------------------------------------------
/src/Makefile.win:
--------------------------------------------------------------------------------
1 | # -*-Makefile-*- in NMAKE format
2 | # Makes 32bit & 64bit version for X-Plane 10+, plus 32bit version without SSE2 for X-Plane 9
3 |
4 | !include ..\version.mak
5 |
6 | XPSDK=..\..\XPSDK213
7 |
8 | CC=cl
9 | #BUILD=-ZI -DDEBUG
10 | BUILD=-O2 -DNDEBUG
11 | DEFINES=-DIBM=1 -DAPL=0 -DLIN=0 -DVERSION=$(VERSION)
12 | INC=-I$(XPSDK)\CHeaders\XPLM -I$(XPSDK)/CHeaders/Widgets
13 | CFLAGS=-nologo -fp:fast -LD $(BUILD) $(DEFINES) $(INC)
14 |
15 | SRC=models.c routes.c seatraffic.c
16 | TARGETDIR=..\$(PROJECT)
17 |
18 | # Work out which target we're set up for by looking for a program (ml64.exe) that only exists in the path for one target
19 | !if [ml64 >nul 2>&1] == 0
20 | CPU=x64
21 | ARCHXP=_64
22 | TARGET=$(TARGETDIR)\64\win.xpl
23 | !else
24 | CPU=x86
25 | ARCHXP=
26 | TARGET=$(TARGETDIR)\32\win.xpl $(TARGETDIR)\win.xpl
27 | !endif
28 |
29 | LIBS=$(XPSDK)\Libraries\Win\XPLM$(ARCHXP).lib $(XPSDK)\Libraries\Win\XPWidgets$(ARCHXP).lib GlU32.Lib OpenGL32.Lib
30 |
31 | RM=del /q
32 | CP=copy /y
33 | MD=mkdir
34 |
35 | all: $(TARGET)
36 |
37 | install: $(TARGET)
38 | !if "$(CPU)" == "x86"
39 | -$(MD) "X:\Desktop\X-Plane 9\Resources\plugins\$(PROJECT)\"
40 | $(CP) $(TARGETDIR)\win.xpl "X:\Desktop\X-Plane 9\Resources\plugins\$(PROJECT)\"
41 | -$(MD) "X:\Desktop\X-Plane 10\Resources\plugins\$(PROJECT)\32"
42 | $(CP) $(TARGETDIR)\32\win.xpl "X:\Desktop\X-Plane 10\Resources\plugins\$(PROJECT)\32\"
43 | !else
44 | -$(MD) "X:\Desktop\X-Plane 10\Resources\plugins\$(PROJECT)\64\"
45 | $(CP) $(TARGETDIR)\64\win.xpl "X:\Desktop\X-Plane 10\Resources\plugins\$(PROJECT)\64\"
46 | !endif
47 |
48 | $(TARGETDIR)\win.xpl: $(SRC)
49 | -@if not exist "$(TARGETDIR)" $(MD) "$(TARGETDIR)"
50 | $(CC) $(CFLAGS) -Fe$@ -Fd$* $(SRC) $(LIBS)
51 |
52 | $(TARGETDIR)\32\win.xpl: $(SRC)
53 | -@if not exist "$(TARGETDIR)\32" $(MD) "$(TARGETDIR)\32"
54 | $(CC) -arch:SSE2 $(CFLAGS) -Fe$@ -Fd$* $(SRC) $(LIBS)
55 |
56 | $(TARGETDIR)\64\win.xpl: $(SRC)
57 | -@if not exist "$(TARGETDIR)\64" $(MD) "$(TARGETDIR)\64"
58 | $(CC) $(CFLAGS) -Fe$@ -Fd$* $(SRC) $(LIBS)
59 |
60 | clean:
61 | -$(RM) *~ *.bak *.obj
62 | -$(RM) $(TARGETDIR)\win.*
63 | -$(RM) $(TARGETDIR)\32\win.*
64 | -$(RM) $(TARGETDIR)\64\win.*
65 |
66 | seatraffic.c: seatraffic.h
67 | routes.c: seatraffic.h
68 |
--------------------------------------------------------------------------------
/src/models.c:
--------------------------------------------------------------------------------
1 | /*
2 | * SeaTraffic
3 | *
4 | * (c) Jonathan Harris 2015
5 | *
6 | */
7 |
8 | #include "seatraffic.h"
9 |
10 | /* Use asynchronous object loading if on v10 */
11 | typedef void (* XPLMLoadObjectAsync_f) (const char *inPath, XPLMObjectLoaded_f inCallback, void *inRefcon);
12 | static XPLMLoadObjectAsync_f myXPLMLoadObjectAsync;
13 |
14 | static void libraryloadimmediate(const char *inFilePath, void *inRef);
15 | static void libraryloadasync(const char *inFilePath, void *inRef);
16 |
17 |
18 | /* Globals */
19 |
20 | static ship_models_t default_models[ship_kind_count] = { 0 }; /* The default set of models */
21 | static ship_models_t *model_cache[180][360] = { 0 }; /* Per-tile sets of models */
22 | static XPLMLibraryEnumerator_f libraryloadfn; /* fn pointer for loading objects */
23 |
24 |
25 | typedef struct
26 | {
27 | ship_kind_t kind;
28 | char *name;
29 | } ship_library_t;
30 |
31 | /* default objects */
32 | static const ship_library_t default_library[] =
33 | {
34 | { leisure, "opensceneryx/objects/vehicles/boats_ships/power.obj" },
35 | { tourist, "opensceneryx/objects/vehicles/boats_ships/tour.obj" },
36 | { cruise, "opensceneryx/objects/vehicles/boats_ships/cruise.obj" },
37 | { ped_sml, "Damen_2006_Green.obj" },
38 | { ped_sml, "Damen_2006_Red.obj" },
39 | { ped_sml, "Damen_2006_Sky.obj" },
40 | { ped_sml, "Damen_2006_White.obj" },
41 | { ped_med, "Damen_4212_Blue.obj" },
42 | { ped_med, "Damen_4212_Green.obj" },
43 | { ped_med, "Damen_4212_Orange.obj" },
44 | { ped_med, "Damen_4212_Sky.obj" },
45 | { veh_sml, "Damen_2010.obj" },
46 | { veh_med, "River_crossing.obj" },
47 | { veh_big, "opensceneryx/objects/vehicles/boats_ships/ferries.obj" },
48 | { cargo, "opensceneryx/objects/vehicles/boats_ships/container.obj" },
49 | { tanker, "Aframax_tanker_Black.obj" },
50 | { tanker, "Aframax_tanker_Blue.obj" },
51 | { tanker, "Aframax_tanker_Grey.obj" },
52 | { tanker, "Aframax_tanker_Sky.obj" },
53 | };
54 |
55 |
56 | XPLMObjectRef loadobject(const char *path)
57 | {
58 | XPLMObjectRef ref = XPLMLoadObject(path);
59 | if (!ref)
60 | {
61 | XPLMDebugString("SeaTraffic: Can't load object \"");
62 | XPLMDebugString(path);
63 | XPLMDebugString("\"\n");
64 | }
65 | return ref;
66 | }
67 |
68 |
69 | /* Callback from XPLMLookupObjects used to count objects */
70 | static void libraryloaddummy(const char *inFilePath, void *inRef)
71 | {}
72 |
73 | /* Helper function for libraryloadimmediate and libraryloadasync */
74 | static int libraryloadcommon(const char *inFilePath, ship_models_t *models)
75 | {
76 | if (!(strcmp(strrchr(inFilePath, '/'), "/placeholder.obj")))
77 | {
78 | return 0; /* OpenSceneryX placeholder */
79 | }
80 | else if (!(models->refs = realloc(models->refs, (models->obj_n + 1) * sizeof(XPLMObjectRef))) ||
81 | !(models->names = realloc(models->names, (models->obj_n + 1) * sizeof(char*))))
82 | {
83 | XPLMDebugString("SeaTraffic: Out of memory!");
84 | return 0;
85 | }
86 | models->names[models->obj_n] = (char*) inFilePath;
87 | return -1;
88 | }
89 |
90 |
91 | /* Callback from XPLMLookupObjects to load ship objects */
92 | static void libraryloadimmediate(const char *inFilePath, void *inRef)
93 | {
94 | ship_models_t *models = inRef;
95 | if (libraryloadcommon(inFilePath, models) &&
96 | (models->refs[models->obj_n] = loadobject(inFilePath)))
97 | models->obj_n ++;
98 | }
99 |
100 |
101 | static void libraryloaded(XPLMObjectRef inObject, void *inRefcon)
102 | {
103 | /* Too late to give an error if it can't be loaded (inObject==NULL) but X-Plane's will put its own message in Log.txt */
104 | XPLMObjectRef *ref = inRefcon;
105 | *ref = inObject;
106 | }
107 |
108 | /* Callback from XPLMLookupObjects to load ship objects */
109 | static void libraryloadasync(const char *inFilePath, void *inRef)
110 | {
111 | ship_models_t *models = inRef;
112 | if (libraryloadcommon(inFilePath, models))
113 | {
114 | models->refs[models->obj_n] = NULL;
115 | myXPLMLoadObjectAsync(inFilePath, libraryloaded, &(models->refs[models->obj_n]));
116 | models->obj_n ++;
117 | }
118 | }
119 |
120 |
121 | /* Are there custom models for this tile in the library? */
122 | static int hascustommodels(int south, int west, int errorme)
123 | {
124 | int i, found = 0;
125 | char name[sizeof(LIBRARY_PREFIX) + LIBRARY_TOKEN_MAX + 4] = LIBRARY_PREFIX;
126 |
127 | for (i=0; irefs = realloc(models->refs, (models->obj_n + 1) * sizeof(XPLMObjectRef))) ||
207 | !(models->names = realloc(models->names, (models->obj_n + 1) * sizeof(char*))) ||
208 | !(models->names[models->obj_n] = malloc(strlen(respath) + strlen(name) + 1)))
209 | {
210 | XPLMDebugString("SeaTraffic: Out of memory!");
211 | return 0;
212 | }
213 |
214 | strcpy(models->names[models->obj_n], respath);
215 | strcat(models->names[models->obj_n], name);
216 | if ((models->refs[models->obj_n] = loadobject(models->names[models->obj_n])))
217 | models->obj_n ++;
218 | }
219 | else
220 | {
221 | /* Library resource */
222 | XPLMLookupObjects(name, 0.0f, 0.0f, libraryloadimmediate, models);
223 | }
224 | if (models->obj_n <= 0)
225 | {
226 | XPLMDebugString("SeaTraffic: Can't find object \"");
227 | XPLMDebugString(name);
228 | XPLMDebugString("\"\n");
229 | return 0;
230 | }
231 | }
232 | return -1;
233 | }
234 |
--------------------------------------------------------------------------------
/src/routes.c:
--------------------------------------------------------------------------------
1 | /*
2 | * SeaTraffic
3 | *
4 | * (c) Jonathan Harris 2012
5 | *
6 | */
7 |
8 | #include "seatraffic.h"
9 |
10 | /* Globals */
11 | static route_list_t *routes[180][360]; /* array of link lists of routes by tile */
12 |
13 | /* prototypes */
14 | static int addroutetotile(route_t *route);
15 |
16 |
17 | int readroutes(char *mypath, char *err)
18 | {
19 | char buffer[PATH_MAX], *c;
20 | FILE *h;
21 | int lineno=0;
22 | route_t *currentroute=NULL;
23 |
24 | strcpy(buffer, mypath);
25 | strcat(buffer, "routes.txt");
26 | if (!(h=fopen(buffer, "r")))
27 | {
28 | strcpy(err, "Can't open routes.txt");
29 | return 0;
30 | }
31 | if (!(c=fgets(buffer, PATH_MAX, h)))
32 | {
33 | fclose(h);
34 | strcpy(err, "Can't read routes.txt");
35 | return 0;
36 | }
37 | if (!strncmp(c, "\xef\xbb\xbf", 3)) { c+=3; } /* skip Unicode BOM */
38 | while (c)
39 | {
40 | lineno++;
41 | while (isspace(*c)) { c++; } /* ltrim */
42 | if (*c == '#') /* Skip comment lines */
43 | {
44 | }
45 | else if (!*c) /* Blank line = end of record */
46 | {
47 | if (currentroute)
48 | {
49 | if (currentroute->pathlen)
50 | {
51 | if (!addroutetotile(currentroute))
52 | {
53 | strcpy(err, "Out of memory");
54 | return 0;
55 | }
56 | }
57 | else
58 | {
59 | sprintf(err, "Empty route at routes.txt line %d", lineno);
60 | return 0;
61 | }
62 | currentroute=NULL;
63 | }
64 | }
65 | else if (currentroute) /* New point on path of existing route */
66 | {
67 | if (!(currentroute->path=realloc(currentroute->path, (currentroute->pathlen+1)*sizeof(loc_t))))
68 | {
69 | strcpy(err, "Out of memory");
70 | return 0;
71 | }
72 | if (sscanf(c, "%f %f", &(currentroute->path[currentroute->pathlen].lat), &(currentroute->path[currentroute->pathlen].lon)) != 2)
73 | {
74 | sprintf(err, "Invalid location at routes.txt line %d", lineno);
75 | return 0;
76 | }
77 | currentroute->pathlen++;
78 | }
79 | else /* New route */
80 | {
81 | int i;
82 | char *name=c;
83 | while ((*name) && !isspace(*name)) { name++; } /* split line into shiptype and name */
84 | while ((*name) && isspace(*name)) { *(name++)=0; } /* split line into shiptype and name */
85 | if (!(currentroute=calloc(1, sizeof(route_t))))
86 | {
87 | strcpy(err, "Out of memory");
88 | return 0;
89 | }
90 | for (i=0; iship_kind=i;
95 | break;
96 | }
97 | }
98 | if (i==ship_kind_count)
99 | {
100 | sprintf(err, "Unrecognised ship type \"%s\" at routes.txt line %d", c, lineno);
101 | return 0;
102 | }
103 | #if defined(DO_LOCAL_MAP) || defined(DO_ACTIVE_LIST)
104 | c=name+strlen(name)-1; /* name is utf-8 encoded, which X-Plane can render */
105 | while ((c>=name) && isspace(*c)) { *(c--)=0; }; /* rtrim */
106 | currentroute->name=strdup(name);
107 | #endif
108 | }
109 | c=fgets(buffer, PATH_MAX, h);
110 | }
111 |
112 | if (currentroute) /* last one */
113 | {
114 | if (currentroute->pathlen)
115 | {
116 | if (!addroutetotile(currentroute))
117 | {
118 | strcpy(err, "Out of memory");
119 | return 0;
120 | }
121 | }
122 | else
123 | {
124 | sprintf(err, "Empty route at routes.txt line %d", lineno);
125 | return 0;
126 | }
127 | }
128 |
129 | fclose(h);
130 |
131 | return 1;
132 | }
133 |
134 |
135 | /* Add a route to the tile list */
136 | static int addroutetotile(route_t *route)
137 | {
138 | int i;
139 | for (i=0; ipathlen; i++)
140 | {
141 | route_list_t **route_list;
142 | int south, west;
143 | south=(int)floor(route->path[i].lat);
144 | west=(int)floor(route->path[i].lon);
145 | route_list=&routes[south+90][west+180];
146 |
147 | if (!*route_list || (*route_list)->route!=route) /* We add from front so only need to check first route */
148 | {
149 | if (!route_list_add(route_list, route)) { return 0; }
150 | }
151 | }
152 | return 1;
153 | }
154 |
155 |
156 | route_list_t *getroutesbytile(int south, int west)
157 | {
158 | return routes[south+90][west+180];
159 | }
160 |
161 |
162 | /**********************************************************************
163 | Linked list manipulation
164 | **********************************************************************/
165 |
166 | /* Allocates and adds to front of list */
167 | route_list_t *route_list_add(route_list_t **route_list, route_t *route)
168 | {
169 | route_list_t *newroute;
170 | if (!(newroute=malloc(sizeof(route_list_t)))) { return 0; }
171 | newroute->route=route;
172 | newroute->next=*route_list;
173 | *route_list=newroute;
174 | return *route_list;
175 | }
176 |
177 |
178 | route_list_t *route_list_get_byroute(route_list_t *route_list, route_t *route)
179 | {
180 | while (route_list!=NULL)
181 | {
182 | if (route_list->route==route) { return route_list; }
183 | route_list=route_list->next;
184 | }
185 | return NULL;
186 | }
187 |
188 |
189 | /* Return nth item in list. Assumes that there are n items in list */
190 | route_t *route_list_pop(route_list_t **route_list, int n)
191 | {
192 | route_t *route;
193 | route_list_t *this, **lastptr=route_list;
194 | while (n--)
195 | {
196 | lastptr=&((*lastptr)->next);
197 | assert(*lastptr!=NULL);
198 | }
199 | this=*lastptr;
200 | route=this->route;
201 | *lastptr=this->next;
202 | free(this);
203 | return route;
204 | }
205 |
206 |
207 | int route_list_length(route_list_t *route_list)
208 | {
209 | int i=0;
210 | while (route_list!=NULL)
211 | {
212 | i++;
213 | route_list=route_list->next;
214 | }
215 | return i;
216 | }
217 |
218 |
219 | /* Free entire list */
220 | void route_list_free(route_list_t **route_list)
221 | {
222 | route_list_t *next;
223 | while (*route_list)
224 | {
225 | next=(*route_list)->next;
226 | free(*route_list);
227 | *route_list=next;
228 | }
229 | }
230 |
231 |
232 | /* Allocates and adds to front of list */
233 | active_route_t *active_route_add(active_route_t **active_routes)
234 | {
235 | active_route_t *newroute;
236 | if (!(newroute=malloc(sizeof(active_route_t)))) { return NULL; }
237 | newroute->next=*active_routes;
238 | *active_routes=newroute;
239 | return *active_routes;
240 | }
241 |
242 |
243 | active_route_t *active_route_get(active_route_t *active_routes, int n)
244 | {
245 | while (n--)
246 | {
247 | active_routes=active_routes->next;
248 | // assert(active_routes!=NULL); /* Allow function to return NULL for item just past length */
249 | }
250 | return active_routes;
251 | }
252 |
253 |
254 | active_route_t *active_route_get_byroute(active_route_t *active_routes, route_t *route)
255 | {
256 | while (active_routes!=NULL)
257 | {
258 | if (active_routes->route==route) { return active_routes; }
259 | active_routes=active_routes->next;
260 | }
261 | return NULL;
262 | }
263 |
264 |
265 | void active_route_pop(active_route_t **active_routes, int n)
266 | {
267 | active_route_t *this, **lastptr=active_routes;
268 | while (n--)
269 | {
270 | lastptr=&((*lastptr)->next);
271 | assert(*lastptr!=NULL);
272 | }
273 | this=*lastptr;
274 | *lastptr=this->next;
275 | free(this);
276 | }
277 |
278 |
279 | int active_route_length(active_route_t *active_routes)
280 | {
281 | int i=0;
282 | while (active_routes!=NULL)
283 | {
284 | i++;
285 | active_routes=active_routes->next;
286 | }
287 | return i;
288 | }
289 |
290 |
291 | /* Callback for active_route_sort */
292 | static int sortactive(const void *a, const void *b)
293 | {
294 | const active_route_t *const *ra = a, *const *rb = b;
295 | return strcmp((*ra)->object_name, (*rb)->object_name);
296 | }
297 |
298 |
299 | /* Sort active routes by object name to minimise texture swaps when drawing.
300 | * Rather than actually shuffling the routes around in memory we just sort an array of pointers and then go back
301 | * and fix up the linked list. */
302 | void active_route_sort(active_route_t **active_routes, int active_n)
303 | {
304 | int i;
305 | active_route_t *table[ACTIVE_MAX], *active_route;
306 |
307 | if (active_n <= 2) return; /* Nothing useful to do */
308 |
309 | for (i = 0, active_route = *active_routes; active_route; active_route = active_route->next)
310 | table[i++] = active_route;
311 | qsort(table, active_n, sizeof(active_route), sortactive);
312 | *active_routes = table[0];
313 | for (i = 0; i < active_n; i++)
314 | table[i]->next = i < active_n-1 ? table[i+1] : NULL;
315 | }
316 |
--------------------------------------------------------------------------------
/src/seatraffic.c:
--------------------------------------------------------------------------------
1 | /*
2 | * SeaTraffic
3 | *
4 | * (c) Jonathan Harris 2012
5 | *
6 | */
7 |
8 | #include "seatraffic.h"
9 |
10 | #if IBM
11 | # include
12 | BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason, LPVOID lpReserved)
13 | { return TRUE; }
14 | #elif APL
15 | # include
16 | # include
17 | #endif
18 |
19 |
20 | /* Globals */
21 | static char mypath[PATH_MAX], *relpath;
22 |
23 | /* Ship types. Order must match ship_kind_t enum */
24 | const ship_t ships[ship_kind_count] =
25 | {
26 | /* speed [m/s], semilen [m], token */
27 | { 2, 8, "leisure" }, /* ~4 knots */
28 | { 3, 15, "tourist" }, /* ~6 knots */
29 | { 12, 80, "cruise" }, /* ~23.5 knots */
30 | { 11, 11, "ped/sml" }, /* ~21.5 knots */
31 | { 16, 21, "ped/med" }, /* ~31 knots */
32 | { 5, 11, "veh/sml" }, /* ~9.5 knots */
33 | { 6, 30, "veh/med" }, /* ~11.5 knots */
34 | { 10, 76, "veh/big" }, /* ~19.5 knots */
35 | { 8, 95, "cargo" }, /* ~15.5 knots */
36 | { 8,125, "tanker" }, /* ~15.5 knots */
37 | };
38 |
39 |
40 | static XPLMDataRef ref_view_x, ref_view_y, ref_view_z, ref_view_h;
41 | static XPLMDataRef ref_plane_lat, ref_plane_lon, ref_night, ref_monotonic, ref_renopt=0, ref_rentype;
42 | static XPLMObjectRef wake_big_ref, wake_med_ref, wake_sml_ref;
43 | static float last_frame=0; /* last time we recalculated */
44 | static int done_init=0, need_recalc=1;
45 | static tile_t current_tile={0,0};
46 | static int active_n=0;
47 | static int active_max = ACTIVE_DEFAULT;
48 | static active_route_t *active_routes = NULL;
49 | static XPLMMenuID my_menu_id;
50 | static int do_wakes=0;
51 | #ifdef DO_LOCAL_MAP
52 | static int do_local_map=0;
53 | #endif
54 | #ifdef DO_ACTIVE_LIST
55 | static XPLMWindowID windowId = NULL;
56 | static int drawtime, drawmax; /* clock time taken in last main loop [us] */
57 | # if IBM
58 | static __int64 ticks_per_sec;
59 | # endif
60 | #endif
61 |
62 |
63 | static inline int inrange(tile_t tile, loc_t loc)
64 | {
65 | return ((abs(tile.south - (int) floorf(loc.lat)) <= TILE_RANGE) &&
66 | (abs(tile.west - (int) floorf(loc.lon)) <= TILE_RANGE));
67 | }
68 |
69 | static inline int indrawrange(float xdist, float ydist)
70 | {
71 | return (xdist*xdist + ydist*ydist <= DRAW_DISTANCE*DRAW_DISTANCE);
72 | }
73 |
74 | static inline int inreflectrange(float xdist, float ydist)
75 | {
76 | return (xdist*xdist + ydist*ydist <= DRAW_REFLECT*DRAW_REFLECT);
77 | }
78 |
79 | static inline int inwakerange(float xdist, float ydist)
80 | {
81 | return (xdist*xdist + ydist*ydist <= DRAW_WAKE*DRAW_WAKE);
82 | }
83 |
84 |
85 | /* Great circle distance, using Haversine formula. http://mathforum.org/library/drmath/view/51879.html */
86 | static float distanceto(loc_t a, loc_t b)
87 | {
88 | float slat=sinf((b.lat-a.lat) * (float) (M_PI/360));
89 | float slon=sinf((b.lon-a.lon) * (float) (M_PI/360));
90 | float aa=slat*slat + cosf(a.lat * (float) (M_PI/180)) * cosf(b.lat * (float) (M_PI/180)) * slon*slon;
91 | return RADIUS*2 * atan2f(sqrtf(aa), sqrtf(1-aa));
92 | }
93 |
94 |
95 | /* Bearing of b from a [radians] http://mathforum.org/library/drmath/view/55417.html */
96 | static float headingto(loc_t a, loc_t b)
97 | {
98 | float lat1=(a.lat * (float) (M_PI/180));
99 | float lon1=(a.lon * (float) (M_PI/180));
100 | float lat2=(b.lat * (float) (M_PI/180));
101 | float lon2=(b.lon * (float) (M_PI/180));
102 | float clat2=cosf(lat2);
103 | return fmodf(atan2f(sinf(lon2-lon1)*clat2, cosf(lat1)*sinf(lat2)-sinf(lat1)*clat2*cosf(lon2-lon1)), (float) (M_PI*2));
104 | }
105 |
106 |
107 | /* Location distance d along heading h from a [degrees]. Assumes d < circumference/4. http://williams.best.vwh.net/avform.htm#LL */
108 | static void displaced(loc_t a, double h, double d, dloc_t *b)
109 | {
110 | double lat1=((double) a.lat * M_PI/180);
111 | double lon1=((double) a.lon * M_PI/180);
112 | double clat1=cos(lat1);
113 | double dang=(d/(double)RADIUS);
114 | double sang=sin(dang);
115 | b->lat=asin(sin(lat1)*cos(dang)+clat1*sang*cos(h)) * (180*M_1_PI);
116 | b->lon=(fmod(lon1+asin(sin(h)*sang/clat1)+M_PI, M_PI*2.0) - M_PI) * (180*M_1_PI);
117 | }
118 |
119 |
120 | /* is this location within distance of the active routes */
121 | static int tooclose(active_route_t *active_routes, loc_t loc, int distance)
122 | {
123 | active_route_t *active_route = active_routes;
124 | while (active_route)
125 | {
126 | loc_t other;
127 | if (active_route->new_node)
128 | {
129 | /* location hasn't been calculated yet, just use its current node's location */
130 | other.lat = active_route->route->path[active_route->last_node].lat;
131 | other.lon = active_route->route->path[active_route->last_node].lon;
132 | }
133 | else
134 | {
135 | other.lat = active_route->loc.lat;
136 | other.lon = active_route->loc.lon;
137 | }
138 | if (distanceto(loc, other) <= distance) { return 1; }
139 | active_route = active_route -> next;
140 | }
141 | return 0;
142 | }
143 |
144 |
145 | /* Adjust active routes */
146 | static void recalc(void)
147 | {
148 | int active_i, i, j;
149 | int candidate_n=0;
150 | route_list_t *candidates=NULL;
151 | active_route_t *a;
152 |
153 | need_recalc=0;
154 |
155 | /* Retire routes that have gone out of range */
156 | active_i=0;
157 | a=active_routes;
158 | while (active_iroute->path[a->last_node])) /* FIXME: Should check on current position, not last_node */
161 | {
162 | XPLMDestroyProbe(a->ref_probe); /* Deallocate resources */
163 | active_route_pop(&active_routes, active_i); /* retire out-of-range route */
164 | a=active_route_get(active_routes, active_i); /* get pointer to next item */
165 | active_n--;
166 | }
167 | else
168 | {
169 | a=a->next;
170 | active_i++;
171 | }
172 | }
173 |
174 | /* Or if rendering options have changed */
175 | while (active_n > active_max)
176 | {
177 | active_route_pop(&active_routes, rand() % (active_max-active_n)); /* retire a random route */
178 | active_n--;
179 | }
180 |
181 | if (active_n >= active_max) { return; } /* We have enough routes */
182 |
183 | /* Locate candidate routes */
184 | for (i=current_tile.south-TILE_RANGE; i<=current_tile.south+TILE_RANGE; i++)
185 | for (j=current_tile.west-TILE_RANGE; j<=current_tile.west+TILE_RANGE; j++)
186 | {
187 | route_list_t *route_list=getroutesbytile(i,j);
188 | while (route_list)
189 | {
190 | /* Check it's neither already active nor already a candidate from an adjacent tile */
191 | if (!active_route_get_byroute(active_routes, route_list->route) &&
192 | !route_list_get_byroute(candidates, route_list->route) &&
193 | route_list_add(&candidates, route_list->route))
194 | {
195 | candidate_n++;
196 | }
197 | route_list=route_list->next;
198 | }
199 | }
200 |
201 | /* Pick new active routes from candidates */
202 | if (candidate_n)
203 | {
204 | float now=XPLMGetDataf(ref_monotonic);
205 |
206 | while ((active_n < active_max) && candidate_n)
207 | {
208 | int obj_n;
209 | ship_models_t *models;
210 | route_t *newroute = route_list_pop(&candidates, rand() % candidate_n--);
211 | active_n++;
212 | if (!(a = active_route_add(&active_routes))) { break; } /* Alloc failure! */
213 | a->ship=&ships[newroute->ship_kind];
214 | a->route=newroute;
215 | a->altmsl=0;
216 | a->ref_probe=XPLMCreateProbe(xplm_ProbeY);
217 | a->drawinfo.structSize=sizeof(XPLMDrawInfo_t);
218 | a->drawinfo.pitch=a->drawinfo.roll=0;
219 |
220 | /* Find a starting node */
221 | if (inrange(current_tile, newroute->path[0]) && !tooclose(active_routes->next, newroute->path[0], SHIP_SPACING * a->ship->semilen))
222 | {
223 | /* Start of path */
224 | a->direction=1;
225 | a->last_node=0;
226 | a->last_time=now-(a->ship->semilen/a->ship->speed); /* Move ship away from the dock */
227 | }
228 | else if (inrange(current_tile, newroute->path[newroute->pathlen-1]) && !tooclose(active_routes->next, newroute->path[newroute->pathlen-1], SHIP_SPACING * a->ship->semilen))
229 | {
230 | /* End of path */
231 | a->direction=-1;
232 | a->last_node=newroute->pathlen-1;
233 | a->last_time=now-(a->ship->semilen/a->ship->speed); /* Move ship away from the dock */
234 | }
235 | else
236 | {
237 | a->direction=0;
238 | for (i=1; ipathlen-1; i++)
239 | if (inrange(current_tile, newroute->path[i]) && !tooclose(active_routes->next, newroute->path[i], SHIP_SPACING * a->ship->semilen))
240 | {
241 | /* First node in range */
242 | a->direction=1;
243 | a->last_node=i;
244 | a->last_time=now;
245 | break;
246 | }
247 | if (!a->direction)
248 | {
249 | /* Found nothing suitable! Look again, and just shove the ship along its path */
250 | a->last_time = now - (SHIP_SPACING * a->ship->semilen / a->ship->speed);
251 | if (inrange(current_tile, newroute->path[0]))
252 | {
253 | /* Start of path */
254 | a->direction=1;
255 | a->last_node=0;
256 | }
257 | else if (inrange(current_tile, newroute->path[newroute->pathlen-1]))
258 | {
259 | /* End of path */
260 | a->direction=-1;
261 | a->last_node=newroute->pathlen-1;
262 | }
263 | else
264 | {
265 | for (i=1; ipathlen-1; i++)
266 | if (inrange(current_tile, newroute->path[i]))
267 | {
268 | /* First node in range */
269 | a->direction=1;
270 | a->last_node=i;
271 | break;
272 | }
273 | }
274 | }
275 | }
276 |
277 | /* Choose ship model based on starting node's tile */
278 | models = models_for_tile((int) floorf(newroute->path[a->last_node].lat), (int) floorf(newroute->path[a->last_node].lon)) + a->route->ship_kind;
279 | obj_n = rand() % models->obj_n;
280 | a->object_ref = &models->refs[obj_n]; /* May be NULL until async load completes */
281 | a->object_name = models->names[obj_n];
282 |
283 | a->new_node=1; /* Tell drawships() to calculate state */
284 | a->next_time = a->last_time + distanceto(newroute->path[a->last_node], newroute->path[a->last_node+a->direction]) / a->ship->speed;
285 | }
286 | active_route_sort(&active_routes, active_n); /* Sort active routes by object name for more efficient drawing */
287 | }
288 | route_list_free(&candidates);
289 | }
290 |
291 |
292 | static int drawupdate(void)
293 | {
294 | static float next_hdg_update=0.0f;
295 |
296 | tile_t new_tile;
297 | float now;
298 | int do_hdg_update, active_i;
299 | XPLMProbeInfo_t probeinfo;
300 | active_route_t *a;
301 |
302 | /* If we've shifted tile (which can happen without an airport or scenery re-load) then recalculate active routes */
303 | new_tile.south=(int) floor(XPLMGetDatad(ref_plane_lat));
304 | new_tile.west=(int) floor(XPLMGetDatad(ref_plane_lon));
305 | if (need_recalc || (new_tile.south!=current_tile.south) || (new_tile.west!=current_tile.west))
306 | {
307 | current_tile.south=new_tile.south;
308 | current_tile.west=new_tile.west;
309 | recalc();
310 | }
311 |
312 | if (active_n==0) { return 1; } /* Nothing to do */
313 |
314 | probeinfo.structSize = sizeof(XPLMProbeInfo_t);
315 |
316 | /* Headings change slowly. Reduce time in this function by updating them only periodically */
317 | now = XPLMGetDataf(ref_monotonic);
318 | do_hdg_update = (now>=next_hdg_update);
319 | if (do_hdg_update)
320 | {
321 | next_hdg_update=now+HDG_HOLD_TIME;
322 | #ifdef DO_ACTIVE_LIST
323 | drawmax=0; /* This iteration is a good time to reset max draw timer */
324 | #endif
325 | }
326 |
327 | /* Draw ships */
328 | active_i=0;
329 | a=active_routes;
330 | while (active_iroute;
334 |
335 | if (now >= a->next_time)
336 | {
337 | /* Time for next node */
338 | a->last_node+=a->direction;
339 | if ((a->last_node < 0) || (a->last_node >= route->pathlen))
340 | {
341 | /* Already was at end of route - turn it round */
342 | a->new_node=1;
343 | a->direction*=-1; /* reverse */
344 | a->last_node+=a->direction;
345 | a->last_time=now-(a->ship->semilen/a->ship->speed); /* Move ship away from the dock */
346 | }
347 | else if (!inrange(current_tile, a->route->path[a->last_node]))
348 | {
349 | /* No longer in range - kill it off on next callback */
350 | need_recalc=1;
351 | a=a->next;
352 | active_i++;
353 | continue;
354 | }
355 | else
356 | {
357 | /* Next node */
358 | if ((a->last_node == 0) || (a->last_node == route->pathlen-1))
359 | {
360 | /* Just hit end of route */
361 | XPLMProbeResult result;
362 | a->last_time=now;
363 | a->next_time=now+LINGER_TIME;
364 | /* Keep previous location and heading - don't set new_node flag. But since we'll be here a while do update alt. */
365 | XPLMWorldToLocal(a->loc.lat, a->loc.lon, 0.0, &x, &y, &z);
366 | probeinfo.locationY=y; /* If probe fails set altmsl=0 */
367 | result=XPLMProbeTerrainXYZ(a->ref_probe, x, y, z, &probeinfo);
368 | assert (result==xplm_ProbeHitTerrain);
369 | a->altmsl=(double) probeinfo.locationY - y;
370 | }
371 | else
372 | {
373 | /* Progress to next node on route */
374 | a->new_node=1;
375 | a->last_time=now;
376 | }
377 | }
378 | }
379 | else if ((a->last_node+a->direction < 0) || (a->last_node+a->direction >= route->pathlen))
380 | {
381 | /* Ship is lingering at end of route - re-use location and drawinfo heading from last drawships() callback */
382 | }
383 | else
384 | {
385 | /* Common case: Not time for a new node so so update ship position along path */
386 | displaced(route->path[a->last_node], a->last_hdg, a->ship->semilen + (now-a->last_time)*a->ship->speed, &(a->loc));
387 | if (do_hdg_update && (a->next_time-now > HDG_HOLD_TIME)) /* Don't update heading when approaching next node to prevent squirreliness */
388 | {
389 | loc_t loc={a->loc.lat, a->loc.lon}; /* Down to float */
390 | a->drawinfo.heading=headingto(loc, route->path[a->last_node+a->direction]) * (float) (180*M_1_PI);
391 | }
392 | }
393 |
394 | if (a->new_node) /* May be set above or, for new routes, in recalc() */
395 | {
396 | /* Update state after ship visits new node. Assumes last_node and last_time already updated. */
397 | a->last_hdg = headingto(a->route->path[a->last_node], a->route->path[a->last_node+a->direction]);
398 | a->drawinfo.heading=a->last_hdg * (float) (180*M_1_PI);
399 | displaced(route->path[a->last_node], a->last_hdg, a->ship->semilen + (now-a->last_time)*a->ship->speed, &(a->loc));
400 | a->next_time = a->last_time + distanceto(route->path[a->last_node], route->path[a->last_node+a->direction]) / a->ship->speed;
401 | if ((a->last_node+a->direction == 0) || (a->last_node+a->direction == route->pathlen-1))
402 | {
403 | /* Next node is last node */
404 | a->next_time-=(a->ship->semilen/a->ship->speed); /* Stop ship before it crashes into dock */
405 | }
406 | }
407 |
408 | /* Update altitiude at same time as heading */
409 | if (do_hdg_update || a->new_node) /* New node implies altitude update needed */
410 | {
411 | /* Not all routes are at sea level, so need a way of determining altitude but without probing every cycle.
412 | * Should probably probe twice - http://forums.x-plane.org/index.php?showtopic=38688&st=20#entry566469 */
413 | XPLMProbeResult result;
414 | XPLMWorldToLocal(a->loc.lat, a->loc.lon, 0.0, &x, &y, &z);
415 | probeinfo.locationY=y; /* If probe fails set altmsl=0 */
416 | result=XPLMProbeTerrainXYZ(a->ref_probe, x, y, z, &probeinfo);
417 | assert (result==xplm_ProbeHitTerrain);
418 | a->altmsl=(double) probeinfo.locationY - y;
419 | }
420 |
421 | /* In local co-ordinates for drawing */
422 | XPLMWorldToLocal(a->loc.lat, a->loc.lon, a->altmsl, &x, &y, &z);
423 | a->drawinfo.x=x; a->drawinfo.y=y; a->drawinfo.z=z; /* double -> float */
424 |
425 | a->new_node=0;
426 | a=a->next;
427 | active_i++;
428 | }
429 |
430 | return 1;
431 | }
432 |
433 |
434 | /* XPLMRegisterDrawCallback callback */
435 | static int drawships(XPLMDrawingPhase inPhase, int inIsBefore, void *inRefcon)
436 | {
437 | active_route_t *a;
438 | int is_night;
439 | float now;
440 | float view_x, view_z;
441 | int render_pass;
442 | #ifdef DO_ACTIVE_LIST
443 | # if IBM
444 | __int64 t1, t2;
445 | QueryPerformanceCounter((LARGE_INTEGER *) &t1); /* start */
446 | # else
447 | struct timeval t1, t2;
448 | gettimeofday(&t1, NULL); /* start */
449 | # endif
450 | #endif
451 |
452 | assert((inPhase==xplm_Phase_Objects) && inIsBefore);
453 |
454 | /* We're potentially called multiple times per frame:
455 | * reflections ("sim/graphics/view/world_render_type" == 1), multiple shadows (== 3) and finally normal (== 0).
456 | * So skip calculations if we've already run the calculations for this frame. */
457 | if ((now = XPLMGetDataf(ref_monotonic)) != last_frame)
458 | {
459 | drawupdate();
460 | last_frame = now;
461 | #ifdef DO_ACTIVE_LIST
462 | drawtime = 0;
463 | #endif
464 | }
465 |
466 | render_pass = XPLMGetDatai(ref_rentype);
467 | is_night = (int) (XPLMGetDataf(ref_night) + 0.67f);
468 | view_x=XPLMGetDataf(ref_view_x);
469 | view_z=XPLMGetDataf(ref_view_z);
470 |
471 | if (render_pass == 1) /* reflections */
472 | {
473 | for (a=active_routes; a; a=a->next)
474 | if (*a->object_ref && inreflectrange(a->drawinfo.x - view_x, a->drawinfo.z - view_z))
475 | XPLMDrawObjects(*a->object_ref, 1, &(a->drawinfo), is_night, 1);
476 | do_wakes = 1; /* Do wakes on base pass if reflections enabled */
477 | }
478 | else /* shadows or base */
479 | {
480 | for (a=active_routes; a; a=a->next)
481 | if (*a->object_ref && indrawrange(a->drawinfo.x - view_x, a->drawinfo.z - view_z))
482 | XPLMDrawObjects(*a->object_ref, 1, &(a->drawinfo), is_night, 1);
483 |
484 | /* Wakes. Drawn after drawing the ships, so that the ships' hulls are visible through alpha.
485 | * Batched together to reduce texture swaps. */
486 | if (render_pass == 0 && do_wakes) /* Only draw wakes in base pass */
487 | {
488 | do_wakes = 0;
489 | // XPLMSetGraphicsState(1, 1, 1, 1, 1, 0, 0); /* No depth test/write - doesn't work with XPLMDrawObjects */
490 | glEnable(GL_POLYGON_OFFSET_FILL); /* Do this instead - Yuk! */
491 | glPolygonOffset(-2,-2);
492 |
493 | for (a=active_routes; a; a=a->next)
494 | if ((a->ship->speed >= WAKE_MINSPEED) && /* Only draw wakes for ships going at speed */
495 | (a->last_node+a->direction >= 0) && (a->last_node+a->direction < a->route->pathlen) && /* and not lingering */
496 | inwakerange(a->drawinfo.x - view_x, a->drawinfo.z - view_z)) /* and closeish */
497 | {
498 | XPLMDrawObjects(a->ship->semilen >= WAKE_BIG ? wake_big_ref : (a->ship->semilen >= WAKE_MED ? wake_med_ref : wake_sml_ref), 1, &(a->drawinfo), 0, 1);
499 | }
500 | glDisable(GL_POLYGON_OFFSET_FILL);
501 | }
502 | }
503 |
504 | #ifdef DO_ACTIVE_LIST
505 | # if IBM
506 | QueryPerformanceCounter((LARGE_INTEGER *) &t2); /* stop */
507 | drawtime += ((t2 - t1) * 1000000) / ticks_per_sec;
508 | # else
509 | gettimeofday(&t2, NULL); /* stop */
510 | drawtime += (t2.tv_sec-t1.tv_sec) * 1000000 + t2.tv_usec - t1.tv_usec;
511 | # endif
512 | if (drawtime>drawmax) { drawmax=drawtime; }
513 | if (!render_pass) { last_frame = 0; } /* In DEBUG recalculate while paused for easier debugging / profiling */
514 | #endif
515 | return 1;
516 | }
517 |
518 |
519 | #ifdef DO_LOCAL_MAP
520 | /* Work out screen locations in local map */
521 | static int drawmap3d(XPLMDrawingPhase inPhase, int inIsBefore, void *inRefcon)
522 | {
523 | route_list_t *route_list;
524 | int i, j;
525 |
526 | if (!do_local_map) { return 1; }
527 |
528 | if (active_n)
529 | {
530 | GLdouble model[16], proj[16], winX, winY, winZ;
531 | GLint view[4];
532 | active_route_t *a;
533 |
534 | /* This is slow, but it's only the local map */
535 | glGetDoublev(GL_MODELVIEW_MATRIX, model);
536 | glGetDoublev(GL_PROJECTION_MATRIX, proj);
537 | glGetIntegerv(GL_VIEWPORT, view);
538 |
539 | a=active_routes;
540 | while (a!=NULL)
541 | {
542 | gluProject(a->drawinfo.x, a->drawinfo.y, a->drawinfo.z, model, proj, view, &winX, &winY, &winZ);
543 | a->mapx=winX;
544 | a->mapy=winY;
545 | a=a->next;
546 | }
547 | }
548 |
549 | XPLMSetGraphicsState(0, 0, 0, 0, 0, 0, 0);
550 | glColor3f(0,0,0.25);
551 | for (i=current_tile.south-TILE_RANGE; i<=current_tile.south+TILE_RANGE; i++)
552 | for (j=current_tile.west-TILE_RANGE; j<=current_tile.west+TILE_RANGE; j++)
553 | {
554 | route_list=getroutesbytile(i,j);
555 | while (route_list)
556 | {
557 | route_t *route=route_list->route;
558 | int k;
559 |
560 | glBegin(GL_LINE_STRIP);
561 | for (k=0; kpathlen; k++)
562 | {
563 | double x, y, z;
564 | XPLMWorldToLocal(route->path[k].lat, route->path[k].lon, 0.0, &x, &y, &z);
565 | glVertex3f(x,y,z);
566 | }
567 | glEnd();
568 | route_list=route_list->next;
569 | }
570 | }
571 |
572 | return 1;
573 | }
574 |
575 |
576 | /* Draw ship icons in local map */
577 | static int drawmap2d(XPLMDrawingPhase inPhase, int inIsBefore, void *inRefcon)
578 | {
579 | int width, height;
580 | active_route_t *a;
581 | float color[] = { 0, 0, 0.25 };
582 |
583 | if (!do_local_map) { return 1; }
584 |
585 | XPGetElementDefaultDimensions(xpElement_CustomObject, &width, &height, NULL);
586 |
587 | a=active_routes;
588 | while (a!=NULL)
589 | {
590 | XPLMDrawString(color, a->mapx+6, a->mapy-3, a->route->name, NULL, xplmFont_Proportional);
591 | XPDrawElement(a->mapx-width/2, a->mapy-height+height/2, a->mapx+width-width/2, a->mapy+height/2, xpElement_CustomObject, 0);
592 | a=a->next;
593 | }
594 |
595 | return 1;
596 | }
597 | #endif /* DO_LOCAL_MAP */
598 |
599 |
600 | #ifdef DO_ACTIVE_LIST
601 | static void drawdebug(XPLMWindowID inWindowID, void *inRefcon)
602 | {
603 | char buf[256];
604 | int top, bottom;
605 | static int left=10, right=310;
606 | float width, width1;
607 | float color[] = { 1.0, 1.0, 1.0 }; /* RGB White */
608 | float now=XPLMGetDataf(ref_monotonic);
609 | float view_x=XPLMGetDataf(ref_view_x);
610 | float view_z=XPLMGetDataf(ref_view_z);
611 |
612 | active_route_t *a=active_routes;
613 |
614 | XPLMGetScreenSize(NULL, &top);
615 | top-=20; /* leave room for X-Plane's menubar */
616 | bottom=top-40-60*active_route_length(active_routes);
617 | XPLMSetWindowGeometry(inWindowID, left, top, right, bottom);
618 | XPLMDrawTranslucentDarkBox(left, top, right, bottom);
619 |
620 | sprintf(buf, "Tile: %+3d,%+4d Active: %2d Now: %7.1f", current_tile.south, current_tile.west, active_n, now);
621 | XPLMDrawString(color, left + 5, top - 10, buf, 0, xplmFont_Basic);
622 | sprintf(buf, "View: %10.3f,%10.3f,%10.3f %6.1f\xC2\xB0", XPLMGetDataf(ref_view_x), XPLMGetDataf(ref_view_y), XPLMGetDataf(ref_view_z), XPLMGetDataf(ref_view_h));
623 | XPLMDrawString(color, left + 5, top - 20, buf, 0, xplmFont_Basic);
624 | width=XPLMMeasureString(xplmFont_Basic, buf, strlen(buf));
625 | sprintf(buf, "Draw: %4d Max: %4d", drawtime, drawmax);
626 | XPLMDrawString(color, left + 5, top - 30, buf, 0, xplmFont_Basic);
627 | top-=40;
628 |
629 | while (a!=NULL)
630 | {
631 | sprintf(buf, "%s: %s", ships[a->route->ship_kind].token, a->route->name);
632 | XPLMDrawString(color, left + 5, top - 10, buf, 0, xplmFont_Basic);
633 | width1=XPLMMeasureString(xplmFont_Basic, buf, strlen(buf));
634 | if (width1>width) { width=width1; }
635 | sprintf(buf, "Path: %3d/%3d %+d Last: %7.1f Next: %7.1f", a->last_node, a->route->pathlen, a->direction, a->last_time, a->next_time);
636 | XPLMDrawString(color, left + 5, top - 20, buf, 0, xplmFont_Basic);
637 | width1=XPLMMeasureString(xplmFont_Basic, buf, strlen(buf));
638 | if (width1>width) { width=width1; }
639 | sprintf(buf, "Last: %11.7f,%12.7f %6.1f\xC2\xB0", a->route->path[a->last_node].lat, a->route->path[a->last_node].lon, a->last_hdg * 180.0*M_1_PI);
640 | XPLMDrawString(color, left + 5, top - 30, buf, 0, xplmFont_Basic);
641 | sprintf(buf, "Now: %11.7f,%12.7f %7.1f", a->loc.lat, a->loc.lon, a->altmsl);
642 | XPLMDrawString(color, left + 5, top - 40, buf, 0, xplmFont_Basic);
643 | sprintf(buf, "Draw: %10.3f,%10.3f,%10.3f %6.1f\xC2\xB0 %s", a->drawinfo.x, a->drawinfo.y, a->drawinfo.z, a->drawinfo.heading, indrawrange(a->drawinfo.x - view_x, a->drawinfo.z - view_z) ? "" : "*");
644 | XPLMDrawString(color, left + 5, top - 50, buf, 0, xplmFont_Basic);
645 | top-=60;
646 | a=a->next;
647 | }
648 | right=20+(int)width; /* For next time */
649 | }
650 | #endif /* DO_ACTIVE_LIST */
651 |
652 |
653 | static void menuhandler(void *inMenuRef, void *inItemRef)
654 | {
655 | switch ((intptr_t) inItemRef)
656 | {
657 | #ifdef DO_LOCAL_MAP
658 | case menu_idx_local_map:
659 | do_local_map=!do_local_map;
660 | XPLMCheckMenuItem(my_menu_id, menu_idx_local_map, do_local_map ? xplm_Menu_Checked : xplm_Menu_Unchecked);
661 | if (do_local_map)
662 | {
663 | XPLMRegisterDrawCallback(drawmap3d, xplm_Phase_LocalMap3D, 0, NULL);
664 | XPLMRegisterDrawCallback(drawmap2d, xplm_Phase_LocalMap2D, 0, NULL);
665 | }
666 | else
667 | {
668 | XPLMUnregisterDrawCallback(drawmap3d, xplm_Phase_LocalMap3D, 0, NULL);
669 | XPLMUnregisterDrawCallback(drawmap2d, xplm_Phase_LocalMap2D, 0, NULL);
670 | }
671 | break;
672 | #endif
673 | }
674 | }
675 |
676 |
677 | #ifdef DEBUG
678 | static void mybad(const char *inMessage)
679 | {
680 | assert(inMessage!=NULL);
681 | }
682 | #endif
683 |
684 |
685 | static int failinit(char *outDescription)
686 | {
687 | XPLMDebugString("SeaTraffic: ");
688 | XPLMDebugString(outDescription);
689 | XPLMDebugString("\n");
690 | return 0;
691 | }
692 |
693 |
694 | /* Convert path to posix style in-place */
695 | static void posixify(char *path)
696 | {
697 | #if APL
698 | if (*path!='/')
699 | {
700 | /* X-Plane 9 - screw around with HFS paths FFS */
701 | int isfolder = (path[strlen(path)-1]==':');
702 | CFStringRef hfspath = CFStringCreateWithCString(NULL, path, kCFStringEncodingMacRoman);
703 | CFURLRef url = CFURLCreateWithFileSystemPath(NULL, hfspath, kCFURLHFSPathStyle, 0);
704 | CFStringRef posixpath = CFURLCopyFileSystemPath(url, kCFURLPOSIXPathStyle);
705 | CFStringGetCString(posixpath, path, PATH_MAX, kCFStringEncodingUTF8);
706 | CFRelease(hfspath);
707 | CFRelease(url);
708 | CFRelease(posixpath);
709 | if (isfolder && path[strlen(path)-1]!='/') { strcat(path, "/"); } /* converting from HFS loses trailing separator */
710 | }
711 | #elif IBM
712 | char *c;
713 | for (c=path; *c; c++) if (*c=='\\') *c='/';
714 | #endif
715 | }
716 |
717 |
718 | /**********************************************************************
719 | Plugin entry points
720 | **********************************************************************/
721 |
722 | PLUGIN_API int XPluginStart(char *outName, char *outSignature, char *outDescription)
723 | {
724 | char buffer[PATH_MAX], *c;
725 |
726 | sprintf(outName, "SeaTraffic v%.2f", VERSION);
727 | strcpy(outSignature, "Marginal.SeaTraffic");
728 | strcpy(outDescription, "Shows animated marine traffic");
729 |
730 | #ifdef DEBUG
731 | XPLMSetErrorCallback(mybad);
732 | #endif
733 |
734 | /* Get path for my resources in posix format */
735 | XPLMEnableFeature("XPLM_USE_NATIVE_PATHS", 1); /* X-Plane 10+ */
736 | XPLMGetPluginInfo(XPLMGetMyID(), NULL, mypath, NULL, NULL);
737 | posixify(mypath);
738 | if (!(c=strrchr(mypath, '/')))
739 | {
740 | strcpy(outDescription, "Can't find my plugin");
741 | return failinit(outDescription);
742 | }
743 | *(c+1)='\0';
744 | if (!strcmp(c-3, "/32/") || !strcmp(c-3, "/64/")) { *(c-2)='\0'; } /* plugins one level down on some builds, so go up */
745 |
746 | XPLMGetSystemPath(buffer);
747 | posixify(buffer);
748 | assert (!(strncmp(mypath, buffer, strlen(buffer))));
749 | relpath=mypath+strlen(buffer); /* resource path, relative to X-Plane system folder */
750 |
751 | strcpy(buffer, relpath);
752 | strcat(buffer, "wake_big.obj");
753 | if (!(wake_big_ref=loadobject(buffer))) { return 0; }
754 | strcpy(buffer, relpath);
755 | strcat(buffer, "wake_med.obj");
756 | if (!(wake_med_ref=loadobject(buffer))) { return 0; }
757 | strcpy(buffer, relpath);
758 | strcat(buffer, "wake_sml.obj");
759 | if (!(wake_sml_ref=loadobject(buffer))) { return 0; }
760 |
761 | if (!readroutes(mypath, outDescription)) { return failinit(outDescription); } /* read routes.txt */
762 |
763 | ref_view_x =XPLMFindDataRef("sim/graphics/view/view_x");
764 | ref_view_y =XPLMFindDataRef("sim/graphics/view/view_y");
765 | ref_view_z =XPLMFindDataRef("sim/graphics/view/view_z");
766 | ref_view_h =XPLMFindDataRef("sim/graphics/view/view_heading");
767 | ref_plane_lat=XPLMFindDataRef("sim/flightmodel/position/latitude");
768 | ref_plane_lon=XPLMFindDataRef("sim/flightmodel/position/longitude");
769 | ref_night =XPLMFindDataRef("sim/graphics/scenery/percent_lights_on");
770 | ref_rentype =XPLMFindDataRef("sim/graphics/view/world_render_type");
771 | ref_monotonic=XPLMFindDataRef("sim/time/total_running_time_sec");
772 | if (!(ref_view_x && ref_view_y && ref_view_z && ref_view_h && ref_plane_lat && ref_plane_lon && ref_night && ref_rentype && ref_monotonic))
773 | {
774 | strcpy(outDescription, "Can't access X-Plane datarefs!");
775 | return failinit(outDescription);
776 | }
777 |
778 | srand(time(NULL)); /* Seed rng */
779 |
780 | #ifdef DO_ACTIVE_LIST
781 | windowId = XPLMCreateWindow(10, 750, 310, 650, 1, drawdebug, NULL, NULL, NULL); /* size overridden later */
782 | # if IBM
783 | QueryPerformanceFrequency((LARGE_INTEGER *) &ticks_per_sec);
784 | # endif
785 | #endif
786 |
787 | return 1;
788 | }
789 |
790 | PLUGIN_API void XPluginStop(void)
791 | {
792 | #ifdef DO_ACTIVE_LIST
793 | if (windowId) { XPLMDestroyWindow(windowId); }
794 | #endif
795 | }
796 |
797 | PLUGIN_API void XPluginEnable(void)
798 | {
799 | }
800 |
801 | PLUGIN_API void XPluginDisable(void)
802 | {
803 | }
804 |
805 | PLUGIN_API void XPluginReceiveMessage(XPLMPluginID inFrom, long inMessage, void *inParam)
806 | {
807 | if (!done_init)
808 | {
809 | int my_menu_index;
810 | done_init = 1;
811 |
812 | /* Load default ship .objs. Deferred to here so scenery library has been scanned */
813 | if (!models_init(relpath))
814 | return; /* Exit before setting up menus & callbacks */
815 |
816 | /* Finish setup */
817 | ref_renopt = XPLMFindDataRef("sim/private/controls/reno/draw_objs_06"); /* v10+ */
818 | XPLMEnableFeature("XPLM_WANTS_REFLECTIONS", 1);
819 | XPLMRegisterDrawCallback(drawships, xplm_Phase_Objects, 1, NULL); /* Before other 3D objects */
820 |
821 | my_menu_index = XPLMAppendMenuItem(XPLMFindPluginsMenu(), "SeaTraffic", NULL, 1);
822 | my_menu_id = XPLMCreateMenu("SeaTraffic", XPLMFindPluginsMenu(), my_menu_index, menuhandler, NULL);
823 | /* Menu items must be added in order of menu_idx enum */
824 | #ifdef DO_LOCAL_MAP
825 | /* Setup local map */
826 | XPLMAppendMenuItem(my_menu_id, "Draw routes in Local Map", (void*) menu_idx_local_map, 0);
827 | XPLMCheckMenuItem(my_menu_id, menu_idx_local_map, do_local_map ? xplm_Menu_Checked : xplm_Menu_Unchecked);
828 | if (do_local_map)
829 | {
830 | XPLMRegisterDrawCallback(drawmap3d, xplm_Phase_LocalMap3D, 0, NULL);
831 | XPLMRegisterDrawCallback(drawmap2d, xplm_Phase_LocalMap2D, 0, NULL);
832 | }
833 | #endif
834 | need_recalc = 1;
835 | }
836 |
837 | if (ref_renopt) /* change to rendering options causes SCENERY_LOADED */
838 | {
839 | int new_active_max = XPLMGetDatai(ref_renopt) * RENDERING_SCALE;
840 | if (new_active_max > ACTIVE_MAX) { new_active_max = ACTIVE_MAX; }
841 | if (active_max != new_active_max)
842 | {
843 | active_max = new_active_max;
844 | need_recalc = 1;
845 | }
846 | }
847 | }
848 |
--------------------------------------------------------------------------------
/src/seatraffic.h:
--------------------------------------------------------------------------------
1 | /*
2 | * SeaTraffic
3 | *
4 | * (c) Jonathan Harris 2012
5 | *
6 | */
7 |
8 | #ifdef _MSC_VER
9 | # define _USE_MATH_DEFINES
10 | # define _CRT_SECURE_NO_DEPRECATE
11 | # define inline __forceinline
12 | #else
13 | # include
14 | #endif
15 |
16 | #include
17 | #include
18 | #include
19 | #include
20 | #include
21 | #include
22 | #include
23 | #include
24 | #include
25 |
26 | #define XPLM200 /* Requires X-Plane 9.0 or later */
27 | #define XPLM210 /* Uses asynchronous object loading if on v10 */
28 | #include "XPLMDataAccess.h"
29 | #include "XPLMDisplay.h"
30 | #include "XPLMGraphics.h"
31 | #include "XPLMMenus.h"
32 | #include "XPLMPlugin.h"
33 | #include "XPLMScenery.h"
34 | #include "XPLMUtilities.h"
35 | #include "XPUIGraphics.h"
36 |
37 | #if APL
38 | # include
39 | # include
40 | #else
41 | # include
42 | # include
43 | #endif
44 |
45 | #ifdef _MSC_VER
46 | # define PATH_MAX MAX_PATH
47 | #endif
48 |
49 | /* Version of assert that suppresses "variable ... set but not used" if the variable only exists for the purpose of the asserted expression */
50 | #ifdef NDEBUG
51 | # undef assert
52 | # define assert(expr) ((void)(expr))
53 | #endif
54 |
55 | /* constants */
56 | #define DRAW_DISTANCE 20000.f /* can see things a long way on water [m] */
57 | #define DRAW_REFLECT 16000.f
58 | #define DRAW_WAKE 12000.f
59 | #define RENDERING_SCALE 16 /* multiplied by number of objects setting to give maximum number of active routes */
60 | #define ACTIVE_DEFAULT (2*RENDERING_SCALE) /* for v9 */
61 | #define ACTIVE_MAX (4*RENDERING_SCALE) /* "mega tons" */
62 | #define TILE_RANGE 1 /* How many tiles away from plane's tile to render boats */
63 | #define OBJ_VARIANT_MAX 8 /* How many physical objects to use for each virtual object in X-Plane's library */
64 | #define HDG_HOLD_TIME 10.0f /* Only update headings and altitudes periodically [s] */
65 | #define LINGER_TIME 300.0f /* How long should ships hang around at the dock at the end of their route [s] */
66 | #define SHIP_SPACING 8 /* Try to space ships out by this many times their semilen */
67 | #define RADIUS 6378145.f /* from sim/physics/earth_radius_m [m] */
68 | #define WAKE_MINSPEED 5 /* Only draw wakes for ships going this fast [m/s] */
69 | #define WAKE_MED 20 /* Draw medium wake for ships this large (semilen) [m] */
70 | #define WAKE_BIG 40 /* Draw large wake for ships this large (semilen) [m] */
71 | #define LIBRARY_PREFIX "marginal/seatraffic/" /* library names */
72 | #define LIBRARY_TOKEN_MAX 8 /* token size */
73 |
74 | /* rendering options */
75 | #define DO_LOCAL_MAP
76 | enum
77 | {
78 | menu_idx_local_map
79 | } menu_idx;
80 | #ifdef DEBUG
81 | # define DO_ACTIVE_LIST
82 | #endif
83 |
84 | /* types */
85 |
86 | /* Kinds of ships we recognise */
87 | typedef enum /* use -fshort-enums with gcc */
88 | {
89 | leisure, tourist, cruise, ped_sml, ped_med, veh_sml, veh_med, veh_big, cargo, tanker,
90 | ship_kind_count
91 | } ship_kind_t;
92 |
93 | /* Description of a kind of ship */
94 | typedef struct
95 | {
96 | unsigned int speed; /* [m/s] */
97 | float semilen; /* [m] */
98 | char token[LIBRARY_TOKEN_MAX]; /* token in routes.txt */
99 | } ship_t;
100 |
101 | /* Models of a kind of ship */
102 | typedef struct
103 | {
104 | int obj_n; /* Number of physical .objs */
105 | char **names; /* Physical .obj names for sorting */
106 | XPLMObjectRef *refs; /* Physical .obj handles */
107 | } ship_models_t;
108 |
109 | /* Geolocation, used for route paths */
110 | typedef struct
111 | {
112 | float lat, lon; /* we don't need double precision so save some memory */
113 | } loc_t;
114 |
115 | /* Current location */
116 | typedef struct
117 | {
118 | double lat, lon; /* we do want double precision to prevent jerkiness */
119 | } dloc_t;
120 |
121 | /* X-Plane 1x1degree tile number */
122 | typedef struct
123 | {
124 | int south, west;
125 | } tile_t;
126 |
127 | /* A route from routes.txt */
128 | typedef struct
129 | {
130 | loc_t *path;
131 | #if defined(DO_LOCAL_MAP) || defined(DO_ACTIVE_LIST)
132 | char *name;
133 | #endif
134 | ship_kind_t ship_kind;
135 | unsigned short pathlen;
136 | } route_t;
137 |
138 | /* List of routes */
139 | typedef struct route_list_t
140 | {
141 | struct route_list_t *next;
142 | route_t *route;
143 | } route_list_t;
144 |
145 | /* An active route */
146 | typedef struct active_route_t
147 | {
148 | struct active_route_t *next;
149 | const ship_t *ship; /* Ship description */
150 | route_t *route; /* The route it's on */
151 | int direction; /* Traversing path 1=forwards, -1=reverse */
152 | int last_node; /* The last node visited on that route */
153 | int new_node; /* Flag indicating that state needs updating after hitting a new node */
154 | float last_hdg; /* The heading we set off from last_node */
155 | float last_time, next_time; /* Time we left last_node, expected time to hit the next node */
156 | XPLMObjectRef *object_ref; /* X-Plane object */
157 | const char *object_name; /* X-Plane object name for sorting */
158 | dloc_t loc; /* Ship's current location */
159 | double altmsl; /* Altitude */
160 | XPLMProbeRef ref_probe; /* Terrain probe */
161 | XPLMDrawInfo_t drawinfo; /* Where to draw the ship */
162 | #ifdef DO_LOCAL_MAP
163 | int mapx, mapy; /* position in local map */
164 | #endif
165 | } active_route_t;
166 |
167 |
168 | /* globals */
169 | extern const ship_t ships[ship_kind_count];
170 |
171 |
172 | /* prototypes */
173 | int readroutes(char *mypath, char *err);
174 | route_list_t *getroutesbytile(int south, int west);
175 |
176 | route_list_t *route_list_add(route_list_t **route_list, route_t *route);
177 | route_list_t *route_list_get_byroute(route_list_t *route_list, route_t *route);
178 | route_t *route_list_pop(route_list_t **route_list, int n);
179 | int route_list_length(route_list_t *route_list);
180 | void route_list_free(route_list_t **route_list);
181 |
182 | active_route_t *active_route_add(active_route_t **active_routes);
183 | active_route_t *active_route_get(active_route_t *active_routes, int n);
184 | active_route_t *active_route_get_byroute(active_route_t *active_routes, route_t *route);
185 | void active_route_pop(active_route_t **active_routes, int n);
186 | int active_route_length(active_route_t *active_routes);
187 | void active_route_sort(active_route_t **active_routes, int active_n);
188 |
189 | int models_init();
190 | ship_models_t *models_for_tile(int south, int west);
191 | XPLMObjectRef loadobject(const char *path);
192 |
--------------------------------------------------------------------------------
/version.mak:
--------------------------------------------------------------------------------
1 | PROJECT=SeaTraffic
2 | VER=131
3 | VERSION=1.31
4 |
--------------------------------------------------------------------------------