├── .gitignore
├── Cargo.toml
├── LICENSE
├── README.md
├── doc
├── pv-teapot.png
├── skillet-teapot.png
└── skillet.gif
├── res
├── colormaps.json
├── hex.vtu
├── ico-tensor.vtu
├── ico.vtu
├── ico64.vtu
├── icon.png
└── teapot.vtu
├── run.sh
├── src
├── app.rs
├── background.rs
├── colormaps.rs
├── consts.rs
├── edge.glsl
├── frag.glsl
├── lib.rs
├── main.rs
├── math.rs
├── model.rs
├── shaders.rs
├── utils.rs
└── vert.glsl
└── utils
├── genhex.py
└── genhsv.py
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | /target
3 | /Cargo.lock
4 | /scratch
5 |
6 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "skillet"
3 | version = "0.4.0"
4 | edition = "2021"
5 |
6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7 |
8 | [dependencies]
9 | #glium = "*"
10 | glium = "0.32.1"
11 | image = "0.24.3"
12 | serde_json = "1.0.85"
13 | vtkio = "0.6"
14 |
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2022, Jeff Irwin
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | 3. Neither the name of the copyright holder nor the names of its
17 | contributors may be used to endorse or promote products derived from
18 | this software without specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | *It's not rust, it's a layer of seasoning!*
3 |
4 | # Skillet
5 |
6 | Skillet is a lightweight, deep-fried, rust application for interactive scientific visualization with [vtkio](https://github.com/elrnv/vtkio) and [glium](https://github.com/glium/glium).
7 |
8 | Compare skillet with [ParaView](https://www.paraview.org/):
9 |
10 | | Skillet | ParaView |
11 | | ----------- | ----------- |
12 | |  |  |
13 |
14 | # Run
15 |
16 | Provide the `.vtu` filename as an argument:
17 |
18 | cargo run ./res/teapot.vtu
19 |
20 | You can try one of the provided `.vtu` files in the `./res/` directory.
21 |
22 | Equivalently:
23 |
24 | cargo build
25 | # or "cargo build --release"
26 |
27 | ./target/debug/skillet.exe ./res/teapot.vtu
28 |
29 | # or "./target/release/skillet.exe ./res/teapot.vtu"
30 |
31 |
32 |
33 | ## Mouse controls
34 |
35 | Mouse controls mostly follow the ParaView conventions.
36 |
37 | ### LMB drag: rotate
38 |
39 | LMB means "left mouse button".
40 |
41 | ### Mouse wheel scroll: zoom
42 |
43 | ### MMB drag: pan
44 |
45 | ### RMB vertical drag: z pan
46 |
47 | Z pan is similar to scroll zooming.
48 |
49 |
50 |
51 | ## Key controls (case-sensitive)
52 |
53 | ### `c`: cycle vector/tensor component
54 |
55 | ### `d`: cycle point data or cell data array
56 |
57 | ### `e`: toggle edge visibility
58 |
59 | ### `m`: cycle colormap
60 |
61 | ### `w`: cycle warp by vector point data array
62 |
63 | Cell data arrays, scalars, and tensors cannot be used as a warp basis. Only
64 | point data vector arrays are a valid basis.
65 |
66 | To turn off warp by vector, continue cycling with `w` until all vectors have
67 | been cycled through.
68 |
69 | ### `Ctrl+w`: Decrease warp by vector scale factor
70 |
71 | ### `Shift+w`: Increase warp by vector scale factor
72 |
73 |
74 |
75 | # Features
76 |
77 | ## Data array types
78 |
79 | | Data array | Skillet support? |
80 | | ----------- | ----------- |
81 | | Point data | ✔ |
82 | | Cell data | ✔ |
83 | | Scalars | ✔ |
84 | | Vectors | ✔ |
85 | | Tensors | ✔ |
86 | | Generic | ✔ |
87 | | Field attributes | ❌ |
88 |
89 | ## Cell types
90 |
91 | Skillet displays color contours on surfaces. As such, it doesn't make sense to
92 | try to display 0D or 1D cells like `VTK_VERTEX` or `VTK_LINE`. I might
93 | implement types like triangle strips and quadratic cells if I can get some test
94 | data.
95 |
96 | | Cell | Skillet support? |
97 | | ----------- | ----------- |
98 | | Triangle | ✔ |
99 | | Quad | ✔ |
100 | | Tetra | ✔ |
101 | | Hexahedron | ✔ |
102 | | Wedge | ✔ |
103 | | Pyramid | ✔ |
104 | | Vertex cells | ❌ |
105 | | Line cells | ❌ |
106 | | Triangle strip | ❌ |
107 | | Polygon | ❌ |
108 | | Pixel | ❌ |
109 | | Voxel | ❌ |
110 | | Quadratic cells | ❌ |
111 |
112 | ## File formats
113 |
114 | Only binary/ascii `.vtu` files are supported. Most formats can be converted to `.vtu` in ParaView like this:
115 |
116 | 1. Filters -> alphabetical -> append dataset -> apply
117 | 2. File -> save data -> VTK UnstructuredGrid files (\*.vtu) -> OK -> data mode binary or
118 | ascii
119 |
120 | | File | Extension | Skillet support? |
121 | | ----------- | --------- | ----------- |
122 | | Unstructured grid | `.vtu` | ✔ |
123 | | Image data | `.vti` | ❌ |
124 | | Poly data | `.vtp` | ❌ |
125 | | Rectilinear grid | `.vtr` | ❌ |
126 | | Structured grid | `.vts` | ❌ |
127 | | Parallel files | `.*pv*` | ❌ |
128 | | Legacy files | `.vtk` | ❌ |
129 | | Multiple piece data | `.*` | ❌ |
130 |
131 | | Data mode | Skillet support? |
132 | | --------- | ---------------- |
133 | | Ascii | ✔ |
134 | | Binary | ✔ |
135 | | Appended | ❌ |
136 |
137 | ## Operating systems
138 |
139 | | OS | Skillet support? |
140 | | ----------- | ----------- |
141 | | Windows | ✔ |
142 | | Ubuntu | ❌ |
143 |
144 | On Ubuntu, the glutin dependency has an issue finding the fontconfig package.
145 | Your mileage may vary: https://unix.stackexchange.com/questions/330068/package-fontconfig-not-found-despite-having-installed-libfontconfig1-dev
146 |
147 |
--------------------------------------------------------------------------------
/doc/pv-teapot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JeffIrwin/skillet/31652683b365dce59427268d2e4c3c310f08001c/doc/pv-teapot.png
--------------------------------------------------------------------------------
/doc/skillet-teapot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JeffIrwin/skillet/31652683b365dce59427268d2e4c3c310f08001c/doc/skillet-teapot.png
--------------------------------------------------------------------------------
/doc/skillet.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JeffIrwin/skillet/31652683b365dce59427268d2e4c3c310f08001c/doc/skillet.gif
--------------------------------------------------------------------------------
/res/colormaps.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "ColorSpace" : "RGB",
4 | "Name" : "rainbow",
5 | "RGBPoints" :
6 | [
7 | -1,
8 | 0,
9 | 0,
10 | 1,
11 |
12 | -1,
13 | 0,
14 | 0.25,
15 | 1,
16 |
17 | -1,
18 | 0,
19 | 0.5,
20 | 1,
21 |
22 | -1,
23 | 0,
24 | 0.75,
25 | 1,
26 |
27 | -1,
28 | 0,
29 | 1,
30 | 1,
31 |
32 | -1,
33 | 0,
34 | 1,
35 | 0.75,
36 |
37 | -1,
38 | 0,
39 | 1,
40 | 0.5,
41 |
42 | -1,
43 | 0,
44 | 1,
45 | 0.25,
46 |
47 | -1,
48 | 0,
49 | 1,
50 | 0,
51 |
52 | -1,
53 | 0.25,
54 | 1,
55 | 0,
56 |
57 | -1,
58 | 0.5,
59 | 1,
60 | 0,
61 |
62 | -1,
63 | 0.75,
64 | 1,
65 | 0,
66 |
67 | -1,
68 | 1,
69 | 1,
70 | 0,
71 |
72 | -1,
73 | 1,
74 | 0.75,
75 | 0,
76 |
77 | -1,
78 | 1,
79 | 0.5,
80 | 0,
81 |
82 | -1,
83 | 1,
84 | 0.25,
85 | 0,
86 |
87 | -1,
88 | 1,
89 | 0,
90 | 0
91 | ]
92 | },
93 | {
94 | "ColorSpace" : "Diverging",
95 | "Creator" : "Nathaniel J. Smith & Stefan van der Walt",
96 | "DefaultMap" : true,
97 | "License" : "CC0",
98 | "Name" : "Inferno (matplotlib)",
99 | "NanColor" :
100 | [
101 | 0,
102 | 1,
103 | 0
104 | ],
105 | "RGBPoints" :
106 | [
107 | 0.0,
108 | 0.001462,
109 | 0.000466,
110 | 0.013866,
111 | 0.0039220000000000001,
112 | 0.0022669999999999999,
113 | 0.0012700000000000001,
114 | 0.01857,
115 | 0.0078429999999999993,
116 | 0.0032989999999999998,
117 | 0.0022490000000000001,
118 | 0.024239,
119 | 0.011764999999999999,
120 | 0.0045469999999999998,
121 | 0.003392,
122 | 0.030908999999999999,
123 | 0.015685999999999999,
124 | 0.0060060000000000001,
125 | 0.004692,
126 | 0.038558000000000002,
127 | 0.019608,
128 | 0.0076759999999999997,
129 | 0.006136,
130 | 0.046836000000000003,
131 | 0.023529000000000001,
132 | 0.0095610000000000001,
133 | 0.0077130000000000002,
134 | 0.055142999999999998,
135 | 0.027451,
136 | 0.011663,
137 | 0.009417,
138 | 0.063460000000000003,
139 | 0.031372999999999998,
140 | 0.013995,
141 | 0.011225000000000001,
142 | 0.071861999999999995,
143 | 0.035293999999999999,
144 | 0.016560999999999999,
145 | 0.013136,
146 | 0.080282000000000006,
147 | 0.039216000000000001,
148 | 0.019373000000000001,
149 | 0.015133000000000001,
150 | 0.088766999999999999,
151 | 0.043137000000000002,
152 | 0.022447000000000002,
153 | 0.017198999999999999,
154 | 0.097326999999999997,
155 | 0.047058999999999997,
156 | 0.025793,
157 | 0.019331000000000001,
158 | 0.10593,
159 | 0.050979999999999998,
160 | 0.029432,
161 | 0.021503000000000001,
162 | 0.114621,
163 | 0.054901999999999999,
164 | 0.033384999999999998,
165 | 0.023702000000000001,
166 | 0.12339700000000001,
167 | 0.058824000000000001,
168 | 0.037668,
169 | 0.025921,
170 | 0.13223199999999999,
171 | 0.062744999999999995,
172 | 0.042252999999999999,
173 | 0.028139000000000001,
174 | 0.14114099999999999,
175 | 0.066667000000000004,
176 | 0.046914999999999998,
177 | 0.030324,
178 | 0.15016399999999999,
179 | 0.070587999999999998,
180 | 0.051644000000000002,
181 | 0.032474000000000003,
182 | 0.15925400000000001,
183 | 0.074510000000000007,
184 | 0.056448999999999999,
185 | 0.034569000000000003,
186 | 0.16841400000000001,
187 | 0.078431000000000001,
188 | 0.061339999999999999,
189 | 0.036589999999999998,
190 | 0.17764199999999999,
191 | 0.082352999999999996,
192 | 0.066331000000000001,
193 | 0.038503999999999997,
194 | 0.18696199999999999,
195 | 0.086275000000000004,
196 | 0.071429000000000006,
197 | 0.040294000000000003,
198 | 0.196354,
199 | 0.090195999999999998,
200 | 0.076636999999999997,
201 | 0.041904999999999998,
202 | 0.20579900000000001,
203 | 0.094117999999999993,
204 | 0.081961999999999993,
205 | 0.043327999999999998,
206 | 0.21528900000000001,
207 | 0.098039000000000001,
208 | 0.087411000000000003,
209 | 0.044555999999999998,
210 | 0.22481300000000001,
211 | 0.101961,
212 | 0.092990000000000003,
213 | 0.045582999999999999,
214 | 0.23435800000000001,
215 | 0.105882,
216 | 0.098701999999999998,
217 | 0.046401999999999999,
218 | 0.24390400000000001,
219 | 0.109804,
220 | 0.10455100000000001,
221 | 0.047008000000000001,
222 | 0.25342999999999999,
223 | 0.11372500000000001,
224 | 0.110536,
225 | 0.047398999999999997,
226 | 0.26291199999999998,
227 | 0.117647,
228 | 0.116656,
229 | 0.047573999999999998,
230 | 0.27232099999999998,
231 | 0.121569,
232 | 0.122908,
233 | 0.047536000000000002,
234 | 0.28162399999999999,
235 | 0.12548999999999999,
236 | 0.12928500000000001,
237 | 0.047293000000000002,
238 | 0.29078799999999999,
239 | 0.129412,
240 | 0.13577800000000001,
241 | 0.046856000000000002,
242 | 0.29977599999999999,
243 | 0.13333300000000001,
244 | 0.142378,
245 | 0.046241999999999998,
246 | 0.30855300000000002,
247 | 0.13725499999999999,
248 | 0.14907300000000001,
249 | 0.045468000000000001,
250 | 0.31708500000000001,
251 | 0.141176,
252 | 0.15584999999999999,
253 | 0.044559000000000001,
254 | 0.32533800000000002,
255 | 0.145098,
256 | 0.162689,
257 | 0.043554000000000002,
258 | 0.33327699999999999,
259 | 0.14902000000000001,
260 | 0.169575,
261 | 0.042488999999999999,
262 | 0.34087400000000001,
263 | 0.15294099999999999,
264 | 0.17649300000000001,
265 | 0.041402000000000001,
266 | 0.348111,
267 | 0.156863,
268 | 0.18342900000000001,
269 | 0.040328999999999997,
270 | 0.35497099999999998,
271 | 0.16078400000000001,
272 | 0.19036700000000001,
273 | 0.039308999999999997,
274 | 0.36144700000000002,
275 | 0.16470599999999999,
276 | 0.197297,
277 | 0.038399999999999997,
278 | 0.367535,
279 | 0.168627,
280 | 0.204209,
281 | 0.037631999999999999,
282 | 0.37323800000000001,
283 | 0.17254900000000001,
284 | 0.211095,
285 | 0.03703,
286 | 0.37856299999999998,
287 | 0.17647099999999999,
288 | 0.217949,
289 | 0.036615000000000002,
290 | 0.38352199999999997,
291 | 0.180392,
292 | 0.22476299999999999,
293 | 0.036405,
294 | 0.388129,
295 | 0.18431400000000001,
296 | 0.23153799999999999,
297 | 0.036405,
298 | 0.39240000000000003,
299 | 0.18823500000000001,
300 | 0.23827300000000001,
301 | 0.036621000000000001,
302 | 0.39635300000000001,
303 | 0.19215699999999999,
304 | 0.24496699999999999,
305 | 0.037054999999999998,
306 | 0.400007,
307 | 0.196078,
308 | 0.25162000000000001,
309 | 0.037705000000000002,
310 | 0.40337800000000001,
311 | 0.20000000000000001,
312 | 0.25823400000000002,
313 | 0.038571000000000001,
314 | 0.40648499999999999,
315 | 0.20392199999999999,
316 | 0.26480999999999999,
317 | 0.039647000000000002,
318 | 0.40934500000000001,
319 | 0.207843,
320 | 0.271347,
321 | 0.040922,
322 | 0.41197600000000001,
323 | 0.21176500000000001,
324 | 0.27784999999999999,
325 | 0.042353000000000002,
326 | 0.41439199999999998,
327 | 0.21568599999999999,
328 | 0.28432099999999999,
329 | 0.043933,
330 | 0.41660799999999998,
331 | 0.219608,
332 | 0.29076299999999999,
333 | 0.045643999999999997,
334 | 0.41863699999999998,
335 | 0.22352900000000001,
336 | 0.297178,
337 | 0.047469999999999998,
338 | 0.420491,
339 | 0.22745099999999999,
340 | 0.303568,
341 | 0.049396000000000002,
342 | 0.422182,
343 | 0.231373,
344 | 0.30993500000000002,
345 | 0.051407000000000001,
346 | 0.42372100000000001,
347 | 0.235294,
348 | 0.31628200000000001,
349 | 0.053490000000000003,
350 | 0.42511599999999999,
351 | 0.23921600000000001,
352 | 0.32261000000000001,
353 | 0.055634000000000003,
354 | 0.42637700000000001,
355 | 0.24313699999999999,
356 | 0.32892100000000002,
357 | 0.057827000000000003,
358 | 0.42751099999999997,
359 | 0.247059,
360 | 0.33521699999999999,
361 | 0.060060000000000002,
362 | 0.42852400000000002,
363 | 0.25097999999999998,
364 | 0.34150000000000003,
365 | 0.062324999999999998,
366 | 0.429425,
367 | 0.25490200000000002,
368 | 0.347771,
369 | 0.064616000000000007,
370 | 0.43021700000000002,
371 | 0.258824,
372 | 0.35403200000000001,
373 | 0.066924999999999998,
374 | 0.43090600000000001,
375 | 0.26274500000000001,
376 | 0.36028399999999999,
377 | 0.069247000000000003,
378 | 0.43149700000000002,
379 | 0.26666699999999999,
380 | 0.36652899999999999,
381 | 0.071579000000000004,
382 | 0.43199399999999999,
383 | 0.270588,
384 | 0.37276799999999999,
385 | 0.073914999999999995,
386 | 0.43240000000000001,
387 | 0.27450999999999998,
388 | 0.37900099999999998,
389 | 0.076253000000000001,
390 | 0.43271900000000002,
391 | 0.27843099999999998,
392 | 0.38522800000000001,
393 | 0.078590999999999994,
394 | 0.43295499999999998,
395 | 0.28235300000000002,
396 | 0.391453,
397 | 0.080926999999999999,
398 | 0.43310900000000002,
399 | 0.286275,
400 | 0.39767400000000003,
401 | 0.083256999999999998,
402 | 0.43318299999999998,
403 | 0.29019600000000001,
404 | 0.40389399999999998,
405 | 0.085580000000000003,
406 | 0.43317899999999998,
407 | 0.29411799999999999,
408 | 0.41011300000000001,
409 | 0.087896000000000002,
410 | 0.43309799999999998,
411 | 0.298039,
412 | 0.41633100000000001,
413 | 0.090203000000000005,
414 | 0.43294300000000002,
415 | 0.30196099999999998,
416 | 0.42254900000000001,
417 | 0.092501,
418 | 0.43271399999999999,
419 | 0.30588199999999999,
420 | 0.42876799999999998,
421 | 0.094789999999999999,
422 | 0.43241200000000002,
423 | 0.30980400000000002,
424 | 0.43498700000000001,
425 | 0.097069000000000003,
426 | 0.43203900000000001,
427 | 0.31372499999999998,
428 | 0.44120700000000002,
429 | 0.099337999999999996,
430 | 0.43159399999999998,
431 | 0.31764700000000001,
432 | 0.44742799999999999,
433 | 0.10159700000000001,
434 | 0.43108000000000002,
435 | 0.32156899999999999,
436 | 0.45365100000000003,
437 | 0.103848,
438 | 0.43049799999999999,
439 | 0.32549,
440 | 0.45987499999999998,
441 | 0.106089,
442 | 0.42984600000000001,
443 | 0.32941199999999998,
444 | 0.46610000000000001,
445 | 0.108322,
446 | 0.42912499999999998,
447 | 0.33333299999999999,
448 | 0.47232800000000003,
449 | 0.11054700000000001,
450 | 0.42833399999999999,
451 | 0.33725500000000003,
452 | 0.47855799999999998,
453 | 0.112764,
454 | 0.42747499999999999,
455 | 0.34117599999999998,
456 | 0.48478900000000003,
457 | 0.11497400000000001,
458 | 0.42654799999999998,
459 | 0.34509800000000002,
460 | 0.49102200000000001,
461 | 0.11717900000000001,
462 | 0.42555199999999999,
463 | 0.34902,
464 | 0.497257,
465 | 0.119379,
466 | 0.42448799999999998,
467 | 0.352941,
468 | 0.50349299999999997,
469 | 0.121575,
470 | 0.42335600000000001,
471 | 0.35686299999999999,
472 | 0.50973000000000002,
473 | 0.123769,
474 | 0.42215599999999998,
475 | 0.36078399999999999,
476 | 0.51596699999999995,
477 | 0.12595999999999999,
478 | 0.42088700000000001,
479 | 0.36470599999999997,
480 | 0.52220599999999995,
481 | 0.12814999999999999,
482 | 0.41954900000000001,
483 | 0.36862699999999998,
484 | 0.52844400000000002,
485 | 0.13034100000000001,
486 | 0.41814200000000001,
487 | 0.37254900000000002,
488 | 0.53468300000000002,
489 | 0.13253400000000001,
490 | 0.41666700000000001,
491 | 0.376471,
492 | 0.54091999999999996,
493 | 0.13472899999999999,
494 | 0.41512300000000002,
495 | 0.38039200000000001,
496 | 0.547157,
497 | 0.136929,
498 | 0.41351100000000002,
499 | 0.38431399999999999,
500 | 0.553392,
501 | 0.13913400000000001,
502 | 0.411829,
503 | 0.388235,
504 | 0.55962400000000001,
505 | 0.141346,
506 | 0.410078,
507 | 0.39215699999999998,
508 | 0.56585399999999997,
509 | 0.143567,
510 | 0.40825800000000001,
511 | 0.39607799999999999,
512 | 0.57208099999999995,
513 | 0.14579700000000001,
514 | 0.40636899999999998,
515 | 0.40000000000000002,
516 | 0.57830400000000004,
517 | 0.148039,
518 | 0.40441100000000002,
519 | 0.403922,
520 | 0.58452099999999996,
521 | 0.15029400000000001,
522 | 0.40238499999999999,
523 | 0.40784300000000001,
524 | 0.59073399999999998,
525 | 0.152563,
526 | 0.40028999999999998,
527 | 0.41176499999999999,
528 | 0.59694000000000003,
529 | 0.15484800000000001,
530 | 0.39812500000000001,
531 | 0.415686,
532 | 0.60313899999999998,
533 | 0.15715100000000001,
534 | 0.39589099999999999,
535 | 0.41960799999999998,
536 | 0.60933000000000004,
537 | 0.159474,
538 | 0.39358900000000002,
539 | 0.42352899999999999,
540 | 0.61551299999999998,
541 | 0.16181699999999999,
542 | 0.39121899999999998,
543 | 0.42745100000000003,
544 | 0.62168500000000004,
545 | 0.164184,
546 | 0.38878099999999999,
547 | 0.43137300000000001,
548 | 0.62784700000000004,
549 | 0.166575,
550 | 0.38627600000000001,
551 | 0.43529400000000001,
552 | 0.63399799999999995,
553 | 0.168992,
554 | 0.38370399999999999,
555 | 0.439216,
556 | 0.64013500000000001,
557 | 0.17143800000000001,
558 | 0.38106499999999999,
559 | 0.443137,
560 | 0.64625999999999995,
561 | 0.17391400000000001,
562 | 0.378359,
563 | 0.44705899999999998,
564 | 0.65236899999999998,
565 | 0.17642099999999999,
566 | 0.37558599999999998,
567 | 0.45097999999999999,
568 | 0.65846300000000002,
569 | 0.17896200000000001,
570 | 0.37274800000000002,
571 | 0.45490199999999997,
572 | 0.66454000000000002,
573 | 0.18153900000000001,
574 | 0.36984600000000001,
575 | 0.45882400000000001,
576 | 0.67059899999999995,
577 | 0.18415300000000001,
578 | 0.36687900000000001,
579 | 0.46274500000000002,
580 | 0.67663799999999996,
581 | 0.186807,
582 | 0.36384899999999998,
583 | 0.466667,
584 | 0.68265600000000004,
585 | 0.189501,
586 | 0.36075699999999999,
587 | 0.47058800000000001,
588 | 0.68865299999999996,
589 | 0.19223899999999999,
590 | 0.357603,
591 | 0.47450999999999999,
592 | 0.69462699999999999,
593 | 0.195021,
594 | 0.35438799999999998,
595 | 0.478431,
596 | 0.70057599999999998,
597 | 0.197851,
598 | 0.35111300000000001,
599 | 0.48235299999999998,
600 | 0.70650000000000002,
601 | 0.20072799999999999,
602 | 0.347777,
603 | 0.48627500000000001,
604 | 0.71239600000000003,
605 | 0.203656,
606 | 0.34438299999999999,
607 | 0.49019600000000002,
608 | 0.71826400000000001,
609 | 0.20663599999999999,
610 | 0.34093099999999998,
611 | 0.494118,
612 | 0.72410300000000005,
613 | 0.20967,
614 | 0.337424,
615 | 0.49803900000000001,
616 | 0.72990900000000003,
617 | 0.212759,
618 | 0.33386100000000002,
619 | 0.50196099999999999,
620 | 0.73568299999999998,
621 | 0.21590599999999999,
622 | 0.33024500000000001,
623 | 0.50588200000000005,
624 | 0.74142300000000005,
625 | 0.219112,
626 | 0.32657599999999998,
627 | 0.50980400000000003,
628 | 0.74712699999999999,
629 | 0.22237799999999999,
630 | 0.32285599999999998,
631 | 0.51372499999999999,
632 | 0.75279399999999996,
633 | 0.22570599999999999,
634 | 0.31908500000000001,
635 | 0.51764699999999997,
636 | 0.75842200000000004,
637 | 0.229097,
638 | 0.31526599999999999,
639 | 0.52156899999999995,
640 | 0.76400999999999997,
641 | 0.23255400000000001,
642 | 0.31139899999999998,
643 | 0.52549000000000001,
644 | 0.76955600000000002,
645 | 0.23607700000000001,
646 | 0.30748500000000001,
647 | 0.52941199999999999,
648 | 0.77505900000000005,
649 | 0.23966699999999999,
650 | 0.30352600000000002,
651 | 0.53333299999999995,
652 | 0.78051700000000002,
653 | 0.24332699999999999,
654 | 0.29952299999999998,
655 | 0.53725500000000004,
656 | 0.78592899999999999,
657 | 0.247056,
658 | 0.29547699999999999,
659 | 0.54117599999999999,
660 | 0.79129300000000002,
661 | 0.25085600000000002,
662 | 0.29138999999999998,
663 | 0.54509799999999997,
664 | 0.79660699999999995,
665 | 0.25472800000000001,
666 | 0.28726400000000002,
667 | 0.54901999999999995,
668 | 0.801871,
669 | 0.25867400000000002,
670 | 0.28309899999999999,
671 | 0.55294100000000002,
672 | 0.80708199999999997,
673 | 0.26269199999999998,
674 | 0.27889799999999998,
675 | 0.556863,
676 | 0.81223900000000004,
677 | 0.26678600000000002,
678 | 0.27466099999999999,
679 | 0.56078399999999995,
680 | 0.81734099999999998,
681 | 0.27095399999999997,
682 | 0.27039000000000002,
683 | 0.56470600000000004,
684 | 0.82238599999999995,
685 | 0.27519700000000002,
686 | 0.26608500000000002,
687 | 0.56862699999999999,
688 | 0.827372,
689 | 0.27951700000000002,
690 | 0.26174999999999998,
691 | 0.57254899999999997,
692 | 0.83229900000000001,
693 | 0.28391300000000003,
694 | 0.25738299999999997,
695 | 0.57647099999999996,
696 | 0.83716500000000005,
697 | 0.288385,
698 | 0.25298799999999999,
699 | 0.58039200000000002,
700 | 0.84196899999999997,
701 | 0.292933,
702 | 0.24856400000000001,
703 | 0.584314,
704 | 0.84670900000000004,
705 | 0.29755900000000002,
706 | 0.244113,
707 | 0.58823499999999995,
708 | 0.85138400000000003,
709 | 0.30225999999999997,
710 | 0.23963599999999999,
711 | 0.59215700000000004,
712 | 0.85599199999999998,
713 | 0.30703799999999998,
714 | 0.23513300000000001,
715 | 0.596078,
716 | 0.86053299999999999,
717 | 0.311892,
718 | 0.23060600000000001,
719 | 0.59999999999999998,
720 | 0.86500600000000005,
721 | 0.31682199999999999,
722 | 0.22605500000000001,
723 | 0.60392199999999996,
724 | 0.86940899999999999,
725 | 0.32182699999999997,
726 | 0.22148200000000001,
727 | 0.60784300000000002,
728 | 0.87374099999999999,
729 | 0.32690599999999997,
730 | 0.216886,
731 | 0.611765,
732 | 0.87800100000000003,
733 | 0.33206000000000002,
734 | 0.21226800000000001,
735 | 0.61568599999999996,
736 | 0.88218799999999997,
737 | 0.337287,
738 | 0.20762800000000001,
739 | 0.61960800000000005,
740 | 0.88630200000000003,
741 | 0.342586,
742 | 0.20296800000000001,
743 | 0.623529,
744 | 0.89034100000000005,
745 | 0.34795700000000002,
746 | 0.19828599999999999,
747 | 0.62745099999999998,
748 | 0.89430500000000002,
749 | 0.35339900000000002,
750 | 0.19358400000000001,
751 | 0.63137299999999996,
752 | 0.89819199999999999,
753 | 0.35891099999999998,
754 | 0.18886,
755 | 0.63529400000000003,
756 | 0.902003,
757 | 0.36449199999999998,
758 | 0.184116,
759 | 0.63921600000000001,
760 | 0.90573499999999996,
761 | 0.37014000000000002,
762 | 0.17935000000000001,
763 | 0.64313699999999996,
764 | 0.90939000000000003,
765 | 0.37585600000000002,
766 | 0.174563,
767 | 0.64705900000000005,
768 | 0.91296600000000006,
769 | 0.38163599999999998,
770 | 0.16975499999999999,
771 | 0.65098,
772 | 0.916462,
773 | 0.38748100000000002,
774 | 0.16492399999999999,
775 | 0.65490199999999998,
776 | 0.919879,
777 | 0.39338899999999999,
778 | 0.16006999999999999,
779 | 0.65882399999999997,
780 | 0.92321500000000001,
781 | 0.39935900000000002,
782 | 0.155193,
783 | 0.66274500000000003,
784 | 0.92647000000000002,
785 | 0.405389,
786 | 0.15029200000000001,
787 | 0.66666700000000001,
788 | 0.92964400000000003,
789 | 0.41147899999999998,
790 | 0.145367,
791 | 0.67058799999999996,
792 | 0.93273700000000004,
793 | 0.41762700000000003,
794 | 0.14041699999999999,
795 | 0.67451000000000005,
796 | 0.935747,
797 | 0.42383100000000001,
798 | 0.13544,
799 | 0.67843100000000001,
800 | 0.93867500000000004,
801 | 0.430091,
802 | 0.130438,
803 | 0.68235299999999999,
804 | 0.94152100000000005,
805 | 0.43640499999999999,
806 | 0.12540899999999999,
807 | 0.68627499999999997,
808 | 0.94428500000000004,
809 | 0.442772,
810 | 0.120354,
811 | 0.69019600000000003,
812 | 0.94696499999999995,
813 | 0.44919100000000001,
814 | 0.115272,
815 | 0.69411800000000001,
816 | 0.94956200000000002,
817 | 0.45566000000000001,
818 | 0.110164,
819 | 0.69803899999999997,
820 | 0.952075,
821 | 0.46217799999999998,
822 | 0.105031,
823 | 0.70196099999999995,
824 | 0.95450599999999997,
825 | 0.46874399999999999,
826 | 0.099874000000000004,
827 | 0.70588200000000001,
828 | 0.95685200000000004,
829 | 0.475356,
830 | 0.094695000000000001,
831 | 0.70980399999999999,
832 | 0.95911400000000002,
833 | 0.482014,
834 | 0.089498999999999995,
835 | 0.71372500000000005,
836 | 0.96129299999999995,
837 | 0.48871599999999998,
838 | 0.084289000000000003,
839 | 0.71764700000000003,
840 | 0.96338699999999999,
841 | 0.49546200000000001,
842 | 0.079073000000000004,
843 | 0.72156900000000002,
844 | 0.96539699999999995,
845 | 0.50224899999999995,
846 | 0.073858999999999994,
847 | 0.72548999999999997,
848 | 0.96732200000000002,
849 | 0.50907800000000003,
850 | 0.068658999999999998,
851 | 0.72941199999999995,
852 | 0.969163,
853 | 0.51594600000000002,
854 | 0.063488000000000003,
855 | 0.73333300000000001,
856 | 0.97091899999999998,
857 | 0.52285300000000001,
858 | 0.058367000000000002,
859 | 0.73725499999999999,
860 | 0.97258999999999995,
861 | 0.52979799999999999,
862 | 0.053324000000000003,
863 | 0.74117599999999995,
864 | 0.97417600000000004,
865 | 0.53678000000000003,
866 | 0.048391999999999998,
867 | 0.74509800000000004,
868 | 0.97567700000000002,
869 | 0.543798,
870 | 0.043617999999999997,
871 | 0.74902000000000002,
872 | 0.97709199999999996,
873 | 0.55084999999999995,
874 | 0.039050000000000001,
875 | 0.75294099999999997,
876 | 0.97842200000000001,
877 | 0.55793700000000002,
878 | 0.034930999999999997,
879 | 0.75686299999999995,
880 | 0.97966600000000004,
881 | 0.56505700000000003,
882 | 0.031408999999999999,
883 | 0.76078400000000002,
884 | 0.98082400000000003,
885 | 0.57220899999999997,
886 | 0.028507999999999999,
887 | 0.764706,
888 | 0.98189499999999996,
889 | 0.57939200000000002,
890 | 0.026249999999999999,
891 | 0.76862699999999995,
892 | 0.982881,
893 | 0.58660599999999996,
894 | 0.024660999999999999,
895 | 0.77254900000000004,
896 | 0.98377899999999996,
897 | 0.59384899999999996,
898 | 0.023769999999999999,
899 | 0.77647100000000002,
900 | 0.98459099999999999,
901 | 0.60112200000000005,
902 | 0.023605999999999999,
903 | 0.78039199999999997,
904 | 0.98531500000000005,
905 | 0.60842200000000002,
906 | 0.024202000000000001,
907 | 0.78431399999999996,
908 | 0.98595200000000005,
909 | 0.61575000000000002,
910 | 0.025592,
911 | 0.78823500000000002,
912 | 0.98650199999999999,
913 | 0.62310500000000002,
914 | 0.027813999999999998,
915 | 0.792157,
916 | 0.98696399999999995,
917 | 0.63048499999999996,
918 | 0.030908000000000001,
919 | 0.79607799999999995,
920 | 0.98733700000000002,
921 | 0.63788999999999996,
922 | 0.034916000000000003,
923 | 0.80000000000000004,
924 | 0.987622,
925 | 0.64532,
926 | 0.039885999999999998,
927 | 0.80392200000000003,
928 | 0.987819,
929 | 0.65277300000000005,
930 | 0.045581000000000003,
931 | 0.80784299999999998,
932 | 0.98792599999999997,
933 | 0.66025,
934 | 0.051749999999999997,
935 | 0.81176499999999996,
936 | 0.98794499999999996,
937 | 0.66774800000000001,
938 | 0.058328999999999999,
939 | 0.81568600000000002,
940 | 0.98787400000000003,
941 | 0.67526699999999995,
942 | 0.065256999999999996,
943 | 0.819608,
944 | 0.98771399999999998,
945 | 0.68280700000000005,
946 | 0.072488999999999998,
947 | 0.82352899999999996,
948 | 0.98746400000000001,
949 | 0.69036600000000004,
950 | 0.079990000000000006,
951 | 0.82745100000000005,
952 | 0.987124,
953 | 0.69794400000000001,
954 | 0.087731000000000003,
955 | 0.83137300000000003,
956 | 0.98669399999999996,
957 | 0.70553999999999994,
958 | 0.095694000000000001,
959 | 0.83529399999999998,
960 | 0.98617500000000002,
961 | 0.71315300000000004,
962 | 0.103863,
963 | 0.83921599999999996,
964 | 0.98556600000000005,
965 | 0.72078200000000003,
966 | 0.112229,
967 | 0.84313700000000003,
968 | 0.98486499999999999,
969 | 0.72842700000000005,
970 | 0.120785,
971 | 0.84705900000000001,
972 | 0.98407500000000003,
973 | 0.73608700000000005,
974 | 0.129527,
975 | 0.85097999999999996,
976 | 0.98319599999999996,
977 | 0.74375800000000003,
978 | 0.13845299999999999,
979 | 0.85490200000000005,
980 | 0.98222799999999999,
981 | 0.75144200000000005,
982 | 0.147565,
983 | 0.85882400000000003,
984 | 0.98117299999999996,
985 | 0.759135,
986 | 0.156863,
987 | 0.86274499999999998,
988 | 0.98003200000000001,
989 | 0.76683699999999999,
990 | 0.166353,
991 | 0.86666699999999997,
992 | 0.97880599999999995,
993 | 0.77454500000000004,
994 | 0.176037,
995 | 0.87058800000000003,
996 | 0.97749699999999995,
997 | 0.78225800000000001,
998 | 0.185923,
999 | 0.87451000000000001,
1000 | 0.97610799999999998,
1001 | 0.78997399999999995,
1002 | 0.196018,
1003 | 0.87843099999999996,
1004 | 0.974638,
1005 | 0.79769199999999996,
1006 | 0.20633199999999999,
1007 | 0.88235300000000005,
1008 | 0.97308799999999995,
1009 | 0.80540900000000004,
1010 | 0.21687699999999999,
1011 | 0.88627500000000003,
1012 | 0.971468,
1013 | 0.81312200000000001,
1014 | 0.227658,
1015 | 0.89019599999999999,
1016 | 0.96978299999999995,
1017 | 0.82082500000000003,
1018 | 0.23868600000000001,
1019 | 0.89411799999999997,
1020 | 0.96804100000000004,
1021 | 0.828515,
1022 | 0.249972,
1023 | 0.89803900000000003,
1024 | 0.96624299999999996,
1025 | 0.83619100000000002,
1026 | 0.26153399999999999,
1027 | 0.90196100000000001,
1028 | 0.96439399999999997,
1029 | 0.84384800000000004,
1030 | 0.273391,
1031 | 0.90588199999999997,
1032 | 0.96251699999999996,
1033 | 0.85147600000000001,
1034 | 0.28554600000000002,
1035 | 0.90980399999999995,
1036 | 0.96062599999999998,
1037 | 0.85906899999999997,
1038 | 0.29801,
1039 | 0.91372500000000001,
1040 | 0.95872000000000002,
1041 | 0.86662399999999995,
1042 | 0.31081999999999999,
1043 | 0.91764699999999999,
1044 | 0.95683399999999996,
1045 | 0.87412900000000004,
1046 | 0.32397399999999998,
1047 | 0.92156899999999997,
1048 | 0.95499699999999998,
1049 | 0.88156900000000005,
1050 | 0.33747500000000002,
1051 | 0.92549000000000003,
1052 | 0.95321500000000003,
1053 | 0.88894200000000001,
1054 | 0.35136899999999999,
1055 | 0.92941200000000002,
1056 | 0.951546,
1057 | 0.89622599999999997,
1058 | 0.36562699999999998,
1059 | 0.93333299999999997,
1060 | 0.95001800000000003,
1061 | 0.90340900000000002,
1062 | 0.38027100000000003,
1063 | 0.93725499999999995,
1064 | 0.94868300000000005,
1065 | 0.91047299999999998,
1066 | 0.395289,
1067 | 0.94117600000000001,
1068 | 0.94759400000000005,
1069 | 0.91739899999999996,
1070 | 0.410665,
1071 | 0.94509799999999999,
1072 | 0.94680900000000001,
1073 | 0.92416799999999999,
1074 | 0.426373,
1075 | 0.94901999999999997,
1076 | 0.94639200000000001,
1077 | 0.93076099999999995,
1078 | 0.44236700000000001,
1079 | 0.95294100000000004,
1080 | 0.94640299999999999,
1081 | 0.93715899999999996,
1082 | 0.458592,
1083 | 0.95686300000000002,
1084 | 0.94690300000000005,
1085 | 0.94334799999999996,
1086 | 0.47497,
1087 | 0.96078399999999997,
1088 | 0.94793700000000003,
1089 | 0.949318,
1090 | 0.49142599999999997,
1091 | 0.96470599999999995,
1092 | 0.94954499999999997,
1093 | 0.955063,
1094 | 0.50785999999999998,
1095 | 0.96862700000000002,
1096 | 0.95174000000000003,
1097 | 0.96058699999999997,
1098 | 0.52420299999999997,
1099 | 0.972549,
1100 | 0.95452899999999996,
1101 | 0.96589599999999998,
1102 | 0.54036099999999998,
1103 | 0.97647099999999998,
1104 | 0.95789599999999997,
1105 | 0.97100299999999995,
1106 | 0.55627499999999996,
1107 | 0.98039200000000004,
1108 | 0.961812,
1109 | 0.97592400000000001,
1110 | 0.57192500000000002,
1111 | 0.98431400000000002,
1112 | 0.96624900000000002,
1113 | 0.98067800000000005,
1114 | 0.58720600000000001,
1115 | 0.98823499999999997,
1116 | 0.97116199999999997,
1117 | 0.98528199999999999,
1118 | 0.60215399999999997,
1119 | 0.99215699999999996,
1120 | 0.97651100000000002,
1121 | 0.98975299999999999,
1122 | 0.61675999999999997,
1123 | 0.99607800000000002,
1124 | 0.98225700000000005,
1125 | 0.99410900000000002,
1126 | 0.63101700000000005,
1127 | 1.0,
1128 | 0.98836199999999996,
1129 | 0.99836400000000003,
1130 | 0.64492400000000005
1131 | ],
1132 | "Source" : "https://github.com/BIDS/colormap/blob/master/colormaps.py"
1133 | },
1134 | {
1135 | "ColorSpace" : "Diverging",
1136 | "Creator" : "Eric Firing",
1137 | "DefaultMap" : true,
1138 | "License" : "CC0",
1139 | "Name" : "Viridis (matplotlib)",
1140 | "NanColor" :
1141 | [
1142 | 1,
1143 | 0,
1144 | 0
1145 | ],
1146 | "RGBPoints" :
1147 | [
1148 | 0.0,
1149 | 0.26700400000000002,
1150 | 0.0048739999999999999,
1151 | 0.32941500000000001,
1152 | 0.0039220000000000001,
1153 | 0.26851000000000003,
1154 | 0.0096050000000000007,
1155 | 0.33542699999999998,
1156 | 0.0078429999999999993,
1157 | 0.26994400000000002,
1158 | 0.014625000000000001,
1159 | 0.34137899999999999,
1160 | 0.011764999999999999,
1161 | 0.27130500000000002,
1162 | 0.019942000000000001,
1163 | 0.34726899999999999,
1164 | 0.015685999999999999,
1165 | 0.272594,
1166 | 0.025562999999999999,
1167 | 0.35309299999999999,
1168 | 0.019608,
1169 | 0.27380900000000002,
1170 | 0.031496999999999997,
1171 | 0.35885299999999998,
1172 | 0.023529000000000001,
1173 | 0.27495199999999997,
1174 | 0.037752000000000001,
1175 | 0.36454300000000001,
1176 | 0.027451,
1177 | 0.27602199999999999,
1178 | 0.044166999999999998,
1179 | 0.37016399999999999,
1180 | 0.031372999999999998,
1181 | 0.27701799999999999,
1182 | 0.050344,
1183 | 0.37571500000000002,
1184 | 0.035293999999999999,
1185 | 0.27794099999999999,
1186 | 0.056323999999999999,
1187 | 0.381191,
1188 | 0.039216000000000001,
1189 | 0.27879100000000001,
1190 | 0.062144999999999999,
1191 | 0.38659199999999999,
1192 | 0.043137000000000002,
1193 | 0.27956599999999998,
1194 | 0.067835999999999994,
1195 | 0.39191700000000002,
1196 | 0.047058999999999997,
1197 | 0.28026699999999999,
1198 | 0.073416999999999996,
1199 | 0.39716299999999999,
1200 | 0.050979999999999998,
1201 | 0.28089399999999998,
1202 | 0.078907000000000005,
1203 | 0.40232899999999999,
1204 | 0.054901999999999999,
1205 | 0.28144599999999997,
1206 | 0.084320000000000006,
1207 | 0.407414,
1208 | 0.058824000000000001,
1209 | 0.28192400000000001,
1210 | 0.089665999999999996,
1211 | 0.41241499999999998,
1212 | 0.062744999999999995,
1213 | 0.28232699999999999,
1214 | 0.094954999999999998,
1215 | 0.41733100000000001,
1216 | 0.066667000000000004,
1217 | 0.28265600000000002,
1218 | 0.10019599999999999,
1219 | 0.42215999999999998,
1220 | 0.070587999999999998,
1221 | 0.28290999999999999,
1222 | 0.105393,
1223 | 0.426902,
1224 | 0.074510000000000007,
1225 | 0.28309099999999998,
1226 | 0.110553,
1227 | 0.43155399999999999,
1228 | 0.078431000000000001,
1229 | 0.28319699999999998,
1230 | 0.11568000000000001,
1231 | 0.43611499999999997,
1232 | 0.082352999999999996,
1233 | 0.28322900000000001,
1234 | 0.120777,
1235 | 0.44058399999999998,
1236 | 0.086275000000000004,
1237 | 0.28318700000000002,
1238 | 0.12584799999999999,
1239 | 0.44496000000000002,
1240 | 0.090195999999999998,
1241 | 0.28307199999999999,
1242 | 0.13089500000000001,
1243 | 0.449241,
1244 | 0.094117999999999993,
1245 | 0.28288400000000002,
1246 | 0.13592000000000001,
1247 | 0.45342700000000002,
1248 | 0.098039000000000001,
1249 | 0.28262300000000001,
1250 | 0.140926,
1251 | 0.45751700000000001,
1252 | 0.101961,
1253 | 0.28228999999999999,
1254 | 0.14591199999999999,
1255 | 0.46150999999999998,
1256 | 0.105882,
1257 | 0.281887,
1258 | 0.15088099999999999,
1259 | 0.46540500000000001,
1260 | 0.109804,
1261 | 0.281412,
1262 | 0.155834,
1263 | 0.46920099999999998,
1264 | 0.11372500000000001,
1265 | 0.28086800000000001,
1266 | 0.160771,
1267 | 0.47289900000000001,
1268 | 0.117647,
1269 | 0.28025499999999998,
1270 | 0.16569300000000001,
1271 | 0.47649799999999998,
1272 | 0.121569,
1273 | 0.27957399999999999,
1274 | 0.170599,
1275 | 0.47999700000000001,
1276 | 0.12548999999999999,
1277 | 0.27882600000000002,
1278 | 0.17549000000000001,
1279 | 0.48339700000000002,
1280 | 0.129412,
1281 | 0.27801199999999998,
1282 | 0.180367,
1283 | 0.48669699999999999,
1284 | 0.13333300000000001,
1285 | 0.27713399999999999,
1286 | 0.185228,
1287 | 0.489898,
1288 | 0.13725499999999999,
1289 | 0.276194,
1290 | 0.19007399999999999,
1291 | 0.49300100000000002,
1292 | 0.141176,
1293 | 0.27519100000000002,
1294 | 0.19490499999999999,
1295 | 0.49600499999999997,
1296 | 0.145098,
1297 | 0.27412799999999998,
1298 | 0.19972100000000001,
1299 | 0.49891099999999999,
1300 | 0.14902000000000001,
1301 | 0.27300600000000003,
1302 | 0.20452000000000001,
1303 | 0.50172099999999997,
1304 | 0.15294099999999999,
1305 | 0.27182800000000001,
1306 | 0.20930299999999999,
1307 | 0.50443400000000005,
1308 | 0.156863,
1309 | 0.27059499999999997,
1310 | 0.21406900000000001,
1311 | 0.50705199999999995,
1312 | 0.16078400000000001,
1313 | 0.26930799999999999,
1314 | 0.21881800000000001,
1315 | 0.50957699999999995,
1316 | 0.16470599999999999,
1317 | 0.26796799999999998,
1318 | 0.223549,
1319 | 0.51200800000000002,
1320 | 0.168627,
1321 | 0.26657999999999998,
1322 | 0.22826199999999999,
1323 | 0.51434899999999995,
1324 | 0.17254900000000001,
1325 | 0.26514500000000002,
1326 | 0.232956,
1327 | 0.51659900000000003,
1328 | 0.17647099999999999,
1329 | 0.26366299999999998,
1330 | 0.23763100000000001,
1331 | 0.51876199999999995,
1332 | 0.180392,
1333 | 0.26213799999999998,
1334 | 0.242286,
1335 | 0.52083699999999999,
1336 | 0.18431400000000001,
1337 | 0.260571,
1338 | 0.246922,
1339 | 0.52282799999999996,
1340 | 0.18823500000000001,
1341 | 0.258965,
1342 | 0.25153700000000001,
1343 | 0.52473599999999998,
1344 | 0.19215699999999999,
1345 | 0.257322,
1346 | 0.25613000000000002,
1347 | 0.526563,
1348 | 0.196078,
1349 | 0.25564500000000001,
1350 | 0.26070300000000002,
1351 | 0.528312,
1352 | 0.20000000000000001,
1353 | 0.25393500000000002,
1354 | 0.26525399999999999,
1355 | 0.52998299999999998,
1356 | 0.20392199999999999,
1357 | 0.25219399999999997,
1358 | 0.269783,
1359 | 0.53157900000000002,
1360 | 0.207843,
1361 | 0.25042500000000001,
1362 | 0.27428999999999998,
1363 | 0.53310299999999999,
1364 | 0.21176500000000001,
1365 | 0.24862899999999999,
1366 | 0.278775,
1367 | 0.53455600000000003,
1368 | 0.21568599999999999,
1369 | 0.246811,
1370 | 0.28323700000000002,
1371 | 0.535941,
1372 | 0.219608,
1373 | 0.244972,
1374 | 0.28767500000000001,
1375 | 0.53725999999999996,
1376 | 0.22352900000000001,
1377 | 0.243113,
1378 | 0.29209200000000002,
1379 | 0.53851599999999999,
1380 | 0.22745099999999999,
1381 | 0.24123700000000001,
1382 | 0.296485,
1383 | 0.53970899999999999,
1384 | 0.231373,
1385 | 0.239346,
1386 | 0.30085499999999998,
1387 | 0.54084399999999999,
1388 | 0.235294,
1389 | 0.23744100000000001,
1390 | 0.30520199999999997,
1391 | 0.54192099999999999,
1392 | 0.23921600000000001,
1393 | 0.23552600000000001,
1394 | 0.309527,
1395 | 0.54294399999999998,
1396 | 0.24313699999999999,
1397 | 0.23360300000000001,
1398 | 0.313828,
1399 | 0.54391400000000001,
1400 | 0.247059,
1401 | 0.23167399999999999,
1402 | 0.318106,
1403 | 0.54483400000000004,
1404 | 0.25097999999999998,
1405 | 0.229739,
1406 | 0.32236100000000001,
1407 | 0.54570600000000002,
1408 | 0.25490200000000002,
1409 | 0.227802,
1410 | 0.326594,
1411 | 0.54653200000000002,
1412 | 0.258824,
1413 | 0.22586300000000001,
1414 | 0.33080500000000002,
1415 | 0.54731399999999997,
1416 | 0.26274500000000001,
1417 | 0.22392500000000001,
1418 | 0.33499400000000001,
1419 | 0.54805300000000001,
1420 | 0.26666699999999999,
1421 | 0.22198899999999999,
1422 | 0.33916099999999999,
1423 | 0.54875200000000002,
1424 | 0.270588,
1425 | 0.220057,
1426 | 0.34330699999999997,
1427 | 0.54941300000000004,
1428 | 0.27450999999999998,
1429 | 0.21812999999999999,
1430 | 0.34743200000000002,
1431 | 0.55003800000000003,
1432 | 0.27843099999999998,
1433 | 0.21621000000000001,
1434 | 0.35153499999999999,
1435 | 0.55062699999999998,
1436 | 0.28235300000000002,
1437 | 0.21429799999999999,
1438 | 0.35561900000000002,
1439 | 0.55118400000000001,
1440 | 0.286275,
1441 | 0.212395,
1442 | 0.35968299999999997,
1443 | 0.55171000000000003,
1444 | 0.29019600000000001,
1445 | 0.210503,
1446 | 0.36372700000000002,
1447 | 0.55220599999999997,
1448 | 0.29411799999999999,
1449 | 0.208623,
1450 | 0.36775200000000002,
1451 | 0.55267500000000003,
1452 | 0.298039,
1453 | 0.206756,
1454 | 0.37175799999999998,
1455 | 0.55311699999999997,
1456 | 0.30196099999999998,
1457 | 0.204903,
1458 | 0.37574600000000002,
1459 | 0.55353300000000005,
1460 | 0.30588199999999999,
1461 | 0.20306299999999999,
1462 | 0.379716,
1463 | 0.553925,
1464 | 0.30980400000000002,
1465 | 0.201239,
1466 | 0.38367000000000001,
1467 | 0.55429399999999995,
1468 | 0.31372499999999998,
1469 | 0.19943,
1470 | 0.38760699999999998,
1471 | 0.55464199999999997,
1472 | 0.31764700000000001,
1473 | 0.19763600000000001,
1474 | 0.39152799999999999,
1475 | 0.55496900000000005,
1476 | 0.32156899999999999,
1477 | 0.19586000000000001,
1478 | 0.39543299999999998,
1479 | 0.55527599999999999,
1480 | 0.32549,
1481 | 0.19409999999999999,
1482 | 0.39932299999999998,
1483 | 0.55556499999999998,
1484 | 0.32941199999999998,
1485 | 0.192357,
1486 | 0.40319899999999997,
1487 | 0.555836,
1488 | 0.33333299999999999,
1489 | 0.19063099999999999,
1490 | 0.40706100000000001,
1491 | 0.55608900000000006,
1492 | 0.33725500000000003,
1493 | 0.18892300000000001,
1494 | 0.41091,
1495 | 0.55632599999999999,
1496 | 0.34117599999999998,
1497 | 0.18723100000000001,
1498 | 0.414746,
1499 | 0.55654700000000001,
1500 | 0.34509800000000002,
1501 | 0.185556,
1502 | 0.41857,
1503 | 0.55675300000000005,
1504 | 0.34902,
1505 | 0.18389800000000001,
1506 | 0.42238300000000001,
1507 | 0.55694399999999999,
1508 | 0.352941,
1509 | 0.182256,
1510 | 0.42618400000000001,
1511 | 0.55711999999999995,
1512 | 0.35686299999999999,
1513 | 0.18062900000000001,
1514 | 0.429975,
1515 | 0.55728200000000006,
1516 | 0.36078399999999999,
1517 | 0.17901900000000001,
1518 | 0.43375599999999997,
1519 | 0.55742999999999998,
1520 | 0.36470599999999997,
1521 | 0.177423,
1522 | 0.437527,
1523 | 0.55756499999999998,
1524 | 0.36862699999999998,
1525 | 0.175841,
1526 | 0.44129000000000002,
1527 | 0.55768499999999999,
1528 | 0.37254900000000002,
1529 | 0.17427400000000001,
1530 | 0.445044,
1531 | 0.55779199999999995,
1532 | 0.376471,
1533 | 0.17271900000000001,
1534 | 0.448791,
1535 | 0.55788499999999996,
1536 | 0.38039200000000001,
1537 | 0.17117599999999999,
1538 | 0.45252999999999999,
1539 | 0.55796500000000004,
1540 | 0.38431399999999999,
1541 | 0.16964599999999999,
1542 | 0.456262,
1543 | 0.55803000000000003,
1544 | 0.388235,
1545 | 0.168126,
1546 | 0.45998800000000001,
1547 | 0.55808199999999997,
1548 | 0.39215699999999998,
1549 | 0.16661699999999999,
1550 | 0.46370800000000001,
1551 | 0.55811900000000003,
1552 | 0.39607799999999999,
1553 | 0.16511700000000001,
1554 | 0.46742299999999998,
1555 | 0.558141,
1556 | 0.40000000000000002,
1557 | 0.16362499999999999,
1558 | 0.47113300000000002,
1559 | 0.55814799999999998,
1560 | 0.403922,
1561 | 0.16214200000000001,
1562 | 0.47483799999999998,
1563 | 0.55813999999999997,
1564 | 0.40784300000000001,
1565 | 0.160665,
1566 | 0.47854000000000002,
1567 | 0.55811500000000003,
1568 | 0.41176499999999999,
1569 | 0.159194,
1570 | 0.48223700000000003,
1571 | 0.55807300000000004,
1572 | 0.415686,
1573 | 0.15772900000000001,
1574 | 0.48593199999999998,
1575 | 0.55801299999999998,
1576 | 0.41960799999999998,
1577 | 0.15626999999999999,
1578 | 0.489624,
1579 | 0.55793599999999999,
1580 | 0.42352899999999999,
1581 | 0.15481500000000001,
1582 | 0.493313,
1583 | 0.55784,
1584 | 0.42745100000000003,
1585 | 0.153364,
1586 | 0.497,
1587 | 0.557724,
1588 | 0.43137300000000001,
1589 | 0.151918,
1590 | 0.50068500000000005,
1591 | 0.55758700000000005,
1592 | 0.43529400000000001,
1593 | 0.150476,
1594 | 0.50436899999999996,
1595 | 0.55742999999999998,
1596 | 0.439216,
1597 | 0.149039,
1598 | 0.50805100000000003,
1599 | 0.55725000000000002,
1600 | 0.443137,
1601 | 0.14760699999999999,
1602 | 0.51173299999999999,
1603 | 0.55704900000000002,
1604 | 0.44705899999999998,
1605 | 0.14618,
1606 | 0.51541300000000001,
1607 | 0.55682299999999996,
1608 | 0.45097999999999999,
1609 | 0.144759,
1610 | 0.51909300000000003,
1611 | 0.55657199999999996,
1612 | 0.45490199999999997,
1613 | 0.143343,
1614 | 0.52277300000000004,
1615 | 0.55629499999999998,
1616 | 0.45882400000000001,
1617 | 0.14193500000000001,
1618 | 0.52645299999999995,
1619 | 0.55599100000000001,
1620 | 0.46274500000000002,
1621 | 0.14053599999999999,
1622 | 0.53013200000000005,
1623 | 0.55565900000000001,
1624 | 0.466667,
1625 | 0.13914699999999999,
1626 | 0.53381199999999995,
1627 | 0.55529799999999996,
1628 | 0.47058800000000001,
1629 | 0.13777,
1630 | 0.53749199999999997,
1631 | 0.55490600000000001,
1632 | 0.47450999999999999,
1633 | 0.136408,
1634 | 0.54117300000000002,
1635 | 0.55448299999999995,
1636 | 0.478431,
1637 | 0.13506599999999999,
1638 | 0.54485300000000003,
1639 | 0.55402899999999999,
1640 | 0.48235299999999998,
1641 | 0.133743,
1642 | 0.54853499999999999,
1643 | 0.55354099999999995,
1644 | 0.48627500000000001,
1645 | 0.13244400000000001,
1646 | 0.55221600000000004,
1647 | 0.55301800000000001,
1648 | 0.49019600000000002,
1649 | 0.13117200000000001,
1650 | 0.55589900000000003,
1651 | 0.55245900000000003,
1652 | 0.494118,
1653 | 0.12993299999999999,
1654 | 0.55958200000000002,
1655 | 0.55186400000000002,
1656 | 0.49803900000000001,
1657 | 0.12872900000000001,
1658 | 0.56326500000000002,
1659 | 0.55122899999999997,
1660 | 0.50196099999999999,
1661 | 0.12756799999999999,
1662 | 0.56694900000000004,
1663 | 0.55055600000000005,
1664 | 0.50588200000000005,
1665 | 0.12645300000000001,
1666 | 0.57063299999999995,
1667 | 0.54984100000000002,
1668 | 0.50980400000000003,
1669 | 0.12539400000000001,
1670 | 0.574318,
1671 | 0.54908599999999996,
1672 | 0.51372499999999999,
1673 | 0.12439500000000001,
1674 | 0.57800200000000002,
1675 | 0.54828699999999997,
1676 | 0.51764699999999997,
1677 | 0.123463,
1678 | 0.58168699999999995,
1679 | 0.54744499999999996,
1680 | 0.52156899999999995,
1681 | 0.12260600000000001,
1682 | 0.58537099999999997,
1683 | 0.54655699999999996,
1684 | 0.52549000000000001,
1685 | 0.12183099999999999,
1686 | 0.589055,
1687 | 0.54562299999999997,
1688 | 0.52941199999999999,
1689 | 0.12114800000000001,
1690 | 0.59273900000000002,
1691 | 0.54464100000000004,
1692 | 0.53333299999999995,
1693 | 0.12056500000000001,
1694 | 0.59642200000000001,
1695 | 0.54361099999999996,
1696 | 0.53725500000000004,
1697 | 0.120092,
1698 | 0.60010399999999997,
1699 | 0.54252999999999996,
1700 | 0.54117599999999999,
1701 | 0.119738,
1702 | 0.60378500000000002,
1703 | 0.54139999999999999,
1704 | 0.54509799999999997,
1705 | 0.11951199999999999,
1706 | 0.607464,
1707 | 0.54021799999999998,
1708 | 0.54901999999999995,
1709 | 0.119423,
1710 | 0.61114100000000005,
1711 | 0.53898199999999996,
1712 | 0.55294100000000002,
1713 | 0.11948300000000001,
1714 | 0.61481699999999995,
1715 | 0.53769199999999995,
1716 | 0.556863,
1717 | 0.119699,
1718 | 0.61848999999999998,
1719 | 0.53634700000000002,
1720 | 0.56078399999999995,
1721 | 0.12008099999999999,
1722 | 0.62216099999999996,
1723 | 0.53494600000000003,
1724 | 0.56470600000000004,
1725 | 0.120638,
1726 | 0.62582800000000005,
1727 | 0.53348799999999996,
1728 | 0.56862699999999999,
1729 | 0.12138,
1730 | 0.62949200000000005,
1731 | 0.53197300000000003,
1732 | 0.57254899999999997,
1733 | 0.122312,
1734 | 0.63315299999999997,
1735 | 0.53039800000000004,
1736 | 0.57647099999999996,
1737 | 0.123444,
1738 | 0.63680899999999996,
1739 | 0.52876299999999998,
1740 | 0.58039200000000002,
1741 | 0.12478,
1742 | 0.64046099999999995,
1743 | 0.52706799999999998,
1744 | 0.584314,
1745 | 0.12632599999999999,
1746 | 0.64410699999999999,
1747 | 0.52531099999999997,
1748 | 0.58823499999999995,
1749 | 0.12808700000000001,
1750 | 0.64774900000000002,
1751 | 0.52349100000000004,
1752 | 0.59215700000000004,
1753 | 0.13006699999999999,
1754 | 0.65138399999999996,
1755 | 0.52160799999999996,
1756 | 0.596078,
1757 | 0.132268,
1758 | 0.65501399999999999,
1759 | 0.51966100000000004,
1760 | 0.59999999999999998,
1761 | 0.13469200000000001,
1762 | 0.658636,
1763 | 0.51764900000000003,
1764 | 0.60392199999999996,
1765 | 0.13733899999999999,
1766 | 0.66225199999999995,
1767 | 0.515571,
1768 | 0.60784300000000002,
1769 | 0.14021,
1770 | 0.66585899999999998,
1771 | 0.51342699999999997,
1772 | 0.611765,
1773 | 0.14330300000000001,
1774 | 0.66945900000000003,
1775 | 0.51121499999999997,
1776 | 0.61568599999999996,
1777 | 0.146616,
1778 | 0.67305000000000004,
1779 | 0.50893600000000006,
1780 | 0.61960800000000005,
1781 | 0.150148,
1782 | 0.67663099999999998,
1783 | 0.50658899999999996,
1784 | 0.623529,
1785 | 0.153894,
1786 | 0.680203,
1787 | 0.50417199999999995,
1788 | 0.62745099999999998,
1789 | 0.15785099999999999,
1790 | 0.68376499999999996,
1791 | 0.50168599999999997,
1792 | 0.63137299999999996,
1793 | 0.16201599999999999,
1794 | 0.68731600000000004,
1795 | 0.49912899999999999,
1796 | 0.63529400000000003,
1797 | 0.166383,
1798 | 0.69085600000000003,
1799 | 0.496502,
1800 | 0.63921600000000001,
1801 | 0.17094799999999999,
1802 | 0.694384,
1803 | 0.49380299999999999,
1804 | 0.64313699999999996,
1805 | 0.175707,
1806 | 0.69789999999999996,
1807 | 0.491033,
1808 | 0.64705900000000005,
1809 | 0.18065300000000001,
1810 | 0.70140199999999997,
1811 | 0.48818899999999998,
1812 | 0.65098,
1813 | 0.185783,
1814 | 0.70489100000000005,
1815 | 0.48527300000000001,
1816 | 0.65490199999999998,
1817 | 0.19109000000000001,
1818 | 0.70836600000000005,
1819 | 0.48228399999999999,
1820 | 0.65882399999999997,
1821 | 0.196571,
1822 | 0.71182699999999999,
1823 | 0.47922100000000001,
1824 | 0.66274500000000003,
1825 | 0.20221900000000001,
1826 | 0.71527200000000002,
1827 | 0.47608400000000001,
1828 | 0.66666700000000001,
1829 | 0.20802999999999999,
1830 | 0.71870100000000003,
1831 | 0.47287299999999999,
1832 | 0.67058799999999996,
1833 | 0.214,
1834 | 0.72211400000000003,
1835 | 0.46958800000000001,
1836 | 0.67451000000000005,
1837 | 0.22012399999999999,
1838 | 0.72550899999999996,
1839 | 0.46622599999999997,
1840 | 0.67843100000000001,
1841 | 0.22639699999999999,
1842 | 0.72888799999999998,
1843 | 0.46278900000000001,
1844 | 0.68235299999999999,
1845 | 0.23281499999999999,
1846 | 0.73224699999999998,
1847 | 0.45927699999999999,
1848 | 0.68627499999999997,
1849 | 0.239374,
1850 | 0.73558800000000002,
1851 | 0.45568799999999998,
1852 | 0.69019600000000003,
1853 | 0.24607000000000001,
1854 | 0.73890999999999996,
1855 | 0.45202399999999998,
1856 | 0.69411800000000001,
1857 | 0.25289899999999998,
1858 | 0.74221099999999995,
1859 | 0.44828400000000002,
1860 | 0.69803899999999997,
1861 | 0.259857,
1862 | 0.74549200000000004,
1863 | 0.444467,
1864 | 0.70196099999999995,
1865 | 0.26694099999999998,
1866 | 0.74875100000000006,
1867 | 0.44057299999999999,
1868 | 0.70588200000000001,
1869 | 0.27414899999999998,
1870 | 0.75198799999999999,
1871 | 0.43660100000000002,
1872 | 0.70980399999999999,
1873 | 0.28147699999999998,
1874 | 0.75520299999999996,
1875 | 0.43255199999999999,
1876 | 0.71372500000000005,
1877 | 0.28892099999999998,
1878 | 0.75839400000000001,
1879 | 0.42842599999999997,
1880 | 0.71764700000000003,
1881 | 0.29647899999999999,
1882 | 0.76156100000000004,
1883 | 0.42422300000000002,
1884 | 0.72156900000000002,
1885 | 0.30414799999999997,
1886 | 0.76470400000000005,
1887 | 0.41994300000000001,
1888 | 0.72548999999999997,
1889 | 0.31192500000000001,
1890 | 0.767822,
1891 | 0.41558600000000001,
1892 | 0.72941199999999995,
1893 | 0.31980900000000001,
1894 | 0.77091399999999999,
1895 | 0.41115200000000002,
1896 | 0.73333300000000001,
1897 | 0.32779599999999998,
1898 | 0.77398,
1899 | 0.40664,
1900 | 0.73725499999999999,
1901 | 0.33588499999999999,
1902 | 0.77701799999999999,
1903 | 0.40204899999999999,
1904 | 0.74117599999999995,
1905 | 0.34407399999999999,
1906 | 0.78002899999999997,
1907 | 0.39738099999999998,
1908 | 0.74509800000000004,
1909 | 0.35236000000000001,
1910 | 0.78301100000000001,
1911 | 0.39263599999999999,
1912 | 0.74902000000000002,
1913 | 0.36074099999999998,
1914 | 0.785964,
1915 | 0.38781399999999999,
1916 | 0.75294099999999997,
1917 | 0.36921399999999999,
1918 | 0.78888800000000003,
1919 | 0.38291399999999998,
1920 | 0.75686299999999995,
1921 | 0.37777899999999998,
1922 | 0.79178099999999996,
1923 | 0.37793900000000002,
1924 | 0.76078400000000002,
1925 | 0.38643300000000003,
1926 | 0.79464400000000002,
1927 | 0.372886,
1928 | 0.764706,
1929 | 0.39517400000000003,
1930 | 0.79747500000000004,
1931 | 0.367757,
1932 | 0.76862699999999995,
1933 | 0.404001,
1934 | 0.80027499999999996,
1935 | 0.36255199999999999,
1936 | 0.77254900000000004,
1937 | 0.41291299999999997,
1938 | 0.803041,
1939 | 0.357269,
1940 | 0.77647100000000002,
1941 | 0.42190800000000001,
1942 | 0.80577399999999999,
1943 | 0.35191,
1944 | 0.78039199999999997,
1945 | 0.430983,
1946 | 0.808473,
1947 | 0.34647600000000001,
1948 | 0.78431399999999996,
1949 | 0.440137,
1950 | 0.81113800000000003,
1951 | 0.34096700000000002,
1952 | 0.78823500000000002,
1953 | 0.44936799999999999,
1954 | 0.81376800000000005,
1955 | 0.33538400000000002,
1956 | 0.792157,
1957 | 0.45867400000000003,
1958 | 0.81636299999999995,
1959 | 0.32972699999999999,
1960 | 0.79607799999999995,
1961 | 0.468053,
1962 | 0.81892100000000001,
1963 | 0.32399800000000001,
1964 | 0.80000000000000004,
1965 | 0.47750399999999998,
1966 | 0.82144399999999995,
1967 | 0.31819500000000001,
1968 | 0.80392200000000003,
1969 | 0.48702600000000001,
1970 | 0.82392900000000002,
1971 | 0.31232100000000002,
1972 | 0.80784299999999998,
1973 | 0.49661499999999997,
1974 | 0.826376,
1975 | 0.30637700000000001,
1976 | 0.81176499999999996,
1977 | 0.50627100000000003,
1978 | 0.82878600000000002,
1979 | 0.30036200000000002,
1980 | 0.81568600000000002,
1981 | 0.51599200000000001,
1982 | 0.83115799999999995,
1983 | 0.29427900000000001,
1984 | 0.819608,
1985 | 0.52577600000000002,
1986 | 0.83349099999999998,
1987 | 0.28812700000000002,
1988 | 0.82352899999999996,
1989 | 0.53562100000000001,
1990 | 0.835785,
1991 | 0.28190799999999999,
1992 | 0.82745100000000005,
1993 | 0.54552400000000001,
1994 | 0.83803899999999998,
1995 | 0.27562599999999998,
1996 | 0.83137300000000003,
1997 | 0.55548399999999998,
1998 | 0.84025399999999995,
1999 | 0.26928099999999999,
2000 | 0.83529399999999998,
2001 | 0.56549799999999995,
2002 | 0.84243000000000001,
2003 | 0.26287700000000003,
2004 | 0.83921599999999996,
2005 | 0.57556300000000005,
2006 | 0.84456600000000004,
2007 | 0.256415,
2008 | 0.84313700000000003,
2009 | 0.58567800000000003,
2010 | 0.846661,
2011 | 0.24989700000000001,
2012 | 0.84705900000000001,
2013 | 0.59583900000000001,
2014 | 0.84871700000000005,
2015 | 0.24332899999999999,
2016 | 0.85097999999999996,
2017 | 0.60604499999999994,
2018 | 0.85073299999999996,
2019 | 0.23671200000000001,
2020 | 0.85490200000000005,
2021 | 0.61629299999999998,
2022 | 0.85270900000000005,
2023 | 0.23005200000000001,
2024 | 0.85882400000000003,
2025 | 0.626579,
2026 | 0.85464499999999999,
2027 | 0.223353,
2028 | 0.86274499999999998,
2029 | 0.63690199999999997,
2030 | 0.85654200000000003,
2031 | 0.21662000000000001,
2032 | 0.86666699999999997,
2033 | 0.64725699999999997,
2034 | 0.85840000000000005,
2035 | 0.20986099999999999,
2036 | 0.87058800000000003,
2037 | 0.65764199999999995,
2038 | 0.86021899999999996,
2039 | 0.20308200000000001,
2040 | 0.87451000000000001,
2041 | 0.66805400000000004,
2042 | 0.86199899999999996,
2043 | 0.196293,
2044 | 0.87843099999999996,
2045 | 0.67848900000000001,
2046 | 0.86374200000000001,
2047 | 0.189503,
2048 | 0.88235300000000005,
2049 | 0.688944,
2050 | 0.865448,
2051 | 0.182725,
2052 | 0.88627500000000003,
2053 | 0.69941500000000001,
2054 | 0.86711700000000003,
2055 | 0.17597099999999999,
2056 | 0.89019599999999999,
2057 | 0.70989800000000003,
2058 | 0.86875100000000005,
2059 | 0.16925699999999999,
2060 | 0.89411799999999997,
2061 | 0.720391,
2062 | 0.87034999999999996,
2063 | 0.162603,
2064 | 0.89803900000000003,
2065 | 0.73088900000000001,
2066 | 0.87191600000000002,
2067 | 0.156029,
2068 | 0.90196100000000001,
2069 | 0.74138800000000005,
2070 | 0.87344900000000003,
2071 | 0.149561,
2072 | 0.90588199999999997,
2073 | 0.751884,
2074 | 0.87495100000000003,
2075 | 0.14322799999999999,
2076 | 0.90980399999999995,
2077 | 0.76237299999999997,
2078 | 0.87642399999999998,
2079 | 0.13706399999999999,
2080 | 0.91372500000000001,
2081 | 0.77285199999999998,
2082 | 0.87786799999999998,
2083 | 0.131109,
2084 | 0.91764699999999999,
2085 | 0.78331499999999998,
2086 | 0.87928499999999998,
2087 | 0.12540499999999999,
2088 | 0.92156899999999997,
2089 | 0.79376000000000002,
2090 | 0.88067799999999996,
2091 | 0.120005,
2092 | 0.92549000000000003,
2093 | 0.80418199999999995,
2094 | 0.882046,
2095 | 0.114965,
2096 | 0.92941200000000002,
2097 | 0.81457599999999997,
2098 | 0.88339299999999998,
2099 | 0.110347,
2100 | 0.93333299999999997,
2101 | 0.82494000000000001,
2102 | 0.88471999999999995,
2103 | 0.10621700000000001,
2104 | 0.93725499999999995,
2105 | 0.83526999999999996,
2106 | 0.88602899999999996,
2107 | 0.102646,
2108 | 0.94117600000000001,
2109 | 0.84556100000000001,
2110 | 0.88732200000000006,
2111 | 0.099701999999999999,
2112 | 0.94509799999999999,
2113 | 0.85580999999999996,
2114 | 0.88860099999999997,
2115 | 0.097451999999999997,
2116 | 0.94901999999999997,
2117 | 0.86601300000000003,
2118 | 0.88986799999999999,
2119 | 0.095952999999999997,
2120 | 0.95294100000000004,
2121 | 0.87616799999999995,
2122 | 0.89112499999999994,
2123 | 0.095250000000000001,
2124 | 0.95686300000000002,
2125 | 0.88627100000000003,
2126 | 0.892374,
2127 | 0.095374,
2128 | 0.96078399999999997,
2129 | 0.89632000000000001,
2130 | 0.89361599999999997,
2131 | 0.096335000000000004,
2132 | 0.96470599999999995,
2133 | 0.90631099999999998,
2134 | 0.89485499999999996,
2135 | 0.098125000000000004,
2136 | 0.96862700000000002,
2137 | 0.916242,
2138 | 0.89609099999999997,
2139 | 0.100717,
2140 | 0.972549,
2141 | 0.92610599999999998,
2142 | 0.89732999999999996,
2143 | 0.104071,
2144 | 0.97647099999999998,
2145 | 0.93590399999999996,
2146 | 0.89856999999999998,
2147 | 0.108131,
2148 | 0.98039200000000004,
2149 | 0.94563600000000003,
2150 | 0.89981500000000003,
2151 | 0.11283799999999999,
2152 | 0.98431400000000002,
2153 | 0.95530000000000004,
2154 | 0.901065,
2155 | 0.118128,
2156 | 0.98823499999999997,
2157 | 0.96489400000000003,
2158 | 0.90232299999999999,
2159 | 0.123941,
2160 | 0.99215699999999996,
2161 | 0.97441699999999998,
2162 | 0.90359,
2163 | 0.130215,
2164 | 0.99607800000000002,
2165 | 0.98386799999999996,
2166 | 0.90486699999999998,
2167 | 0.13689699999999999,
2168 | 1.0,
2169 | 0.99324800000000002,
2170 | 0.90615699999999999,
2171 | 0.14393600000000001
2172 | ],
2173 | "Source" : "https://github.com/BIDS/colormap/blob/master/colormaps.py"
2174 | },
2175 | {
2176 | "ColorSpace" : "Diverging",
2177 | "Creator" : "Nathaniel J. Smith & Stefan van der Walt",
2178 | "License" : "CC0",
2179 | "Name" : "Magma (matplotlib)",
2180 | "NanColor" :
2181 | [
2182 | 0,
2183 | 1,
2184 | 0
2185 | ],
2186 | "RGBPoints" :
2187 | [
2188 | 0.0,
2189 | 0.001462,
2190 | 0.000466,
2191 | 0.013866,
2192 | 0.0039220000000000001,
2193 | 0.002258,
2194 | 0.0012949999999999999,
2195 | 0.018331,
2196 | 0.0078429999999999993,
2197 | 0.0032789999999999998,
2198 | 0.0023050000000000002,
2199 | 0.023708,
2200 | 0.011764999999999999,
2201 | 0.0045120000000000004,
2202 | 0.00349,
2203 | 0.029964999999999999,
2204 | 0.015685999999999999,
2205 | 0.0059500000000000004,
2206 | 0.0048430000000000001,
2207 | 0.037130000000000003,
2208 | 0.019608,
2209 | 0.0075880000000000001,
2210 | 0.0063559999999999997,
2211 | 0.044972999999999999,
2212 | 0.023529000000000001,
2213 | 0.0094260000000000004,
2214 | 0.0080219999999999996,
2215 | 0.052844000000000002,
2216 | 0.027451,
2217 | 0.011464999999999999,
2218 | 0.0098279999999999999,
2219 | 0.060749999999999998,
2220 | 0.031372999999999998,
2221 | 0.013708,
2222 | 0.011771,
2223 | 0.068667000000000006,
2224 | 0.035293999999999999,
2225 | 0.016156,
2226 | 0.01384,
2227 | 0.076603000000000004,
2228 | 0.039216000000000001,
2229 | 0.018814999999999998,
2230 | 0.016025999999999999,
2231 | 0.084584000000000006,
2232 | 0.043137000000000002,
2233 | 0.021691999999999999,
2234 | 0.018319999999999999,
2235 | 0.092609999999999998,
2236 | 0.047058999999999997,
2237 | 0.024792000000000002,
2238 | 0.020715000000000001,
2239 | 0.100676,
2240 | 0.050979999999999998,
2241 | 0.028122999999999999,
2242 | 0.023200999999999999,
2243 | 0.10878699999999999,
2244 | 0.054901999999999999,
2245 | 0.031696000000000002,
2246 | 0.025765,
2247 | 0.116965,
2248 | 0.058824000000000001,
2249 | 0.035520000000000003,
2250 | 0.028396999999999999,
2251 | 0.12520899999999999,
2252 | 0.062744999999999995,
2253 | 0.039607999999999997,
2254 | 0.03109,
2255 | 0.13351499999999999,
2256 | 0.066667000000000004,
2257 | 0.043830000000000001,
2258 | 0.033829999999999999,
2259 | 0.14188600000000001,
2260 | 0.070587999999999998,
2261 | 0.048062000000000001,
2262 | 0.036607000000000001,
2263 | 0.15032699999999999,
2264 | 0.074510000000000007,
2265 | 0.052319999999999998,
2266 | 0.039406999999999998,
2267 | 0.15884100000000001,
2268 | 0.078431000000000001,
2269 | 0.056614999999999999,
2270 | 0.042160000000000003,
2271 | 0.16744600000000001,
2272 | 0.082352999999999996,
2273 | 0.060949000000000003,
2274 | 0.044794,
2275 | 0.17612900000000001,
2276 | 0.086275000000000004,
2277 | 0.065329999999999999,
2278 | 0.047317999999999999,
2279 | 0.184892,
2280 | 0.090195999999999998,
2281 | 0.069764000000000007,
2282 | 0.049725999999999999,
2283 | 0.19373499999999999,
2284 | 0.094117999999999993,
2285 | 0.074257000000000004,
2286 | 0.052017000000000001,
2287 | 0.20266000000000001,
2288 | 0.098039000000000001,
2289 | 0.078814999999999996,
2290 | 0.054184000000000003,
2291 | 0.21166699999999999,
2292 | 0.101961,
2293 | 0.083446000000000006,
2294 | 0.056224999999999997,
2295 | 0.22075500000000001,
2296 | 0.105882,
2297 | 0.088154999999999997,
2298 | 0.058132999999999997,
2299 | 0.22992199999999999,
2300 | 0.109804,
2301 | 0.092949000000000004,
2302 | 0.059903999999999999,
2303 | 0.23916399999999999,
2304 | 0.11372500000000001,
2305 | 0.097833000000000003,
2306 | 0.061531000000000002,
2307 | 0.248477,
2308 | 0.117647,
2309 | 0.102815,
2310 | 0.063009999999999997,
2311 | 0.25785400000000003,
2312 | 0.121569,
2313 | 0.10789899999999999,
2314 | 0.064335000000000003,
2315 | 0.267289,
2316 | 0.12548999999999999,
2317 | 0.113094,
2318 | 0.065491999999999995,
2319 | 0.27678399999999997,
2320 | 0.129412,
2321 | 0.118405,
2322 | 0.066478999999999996,
2323 | 0.28632099999999999,
2324 | 0.13333300000000001,
2325 | 0.123833,
2326 | 0.067294999999999994,
2327 | 0.295879,
2328 | 0.13725499999999999,
2329 | 0.12938,
2330 | 0.067934999999999995,
2331 | 0.30544300000000002,
2332 | 0.141176,
2333 | 0.13505300000000001,
2334 | 0.068390999999999993,
2335 | 0.315,
2336 | 0.145098,
2337 | 0.14085800000000001,
2338 | 0.068654000000000007,
2339 | 0.32453799999999999,
2340 | 0.14902000000000001,
2341 | 0.146785,
2342 | 0.068737999999999994,
2343 | 0.334011,
2344 | 0.15294099999999999,
2345 | 0.152839,
2346 | 0.068637000000000004,
2347 | 0.34340399999999999,
2348 | 0.156863,
2349 | 0.15901799999999999,
2350 | 0.068353999999999998,
2351 | 0.352688,
2352 | 0.16078400000000001,
2353 | 0.16530800000000001,
2354 | 0.067910999999999999,
2355 | 0.36181600000000003,
2356 | 0.16470599999999999,
2357 | 0.171713,
2358 | 0.067305000000000004,
2359 | 0.37077100000000002,
2360 | 0.168627,
2361 | 0.17821200000000001,
2362 | 0.066575999999999996,
2363 | 0.37949699999999997,
2364 | 0.17254900000000001,
2365 | 0.18480099999999999,
2366 | 0.065731999999999999,
2367 | 0.38797300000000001,
2368 | 0.17647099999999999,
2369 | 0.19145999999999999,
2370 | 0.064818000000000001,
2371 | 0.396152,
2372 | 0.180392,
2373 | 0.19817699999999999,
2374 | 0.063862000000000002,
2375 | 0.40400900000000001,
2376 | 0.18431400000000001,
2377 | 0.20493500000000001,
2378 | 0.062907000000000005,
2379 | 0.41151399999999999,
2380 | 0.18823500000000001,
2381 | 0.21171799999999999,
2382 | 0.061991999999999998,
2383 | 0.41864699999999999,
2384 | 0.19215699999999999,
2385 | 0.21851200000000001,
2386 | 0.061157999999999997,
2387 | 0.42539199999999999,
2388 | 0.196078,
2389 | 0.225302,
2390 | 0.060444999999999999,
2391 | 0.43174200000000001,
2392 | 0.20000000000000001,
2393 | 0.23207700000000001,
2394 | 0.059888999999999998,
2395 | 0.437695,
2396 | 0.20392199999999999,
2397 | 0.23882600000000001,
2398 | 0.059517,
2399 | 0.44325599999999998,
2400 | 0.207843,
2401 | 0.24554300000000001,
2402 | 0.059352000000000002,
2403 | 0.448436,
2404 | 0.21176500000000001,
2405 | 0.25222,
2406 | 0.059415000000000003,
2407 | 0.45324799999999998,
2408 | 0.21568599999999999,
2409 | 0.258857,
2410 | 0.059706000000000002,
2411 | 0.45771000000000001,
2412 | 0.219608,
2413 | 0.26544699999999999,
2414 | 0.060236999999999999,
2415 | 0.46183999999999997,
2416 | 0.22352900000000001,
2417 | 0.27199400000000001,
2418 | 0.060994,
2419 | 0.46566000000000002,
2420 | 0.22745099999999999,
2421 | 0.27849299999999999,
2422 | 0.061977999999999998,
2423 | 0.46919,
2424 | 0.231373,
2425 | 0.28495100000000001,
2426 | 0.063168000000000002,
2427 | 0.47245100000000001,
2428 | 0.235294,
2429 | 0.29136600000000001,
2430 | 0.064552999999999999,
2431 | 0.475462,
2432 | 0.23921600000000001,
2433 | 0.29774,
2434 | 0.066116999999999995,
2435 | 0.47824299999999997,
2436 | 0.24313699999999999,
2437 | 0.30408099999999999,
2438 | 0.067835000000000006,
2439 | 0.48081200000000002,
2440 | 0.247059,
2441 | 0.31038199999999999,
2442 | 0.069702,
2443 | 0.483186,
2444 | 0.25097999999999998,
2445 | 0.31665399999999999,
2446 | 0.071690000000000004,
2447 | 0.48537999999999998,
2448 | 0.25490200000000002,
2449 | 0.32289899999999999,
2450 | 0.073782,
2451 | 0.48740800000000001,
2452 | 0.258824,
2453 | 0.32911400000000002,
2454 | 0.075971999999999998,
2455 | 0.48928700000000003,
2456 | 0.26274500000000001,
2457 | 0.33530799999999999,
2458 | 0.078236,
2459 | 0.49102400000000002,
2460 | 0.26666699999999999,
2461 | 0.34148200000000001,
2462 | 0.080563999999999997,
2463 | 0.49263099999999999,
2464 | 0.270588,
2465 | 0.347636,
2466 | 0.082946000000000006,
2467 | 0.49412099999999998,
2468 | 0.27450999999999998,
2469 | 0.353773,
2470 | 0.085373000000000004,
2471 | 0.49550100000000002,
2472 | 0.27843099999999998,
2473 | 0.359898,
2474 | 0.087831000000000006,
2475 | 0.496778,
2476 | 0.28235300000000002,
2477 | 0.366012,
2478 | 0.090314000000000005,
2479 | 0.49796000000000001,
2480 | 0.286275,
2481 | 0.372116,
2482 | 0.092815999999999996,
2483 | 0.49905300000000002,
2484 | 0.29019600000000001,
2485 | 0.37821100000000002,
2486 | 0.095332,
2487 | 0.50006700000000004,
2488 | 0.29411799999999999,
2489 | 0.384299,
2490 | 0.097854999999999998,
2491 | 0.50100199999999995,
2492 | 0.298039,
2493 | 0.39038400000000001,
2494 | 0.100379,
2495 | 0.50186399999999998,
2496 | 0.30196099999999998,
2497 | 0.39646700000000001,
2498 | 0.10290199999999999,
2499 | 0.50265800000000005,
2500 | 0.30588199999999999,
2501 | 0.40254800000000002,
2502 | 0.10542,
2503 | 0.503386,
2504 | 0.30980400000000002,
2505 | 0.40862900000000002,
2506 | 0.10793,
2507 | 0.50405199999999994,
2508 | 0.31372499999999998,
2509 | 0.41470899999999999,
2510 | 0.110431,
2511 | 0.50466200000000005,
2512 | 0.31764700000000001,
2513 | 0.42079100000000003,
2514 | 0.11292000000000001,
2515 | 0.50521499999999997,
2516 | 0.32156899999999999,
2517 | 0.42687700000000001,
2518 | 0.115395,
2519 | 0.505714,
2520 | 0.32549,
2521 | 0.43296699999999999,
2522 | 0.117855,
2523 | 0.50616000000000005,
2524 | 0.32941199999999998,
2525 | 0.43906200000000001,
2526 | 0.120298,
2527 | 0.50655499999999998,
2528 | 0.33333299999999999,
2529 | 0.44516299999999998,
2530 | 0.122724,
2531 | 0.50690100000000005,
2532 | 0.33725500000000003,
2533 | 0.45127099999999998,
2534 | 0.12513199999999999,
2535 | 0.50719800000000004,
2536 | 0.34117599999999998,
2537 | 0.45738600000000001,
2538 | 0.127522,
2539 | 0.50744800000000001,
2540 | 0.34509800000000002,
2541 | 0.46350799999999998,
2542 | 0.12989300000000001,
2543 | 0.50765199999999999,
2544 | 0.34902,
2545 | 0.46964,
2546 | 0.132245,
2547 | 0.50780899999999995,
2548 | 0.352941,
2549 | 0.47577999999999998,
2550 | 0.134577,
2551 | 0.50792099999999996,
2552 | 0.35686299999999999,
2553 | 0.481929,
2554 | 0.13689100000000001,
2555 | 0.50798900000000002,
2556 | 0.36078399999999999,
2557 | 0.48808800000000002,
2558 | 0.139186,
2559 | 0.50801099999999999,
2560 | 0.36470599999999997,
2561 | 0.49425799999999998,
2562 | 0.141462,
2563 | 0.507988,
2564 | 0.36862699999999998,
2565 | 0.50043800000000005,
2566 | 0.14371900000000001,
2567 | 0.50792000000000004,
2568 | 0.37254900000000002,
2569 | 0.506629,
2570 | 0.145958,
2571 | 0.50780599999999998,
2572 | 0.376471,
2573 | 0.51283100000000004,
2574 | 0.14817900000000001,
2575 | 0.50764799999999999,
2576 | 0.38039200000000001,
2577 | 0.51904499999999998,
2578 | 0.15038299999999999,
2579 | 0.50744299999999998,
2580 | 0.38431399999999999,
2581 | 0.52527000000000001,
2582 | 0.15256900000000001,
2583 | 0.50719199999999998,
2584 | 0.388235,
2585 | 0.53150699999999995,
2586 | 0.15473899999999999,
2587 | 0.50689499999999998,
2588 | 0.39215699999999998,
2589 | 0.53775499999999998,
2590 | 0.15689400000000001,
2591 | 0.50655099999999997,
2592 | 0.39607799999999999,
2593 | 0.54401500000000003,
2594 | 0.15903300000000001,
2595 | 0.50615900000000003,
2596 | 0.40000000000000002,
2597 | 0.55028699999999997,
2598 | 0.161158,
2599 | 0.50571900000000003,
2600 | 0.403922,
2601 | 0.55657100000000004,
2602 | 0.163269,
2603 | 0.50522999999999996,
2604 | 0.40784300000000001,
2605 | 0.56286599999999998,
2606 | 0.16536799999999999,
2607 | 0.50469200000000003,
2608 | 0.41176499999999999,
2609 | 0.56917200000000001,
2610 | 0.16745399999999999,
2611 | 0.50410500000000003,
2612 | 0.415686,
2613 | 0.57548999999999995,
2614 | 0.16952999999999999,
2615 | 0.50346599999999997,
2616 | 0.41960799999999998,
2617 | 0.58181899999999998,
2618 | 0.171596,
2619 | 0.50277700000000003,
2620 | 0.42352899999999999,
2621 | 0.58815799999999996,
2622 | 0.173652,
2623 | 0.50203500000000001,
2624 | 0.42745100000000003,
2625 | 0.59450800000000004,
2626 | 0.175701,
2627 | 0.50124100000000005,
2628 | 0.43137300000000001,
2629 | 0.60086799999999996,
2630 | 0.17774300000000001,
2631 | 0.50039400000000001,
2632 | 0.43529400000000001,
2633 | 0.60723800000000006,
2634 | 0.17977899999999999,
2635 | 0.49949199999999999,
2636 | 0.439216,
2637 | 0.61361699999999997,
2638 | 0.181811,
2639 | 0.49853599999999998,
2640 | 0.443137,
2641 | 0.62000500000000003,
2642 | 0.18384,
2643 | 0.49752400000000002,
2644 | 0.44705899999999998,
2645 | 0.62640099999999999,
2646 | 0.185867,
2647 | 0.49645600000000001,
2648 | 0.45097999999999999,
2649 | 0.63280499999999995,
2650 | 0.187893,
2651 | 0.49533199999999999,
2652 | 0.45490199999999997,
2653 | 0.63921600000000001,
2654 | 0.18992100000000001,
2655 | 0.49414999999999998,
2656 | 0.45882400000000001,
2657 | 0.64563300000000001,
2658 | 0.19195200000000001,
2659 | 0.49291000000000001,
2660 | 0.46274500000000002,
2661 | 0.65205599999999997,
2662 | 0.19398599999999999,
2663 | 0.49161100000000002,
2664 | 0.466667,
2665 | 0.65848300000000004,
2666 | 0.19602700000000001,
2667 | 0.49025299999999999,
2668 | 0.47058800000000001,
2669 | 0.66491500000000003,
2670 | 0.198075,
2671 | 0.48883599999999999,
2672 | 0.47450999999999999,
2673 | 0.67134899999999997,
2674 | 0.20013300000000001,
2675 | 0.48735800000000001,
2676 | 0.478431,
2677 | 0.677786,
2678 | 0.20220299999999999,
2679 | 0.485819,
2680 | 0.48235299999999998,
2681 | 0.68422400000000005,
2682 | 0.204286,
2683 | 0.48421900000000001,
2684 | 0.48627500000000001,
2685 | 0.69066099999999997,
2686 | 0.20638400000000001,
2687 | 0.48255799999999999,
2688 | 0.49019600000000002,
2689 | 0.697098,
2690 | 0.20850099999999999,
2691 | 0.48083500000000001,
2692 | 0.494118,
2693 | 0.70353200000000005,
2694 | 0.21063799999999999,
2695 | 0.479049,
2696 | 0.49803900000000001,
2697 | 0.70996199999999998,
2698 | 0.21279699999999999,
2699 | 0.47720099999999999,
2700 | 0.50196099999999999,
2701 | 0.716387,
2702 | 0.21498200000000001,
2703 | 0.47528999999999999,
2704 | 0.50588200000000005,
2705 | 0.72280500000000003,
2706 | 0.217194,
2707 | 0.47331600000000001,
2708 | 0.50980400000000003,
2709 | 0.72921599999999998,
2710 | 0.21943699999999999,
2711 | 0.471279,
2712 | 0.51372499999999999,
2713 | 0.73561600000000005,
2714 | 0.22171299999999999,
2715 | 0.46917999999999999,
2716 | 0.51764699999999997,
2717 | 0.742004,
2718 | 0.224025,
2719 | 0.46701799999999999,
2720 | 0.52156899999999995,
2721 | 0.74837799999999999,
2722 | 0.22637699999999999,
2723 | 0.46479399999999998,
2724 | 0.52549000000000001,
2725 | 0.75473699999999999,
2726 | 0.228772,
2727 | 0.462509,
2728 | 0.52941199999999999,
2729 | 0.761077,
2730 | 0.231214,
2731 | 0.46016200000000002,
2732 | 0.53333299999999995,
2733 | 0.76739800000000002,
2734 | 0.233705,
2735 | 0.45775500000000002,
2736 | 0.53725500000000004,
2737 | 0.77369500000000002,
2738 | 0.23624899999999999,
2739 | 0.455289,
2740 | 0.54117599999999999,
2741 | 0.77996799999999999,
2742 | 0.23885100000000001,
2743 | 0.45276499999999997,
2744 | 0.54509799999999997,
2745 | 0.78621200000000002,
2746 | 0.24151400000000001,
2747 | 0.45018399999999997,
2748 | 0.54901999999999995,
2749 | 0.79242699999999999,
2750 | 0.24424199999999999,
2751 | 0.44754300000000002,
2752 | 0.55294100000000002,
2753 | 0.79860799999999998,
2754 | 0.24704000000000001,
2755 | 0.44484800000000002,
2756 | 0.556863,
2757 | 0.80475200000000002,
2758 | 0.24991099999999999,
2759 | 0.44210199999999999,
2760 | 0.56078399999999995,
2761 | 0.81085499999999999,
2762 | 0.252861,
2763 | 0.439305,
2764 | 0.56470600000000004,
2765 | 0.81691400000000003,
2766 | 0.25589499999999998,
2767 | 0.43646099999999999,
2768 | 0.56862699999999999,
2769 | 0.82292600000000005,
2770 | 0.25901600000000002,
2771 | 0.43357299999999999,
2772 | 0.57254899999999997,
2773 | 0.82888600000000001,
2774 | 0.26222899999999999,
2775 | 0.43064400000000003,
2776 | 0.57647099999999996,
2777 | 0.83479099999999995,
2778 | 0.26554,
2779 | 0.42767100000000002,
2780 | 0.58039200000000002,
2781 | 0.84063600000000005,
2782 | 0.268953,
2783 | 0.42466599999999999,
2784 | 0.584314,
2785 | 0.84641599999999995,
2786 | 0.27247300000000002,
2787 | 0.42163099999999998,
2788 | 0.58823499999999995,
2789 | 0.85212600000000005,
2790 | 0.27610600000000002,
2791 | 0.41857299999999997,
2792 | 0.59215700000000004,
2793 | 0.85776300000000005,
2794 | 0.27985700000000002,
2795 | 0.41549599999999998,
2796 | 0.596078,
2797 | 0.86331999999999998,
2798 | 0.28372900000000001,
2799 | 0.41240300000000002,
2800 | 0.59999999999999998,
2801 | 0.86879300000000004,
2802 | 0.28772799999999998,
2803 | 0.40930299999999997,
2804 | 0.60392199999999996,
2805 | 0.87417599999999995,
2806 | 0.29185899999999998,
2807 | 0.40620499999999998,
2808 | 0.60784300000000002,
2809 | 0.87946400000000002,
2810 | 0.29612500000000003,
2811 | 0.40311799999999998,
2812 | 0.611765,
2813 | 0.88465099999999997,
2814 | 0.30053000000000002,
2815 | 0.40004699999999999,
2816 | 0.61568599999999996,
2817 | 0.88973100000000005,
2818 | 0.30507899999999999,
2819 | 0.39700200000000002,
2820 | 0.61960800000000005,
2821 | 0.89470000000000005,
2822 | 0.30977300000000002,
2823 | 0.39399499999999998,
2824 | 0.623529,
2825 | 0.89955200000000002,
2826 | 0.31461600000000001,
2827 | 0.39103700000000002,
2828 | 0.62745099999999998,
2829 | 0.904281,
2830 | 0.31961000000000001,
2831 | 0.38813700000000001,
2832 | 0.63137299999999996,
2833 | 0.90888400000000003,
2834 | 0.32475500000000002,
2835 | 0.38530799999999998,
2836 | 0.63529400000000003,
2837 | 0.913354,
2838 | 0.33005200000000001,
2839 | 0.38256299999999999,
2840 | 0.63921600000000001,
2841 | 0.91768899999999998,
2842 | 0.33550000000000002,
2843 | 0.379915,
2844 | 0.64313699999999996,
2845 | 0.92188400000000004,
2846 | 0.34109800000000001,
2847 | 0.37737599999999999,
2848 | 0.64705900000000005,
2849 | 0.92593700000000001,
2850 | 0.34684399999999999,
2851 | 0.37495899999999999,
2852 | 0.65098,
2853 | 0.92984500000000003,
2854 | 0.35273399999999999,
2855 | 0.37267699999999998,
2856 | 0.65490199999999998,
2857 | 0.93360600000000005,
2858 | 0.35876400000000003,
2859 | 0.37054100000000001,
2860 | 0.65882399999999997,
2861 | 0.93722099999999997,
2862 | 0.364929,
2863 | 0.36856699999999998,
2864 | 0.66274500000000003,
2865 | 0.94068700000000005,
2866 | 0.371224,
2867 | 0.36676199999999998,
2868 | 0.66666700000000001,
2869 | 0.94400600000000001,
2870 | 0.37764300000000001,
2871 | 0.36513600000000002,
2872 | 0.67058799999999996,
2873 | 0.94718000000000002,
2874 | 0.38417800000000002,
2875 | 0.363701,
2876 | 0.67451000000000005,
2877 | 0.95021,
2878 | 0.39082,
2879 | 0.36246800000000001,
2880 | 0.67843100000000001,
2881 | 0.95309900000000003,
2882 | 0.397563,
2883 | 0.36143799999999998,
2884 | 0.68235299999999999,
2885 | 0.95584899999999995,
2886 | 0.40439999999999998,
2887 | 0.36061900000000002,
2888 | 0.68627499999999997,
2889 | 0.95846399999999998,
2890 | 0.41132400000000002,
2891 | 0.360014,
2892 | 0.69019600000000003,
2893 | 0.96094900000000005,
2894 | 0.418323,
2895 | 0.35963000000000001,
2896 | 0.69411800000000001,
2897 | 0.96331,
2898 | 0.42538999999999999,
2899 | 0.35946899999999998,
2900 | 0.69803899999999997,
2901 | 0.96554899999999999,
2902 | 0.43251899999999999,
2903 | 0.35952899999999999,
2904 | 0.70196099999999995,
2905 | 0.96767099999999995,
2906 | 0.43970300000000001,
2907 | 0.35981000000000002,
2908 | 0.70588200000000001,
2909 | 0.96967999999999999,
2910 | 0.446936,
2911 | 0.36031099999999999,
2912 | 0.70980399999999999,
2913 | 0.97158199999999995,
2914 | 0.45421,
2915 | 0.36103000000000002,
2916 | 0.71372500000000005,
2917 | 0.97338100000000005,
2918 | 0.46151999999999999,
2919 | 0.36196499999999998,
2920 | 0.71764700000000003,
2921 | 0.975082,
2922 | 0.46886100000000003,
2923 | 0.36311100000000002,
2924 | 0.72156900000000002,
2925 | 0.97668999999999995,
2926 | 0.47622599999999998,
2927 | 0.36446600000000001,
2928 | 0.72548999999999997,
2929 | 0.97821000000000002,
2930 | 0.48361199999999999,
2931 | 0.36602499999999999,
2932 | 0.72941199999999995,
2933 | 0.97964499999999999,
2934 | 0.49101400000000001,
2935 | 0.36778300000000003,
2936 | 0.73333300000000001,
2937 | 0.98099999999999998,
2938 | 0.49842799999999998,
2939 | 0.36973400000000001,
2940 | 0.73725499999999999,
2941 | 0.98227900000000001,
2942 | 0.50585100000000005,
2943 | 0.37187399999999998,
2944 | 0.74117599999999995,
2945 | 0.98348500000000005,
2946 | 0.51327999999999996,
2947 | 0.37419799999999998,
2948 | 0.74509800000000004,
2949 | 0.984622,
2950 | 0.52071299999999998,
2951 | 0.37669799999999998,
2952 | 0.74902000000000002,
2953 | 0.98569300000000004,
2954 | 0.52814799999999995,
2955 | 0.37937100000000001,
2956 | 0.75294099999999997,
2957 | 0.98670000000000002,
2958 | 0.535582,
2959 | 0.38220999999999999,
2960 | 0.75686299999999995,
2961 | 0.98764600000000002,
2962 | 0.54301500000000003,
2963 | 0.38521,
2964 | 0.76078400000000002,
2965 | 0.988533,
2966 | 0.55044599999999999,
2967 | 0.38836500000000002,
2968 | 0.764706,
2969 | 0.98936299999999999,
2970 | 0.55787299999999995,
2971 | 0.39167099999999999,
2972 | 0.76862699999999995,
2973 | 0.99013799999999996,
2974 | 0.56529600000000002,
2975 | 0.39512199999999997,
2976 | 0.77254900000000004,
2977 | 0.99087099999999995,
2978 | 0.57270600000000005,
2979 | 0.39871400000000001,
2980 | 0.77647100000000002,
2981 | 0.99155800000000005,
2982 | 0.58010700000000004,
2983 | 0.40244099999999999,
2984 | 0.78039199999999997,
2985 | 0.99219599999999997,
2986 | 0.58750199999999997,
2987 | 0.40629900000000002,
2988 | 0.78431399999999996,
2989 | 0.99278500000000003,
2990 | 0.59489099999999995,
2991 | 0.41028300000000001,
2992 | 0.78823500000000002,
2993 | 0.99332600000000004,
2994 | 0.602275,
2995 | 0.41438999999999998,
2996 | 0.792157,
2997 | 0.993834,
2998 | 0.60964399999999996,
2999 | 0.41861300000000001,
3000 | 0.79607799999999995,
3001 | 0.994309,
3002 | 0.61699899999999996,
3003 | 0.42294999999999999,
3004 | 0.80000000000000004,
3005 | 0.99473800000000001,
3006 | 0.62434999999999996,
3007 | 0.42739700000000003,
3008 | 0.80392200000000003,
3009 | 0.99512199999999995,
3010 | 0.63169600000000004,
3011 | 0.43195099999999997,
3012 | 0.80784299999999998,
3013 | 0.99548000000000003,
3014 | 0.63902700000000001,
3015 | 0.43660700000000002,
3016 | 0.81176499999999996,
3017 | 0.99580999999999997,
3018 | 0.64634400000000003,
3019 | 0.441361,
3020 | 0.81568600000000002,
3021 | 0.99609599999999998,
3022 | 0.65365899999999999,
3023 | 0.44621300000000003,
3024 | 0.819608,
3025 | 0.99634100000000003,
3026 | 0.66096900000000003,
3027 | 0.45116000000000001,
3028 | 0.82352899999999996,
3029 | 0.99658000000000002,
3030 | 0.66825599999999996,
3031 | 0.45619199999999999,
3032 | 0.82745100000000005,
3033 | 0.99677499999999997,
3034 | 0.67554099999999995,
3035 | 0.461314,
3036 | 0.83137300000000003,
3037 | 0.99692499999999995,
3038 | 0.68282799999999999,
3039 | 0.466526,
3040 | 0.83529399999999998,
3041 | 0.99707699999999999,
3042 | 0.69008800000000003,
3043 | 0.47181099999999998,
3044 | 0.83921599999999996,
3045 | 0.99718600000000002,
3046 | 0.697349,
3047 | 0.477182,
3048 | 0.84313700000000003,
3049 | 0.99725399999999997,
3050 | 0.70461099999999999,
3051 | 0.48263499999999998,
3052 | 0.84705900000000001,
3053 | 0.99732500000000002,
3054 | 0.71184800000000004,
3055 | 0.48815399999999998,
3056 | 0.85097999999999996,
3057 | 0.99735099999999999,
3058 | 0.71908899999999998,
3059 | 0.493755,
3060 | 0.85490200000000005,
3061 | 0.99735099999999999,
3062 | 0.72632399999999997,
3063 | 0.49942799999999998,
3064 | 0.85882400000000003,
3065 | 0.99734100000000003,
3066 | 0.733545,
3067 | 0.50516700000000003,
3068 | 0.86274499999999998,
3069 | 0.99728499999999998,
3070 | 0.74077199999999999,
3071 | 0.51098299999999997,
3072 | 0.86666699999999997,
3073 | 0.997228,
3074 | 0.74798100000000001,
3075 | 0.51685899999999996,
3076 | 0.87058800000000003,
3077 | 0.99713799999999997,
3078 | 0.75519000000000003,
3079 | 0.52280599999999999,
3080 | 0.87451000000000001,
3081 | 0.99701899999999999,
3082 | 0.76239800000000002,
3083 | 0.52882099999999999,
3084 | 0.87843099999999996,
3085 | 0.99689799999999995,
3086 | 0.76959100000000003,
3087 | 0.53489200000000003,
3088 | 0.88235300000000005,
3089 | 0.99672700000000003,
3090 | 0.77679500000000001,
3091 | 0.54103900000000005,
3092 | 0.88627500000000003,
3093 | 0.99657099999999998,
3094 | 0.78397700000000003,
3095 | 0.54723299999999997,
3096 | 0.89019599999999999,
3097 | 0.99636899999999995,
3098 | 0.79116699999999995,
3099 | 0.55349899999999996,
3100 | 0.89411799999999997,
3101 | 0.99616199999999999,
3102 | 0.79834799999999995,
3103 | 0.55981999999999998,
3104 | 0.89803900000000003,
3105 | 0.99593200000000004,
3106 | 0.80552699999999999,
3107 | 0.56620199999999998,
3108 | 0.90196100000000001,
3109 | 0.99568000000000001,
3110 | 0.81270600000000004,
3111 | 0.57264499999999996,
3112 | 0.90588199999999997,
3113 | 0.99542399999999998,
3114 | 0.81987500000000002,
3115 | 0.57913999999999999,
3116 | 0.90980399999999995,
3117 | 0.99513099999999999,
3118 | 0.82705200000000001,
3119 | 0.58570100000000003,
3120 | 0.91372500000000001,
3121 | 0.99485100000000004,
3122 | 0.83421299999999998,
3123 | 0.59230700000000003,
3124 | 0.91764699999999999,
3125 | 0.99452399999999996,
3126 | 0.841387,
3127 | 0.59898300000000004,
3128 | 0.92156899999999997,
3129 | 0.99422200000000005,
3130 | 0.84853999999999996,
3131 | 0.60569600000000001,
3132 | 0.92549000000000003,
3133 | 0.99386600000000003,
3134 | 0.855711,
3135 | 0.61248199999999997,
3136 | 0.92941200000000002,
3137 | 0.99354500000000001,
3138 | 0.86285900000000004,
3139 | 0.61929900000000004,
3140 | 0.93333299999999997,
3141 | 0.99317,
3142 | 0.87002400000000002,
3143 | 0.626189,
3144 | 0.93725499999999995,
3145 | 0.99283100000000002,
3146 | 0.87716799999999995,
3147 | 0.63310900000000003,
3148 | 0.94117600000000001,
3149 | 0.99243999999999999,
3150 | 0.88432999999999995,
3151 | 0.64009899999999997,
3152 | 0.94509799999999999,
3153 | 0.992089,
3154 | 0.89146999999999998,
3155 | 0.64711600000000002,
3156 | 0.94901999999999997,
3157 | 0.99168800000000001,
3158 | 0.89862699999999995,
3159 | 0.65420199999999995,
3160 | 0.95294100000000004,
3161 | 0.99133199999999999,
3162 | 0.90576299999999998,
3163 | 0.66130900000000004,
3164 | 0.95686300000000002,
3165 | 0.99092999999999998,
3166 | 0.91291500000000003,
3167 | 0.66848099999999999,
3168 | 0.96078399999999997,
3169 | 0.99056999999999995,
3170 | 0.92004900000000001,
3171 | 0.67567500000000003,
3172 | 0.96470599999999995,
3173 | 0.99017500000000003,
3174 | 0.92719600000000002,
3175 | 0.68292600000000003,
3176 | 0.96862700000000002,
3177 | 0.989815,
3178 | 0.93432899999999997,
3179 | 0.69019799999999998,
3180 | 0.972549,
3181 | 0.98943400000000004,
3182 | 0.94147000000000003,
3183 | 0.697519,
3184 | 0.97647099999999998,
3185 | 0.98907699999999998,
3186 | 0.948604,
3187 | 0.70486300000000002,
3188 | 0.98039200000000004,
3189 | 0.98871699999999996,
3190 | 0.95574199999999998,
3191 | 0.71224200000000004,
3192 | 0.98431400000000002,
3193 | 0.988367,
3194 | 0.96287800000000001,
3195 | 0.71964899999999998,
3196 | 0.98823499999999997,
3197 | 0.98803300000000005,
3198 | 0.97001199999999999,
3199 | 0.72707699999999997,
3200 | 0.99215699999999996,
3201 | 0.98769099999999999,
3202 | 0.97715399999999997,
3203 | 0.73453599999999997,
3204 | 0.99607800000000002,
3205 | 0.98738700000000001,
3206 | 0.98428800000000005,
3207 | 0.74200200000000005,
3208 | 1.0,
3209 | 0.98705299999999996,
3210 | 0.99143800000000004,
3211 | 0.74950399999999995
3212 | ],
3213 | "Source" : "https://github.com/BIDS/colormap/blob/master/colormaps.py"
3214 | },
3215 | {
3216 | "ColorSpace" : "Diverging",
3217 | "Creator" : "Nathaniel J. Smith & Stefan van der Walt",
3218 | "License" : "CC0",
3219 | "Name" : "Plasma (matplotlib)",
3220 | "NanColor" :
3221 | [
3222 | 0,
3223 | 1,
3224 | 0
3225 | ],
3226 | "RGBPoints" :
3227 | [
3228 | 0.0,
3229 | 0.050382999999999997,
3230 | 0.029803,
3231 | 0.52797499999999997,
3232 | 0.0039220000000000001,
3233 | 0.063535999999999995,
3234 | 0.028426,
3235 | 0.53312400000000004,
3236 | 0.0078429999999999993,
3237 | 0.075353000000000003,
3238 | 0.027206000000000001,
3239 | 0.53800700000000001,
3240 | 0.011764999999999999,
3241 | 0.086221999999999993,
3242 | 0.026124999999999999,
3243 | 0.54265799999999997,
3244 | 0.015685999999999999,
3245 | 0.096379000000000006,
3246 | 0.025165,
3247 | 0.54710300000000001,
3248 | 0.019608,
3249 | 0.10598,
3250 | 0.024309000000000001,
3251 | 0.55136799999999997,
3252 | 0.023529000000000001,
3253 | 0.115124,
3254 | 0.023556000000000001,
3255 | 0.55546799999999996,
3256 | 0.027451,
3257 | 0.123903,
3258 | 0.022877999999999999,
3259 | 0.559423,
3260 | 0.031372999999999998,
3261 | 0.132381,
3262 | 0.022258,
3263 | 0.56325000000000003,
3264 | 0.035293999999999999,
3265 | 0.14060300000000001,
3266 | 0.021687000000000001,
3267 | 0.56695899999999999,
3268 | 0.039216000000000001,
3269 | 0.14860699999999999,
3270 | 0.021153999999999999,
3271 | 0.57056200000000001,
3272 | 0.043137000000000002,
3273 | 0.156421,
3274 | 0.020650999999999999,
3275 | 0.57406500000000005,
3276 | 0.047058999999999997,
3277 | 0.16406999999999999,
3278 | 0.020171000000000001,
3279 | 0.57747800000000005,
3280 | 0.050979999999999998,
3281 | 0.171574,
3282 | 0.019706000000000001,
3283 | 0.58080600000000004,
3284 | 0.054901999999999999,
3285 | 0.17895,
3286 | 0.019251999999999998,
3287 | 0.58405399999999996,
3288 | 0.058824000000000001,
3289 | 0.18621299999999999,
3290 | 0.018803,
3291 | 0.58722799999999997,
3292 | 0.062744999999999995,
3293 | 0.19337399999999999,
3294 | 0.018353999999999999,
3295 | 0.59033000000000002,
3296 | 0.066667000000000004,
3297 | 0.20044500000000001,
3298 | 0.017902000000000001,
3299 | 0.593364,
3300 | 0.070587999999999998,
3301 | 0.20743500000000001,
3302 | 0.017441999999999999,
3303 | 0.596333,
3304 | 0.074510000000000007,
3305 | 0.21435000000000001,
3306 | 0.016972999999999999,
3307 | 0.59923899999999997,
3308 | 0.078431000000000001,
3309 | 0.221197,
3310 | 0.016497000000000001,
3311 | 0.60208300000000003,
3312 | 0.082352999999999996,
3313 | 0.22798299999999999,
3314 | 0.016007,
3315 | 0.60486700000000004,
3316 | 0.086275000000000004,
3317 | 0.23471500000000001,
3318 | 0.015502,
3319 | 0.60759200000000002,
3320 | 0.090195999999999998,
3321 | 0.241396,
3322 | 0.014978999999999999,
3323 | 0.610259,
3324 | 0.094117999999999993,
3325 | 0.248032,
3326 | 0.014439,
3327 | 0.61286799999999997,
3328 | 0.098039000000000001,
3329 | 0.25462699999999999,
3330 | 0.013882,
3331 | 0.61541900000000005,
3332 | 0.101961,
3333 | 0.261183,
3334 | 0.013308,
3335 | 0.61791099999999999,
3336 | 0.105882,
3337 | 0.26770300000000002,
3338 | 0.012716,
3339 | 0.62034599999999995,
3340 | 0.109804,
3341 | 0.27419100000000002,
3342 | 0.012109,
3343 | 0.622722,
3344 | 0.11372500000000001,
3345 | 0.28064800000000001,
3346 | 0.011488,
3347 | 0.62503799999999998,
3348 | 0.117647,
3349 | 0.287076,
3350 | 0.010855,
3351 | 0.62729500000000005,
3352 | 0.121569,
3353 | 0.29347800000000002,
3354 | 0.010213,
3355 | 0.62948999999999999,
3356 | 0.12548999999999999,
3357 | 0.29985499999999998,
3358 | 0.0095610000000000001,
3359 | 0.63162399999999996,
3360 | 0.129412,
3361 | 0.30620999999999998,
3362 | 0.0089020000000000002,
3363 | 0.63369399999999998,
3364 | 0.13333300000000001,
3365 | 0.31254300000000002,
3366 | 0.0082389999999999998,
3367 | 0.63570000000000004,
3368 | 0.13725499999999999,
3369 | 0.31885599999999997,
3370 | 0.0075760000000000003,
3371 | 0.63763999999999998,
3372 | 0.141176,
3373 | 0.32514999999999999,
3374 | 0.0069150000000000001,
3375 | 0.63951199999999997,
3376 | 0.145098,
3377 | 0.331426,
3378 | 0.0062610000000000001,
3379 | 0.641316,
3380 | 0.14902000000000001,
3381 | 0.33768300000000001,
3382 | 0.0056179999999999997,
3383 | 0.64304899999999998,
3384 | 0.15294099999999999,
3385 | 0.34392499999999998,
3386 | 0.0049909999999999998,
3387 | 0.64471000000000001,
3388 | 0.156863,
3389 | 0.35015000000000002,
3390 | 0.0043819999999999996,
3391 | 0.64629800000000004,
3392 | 0.16078400000000001,
3393 | 0.35635899999999998,
3394 | 0.0037980000000000002,
3395 | 0.64781,
3396 | 0.16470599999999999,
3397 | 0.36255300000000001,
3398 | 0.0032429999999999998,
3399 | 0.64924499999999996,
3400 | 0.168627,
3401 | 0.36873299999999998,
3402 | 0.0027239999999999999,
3403 | 0.65060099999999998,
3404 | 0.17254900000000001,
3405 | 0.37489699999999998,
3406 | 0.002245,
3407 | 0.65187600000000001,
3408 | 0.17647099999999999,
3409 | 0.38104700000000002,
3410 | 0.0018140000000000001,
3411 | 0.65306799999999998,
3412 | 0.180392,
3413 | 0.387183,
3414 | 0.0014339999999999999,
3415 | 0.65417700000000001,
3416 | 0.18431400000000001,
3417 | 0.39330399999999999,
3418 | 0.001114,
3419 | 0.65519899999999998,
3420 | 0.18823500000000001,
3421 | 0.39941100000000002,
3422 | 0.00085899999999999995,
3423 | 0.65613299999999997,
3424 | 0.19215699999999999,
3425 | 0.405503,
3426 | 0.000678,
3427 | 0.65697700000000003,
3428 | 0.196078,
3429 | 0.41158,
3430 | 0.00057700000000000004,
3431 | 0.65773000000000004,
3432 | 0.20000000000000001,
3433 | 0.41764200000000001,
3434 | 0.00056400000000000005,
3435 | 0.65839000000000003,
3436 | 0.20392199999999999,
3437 | 0.42368899999999998,
3438 | 0.00064599999999999998,
3439 | 0.65895599999999999,
3440 | 0.207843,
3441 | 0.42971900000000002,
3442 | 0.00083100000000000003,
3443 | 0.65942500000000004,
3444 | 0.21176500000000001,
3445 | 0.43573400000000001,
3446 | 0.001127,
3447 | 0.65979699999999997,
3448 | 0.21568599999999999,
3449 | 0.44173200000000001,
3450 | 0.0015399999999999999,
3451 | 0.66006900000000002,
3452 | 0.219608,
3453 | 0.447714,
3454 | 0.0020799999999999998,
3455 | 0.66024000000000005,
3456 | 0.22352900000000001,
3457 | 0.453677,
3458 | 0.0027550000000000001,
3459 | 0.66030999999999995,
3460 | 0.22745099999999999,
3461 | 0.459623,
3462 | 0.0035739999999999999,
3463 | 0.660277,
3464 | 0.231373,
3465 | 0.46555000000000002,
3466 | 0.0045450000000000004,
3467 | 0.66013900000000003,
3468 | 0.235294,
3469 | 0.47145700000000001,
3470 | 0.0056779999999999999,
3471 | 0.65989699999999996,
3472 | 0.23921600000000001,
3473 | 0.47734399999999999,
3474 | 0.0069800000000000001,
3475 | 0.65954900000000005,
3476 | 0.24313699999999999,
3477 | 0.48320999999999997,
3478 | 0.0084600000000000005,
3479 | 0.65909499999999999,
3480 | 0.247059,
3481 | 0.48905500000000002,
3482 | 0.010127000000000001,
3483 | 0.65853399999999995,
3484 | 0.25097999999999998,
3485 | 0.49487700000000001,
3486 | 0.011990000000000001,
3487 | 0.65786500000000003,
3488 | 0.25490200000000002,
3489 | 0.50067799999999996,
3490 | 0.014055,
3491 | 0.65708800000000001,
3492 | 0.258824,
3493 | 0.50645399999999996,
3494 | 0.016333,
3495 | 0.65620199999999995,
3496 | 0.26274500000000001,
3497 | 0.51220600000000005,
3498 | 0.018832999999999999,
3499 | 0.65520900000000004,
3500 | 0.26666699999999999,
3501 | 0.51793299999999998,
3502 | 0.021562999999999999,
3503 | 0.65410900000000005,
3504 | 0.270588,
3505 | 0.52363300000000002,
3506 | 0.024532000000000002,
3507 | 0.65290099999999995,
3508 | 0.27450999999999998,
3509 | 0.52930600000000005,
3510 | 0.027747000000000001,
3511 | 0.651586,
3512 | 0.27843099999999998,
3513 | 0.53495199999999998,
3514 | 0.031217000000000002,
3515 | 0.65016499999999999,
3516 | 0.28235300000000002,
3517 | 0.54056999999999999,
3518 | 0.034950000000000002,
3519 | 0.64863999999999999,
3520 | 0.286275,
3521 | 0.546157,
3522 | 0.038954000000000003,
3523 | 0.64700999999999997,
3524 | 0.29019600000000001,
3525 | 0.55171499999999996,
3526 | 0.043136000000000001,
3527 | 0.64527699999999999,
3528 | 0.29411799999999999,
3529 | 0.55724300000000004,
3530 | 0.047330999999999998,
3531 | 0.64344299999999999,
3532 | 0.298039,
3533 | 0.56273799999999996,
3534 | 0.051545000000000001,
3535 | 0.641509,
3536 | 0.30196099999999998,
3537 | 0.56820099999999996,
3538 | 0.055778000000000001,
3539 | 0.63947699999999996,
3540 | 0.30588199999999999,
3541 | 0.57363200000000003,
3542 | 0.060027999999999998,
3543 | 0.63734900000000005,
3544 | 0.30980400000000002,
3545 | 0.57902900000000002,
3546 | 0.064296000000000006,
3547 | 0.63512599999999997,
3548 | 0.31372499999999998,
3549 | 0.58439099999999999,
3550 | 0.068579000000000001,
3551 | 0.63281200000000004,
3552 | 0.31764700000000001,
3553 | 0.58971899999999999,
3554 | 0.072877999999999998,
3555 | 0.63040799999999997,
3556 | 0.32156899999999999,
3557 | 0.59501099999999996,
3558 | 0.077189999999999995,
3559 | 0.62791699999999995,
3560 | 0.32549,
3561 | 0.60026599999999997,
3562 | 0.081516000000000005,
3563 | 0.62534199999999995,
3564 | 0.32941199999999998,
3565 | 0.60548500000000005,
3566 | 0.085854,
3567 | 0.62268599999999996,
3568 | 0.33333299999999999,
3569 | 0.61066699999999996,
3570 | 0.090204000000000006,
3571 | 0.61995100000000003,
3572 | 0.33725500000000003,
3573 | 0.61581200000000003,
3574 | 0.094563999999999995,
3575 | 0.61714000000000002,
3576 | 0.34117599999999998,
3577 | 0.620919,
3578 | 0.098933999999999994,
3579 | 0.61425700000000005,
3580 | 0.34509800000000002,
3581 | 0.62598699999999996,
3582 | 0.103312,
3583 | 0.61130499999999999,
3584 | 0.34902,
3585 | 0.63101700000000005,
3586 | 0.107699,
3587 | 0.60828700000000002,
3588 | 0.352941,
3589 | 0.63600800000000002,
3590 | 0.112092,
3591 | 0.60520499999999999,
3592 | 0.35686299999999999,
3593 | 0.64095899999999995,
3594 | 0.116492,
3595 | 0.60206499999999996,
3596 | 0.36078399999999999,
3597 | 0.645872,
3598 | 0.12089800000000001,
3599 | 0.59886700000000004,
3600 | 0.36470599999999997,
3601 | 0.65074600000000005,
3602 | 0.125309,
3603 | 0.59561699999999995,
3604 | 0.36862699999999998,
3605 | 0.65558000000000005,
3606 | 0.12972500000000001,
3607 | 0.59231699999999998,
3608 | 0.37254900000000002,
3609 | 0.66037400000000002,
3610 | 0.13414400000000001,
3611 | 0.58897100000000002,
3612 | 0.376471,
3613 | 0.66512899999999997,
3614 | 0.13856599999999999,
3615 | 0.58558200000000005,
3616 | 0.38039200000000001,
3617 | 0.66984500000000002,
3618 | 0.14299200000000001,
3619 | 0.58215399999999995,
3620 | 0.38431399999999999,
3621 | 0.67452199999999995,
3622 | 0.14741899999999999,
3623 | 0.57868799999999998,
3624 | 0.388235,
3625 | 0.67915999999999999,
3626 | 0.15184800000000001,
3627 | 0.57518899999999995,
3628 | 0.39215699999999998,
3629 | 0.68375799999999998,
3630 | 0.156278,
3631 | 0.57165999999999995,
3632 | 0.39607799999999999,
3633 | 0.68831799999999999,
3634 | 0.16070899999999999,
3635 | 0.56810300000000002,
3636 | 0.40000000000000002,
3637 | 0.69284000000000001,
3638 | 0.16514100000000001,
3639 | 0.56452199999999997,
3640 | 0.403922,
3641 | 0.69732400000000005,
3642 | 0.169573,
3643 | 0.56091899999999995,
3644 | 0.40784300000000001,
3645 | 0.70176899999999998,
3646 | 0.17400499999999999,
3647 | 0.55729600000000001,
3648 | 0.41176499999999999,
3649 | 0.70617799999999997,
3650 | 0.17843700000000001,
3651 | 0.55365699999999995,
3652 | 0.415686,
3653 | 0.71054899999999999,
3654 | 0.182868,
3655 | 0.55000400000000005,
3656 | 0.41960799999999998,
3657 | 0.71488300000000005,
3658 | 0.18729899999999999,
3659 | 0.54633799999999999,
3660 | 0.42352899999999999,
3661 | 0.71918099999999996,
3662 | 0.19172900000000001,
3663 | 0.54266300000000001,
3664 | 0.42745100000000003,
3665 | 0.72344399999999998,
3666 | 0.196158,
3667 | 0.53898100000000004,
3668 | 0.43137300000000001,
3669 | 0.72767000000000004,
3670 | 0.20058599999999999,
3671 | 0.53529300000000002,
3672 | 0.43529400000000001,
3673 | 0.73186200000000001,
3674 | 0.205013,
3675 | 0.53160099999999999,
3676 | 0.439216,
3677 | 0.73601899999999998,
3678 | 0.20943899999999999,
3679 | 0.52790800000000004,
3680 | 0.443137,
3681 | 0.740143,
3682 | 0.213864,
3683 | 0.52421600000000002,
3684 | 0.44705899999999998,
3685 | 0.744232,
3686 | 0.21828800000000001,
3687 | 0.52052399999999999,
3688 | 0.45097999999999999,
3689 | 0.74828899999999998,
3690 | 0.22271099999999999,
3691 | 0.51683400000000002,
3692 | 0.45490199999999997,
3693 | 0.75231199999999998,
3694 | 0.227133,
3695 | 0.51314899999999997,
3696 | 0.45882400000000001,
3697 | 0.75630399999999998,
3698 | 0.23155500000000001,
3699 | 0.50946800000000003,
3700 | 0.46274500000000002,
3701 | 0.76026400000000005,
3702 | 0.23597599999999999,
3703 | 0.50579399999999997,
3704 | 0.466667,
3705 | 0.76419300000000001,
3706 | 0.240396,
3707 | 0.50212599999999996,
3708 | 0.47058800000000001,
3709 | 0.76809000000000005,
3710 | 0.24481700000000001,
3711 | 0.49846499999999999,
3712 | 0.47450999999999999,
3713 | 0.77195800000000003,
3714 | 0.24923699999999999,
3715 | 0.494813,
3716 | 0.478431,
3717 | 0.77579600000000004,
3718 | 0.25365799999999999,
3719 | 0.49117100000000002,
3720 | 0.48235299999999998,
3721 | 0.77960399999999996,
3722 | 0.25807799999999997,
3723 | 0.487539,
3724 | 0.48627500000000001,
3725 | 0.78338300000000005,
3726 | 0.26250000000000001,
3727 | 0.48391800000000001,
3728 | 0.49019600000000002,
3729 | 0.78713299999999997,
3730 | 0.26692199999999999,
3731 | 0.48030699999999998,
3732 | 0.494118,
3733 | 0.79085499999999997,
3734 | 0.271345,
3735 | 0.47670600000000002,
3736 | 0.49803900000000001,
3737 | 0.79454899999999995,
3738 | 0.27577000000000002,
3739 | 0.47311700000000001,
3740 | 0.50196099999999999,
3741 | 0.79821600000000004,
3742 | 0.28019699999999997,
3743 | 0.46953800000000001,
3744 | 0.50588200000000005,
3745 | 0.80185499999999998,
3746 | 0.28462599999999999,
3747 | 0.46597100000000002,
3748 | 0.50980400000000003,
3749 | 0.80546700000000004,
3750 | 0.28905700000000001,
3751 | 0.46241500000000002,
3752 | 0.51372499999999999,
3753 | 0.80905199999999999,
3754 | 0.293491,
3755 | 0.45887,
3756 | 0.51764699999999997,
3757 | 0.812612,
3758 | 0.29792800000000003,
3759 | 0.45533800000000002,
3760 | 0.52156899999999995,
3761 | 0.81614399999999998,
3762 | 0.30236800000000003,
3763 | 0.451816,
3764 | 0.52549000000000001,
3765 | 0.81965100000000002,
3766 | 0.30681199999999997,
3767 | 0.44830599999999998,
3768 | 0.52941199999999999,
3769 | 0.82313199999999997,
3770 | 0.31126100000000001,
3771 | 0.44480599999999998,
3772 | 0.53333299999999995,
3773 | 0.82658799999999999,
3774 | 0.31571399999999999,
3775 | 0.44131599999999999,
3776 | 0.53725500000000004,
3777 | 0.83001800000000003,
3778 | 0.32017200000000001,
3779 | 0.437836,
3780 | 0.54117599999999999,
3781 | 0.833422,
3782 | 0.32463500000000001,
3783 | 0.43436599999999997,
3784 | 0.54509799999999997,
3785 | 0.83680100000000002,
3786 | 0.32910499999999998,
3787 | 0.43090499999999998,
3788 | 0.54901999999999995,
3789 | 0.84015499999999999,
3790 | 0.33357999999999999,
3791 | 0.42745499999999997,
3792 | 0.55294100000000002,
3793 | 0.84348400000000001,
3794 | 0.33806199999999997,
3795 | 0.42401299999999997,
3796 | 0.556863,
3797 | 0.84678799999999999,
3798 | 0.34255099999999999,
3799 | 0.42057899999999998,
3800 | 0.56078399999999995,
3801 | 0.85006599999999999,
3802 | 0.34704800000000002,
3803 | 0.417153,
3804 | 0.56470600000000004,
3805 | 0.85331900000000005,
3806 | 0.351553,
3807 | 0.41373399999999999,
3808 | 0.56862699999999999,
3809 | 0.85654699999999995,
3810 | 0.35606599999999999,
3811 | 0.41032200000000002,
3812 | 0.57254899999999997,
3813 | 0.85975000000000001,
3814 | 0.36058800000000002,
3815 | 0.40691699999999997,
3816 | 0.57647099999999996,
3817 | 0.862927,
3818 | 0.36511900000000003,
3819 | 0.40351900000000002,
3820 | 0.58039200000000002,
3821 | 0.86607800000000001,
3822 | 0.36965999999999999,
3823 | 0.40012599999999998,
3824 | 0.584314,
3825 | 0.86920299999999995,
3826 | 0.37421199999999999,
3827 | 0.39673799999999998,
3828 | 0.58823499999999995,
3829 | 0.87230300000000005,
3830 | 0.378774,
3831 | 0.39335500000000001,
3832 | 0.59215700000000004,
3833 | 0.87537600000000004,
3834 | 0.38334699999999999,
3835 | 0.38997599999999999,
3836 | 0.596078,
3837 | 0.87842299999999995,
3838 | 0.387932,
3839 | 0.3866,
3840 | 0.59999999999999998,
3841 | 0.88144299999999998,
3842 | 0.39252900000000002,
3843 | 0.38322899999999999,
3844 | 0.60392199999999996,
3845 | 0.884436,
3846 | 0.39713900000000002,
3847 | 0.37985999999999998,
3848 | 0.60784300000000002,
3849 | 0.88740200000000002,
3850 | 0.40176200000000001,
3851 | 0.376494,
3852 | 0.611765,
3853 | 0.89034000000000002,
3854 | 0.40639799999999998,
3855 | 0.37313000000000002,
3856 | 0.61568599999999996,
3857 | 0.89324999999999999,
3858 | 0.41104800000000002,
3859 | 0.36976799999999999,
3860 | 0.61960800000000005,
3861 | 0.89613100000000001,
3862 | 0.41571200000000003,
3863 | 0.36640699999999998,
3864 | 0.623529,
3865 | 0.89898400000000001,
3866 | 0.42039199999999999,
3867 | 0.36304700000000001,
3868 | 0.62745099999999998,
3869 | 0.90180700000000003,
3870 | 0.42508699999999999,
3871 | 0.35968800000000001,
3872 | 0.63137299999999996,
3873 | 0.90460099999999999,
3874 | 0.42979699999999998,
3875 | 0.35632900000000001,
3876 | 0.63529400000000003,
3877 | 0.90736499999999998,
3878 | 0.43452400000000002,
3879 | 0.35297000000000001,
3880 | 0.63921600000000001,
3881 | 0.91009799999999996,
3882 | 0.43926799999999999,
3883 | 0.34960999999999998,
3884 | 0.64313699999999996,
3885 | 0.91279999999999994,
3886 | 0.44402900000000001,
3887 | 0.34625099999999998,
3888 | 0.64705900000000005,
3889 | 0.91547100000000003,
3890 | 0.44880700000000001,
3891 | 0.34288999999999997,
3892 | 0.65098,
3893 | 0.91810899999999995,
3894 | 0.45360299999999998,
3895 | 0.33952900000000003,
3896 | 0.65490199999999998,
3897 | 0.92071400000000003,
3898 | 0.45841700000000002,
3899 | 0.33616600000000002,
3900 | 0.65882399999999997,
3901 | 0.92328699999999997,
3902 | 0.46325100000000002,
3903 | 0.33280100000000001,
3904 | 0.66274500000000003,
3905 | 0.92582500000000001,
3906 | 0.46810299999999999,
3907 | 0.32943499999999998,
3908 | 0.66666700000000001,
3909 | 0.92832899999999996,
3910 | 0.47297499999999998,
3911 | 0.326067,
3912 | 0.67058799999999996,
3913 | 0.93079800000000001,
3914 | 0.47786699999999999,
3915 | 0.32269700000000001,
3916 | 0.67451000000000005,
3917 | 0.93323199999999995,
3918 | 0.48277999999999999,
3919 | 0.31932500000000003,
3920 | 0.67843100000000001,
3921 | 0.93562999999999996,
3922 | 0.48771199999999998,
3923 | 0.31595200000000001,
3924 | 0.68235299999999999,
3925 | 0.93798999999999999,
3926 | 0.49266700000000002,
3927 | 0.31257499999999999,
3928 | 0.68627499999999997,
3929 | 0.94031299999999995,
3930 | 0.49764199999999997,
3931 | 0.309197,
3932 | 0.69019600000000003,
3933 | 0.94259800000000005,
3934 | 0.50263899999999995,
3935 | 0.30581599999999998,
3936 | 0.69411800000000001,
3937 | 0.94484400000000002,
3938 | 0.50765800000000005,
3939 | 0.30243300000000001,
3940 | 0.69803899999999997,
3941 | 0.94705099999999998,
3942 | 0.51269900000000002,
3943 | 0.29904900000000001,
3944 | 0.70196099999999995,
3945 | 0.94921699999999998,
3946 | 0.51776299999999997,
3947 | 0.29566199999999998,
3948 | 0.70588200000000001,
3949 | 0.95134399999999997,
3950 | 0.52285000000000004,
3951 | 0.29227500000000001,
3952 | 0.70980399999999999,
3953 | 0.95342800000000005,
3954 | 0.52795999999999998,
3955 | 0.288883,
3956 | 0.71372500000000005,
3957 | 0.95547000000000004,
3958 | 0.53309300000000004,
3959 | 0.28549000000000002,
3960 | 0.71764700000000003,
3961 | 0.95746900000000001,
3962 | 0.53825000000000001,
3963 | 0.28209600000000001,
3964 | 0.72156900000000002,
3965 | 0.95942400000000005,
3966 | 0.543431,
3967 | 0.27870099999999998,
3968 | 0.72548999999999997,
3969 | 0.96133599999999997,
3970 | 0.54863600000000001,
3971 | 0.27530500000000002,
3972 | 0.72941199999999995,
3973 | 0.96320300000000003,
3974 | 0.55386500000000005,
3975 | 0.27190900000000001,
3976 | 0.73333300000000001,
3977 | 0.96502399999999999,
3978 | 0.559118,
3979 | 0.268513,
3980 | 0.73725499999999999,
3981 | 0.96679800000000005,
3982 | 0.56439600000000001,
3983 | 0.26511800000000002,
3984 | 0.74117599999999995,
3985 | 0.968526,
3986 | 0.56969999999999998,
3987 | 0.26172099999999998,
3988 | 0.74509800000000004,
3989 | 0.97020499999999998,
3990 | 0.57502799999999998,
3991 | 0.25832500000000003,
3992 | 0.74902000000000002,
3993 | 0.971835,
3994 | 0.58038199999999995,
3995 | 0.25493100000000002,
3996 | 0.75294099999999997,
3997 | 0.97341599999999995,
3998 | 0.58576099999999998,
3999 | 0.25153999999999999,
4000 | 0.75686299999999995,
4001 | 0.97494700000000001,
4002 | 0.59116500000000005,
4003 | 0.24815100000000001,
4004 | 0.76078400000000002,
4005 | 0.97642799999999996,
4006 | 0.59659499999999999,
4007 | 0.24476700000000001,
4008 | 0.764706,
4009 | 0.97785599999999995,
4010 | 0.602051,
4011 | 0.24138699999999999,
4012 | 0.76862699999999995,
4013 | 0.97923300000000002,
4014 | 0.60753199999999996,
4015 | 0.238013,
4016 | 0.77254900000000004,
4017 | 0.98055599999999998,
4018 | 0.613039,
4019 | 0.23464599999999999,
4020 | 0.77647100000000002,
4021 | 0.98182599999999998,
4022 | 0.61857200000000001,
4023 | 0.23128699999999999,
4024 | 0.78039199999999997,
4025 | 0.98304100000000005,
4026 | 0.62413099999999999,
4027 | 0.227937,
4028 | 0.78431399999999996,
4029 | 0.98419900000000005,
4030 | 0.629718,
4031 | 0.22459499999999999,
4032 | 0.78823500000000002,
4033 | 0.98530099999999998,
4034 | 0.63532999999999995,
4035 | 0.22126499999999999,
4036 | 0.792157,
4037 | 0.98634500000000003,
4038 | 0.64096900000000001,
4039 | 0.217948,
4040 | 0.79607799999999995,
4041 | 0.98733199999999999,
4042 | 0.64663300000000001,
4043 | 0.21464800000000001,
4044 | 0.80000000000000004,
4045 | 0.98826000000000003,
4046 | 0.65232500000000004,
4047 | 0.211364,
4048 | 0.80392200000000003,
4049 | 0.98912800000000001,
4050 | 0.65804300000000004,
4051 | 0.20810000000000001,
4052 | 0.80784299999999998,
4053 | 0.98993500000000001,
4054 | 0.66378700000000002,
4055 | 0.20485900000000001,
4056 | 0.81176499999999996,
4057 | 0.99068100000000003,
4058 | 0.66955799999999999,
4059 | 0.20164199999999999,
4060 | 0.81568600000000002,
4061 | 0.99136500000000005,
4062 | 0.67535500000000004,
4063 | 0.19845299999999999,
4064 | 0.819608,
4065 | 0.99198500000000001,
4066 | 0.68117899999999998,
4067 | 0.195295,
4068 | 0.82352899999999996,
4069 | 0.99254100000000001,
4070 | 0.68703000000000003,
4071 | 0.19217000000000001,
4072 | 0.82745100000000005,
4073 | 0.99303200000000003,
4074 | 0.69290700000000005,
4075 | 0.189084,
4076 | 0.83137300000000003,
4077 | 0.99345600000000001,
4078 | 0.69881000000000004,
4079 | 0.18604100000000001,
4080 | 0.83529399999999998,
4081 | 0.99381399999999998,
4082 | 0.70474099999999995,
4083 | 0.18304300000000001,
4084 | 0.83921599999999996,
4085 | 0.99410299999999996,
4086 | 0.71069800000000005,
4087 | 0.18009700000000001,
4088 | 0.84313700000000003,
4089 | 0.99432399999999999,
4090 | 0.71668100000000001,
4091 | 0.177208,
4092 | 0.84705900000000001,
4093 | 0.99447399999999997,
4094 | 0.72269099999999997,
4095 | 0.17438100000000001,
4096 | 0.85097999999999996,
4097 | 0.99455300000000002,
4098 | 0.72872800000000004,
4099 | 0.171622,
4100 | 0.85490200000000005,
4101 | 0.99456100000000003,
4102 | 0.73479099999999997,
4103 | 0.168938,
4104 | 0.85882400000000003,
4105 | 0.99449500000000002,
4106 | 0.74087999999999998,
4107 | 0.16633500000000001,
4108 | 0.86274499999999998,
4109 | 0.99435499999999999,
4110 | 0.74699499999999996,
4111 | 0.16382099999999999,
4112 | 0.86666699999999997,
4113 | 0.99414100000000005,
4114 | 0.75313699999999995,
4115 | 0.16140399999999999,
4116 | 0.87058800000000003,
4117 | 0.99385100000000004,
4118 | 0.75930399999999998,
4119 | 0.15909200000000001,
4120 | 0.87451000000000001,
4121 | 0.99348199999999998,
4122 | 0.76549900000000004,
4123 | 0.156891,
4124 | 0.87843099999999996,
4125 | 0.99303300000000005,
4126 | 0.77171999999999996,
4127 | 0.154808,
4128 | 0.88235300000000005,
4129 | 0.99250499999999997,
4130 | 0.77796699999999996,
4131 | 0.15285499999999999,
4132 | 0.88627500000000003,
4133 | 0.99189700000000003,
4134 | 0.78423900000000002,
4135 | 0.15104200000000001,
4136 | 0.89019599999999999,
4137 | 0.99120900000000001,
4138 | 0.79053700000000005,
4139 | 0.14937700000000001,
4140 | 0.89411799999999997,
4141 | 0.99043899999999996,
4142 | 0.79685899999999998,
4143 | 0.14787,
4144 | 0.89803900000000003,
4145 | 0.98958699999999999,
4146 | 0.80320499999999995,
4147 | 0.14652899999999999,
4148 | 0.90196100000000001,
4149 | 0.98864799999999997,
4150 | 0.80957900000000005,
4151 | 0.14535699999999999,
4152 | 0.90588199999999997,
4153 | 0.98762099999999997,
4154 | 0.81597799999999998,
4155 | 0.14436299999999999,
4156 | 0.90980399999999995,
4157 | 0.98650899999999997,
4158 | 0.82240100000000005,
4159 | 0.14355699999999999,
4160 | 0.91372500000000001,
4161 | 0.98531400000000002,
4162 | 0.82884599999999997,
4163 | 0.14294499999999999,
4164 | 0.91764699999999999,
4165 | 0.98403099999999999,
4166 | 0.83531500000000003,
4167 | 0.14252799999999999,
4168 | 0.92156899999999997,
4169 | 0.982653,
4170 | 0.841812,
4171 | 0.14230300000000001,
4172 | 0.92549000000000003,
4173 | 0.98119000000000001,
4174 | 0.848329,
4175 | 0.14227899999999999,
4176 | 0.92941200000000002,
4177 | 0.97964399999999996,
4178 | 0.85486600000000001,
4179 | 0.142453,
4180 | 0.93333299999999997,
4181 | 0.97799499999999995,
4182 | 0.86143199999999998,
4183 | 0.14280799999999999,
4184 | 0.93725499999999995,
4185 | 0.97626500000000005,
4186 | 0.86801600000000001,
4187 | 0.14335100000000001,
4188 | 0.94117600000000001,
4189 | 0.97444299999999995,
4190 | 0.87462200000000001,
4191 | 0.14406099999999999,
4192 | 0.94509799999999999,
4193 | 0.97253000000000001,
4194 | 0.88124999999999998,
4195 | 0.144923,
4196 | 0.94901999999999997,
4197 | 0.97053299999999998,
4198 | 0.88789600000000002,
4199 | 0.14591899999999999,
4200 | 0.95294100000000004,
4201 | 0.96844300000000005,
4202 | 0.89456400000000003,
4203 | 0.14701400000000001,
4204 | 0.95686300000000002,
4205 | 0.96627099999999999,
4206 | 0.90124899999999997,
4207 | 0.14818000000000001,
4208 | 0.96078399999999997,
4209 | 0.96402100000000002,
4210 | 0.90795000000000003,
4211 | 0.14937,
4212 | 0.96470599999999995,
4213 | 0.96168100000000001,
4214 | 0.91467200000000004,
4215 | 0.15051999999999999,
4216 | 0.96862700000000002,
4217 | 0.95927600000000002,
4218 | 0.92140699999999998,
4219 | 0.15156600000000001,
4220 | 0.972549,
4221 | 0.95680799999999999,
4222 | 0.92815199999999998,
4223 | 0.15240899999999999,
4224 | 0.97647099999999998,
4225 | 0.954287,
4226 | 0.93490799999999996,
4227 | 0.152921,
4228 | 0.98039200000000004,
4229 | 0.95172599999999996,
4230 | 0.94167100000000004,
4231 | 0.15292500000000001,
4232 | 0.98431400000000002,
4233 | 0.94915099999999997,
4234 | 0.94843500000000003,
4235 | 0.15217800000000001,
4236 | 0.98823499999999997,
4237 | 0.94660200000000005,
4238 | 0.95518999999999998,
4239 | 0.15032799999999999,
4240 | 0.99215699999999996,
4241 | 0.94415199999999999,
4242 | 0.96191599999999999,
4243 | 0.14686099999999999,
4244 | 0.99607800000000002,
4245 | 0.94189599999999996,
4246 | 0.96858999999999995,
4247 | 0.140956,
4248 | 1.0,
4249 | 0.94001500000000004,
4250 | 0.97515799999999997,
4251 | 0.131326
4252 | ],
4253 | "Source" : "https://github.com/BIDS/colormap/blob/master/colormaps.py"
4254 | },
4255 | {
4256 | "ColorSpace" : "RGB",
4257 | "DefaultMap" : true,
4258 | "Name" : "Black-Body Radiation",
4259 | "NanColor" :
4260 | [
4261 | 0,
4262 | 0.49803921568600001,
4263 | 1
4264 | ],
4265 | "RGBPoints" :
4266 | [
4267 | 0,
4268 | 0,
4269 | 0,
4270 | 0,
4271 | 0.40000000000000002,
4272 | 0.90196078431399995,
4273 | 0,
4274 | 0,
4275 | 0.80000000000000004,
4276 | 0.90196078431399995,
4277 | 0.90196078431399995,
4278 | 0,
4279 | 1,
4280 | 1,
4281 | 1,
4282 | 1
4283 | ]
4284 | },
4285 | {
4286 | "ColorSpace" : "RGB",
4287 | "DefaultMap" : true,
4288 | "Name" : "jet",
4289 | "RGBPoints" :
4290 | [
4291 | -1,
4292 | 0,
4293 | 0,
4294 | 0.5625,
4295 | -0.77777799999999997,
4296 | 0,
4297 | 0,
4298 | 1,
4299 | -0.269841,
4300 | 0,
4301 | 1,
4302 | 1,
4303 | -0.015873000000000002,
4304 | 0.5,
4305 | 1,
4306 | 0.5,
4307 | 0.238095,
4308 | 1,
4309 | 1,
4310 | 0,
4311 | 0.74603200000000003,
4312 | 1,
4313 | 0,
4314 | 0,
4315 | 1,
4316 | 0.5,
4317 | 0,
4318 | 0
4319 | ]
4320 | },
4321 | {
4322 | "ColorSpace" : "Lab",
4323 | "Name" : "erdc_blue2green_BW",
4324 | "RGBPoints" :
4325 | [
4326 | -1,
4327 | 3.6357799999999998e-07,
4328 | 0,
4329 | 5.2937400000000001e-06,
4330 | -0.87451000000000001,
4331 | 0.053991499999999998,
4332 | 0.0577948,
4333 | 0.212806,
4334 | -0.74902000000000002,
4335 | 0.062039299999999999,
4336 | 0.075894199999999995,
4337 | 0.388959,
4338 | -0.623529,
4339 | 0.069749900000000004,
4340 | 0.102032,
4341 | 0.54176999999999997,
4342 | -0.49803900000000001,
4343 | 0.11329500000000001,
4344 | 0.15615599999999999,
4345 | 0.64334000000000002,
4346 | -0.37254900000000002,
4347 | 0.15204699999999999,
4348 | 0.243196,
4349 | 0.67028299999999996,
4350 | -0.247059,
4351 | 0.15809599999999999,
4352 | 0.344084,
4353 | 0.62286399999999997,
4354 | -0.121569,
4355 | 0.151142,
4356 | 0.43922,
4357 | 0.53276699999999999,
4358 | 0.0039215700000000001,
4359 | 0.17155000000000001,
4360 | 0.52158800000000005,
4361 | 0.45771899999999999,
4362 | 0.129412,
4363 | 0.22586100000000001,
4364 | 0.59914100000000003,
4365 | 0.36399700000000001,
4366 | 0.25490200000000002,
4367 | 0.32328000000000001,
4368 | 0.67007000000000005,
4369 | 0.25908300000000001,
4370 | 0.38039200000000001,
4371 | 0.44234400000000001,
4372 | 0.73369700000000004,
4373 | 0.22375400000000001,
4374 | 0.50588200000000005,
4375 | 0.55840900000000004,
4376 | 0.79494100000000001,
4377 | 0.257411,
4378 | 0.63137299999999996,
4379 | 0.673875,
4380 | 0.85434399999999999,
4381 | 0.34082200000000001,
4382 | 0.75686299999999995,
4383 | 0.78724400000000005,
4384 | 0.90932599999999997,
4385 | 0.52471699999999999,
4386 | 0.88235300000000005,
4387 | 0.89648300000000003,
4388 | 0.958063,
4389 | 0.77591399999999999,
4390 | 1,
4391 | 1,
4392 | 1,
4393 | 0.99998200000000004
4394 | ]
4395 | },
4396 | {
4397 | "ColorSpace" : "Lab",
4398 | "Name" : "coolwarm",
4399 | "RGBPoints" :
4400 | [
4401 | -1,
4402 | 0.22980600000000001,
4403 | 0.29871799999999998,
4404 | 0.75368299999999999,
4405 | -0.875,
4406 | 0.303869,
4407 | 0.40653499999999998,
4408 | 0.84495900000000002,
4409 | -0.75,
4410 | 0.38301299999999999,
4411 | 0.50941899999999996,
4412 | 0.91738799999999998,
4413 | -0.625,
4414 | 0.466667,
4415 | 0.60456299999999996,
4416 | 0.96815499999999999,
4417 | -0.5,
4418 | 0.55295300000000003,
4419 | 0.68892900000000001,
4420 | 0.99537600000000004,
4421 | -0.375,
4422 | 0.63917599999999997,
4423 | 0.75960000000000005,
4424 | 0.99815100000000001,
4425 | -0.25,
4426 | 0.72219299999999997,
4427 | 0.81395300000000004,
4428 | 0.97657499999999997,
4429 | -0.125,
4430 | 0.79869199999999996,
4431 | 0.84978600000000004,
4432 | 0.93168899999999999,
4433 | 0,
4434 | 0.86539500000000003,
4435 | 0.86541000000000001,
4436 | 0.86539600000000005,
4437 | 0.125,
4438 | 0.92412799999999995,
4439 | 0.82738500000000004,
4440 | 0.77450799999999997,
4441 | 0.25,
4442 | 0.95885299999999996,
4443 | 0.76976800000000001,
4444 | 0.67800800000000006,
4445 | 0.375,
4446 | 0.96995399999999998,
4447 | 0.69426699999999997,
4448 | 0.57937499999999997,
4449 | 0.5,
4450 | 0.95800300000000005,
4451 | 0.60284199999999999,
4452 | 0.48177599999999998,
4453 | 0.625,
4454 | 0.92394500000000002,
4455 | 0.497309,
4456 | 0.38796999999999998,
4457 | 0.75,
4458 | 0.86918700000000004,
4459 | 0.37831300000000001,
4460 | 0.30026700000000001,
4461 | 0.875,
4462 | 0.79563200000000001,
4463 | 0.241284,
4464 | 0.220526,
4465 | 1,
4466 | 0.70567299999999999,
4467 | 0.015556199999999999,
4468 | 0.15023300000000001
4469 | ]
4470 | },
4471 | {
4472 | "ColorSpace" : "RGB",
4473 | "Name" : "hsv",
4474 | "RGBPoints" :
4475 | [
4476 | -1,
4477 | 1,
4478 | 0,
4479 | 0,
4480 | -0.66666599999999998,
4481 | 1,
4482 | 0,
4483 | 1,
4484 | -0.33333299999999999,
4485 | 0,
4486 | 0,
4487 | 1,
4488 | 0,
4489 | 0,
4490 | 1,
4491 | 1,
4492 | 0.33333000000000002,
4493 | 0,
4494 | 1,
4495 | 0,
4496 | 0.66666000000000003,
4497 | 1,
4498 | 1,
4499 | 0,
4500 | 1,
4501 | 1,
4502 | 0,
4503 | 0
4504 | ]
4505 | },
4506 | {
4507 | "ColorSpace" : "Lab",
4508 | "Creator" : "Francesca Samsel",
4509 | "Name" : "Asymmtrical Earth Tones (6_21b)",
4510 | "NanColor" :
4511 | [
4512 | 0.25,
4513 | 0,
4514 | 0
4515 | ],
4516 | "RGBPoints" :
4517 | [
4518 | 0,
4519 | 0.141176,
4520 | 0.14902000000000001,
4521 | 0.20000000000000001,
4522 | 0.050000000000000003,
4523 | 0.21568599999999999,
4524 | 0.258824,
4525 | 0.32156899999999999,
4526 | 0.10000000000000001,
4527 | 0.24313699999999999,
4528 | 0.36862699999999998,
4529 | 0.38039200000000001,
4530 | 0.14999999999999999,
4531 | 0.27450999999999998,
4532 | 0.439216,
4533 | 0.40000000000000002,
4534 | 0.20000000000000001,
4535 | 0.32549,
4536 | 0.50196099999999999,
4537 | 0.38431399999999999,
4538 | 0.25,
4539 | 0.403922,
4540 | 0.59999999999999998,
4541 | 0.41960799999999998,
4542 | 0.29999999999999999,
4543 | 0.48627500000000001,
4544 | 0.70196099999999995,
4545 | 0.45490199999999997,
4546 | 0.34999999999999998,
4547 | 0.556863,
4548 | 0.74902000000000002,
4549 | 0.494118,
4550 | 0.40000000000000002,
4551 | 0.67058799999999996,
4552 | 0.80000000000000004,
4553 | 0.54509799999999997,
4554 | 0.5,
4555 | 0.85490200000000005,
4556 | 0.90196100000000001,
4557 | 0.63137299999999996,
4558 | 0.55000000000000004,
4559 | 0.92549000000000003,
4560 | 0.94117600000000001,
4561 | 0.69411800000000001,
4562 | 0.59999999999999998,
4563 | 0.96078399999999997,
4564 | 0.94901999999999997,
4565 | 0.77647100000000002,
4566 | 0.65000000000000002,
4567 | 0.98823499999999997,
4568 | 0.96862700000000002,
4569 | 0.90980399999999995,
4570 | 0.69999999999999996,
4571 | 0.83921599999999996,
4572 | 0.81568600000000002,
4573 | 0.77254900000000004,
4574 | 0.75,
4575 | 0.70196099999999995,
4576 | 0.66274500000000003,
4577 | 0.61568599999999996,
4578 | 0.80000000000000004,
4579 | 0.59999999999999998,
4580 | 0.52941199999999999,
4581 | 0.478431,
4582 | 0.84999999999999998,
4583 | 0.50196099999999999,
4584 | 0.403922,
4585 | 0.36078399999999999,
4586 | 0.90000000000000002,
4587 | 0.439216,
4588 | 0.31372499999999998,
4589 | 0.29019600000000001,
4590 | 1,
4591 | 0.30196099999999998,
4592 | 0.16470599999999999,
4593 | 0.17647099999999999
4594 | ]
4595 | },
4596 | {
4597 | "ColorSpace" : "Lab",
4598 | "Name" : "gist_earth",
4599 | "RGBPoints" :
4600 | [
4601 | -1,
4602 | 0,
4603 | 0,
4604 | 0,
4605 | -0.87451000000000001,
4606 | 0.23921600000000001,
4607 | 0.027451,
4608 | 0.415686,
4609 | -0.74902000000000002,
4610 | 0.090196100000000001,
4611 | 0.25490200000000002,
4612 | 0.556863,
4613 | -0.623529,
4614 | 0.094117599999999996,
4615 | 0.352941,
4616 | 0.54901999999999995,
4617 | -0.49803900000000001,
4618 | 0.105882,
4619 | 0.43529400000000001,
4620 | 0.53333299999999995,
4621 | -0.37254900000000002,
4622 | 0.12548999999999999,
4623 | 0.52549000000000001,
4624 | 0.50196099999999999,
4625 | -0.247059,
4626 | 0.156863,
4627 | 0.596078,
4628 | 0.443137,
4629 | -0.121569,
4630 | 0.196078,
4631 | 0.65098,
4632 | 0.38039200000000001,
4633 | 0.0039215700000000001,
4634 | 0.28235300000000002,
4635 | 0.71764700000000003,
4636 | 0.30196099999999998,
4637 | 0.129412,
4638 | 0.466667,
4639 | 0.77254900000000004,
4640 | 0.27450999999999998,
4641 | 0.25490200000000002,
4642 | 0.67843100000000001,
4643 | 0.78431399999999996,
4644 | 0.30980400000000002,
4645 | 0.38039200000000001,
4646 | 0.90196100000000001,
4647 | 0.75686299999999995,
4648 | 0.376471,
4649 | 0.50588200000000005,
4650 | 0.99215699999999996,
4651 | 0.70588200000000001,
4652 | 0.52156899999999995,
4653 | 0.63137299999999996,
4654 | 1,
4655 | 0.72156900000000002,
4656 | 0.70196099999999995,
4657 | 0.75686299999999995,
4658 | 1,
4659 | 0.78431399999999996,
4660 | 0.78431399999999996,
4661 | 0.88235300000000005,
4662 | 1,
4663 | 0.86666699999999997,
4664 | 0.86666699999999997,
4665 | 1,
4666 | 1,
4667 | 1,
4668 | 1
4669 | ]
4670 | }
4671 | ]
4672 |
4673 |
--------------------------------------------------------------------------------
/res/hex.vtu:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | wAMAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAADAAAAAAAAAAQAAAAAAAAABQAAAAAAAAAGAAAAAAAAAAcAAAAAAAAACAAAAAAAAAAJAAAAAAAAAAoAAAAAAAAACwAAAAAAAAAMAAAAAAAAAA0AAAAAAAAADgAAAAAAAAAPAAAAAAAAABAAAAAAAAAAEQAAAAAAAAASAAAAAAAAABMAAAAAAAAAFAAAAAAAAAAVAAAAAAAAABYAAAAAAAAAFwAAAAAAAAAYAAAAAAAAABkAAAAAAAAAGgAAAAAAAAAbAAAAAAAAABwAAAAAAAAAHQAAAAAAAAAeAAAAAAAAAB8AAAAAAAAAIAAAAAAAAAAhAAAAAAAAACIAAAAAAAAAIwAAAAAAAAAkAAAAAAAAACUAAAAAAAAAJgAAAAAAAAAnAAAAAAAAACgAAAAAAAAAKQAAAAAAAAAqAAAAAAAAACsAAAAAAAAALAAAAAAAAAAtAAAAAAAAAC4AAAAAAAAALwAAAAAAAAAwAAAAAAAAADEAAAAAAAAAMgAAAAAAAAAzAAAAAAAAADQAAAAAAAAANQAAAAAAAAA2AAAAAAAAADcAAAAAAAAAOAAAAAAAAAA5AAAAAAAAADoAAAAAAAAAOwAAAAAAAAA8AAAAAAAAAD0AAAAAAAAAPgAAAAAAAAA/AAAAAAAAAEAAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEMAAAAAAAAARAAAAAAAAABFAAAAAAAAAEYAAAAAAAAARwAAAAAAAABIAAAAAAAAAEkAAAAAAAAASgAAAAAAAABLAAAAAAAAAEwAAAAAAAAATQAAAAAAAABOAAAAAAAAAE8AAAAAAAAAUAAAAAAAAABRAAAAAAAAAFIAAAAAAAAAUwAAAAAAAABUAAAAAAAAAFUAAAAAAAAAVgAAAAAAAABXAAAAAAAAAFgAAAAAAAAAWQAAAAAAAABaAAAAAAAAAFsAAAAAAAAAXAAAAAAAAABdAAAAAAAAAF4AAAAAAAAAXwAAAAAAAABgAAAAAAAAAGEAAAAAAAAAYgAAAAAAAABjAAAAAAAAAGQAAAAAAAAAZQAAAAAAAABmAAAAAAAAAGcAAAAAAAAAaAAAAAAAAABpAAAAAAAAAGoAAAAAAAAAawAAAAAAAABsAAAAAAAAAG0AAAAAAAAAbgAAAAAAAABvAAAAAAAAAHAAAAAAAAAAcQAAAAAAAAByAAAAAAAAAHMAAAAAAAAAdAAAAAAAAAB1AAAAAAAAAHYAAAAAAAAAdwAAAAAAAAA=
7 |
8 |
9 | QAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAADwPwAAAAAAABBAAAAAAAAAAAAAAAAAAAAAQAAAAAAAABBAAAAAAAAAAAAAAAAAAAAIQAAAAAAAABBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAIQAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAABAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAhAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAIQAAAAAAAAAhAAAAAAAAA8D8AAAAAAAAAAAAAAAAAABBAAAAAAAAA8D8AAAAAAADwPwAAAAAAABBAAAAAAAAA8D8AAAAAAAAAQAAAAAAAABBAAAAAAAAA8D8AAAAAAAAIQAAAAAAAABBAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAADwPwAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAhAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAEAAAAAAAADwPwAAAAAAABBAAAAAAAAAAEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAIQAAAAAAAABBAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAAAAAADwPwAAAAAAAAAAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAACEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAACEAAAAAAAADwPwAAAAAAAPA/AAAAAAAACEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAACEAAAAAAAAAAAAAAAAAAAABAAAAAAAAACEAAAAAAAADwPwAAAAAAAABAAAAAAAAACEAAAAAAAAAAQAAAAAAAAABAAAAAAAAACEAAAAAAAAAIQAAAAAAAAABAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAACEAAAAAAAADwPwAAAAAAAAhAAAAAAAAACEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAACEAAAAAAAAAAAAAAAAAAABBAAAAAAAAACEAAAAAAAADwPwAAAAAAABBAAAAAAAAACEAAAAAAAAAAQAAAAAAAABBAAAAAAAAACEAAAAAAAAAIQAAAAAAAABBAAAAAAAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAEEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAEEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAEEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAEEAAAAAAAADwPwAAAAAAAABAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAEEAAAAAAAADwPwAAAAAAAAhAAAAAAAAAEEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAEEAAAAAAAAAAAAAAAAAAABBAAAAAAAAAEEAAAAAAAADwPwAAAAAAABBAAAAAAAAAEEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAEEAAAAAAAAAIQAAAAAAAABBAAAAAAAAAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAFEAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAFEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAFEAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAIQAAAAAAAAPA/AAAAAAAAFEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAFEAAAAAAAADwPwAAAAAAAABAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAIQAAAAAAAAABAAAAAAAAAFEAAAAAAAAAAAAAAAAAAAAhAAAAAAAAAFEAAAAAAAADwPwAAAAAAAAhAAAAAAAAAFEAAAAAAAAAAQAAAAAAAAAhAAAAAAAAAFEAAAAAAAAAIQAAAAAAAAAhAAAAAAAAAFEAAAAAAAAAAAAAAAAAAABBAAAAAAAAAFEAAAAAAAADwPwAAAAAAABBAAAAAAAAAFEAAAAAAAAAAQAAAAAAAABBAAAAAAAAAFEAAAAAAAAAIQAAAAAAAABBAAAAAAAAAFEA=
10 |
11 |
12 | 0
13 |
14 |
15 | 7.0710678119
16 |
17 |
18 |
19 |
20 | 0
21 |
22 |
23 | 7.0710678119
24 |
25 |
26 |
27 |
28 |
29 |
30 | 4AEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAgAAAAAAAAADAAAAAAAAAAQAAAAAAAAABQAAAAAAAAAGAAAAAAAAAAcAAAAAAAAACAAAAAAAAAAJAAAAAAAAAAoAAAAAAAAACwAAAAAAAAAMAAAAAAAAAA0AAAAAAAAADgAAAAAAAAAPAAAAAAAAABAAAAAAAAAAEQAAAAAAAAASAAAAAAAAABMAAAAAAAAAFAAAAAAAAAAVAAAAAAAAABYAAAAAAAAAFwAAAAAAAAAYAAAAAAAAABkAAAAAAAAAGgAAAAAAAAAbAAAAAAAAABwAAAAAAAAAHQAAAAAAAAAeAAAAAAAAAB8AAAAAAAAAIAAAAAAAAAAhAAAAAAAAACIAAAAAAAAAIwAAAAAAAAAkAAAAAAAAACUAAAAAAAAAJgAAAAAAAAAnAAAAAAAAACgAAAAAAAAAKQAAAAAAAAAqAAAAAAAAACsAAAAAAAAALAAAAAAAAAAtAAAAAAAAAC4AAAAAAAAALwAAAAAAAAAwAAAAAAAAADEAAAAAAAAAMgAAAAAAAAAzAAAAAAAAADQAAAAAAAAANQAAAAAAAAA2AAAAAAAAADcAAAAAAAAAOAAAAAAAAAA5AAAAAAAAADoAAAAAAAAAOwAAAAAAAAA=
31 |
32 |
33 |
34 |
35 | oAUAAAAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAABAAAAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAACAPwAAAAAAAIA/AACAPwAAAAAAAABAAACAPwAAAAAAAEBAAACAPwAAAAAAAAAAAAAAQAAAAAAAAIA/AAAAQAAAAAAAAABAAAAAQAAAAAAAAEBAAAAAQAAAAAAAAAAAAABAQAAAAAAAAIA/AABAQAAAAAAAAABAAABAQAAAAAAAAEBAAABAQAAAAAAAAAAAAACAQAAAAAAAAIA/AACAQAAAAAAAAABAAACAQAAAAAAAAEBAAACAQAAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAABAAAAAAAAAgD8AAEBAAAAAAAAAgD8AAAAAAACAPwAAgD8AAIA/AACAPwAAgD8AAABAAACAPwAAgD8AAEBAAACAPwAAgD8AAAAAAAAAQAAAgD8AAIA/AAAAQAAAgD8AAABAAAAAQAAAgD8AAEBAAAAAQAAAgD8AAAAAAABAQAAAgD8AAIA/AABAQAAAgD8AAABAAABAQAAAgD8AAEBAAABAQAAAgD8AAAAAAACAQAAAgD8AAIA/AACAQAAAgD8AAABAAACAQAAAgD8AAEBAAACAQAAAgD8AAAAAAAAAAAAAAEAAAIA/AAAAAAAAAEAAAABAAAAAAAAAAEAAAEBAAAAAAAAAAEAAAAAAAACAPwAAAEAAAIA/AACAPwAAAEAAAABAAACAPwAAAEAAAEBAAACAPwAAAEAAAAAAAAAAQAAAAEAAAIA/AAAAQAAAAEAAAABAAAAAQAAAAEAAAEBAAAAAQAAAAEAAAAAAAABAQAAAAEAAAIA/AABAQAAAAEAAAABAAABAQAAAAEAAAEBAAABAQAAAAEAAAAAAAACAQAAAAEAAAIA/AACAQAAAAEAAAABAAACAQAAAAEAAAEBAAACAQAAAAEAAAAAAAAAAAAAAQEAAAIA/AAAAAAAAQEAAAABAAAAAAAAAQEAAAEBAAAAAAAAAQEAAAAAAAACAPwAAQEAAAIA/AACAPwAAQEAAAABAAACAPwAAQEAAAEBAAACAPwAAQEAAAAAAAAAAQAAAQEAAAIA/AAAAQAAAQEAAAABAAAAAQAAAQEAAAEBAAAAAQAAAQEAAAAAAAABAQAAAQEAAAIA/AABAQAAAQEAAAABAAABAQAAAQEAAAEBAAABAQAAAQEAAAAAAAACAQAAAQEAAAIA/AACAQAAAQEAAAABAAACAQAAAQEAAAEBAAACAQAAAQEAAAAAAAAAAAAAAgEAAAIA/AAAAAAAAgEAAAABAAAAAAAAAgEAAAEBAAAAAAAAAgEAAAAAAAACAPwAAgEAAAIA/AACAPwAAgEAAAABAAACAPwAAgEAAAEBAAACAPwAAgEAAAAAAAAAAQAAAgEAAAIA/AAAAQAAAgEAAAABAAAAAQAAAgEAAAEBAAAAAQAAAgEAAAAAAAABAQAAAgEAAAIA/AABAQAAAgEAAAABAAABAQAAAgEAAAEBAAABAQAAAgEAAAAAAAACAQAAAgEAAAIA/AACAQAAAgEAAAABAAACAQAAAgEAAAEBAAACAQAAAgEAAAAAAAAAAAAAAoEAAAIA/AAAAAAAAoEAAAABAAAAAAAAAoEAAAEBAAAAAAAAAoEAAAAAAAACAPwAAoEAAAIA/AACAPwAAoEAAAABAAACAPwAAoEAAAEBAAACAPwAAoEAAAAAAAAAAQAAAoEAAAIA/AAAAQAAAoEAAAABAAAAAQAAAoEAAAEBAAAAAQAAAoEAAAAAAAABAQAAAoEAAAIA/AABAQAAAoEAAAABAAABAQAAAoEAAAEBAAABAQAAAoEAAAAAAAACAQAAAoEAAAIA/AACAQAAAoEAAAABAAACAQAAAoEAAAEBAAACAQAAAoEA=
36 |
37 |
38 | 0
39 |
40 |
41 | 7.0710678119
42 |
43 |
44 |
45 |
46 | 0
47 |
48 |
49 | 7.0710678119
50 |
51 |
52 |
53 |
54 |
55 |
56 | AA8AAAAAAAAAAAAAAAAAAAEAAAAAAAAABQAAAAAAAAAEAAAAAAAAABQAAAAAAAAAFQAAAAAAAAAZAAAAAAAAABgAAAAAAAAAAQAAAAAAAAACAAAAAAAAAAYAAAAAAAAABQAAAAAAAAAVAAAAAAAAABYAAAAAAAAAGgAAAAAAAAAZAAAAAAAAAAIAAAAAAAAAAwAAAAAAAAAHAAAAAAAAAAYAAAAAAAAAFgAAAAAAAAAXAAAAAAAAABsAAAAAAAAAGgAAAAAAAAAEAAAAAAAAAAUAAAAAAAAACQAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGQAAAAAAAAAdAAAAAAAAABwAAAAAAAAABQAAAAAAAAAGAAAAAAAAAAoAAAAAAAAACQAAAAAAAAAZAAAAAAAAABoAAAAAAAAAHgAAAAAAAAAdAAAAAAAAAAYAAAAAAAAABwAAAAAAAAALAAAAAAAAAAoAAAAAAAAAGgAAAAAAAAAbAAAAAAAAAB8AAAAAAAAAHgAAAAAAAAAIAAAAAAAAAAkAAAAAAAAADQAAAAAAAAAMAAAAAAAAABwAAAAAAAAAHQAAAAAAAAAhAAAAAAAAACAAAAAAAAAACQAAAAAAAAAKAAAAAAAAAA4AAAAAAAAADQAAAAAAAAAdAAAAAAAAAB4AAAAAAAAAIgAAAAAAAAAhAAAAAAAAAAoAAAAAAAAACwAAAAAAAAAPAAAAAAAAAA4AAAAAAAAAHgAAAAAAAAAfAAAAAAAAACMAAAAAAAAAIgAAAAAAAAAMAAAAAAAAAA0AAAAAAAAAEQAAAAAAAAAQAAAAAAAAACAAAAAAAAAAIQAAAAAAAAAlAAAAAAAAACQAAAAAAAAADQAAAAAAAAAOAAAAAAAAABIAAAAAAAAAEQAAAAAAAAAhAAAAAAAAACIAAAAAAAAAJgAAAAAAAAAlAAAAAAAAAA4AAAAAAAAADwAAAAAAAAATAAAAAAAAABIAAAAAAAAAIgAAAAAAAAAjAAAAAAAAACcAAAAAAAAAJgAAAAAAAAAUAAAAAAAAABUAAAAAAAAAGQAAAAAAAAAYAAAAAAAAACgAAAAAAAAAKQAAAAAAAAAtAAAAAAAAACwAAAAAAAAAFQAAAAAAAAAWAAAAAAAAABoAAAAAAAAAGQAAAAAAAAApAAAAAAAAACoAAAAAAAAALgAAAAAAAAAtAAAAAAAAABYAAAAAAAAAFwAAAAAAAAAbAAAAAAAAABoAAAAAAAAAKgAAAAAAAAArAAAAAAAAAC8AAAAAAAAALgAAAAAAAAAYAAAAAAAAABkAAAAAAAAAHQAAAAAAAAAcAAAAAAAAACwAAAAAAAAALQAAAAAAAAAxAAAAAAAAADAAAAAAAAAAGQAAAAAAAAAaAAAAAAAAAB4AAAAAAAAAHQAAAAAAAAAtAAAAAAAAAC4AAAAAAAAAMgAAAAAAAAAxAAAAAAAAABoAAAAAAAAAGwAAAAAAAAAfAAAAAAAAAB4AAAAAAAAALgAAAAAAAAAvAAAAAAAAADMAAAAAAAAAMgAAAAAAAAAcAAAAAAAAAB0AAAAAAAAAIQAAAAAAAAAgAAAAAAAAADAAAAAAAAAAMQAAAAAAAAA1AAAAAAAAADQAAAAAAAAAHQAAAAAAAAAeAAAAAAAAACIAAAAAAAAAIQAAAAAAAAAxAAAAAAAAADIAAAAAAAAANgAAAAAAAAA1AAAAAAAAAB4AAAAAAAAAHwAAAAAAAAAjAAAAAAAAACIAAAAAAAAAMgAAAAAAAAAzAAAAAAAAADcAAAAAAAAANgAAAAAAAAAgAAAAAAAAACEAAAAAAAAAJQAAAAAAAAAkAAAAAAAAADQAAAAAAAAANQAAAAAAAAA5AAAAAAAAADgAAAAAAAAAIQAAAAAAAAAiAAAAAAAAACYAAAAAAAAAJQAAAAAAAAA1AAAAAAAAADYAAAAAAAAAOgAAAAAAAAA5AAAAAAAAACIAAAAAAAAAIwAAAAAAAAAnAAAAAAAAACYAAAAAAAAANgAAAAAAAAA3AAAAAAAAADsAAAAAAAAAOgAAAAAAAAAoAAAAAAAAACkAAAAAAAAALQAAAAAAAAAsAAAAAAAAADwAAAAAAAAAPQAAAAAAAABBAAAAAAAAAEAAAAAAAAAAKQAAAAAAAAAqAAAAAAAAAC4AAAAAAAAALQAAAAAAAAA9AAAAAAAAAD4AAAAAAAAAQgAAAAAAAABBAAAAAAAAACoAAAAAAAAAKwAAAAAAAAAvAAAAAAAAAC4AAAAAAAAAPgAAAAAAAAA/AAAAAAAAAEMAAAAAAAAAQgAAAAAAAAAsAAAAAAAAAC0AAAAAAAAAMQAAAAAAAAAwAAAAAAAAAEAAAAAAAAAAQQAAAAAAAABFAAAAAAAAAEQAAAAAAAAALQAAAAAAAAAuAAAAAAAAADIAAAAAAAAAMQAAAAAAAABBAAAAAAAAAEIAAAAAAAAARgAAAAAAAABFAAAAAAAAAC4AAAAAAAAALwAAAAAAAAAzAAAAAAAAADIAAAAAAAAAQgAAAAAAAABDAAAAAAAAAEcAAAAAAAAARgAAAAAAAAAwAAAAAAAAADEAAAAAAAAANQAAAAAAAAA0AAAAAAAAAEQAAAAAAAAARQAAAAAAAABJAAAAAAAAAEgAAAAAAAAAMQAAAAAAAAAyAAAAAAAAADYAAAAAAAAANQAAAAAAAABFAAAAAAAAAEYAAAAAAAAASgAAAAAAAABJAAAAAAAAADIAAAAAAAAAMwAAAAAAAAA3AAAAAAAAADYAAAAAAAAARgAAAAAAAABHAAAAAAAAAEsAAAAAAAAASgAAAAAAAAA0AAAAAAAAADUAAAAAAAAAOQAAAAAAAAA4AAAAAAAAAEgAAAAAAAAASQAAAAAAAABNAAAAAAAAAEwAAAAAAAAANQAAAAAAAAA2AAAAAAAAADoAAAAAAAAAOQAAAAAAAABJAAAAAAAAAEoAAAAAAAAATgAAAAAAAABNAAAAAAAAADYAAAAAAAAANwAAAAAAAAA7AAAAAAAAADoAAAAAAAAASgAAAAAAAABLAAAAAAAAAE8AAAAAAAAATgAAAAAAAAA8AAAAAAAAAD0AAAAAAAAAQQAAAAAAAABAAAAAAAAAAFAAAAAAAAAAUQAAAAAAAABVAAAAAAAAAFQAAAAAAAAAPQAAAAAAAAA+AAAAAAAAAEIAAAAAAAAAQQAAAAAAAABRAAAAAAAAAFIAAAAAAAAAVgAAAAAAAABVAAAAAAAAAD4AAAAAAAAAPwAAAAAAAABDAAAAAAAAAEIAAAAAAAAAUgAAAAAAAABTAAAAAAAAAFcAAAAAAAAAVgAAAAAAAABAAAAAAAAAAEEAAAAAAAAARQAAAAAAAABEAAAAAAAAAFQAAAAAAAAAVQAAAAAAAABZAAAAAAAAAFgAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEYAAAAAAAAARQAAAAAAAABVAAAAAAAAAFYAAAAAAAAAWgAAAAAAAABZAAAAAAAAAEIAAAAAAAAAQwAAAAAAAABHAAAAAAAAAEYAAAAAAAAAVgAAAAAAAABXAAAAAAAAAFsAAAAAAAAAWgAAAAAAAABEAAAAAAAAAEUAAAAAAAAASQAAAAAAAABIAAAAAAAAAFgAAAAAAAAAWQAAAAAAAABdAAAAAAAAAFwAAAAAAAAARQAAAAAAAABGAAAAAAAAAEoAAAAAAAAASQAAAAAAAABZAAAAAAAAAFoAAAAAAAAAXgAAAAAAAABdAAAAAAAAAEYAAAAAAAAARwAAAAAAAABLAAAAAAAAAEoAAAAAAAAAWgAAAAAAAABbAAAAAAAAAF8AAAAAAAAAXgAAAAAAAABIAAAAAAAAAEkAAAAAAAAATQAAAAAAAABMAAAAAAAAAFwAAAAAAAAAXQAAAAAAAABhAAAAAAAAAGAAAAAAAAAASQAAAAAAAABKAAAAAAAAAE4AAAAAAAAATQAAAAAAAABdAAAAAAAAAF4AAAAAAAAAYgAAAAAAAABhAAAAAAAAAEoAAAAAAAAASwAAAAAAAABPAAAAAAAAAE4AAAAAAAAAXgAAAAAAAABfAAAAAAAAAGMAAAAAAAAAYgAAAAAAAABQAAAAAAAAAFEAAAAAAAAAVQAAAAAAAABUAAAAAAAAAGQAAAAAAAAAZQAAAAAAAABpAAAAAAAAAGgAAAAAAAAAUQAAAAAAAABSAAAAAAAAAFYAAAAAAAAAVQAAAAAAAABlAAAAAAAAAGYAAAAAAAAAagAAAAAAAABpAAAAAAAAAFIAAAAAAAAAUwAAAAAAAABXAAAAAAAAAFYAAAAAAAAAZgAAAAAAAABnAAAAAAAAAGsAAAAAAAAAagAAAAAAAABUAAAAAAAAAFUAAAAAAAAAWQAAAAAAAABYAAAAAAAAAGgAAAAAAAAAaQAAAAAAAABtAAAAAAAAAGwAAAAAAAAAVQAAAAAAAABWAAAAAAAAAFoAAAAAAAAAWQAAAAAAAABpAAAAAAAAAGoAAAAAAAAAbgAAAAAAAABtAAAAAAAAAFYAAAAAAAAAVwAAAAAAAABbAAAAAAAAAFoAAAAAAAAAagAAAAAAAABrAAAAAAAAAG8AAAAAAAAAbgAAAAAAAABYAAAAAAAAAFkAAAAAAAAAXQAAAAAAAABcAAAAAAAAAGwAAAAAAAAAbQAAAAAAAABxAAAAAAAAAHAAAAAAAAAAWQAAAAAAAABaAAAAAAAAAF4AAAAAAAAAXQAAAAAAAABtAAAAAAAAAG4AAAAAAAAAcgAAAAAAAABxAAAAAAAAAFoAAAAAAAAAWwAAAAAAAABfAAAAAAAAAF4AAAAAAAAAbgAAAAAAAABvAAAAAAAAAHMAAAAAAAAAcgAAAAAAAABcAAAAAAAAAF0AAAAAAAAAYQAAAAAAAABgAAAAAAAAAHAAAAAAAAAAcQAAAAAAAAB1AAAAAAAAAHQAAAAAAAAAXQAAAAAAAABeAAAAAAAAAGIAAAAAAAAAYQAAAAAAAABxAAAAAAAAAHIAAAAAAAAAdgAAAAAAAAB1AAAAAAAAAF4AAAAAAAAAXwAAAAAAAABjAAAAAAAAAGIAAAAAAAAAcgAAAAAAAABzAAAAAAAAAHcAAAAAAAAAdgAAAAAAAAA=
57 |
58 |
59 | 4AEAAAAAAAAIAAAAAAAAABAAAAAAAAAAGAAAAAAAAAAgAAAAAAAAACgAAAAAAAAAMAAAAAAAAAA4AAAAAAAAAEAAAAAAAAAASAAAAAAAAABQAAAAAAAAAFgAAAAAAAAAYAAAAAAAAABoAAAAAAAAAHAAAAAAAAAAeAAAAAAAAACAAAAAAAAAAIgAAAAAAAAAkAAAAAAAAACYAAAAAAAAAKAAAAAAAAAAqAAAAAAAAACwAAAAAAAAALgAAAAAAAAAwAAAAAAAAADIAAAAAAAAANAAAAAAAAAA2AAAAAAAAADgAAAAAAAAAOgAAAAAAAAA8AAAAAAAAAD4AAAAAAAAAAABAAAAAAAACAEAAAAAAAAQAQAAAAAAABgBAAAAAAAAIAEAAAAAAAAoAQAAAAAAADABAAAAAAAAOAEAAAAAAABAAQAAAAAAAEgBAAAAAAAAUAEAAAAAAABYAQAAAAAAAGABAAAAAAAAaAEAAAAAAABwAQAAAAAAAHgBAAAAAAAAgAEAAAAAAACIAQAAAAAAAJABAAAAAAAAmAEAAAAAAACgAQAAAAAAAKgBAAAAAAAAsAEAAAAAAAC4AQAAAAAAAMABAAAAAAAAyAEAAAAAAADQAQAAAAAAANgBAAAAAAAA4AEAAAAAAAA=
60 |
61 |
62 | PAAAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw=
63 |
64 |
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/res/ico-tensor.vtu:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 0.5236067771911621 0.970820426940918 0.970820426940918 0.5236067771911621 1.24721360206604 -0.37082037329673767
7 | 0.3527863919734955 -0.37082037329673767 0.0763932466506958 0.0763932466506958 1 -1
8 |
9 |
10 | 0.27639320492744446 0.8506507873535156 0.4472135901451111 -0.7236068248748779 0.525731086730957 0.4472135901451111
11 | -0.7236068248748779 -0.525731086730957 0.4472135901451111 0.27639320492744446 -0.8506507873535156 0.4472135901451111
12 | 0.8944271802902222 -2.1907150604527891e-16 0.4472135901451111 -0.27639320492744446 0.8506507873535156 -0.4472135901451111
13 | -0.8944271802902222 1.0953570008308025e-16 -0.4472135901451111 -0.27639320492744446 -0.8506507873535156 -0.4472135901451111
14 | 0.7236068248748779 -0.525731086730957 -0.4472135901451111 0.7236068248748779 0.525731086730957 -0.4472135901451111
15 | 0 0 1 1.2246469849340659e-16 0 -1
16 |
17 |
18 | 0.99999998048
19 |
20 |
21 | 1.0000000039
22 |
23 |
24 |
25 |
26 | 0.99999998048
27 |
28 |
29 | 1.0000000039
30 |
31 |
32 |
33 |
34 | 0.7815737874609694 -0.10514622217782077 -0.05527864415733432 -0.10514622217782081 0.4921310627633197 -0.17013016532953515
35 | -0.0552786441573342 -0.1701301653295352 0.726295149775711 0.5815737879336998 0.17013016095272765 0.14472134843873524
36 | 0.17013016095272765 0.6921310640523778 -0.10514622146777175 0.14472134843873524 -0.10514622146777179 0.7262951480139225
37 | 0.5815737879336998 -0.17013016095272762 0.14472134843873524 -0.17013016095272762 0.6921310640523778 0.10514622146777175
38 | 0.14472134843873521 0.10514622146777178 0.7262951480139225 0.7815737874609694 0.10514622217782085 -0.05527864415733417
39 | 0.10514622217782085 0.4921310627633197 0.1701301653295352 -0.05527864415733417 0.1701301653295352 0.7262951497757109
40 | 0.45796698580811857 7.771561172376095e-17 -0.17888545208352405 4.4408920985006264e-17 0.8157378639923423 5.551115123125783e-17
41 | -0.17888545208352397 0 0.7262951501995392 0.7815737874609694 0.10514622217782088 -0.05527864415733423
42 | 0.10514622217782088 0.49213106276331986 0.17013016532953523 -0.055278644157334175 0.17013016532953523 0.726295149775711
43 | 0.45796698580811857 5.551115123125783e-17 -0.17888545208352397 2.2204460492503132e-17 0.8157378639923424 2.2204460492503132e-17
44 | -0.17888545208352397 8.326672684688674e-18 0.7262951501995392 0.7815737874609694 -0.10514622217782084 -0.05527864415733421
45 | -0.10514622217782084 0.4921310627633198 -0.17013016532953518 -0.05527864415733419 -0.17013016532953523 0.726295149775711
46 | 0.5815737879336998 0.17013016095272765 0.14472134843873521 0.17013016095272762 0.6921310640523777 -0.10514622146777178
47 | 0.14472134843873524 -0.10514622146777179 0.7262951480139225 0.5815737879336997 -0.17013016095272762 0.14472134843873516
48 | -0.17013016095272757 0.6921310640523777 0.10514622146777183 0.14472134843873524 0.10514622146777179 0.7262951480139226
49 | 0.8157378649827638 3.3306690738754695e-17 -1.8048941508030936e-9 1.1102230246251566e-17 0.8157378572042615 2.2204460492503132e-17
50 | -1.804894123047518e-9 1.1102230246251566e-17 0.3685242778129746 0.8157378649827638 2.2204460492503132e-17 -1.8048941452519784e-9
51 | 1.1102230246251566e-17 0.815737857204262 4.4408920985006264e-17 -1.8048941008430575e-9 2.2204460492503132e-17 0.3685242778129746
52 |
53 |
54 | 1.2110601385
55 |
56 |
57 | 1.2110601463
58 |
59 |
60 |
61 |
62 | 1.2110601385
63 |
64 |
65 | 1.2110601463
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 | 0.27639320492744446 0.8506507873535156 0.4472135901451111 -0.7236068248748779 0.525731086730957 0.4472135901451111
75 | -0.7236068248748779 -0.525731086730957 0.4472135901451111 0.27639320492744446 -0.8506507873535156 0.4472135901451111
76 | 0.8944271802902222 -2.1907150604527891e-16 0.4472135901451111 -0.27639320492744446 0.8506507873535156 -0.4472135901451111
77 | -0.8944271802902222 1.0953570008308025e-16 -0.4472135901451111 -0.27639320492744446 -0.8506507873535156 -0.4472135901451111
78 | 0.7236068248748779 -0.525731086730957 -0.4472135901451111 0.7236068248748779 0.525731086730957 -0.4472135901451111
79 | 0 0 1 1.2246469849340659e-16 0 -1
80 |
81 |
82 | 0.99999998048
83 |
84 |
85 | 1.0000000039
86 |
87 |
88 |
89 |
90 | 0.99999998048
91 |
92 |
93 | 1.0000000039
94 |
95 |
96 |
97 |
98 |
99 |
100 | 0 1 10 1 2 10
101 | 2 3 10 3 4 10
102 | 4 0 10 1 0 5
103 | 2 1 6 3 2 7
104 | 4 3 8 0 4 9
105 | 5 6 1 6 7 2
106 | 7 8 3 8 9 4
107 | 9 5 0 6 5 11
108 | 7 6 11 8 7 11
109 | 9 8 11 5 9 11
110 |
111 |
112 | 3 6 9 12 15 18
113 | 21 24 27 30 33 36
114 | 39 42 45 48 51 54
115 | 57 60
116 |
117 |
118 | 5 5 5 5 5 5
119 | 5 5 5 5 5 5
120 | 5 5 5 5 5 5
121 | 5 5
122 |
123 |
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/res/ico.vtu:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | MAAAAAAAAAAYCwY/sId4P7CHeD8YCwY/sqSfPyvcvb5roLQ+K9y9vhB0nD0QdJw9AACAPwAAgL8=
7 |
8 |
9 |
10 |
11 |
12 |
13 | kAAAAAAAAABpg40+QMRZPy755D5MPjm/UJYGPy755D5MPjm/UJYGvy755D5pg40+QMRZvy755D4u+WQ/f5J8pS755D5pg42+QMRZPy755L4u+WS/d5L8JC755L5pg42+QMRZvy755L5MPjk/UJYGvy755L5MPjk/UJYGPy755L4AAAAAAAAAAAAAgD8zMQ0lAAAAAAAAgL8=
14 |
15 |
16 | 0.99999998048
17 |
18 |
19 | 1.0000000039
20 |
21 |
22 |
23 |
24 | 0.99999998048
25 |
26 |
27 | 1.0000000039
28 |
29 |
30 |
31 |
32 |
33 |
34 | 4AEAAAAAAAAAAAAAAAAAAAEAAAAAAAAACgAAAAAAAAABAAAAAAAAAAIAAAAAAAAACgAAAAAAAAACAAAAAAAAAAMAAAAAAAAACgAAAAAAAAADAAAAAAAAAAQAAAAAAAAACgAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAABQAAAAAAAAACAAAAAAAAAAEAAAAAAAAABgAAAAAAAAADAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAEAAAAAAAAAAMAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACQAAAAAAAAAFAAAAAAAAAAYAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAcAAAAAAAAAAgAAAAAAAAAHAAAAAAAAAAgAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAAkAAAAAAAAABAAAAAAAAAAJAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAUAAAAAAAAACwAAAAAAAAAHAAAAAAAAAAYAAAAAAAAACwAAAAAAAAAIAAAAAAAAAAcAAAAAAAAACwAAAAAAAAAJAAAAAAAAAAgAAAAAAAAACwAAAAAAAAAFAAAAAAAAAAkAAAAAAAAACwAAAAAAAAA=
35 |
36 |
37 | oAAAAAAAAAADAAAAAAAAAAYAAAAAAAAACQAAAAAAAAAMAAAAAAAAAA8AAAAAAAAAEgAAAAAAAAAVAAAAAAAAABgAAAAAAAAAGwAAAAAAAAAeAAAAAAAAACEAAAAAAAAAJAAAAAAAAAAnAAAAAAAAACoAAAAAAAAALQAAAAAAAAAwAAAAAAAAADMAAAAAAAAANgAAAAAAAAA5AAAAAAAAADwAAAAAAAAA
38 |
39 |
40 | FAAAAAAAAAAFBQUFBQUFBQUFBQUFBQUFBQUFBQ==
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/res/ico64.vtu:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | YAAAAAAAAACICPUIY8HgPwDSHAD2EO8/ANIcAPYQ7z+ICPUIY8HgP0BEqDeW9PM/8O4VboW7178AEaFeDZTWP/DuFW6Fu9e/AJDmAIKOsz8AkOYAgo6zPwAAAAAAAPA/AAAAAAAA8L8=
7 |
8 |
9 |
10 |
11 |
12 |
13 | kAAAAAAAAABpg40+QMRZPy755D5MPjm/UJYGPy755D5MPjm/UJYGvy755D5pg40+QMRZvy755D4u+WQ/f5J8pS755D5pg42+QMRZPy755L4u+WS/d5L8JC755L5pg42+QMRZvy755L5MPjk/UJYGvy755L5MPjk/UJYGPy755L4AAAAAAAAAAAAAgD8zMQ0lAAAAAAAAgL8=
14 |
15 |
16 | 0.99999998048
17 |
18 |
19 | 1.0000000039
20 |
21 |
22 |
23 |
24 | 0.99999998048
25 |
26 |
27 | 1.0000000039
28 |
29 |
30 |
31 |
32 |
33 |
34 | 4AEAAAAAAAAAAAAAAAAAAAEAAAAAAAAACgAAAAAAAAABAAAAAAAAAAIAAAAAAAAACgAAAAAAAAACAAAAAAAAAAMAAAAAAAAACgAAAAAAAAADAAAAAAAAAAQAAAAAAAAACgAAAAAAAAAEAAAAAAAAAAAAAAAAAAAACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAABQAAAAAAAAACAAAAAAAAAAEAAAAAAAAABgAAAAAAAAADAAAAAAAAAAIAAAAAAAAABwAAAAAAAAAEAAAAAAAAAAMAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAACQAAAAAAAAAFAAAAAAAAAAYAAAAAAAAAAQAAAAAAAAAGAAAAAAAAAAcAAAAAAAAAAgAAAAAAAAAHAAAAAAAAAAgAAAAAAAAAAwAAAAAAAAAIAAAAAAAAAAkAAAAAAAAABAAAAAAAAAAJAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAUAAAAAAAAACwAAAAAAAAAHAAAAAAAAAAYAAAAAAAAACwAAAAAAAAAIAAAAAAAAAAcAAAAAAAAACwAAAAAAAAAJAAAAAAAAAAgAAAAAAAAACwAAAAAAAAAFAAAAAAAAAAkAAAAAAAAACwAAAAAAAAA=
35 |
36 |
37 | oAAAAAAAAAADAAAAAAAAAAYAAAAAAAAACQAAAAAAAAAMAAAAAAAAAA8AAAAAAAAAEgAAAAAAAAAVAAAAAAAAABgAAAAAAAAAGwAAAAAAAAAeAAAAAAAAACEAAAAAAAAAJAAAAAAAAAAnAAAAAAAAACoAAAAAAAAALQAAAAAAAAAwAAAAAAAAADMAAAAAAAAANgAAAAAAAAA5AAAAAAAAADwAAAAAAAAA
38 |
39 |
40 | FAAAAAAAAAAFBQUFBQUFBQUFBQUFBQUFBQUFBQ==
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/res/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JeffIrwin/skillet/31652683b365dce59427268d2e4c3c310f08001c/res/icon.png
--------------------------------------------------------------------------------
/run.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # VTK filename to be visualized
4 | f=./res/teapot.vtu
5 |
6 | ## A vector result can be created in ParaView with Calculator -> coords. Then
7 | ## a tensor result can be created with Python calculator -> gradient(MyVector).
8 | ##
9 | ## Ref:
10 | ## https://vtk.org/Wiki/Python_Calculator#A_more_complex_example
11 | ##
12 | #f=./res/ico-tensor.vtu
13 |
14 | #f=./res/ico64.vtu
15 | #f=./res/ico.vtu
16 | #
17 | #f=./scratch/rbc-sinx.vtu
18 | #
19 | ## Legacy doesn't work?
20 | #f=./scratch/teapot.vtk
21 | #f=./scratch/teapot-ascii.vtk
22 | #f=./scratch/cube.vtk
23 | #
24 | ## polydata with texture coords
25 | #f=./scratch/fran_cut.vtk
26 | #
27 | #f=./scratch/a.vtu
28 |
29 | #=======================================================================
30 |
31 | cargo run "$f"
32 |
33 |
--------------------------------------------------------------------------------
/src/app.rs:
--------------------------------------------------------------------------------
1 |
2 | //==============================================================================
3 |
4 | use std::io::Cursor;
5 | use std::ops::Deref;
6 | use std::rc::Rc;
7 |
8 | //****************
9 |
10 | // This crate, included in lib
11 | use skillet::*;
12 | use crate::colormaps::*;
13 | use crate::consts::*;
14 | use crate::math::*;
15 | use crate::model::*;
16 | use crate::utils;
17 |
18 | // Not included in lib
19 | use crate::background::Background;
20 |
21 | //****************
22 | // 3P(s)
23 | //****************
24 |
25 | use glium::
26 | {
27 | glutin,
28 | glutin::event,
29 | glutin::event_loop::EventLoopWindowTarget,
30 | Surface
31 | };
32 |
33 | //==============================================================================
34 |
35 | pub struct State
36 | {
37 | // This is the global app state
38 |
39 | // Modifier keys
40 | pub ctrl : bool,
41 | pub shift: bool,
42 |
43 | // Mouse button states
44 | pub lmb: bool,
45 | pub mmb: bool,
46 | pub rmb: bool,
47 |
48 | // This is where transformations happen
49 | pub world: [[f32; NM]; NM],
50 |
51 | pub view : [[f32; NM]; NM],
52 |
53 | pub cen: [f32; ND],
54 | pub eye: [f32; ND],
55 |
56 | // Mouse position from last frame
57 | pub x0: f32,
58 | pub y0: f32,
59 |
60 | // Scroll wheel zoom factor
61 | pub scale_cum: f32,
62 |
63 | // Colormap index in JSON res file
64 | pub map_index: usize,
65 |
66 | pub colormap: glium::texture::SrgbTexture1d,
67 |
68 | pub diam: f32,
69 | pub display_diam: f32,
70 |
71 | pub bg: Background,
72 |
73 | pub face_program: glium::Program,
74 | pub edge_program: glium::Program,
75 |
76 | // Reference to RenderModel
77 | pub rm: Box,
78 |
79 | pub display: Rc,
80 | }
81 |
82 | //****************
83 |
84 | impl State
85 | {
86 | pub fn new(rm: Box, display: Rc) -> State
87 | {
88 | let mut cmi = 0;
89 |
90 | // Get point xyz bounds
91 | let (xmin, xmax) = utils::get_bounds(&(rm.m.points.iter().skip(0)
92 | .step_by(ND).copied().collect::>()));
93 |
94 | let (ymin, ymax) = utils::get_bounds(&(rm.m.points.iter().skip(1)
95 | .step_by(ND).copied().collect::>()));
96 |
97 | let (zmin, zmax) = utils::get_bounds(&(rm.m.points.iter().skip(2)
98 | .step_by(ND).copied().collect::>()));
99 |
100 | let xc = 0.5 * (xmin + xmax);
101 | let yc = 0.5 * (ymin + ymax);
102 | let zc = 0.5 * (zmin + zmax);
103 |
104 | println!("x in [{}, {}]", utils::ff32(xmin), utils::ff32(xmax));
105 | println!("y in [{}, {}]", utils::ff32(ymin), utils::ff32(ymax));
106 | println!("z in [{}, {}]", utils::ff32(zmin), utils::ff32(zmax));
107 | println!();
108 |
109 | let mut cen = [xc, yc, zc];
110 |
111 | let diam = norm(&sub(&[xmax, ymax, zmax], &[xmin, ymin, zmin]));
112 |
113 | // View must be initialized like this, because subsequent rotations are
114 | // performed about its fixed coordinate system. Set eye from model bounds.
115 | // You could do some trig here on fov to guarantee whole model is in view,
116 | // but it's pretty close as is except for possible extreme cases
117 |
118 | let eye = [0.0, 0.0, zmax + diam];
119 |
120 | // Initial pan to center
121 | let mut world = identity_matrix();
122 | world = translate_matrix(&world, &neg(&cen));
123 | cen = [0.0; ND];
124 |
125 | State
126 | {
127 | ctrl : false,
128 | shift: false,
129 |
130 | lmb: false,
131 | mmb: false,
132 | rmb: false,
133 |
134 | world: world,
135 | view : view_matrix(&eye, &DIR, &UP),
136 |
137 | cen: cen,
138 | eye: eye,
139 |
140 | x0: 0.0,
141 | y0: 0.0,
142 |
143 | scale_cum: 1.0,
144 |
145 | colormap: get_colormap(&mut cmi, &display),
146 | map_index: cmi,
147 |
148 | // This initial value doesn't matter. It will get set correctly
149 | // after the first frame
150 | display_diam: 1920.0,
151 | diam: diam,
152 |
153 | bg: Background::new(rm.facade.deref()),
154 |
155 | face_program: shaders::face(rm.facade.deref()),
156 | edge_program: shaders::edge(rm.facade.deref()),
157 |
158 | rm: rm,
159 | display: display,
160 | }
161 | }
162 | }
163 |
164 | // View constants
165 | pub const DIR: [f32; ND] = [0.0, 0.0, -1.0];
166 | pub const UP : [f32; ND] = [0.0, 1.0, 0.0];
167 |
168 | //==============================================================================
169 |
170 | pub fn display(event_loop: &EventLoopWindowTarget) -> glium::Display
171 | {
172 | // TODO: idiomatic use paths
173 |
174 | // include_bytes!() statically includes the file relative to this source
175 | // path at compile time
176 | let icon = image::load(Cursor::new(&include_bytes!("../res/icon.png")),
177 | image::ImageFormat::Png).unwrap().to_rgba8();
178 | let winicon = Some(glutin::window::Icon::from_rgba(icon.to_vec(),
179 | icon.dimensions().0, icon.dimensions().1).unwrap());
180 |
181 | let wb = glutin::window::WindowBuilder::new()
182 | .with_title(mev!())
183 | .with_window_icon(winicon)
184 | .with_maximized(true);
185 | //.with_inner_size(glutin::dpi::LogicalSize::new(1960.0, 1390.0))
186 | //.with_position(glutin::dpi::LogicalPosition::new(0, 0));
187 | //// ^ this leaves room for an 80 char terminal on my main monitor
188 |
189 | let cb = glutin::ContextBuilder::new().with_depth_buffer(24);
190 |
191 | glium::Display::new(wb, cb, event_loop).unwrap()
192 | }
193 |
194 | //==============================================================================
195 |
196 | pub fn main_loop
197 | (
198 | event : & glutin::event::Event<'_, T>,
199 | control_flow: &mut glutin::event_loop::ControlFlow,
200 | s : &mut State,
201 | )
202 | {
203 | let next_frame_time = std::time::Instant::now() +
204 | std::time::Duration::from_nanos(16_666_667);
205 | *control_flow =
206 | glutin::event_loop::ControlFlow::WaitUntil(next_frame_time);
207 |
208 | const PRESSED: glutin::event::ElementState
209 | = glutin::event::ElementState::Pressed;
210 |
211 | match event
212 | {
213 | glutin::event::Event::WindowEvent { event, ..} => match event
214 | {
215 | glutin::event::WindowEvent::CloseRequested =>
216 | {
217 |
218 | println!("{}: Exiting main()", ME);
219 | println!();
220 |
221 | *control_flow = glutin::event_loop::ControlFlow::Exit;
222 | return;
223 |
224 | },
225 | event::WindowEvent::ModifiersChanged(modifiers_state) =>
226 | {
227 | //println!("modifiers_state = {:?}", modifiers_state);
228 | s.ctrl = modifiers_state.ctrl ();
229 | s.shift = modifiers_state.shift();
230 | },
231 | glutin::event::WindowEvent::MouseInput {state, button, ..} =>
232 | {
233 | //println!("state, button = {:?}, {:?}", state, button);
234 |
235 | match button
236 | {
237 | glutin::event::MouseButton::Left =>
238 | {
239 | s.lmb = *state == PRESSED;
240 | },
241 | glutin::event::MouseButton::Right =>
242 | {
243 | s.rmb = *state == PRESSED;
244 | },
245 | glutin::event::MouseButton::Middle =>
246 | {
247 | s.mmb = *state == PRESSED;
248 | },
249 | _ => ()
250 | }
251 | },
252 | glutin::event::WindowEvent::CursorMoved {position, ..} =>
253 | {
254 | //println!("position = {:?}", position);
255 |
256 | let x = position.x as f32;
257 | let y = position.y as f32;
258 |
259 | if s.lmb
260 | {
261 | // Rotate about axis within the xy screen plane
262 | //
263 | // TODO: handle shift-lmb as z rotation
264 |
265 | // Right-hand normal to drag direction
266 | let mut u = [-(y - s.y0), -(x - s.x0), 0.0];
267 |
268 | let norm = norm(&u);
269 | u[0] /= norm;
270 | u[1] /= norm;
271 | // z is zero, no need to normalize
272 |
273 | let sensitivity = 0.0035;
274 | let theta = sensitivity * norm;
275 |
276 | // Push translation to model center, apply rotation,
277 | // then pop trans
278 | s.world = translate_matrix(&s.world, &neg(&s.cen));
279 | s.world = rotate_matrix (&s.world, &u, theta);
280 | s.world = translate_matrix(&s.world, &s.cen);
281 |
282 | }
283 | else if s.mmb
284 | {
285 | // xy pan
286 |
287 | //println!("mmb drag");
288 |
289 | let sensitivity = 1.5 * s.diam //* s.scale_cum
290 | / s.display_diam;
291 |
292 | let dx = sensitivity * (x - s.x0);// / display_h;
293 | let dy = -sensitivity * (y - s.y0);// / display_w;
294 |
295 | let tran = [dx, dy, 0.0];
296 |
297 | s.world = translate_matrix(&s.world, &tran);
298 |
299 | // Panning moves rotation center too. add() returns
300 | // Vec, so we have to try_into() and unwrap() to array.
301 | s.cen = add(&s.cen, &tran).try_into().unwrap();
302 | }
303 | else if s.rmb
304 | {
305 | // z pan (eye motion zoom)
306 | //
307 | // This uses the opposite sign convention of ParaView,
308 | // but I think it feels more consistent with the scroll
309 | // wheel action: scrolling up has a similar effect as
310 | // rmb dragging up
311 |
312 | let dz = y - s.y0;
313 |
314 | let sensitivity = 0.003;
315 | s.eye[2] += sensitivity * s.scale_cum * s.diam * dz;
316 | s.view = view_matrix(&s.eye, &DIR, &UP);
317 | }
318 |
319 | s.x0 = x;
320 | s.y0 = y;
321 | },
322 | glutin::event::WindowEvent::MouseWheel {delta, ..} =>
323 | {
324 | // Scroll scaling zoom
325 | //
326 | // ParaView actually has two ways to "zoom": (1) RMB-drag
327 | // moves the eye of the view, while (2) the scroll wheel
328 | // scales the world
329 |
330 | //println!("delta = {:?}", delta);
331 |
332 | let dz = match delta
333 | {
334 | glutin::event::MouseScrollDelta::LineDelta(_a, b) =>
335 | {
336 | //println!("a b = {} {}", a, b);
337 | *b
338 | },
339 | //glutin::event::MouseScrollDelta::PixelDelta(p) =>
340 | //{
341 | // println!("p = {:?}", p);
342 | // //unimplemented!()
343 | //},
344 | _ => (0.0)
345 | };
346 |
347 | // This sign convention matches ParaView, although the
348 | // opposite scroll/zoom convention does exist
349 |
350 | let sensitivity = 0.1;
351 | let scale = (sensitivity * dz).exp();
352 | s.scale_cum *= scale;
353 |
354 | //println!("scale = {}", scale);
355 |
356 | s.world = scale_matrix(&s.world, scale);
357 | s.cen = scale_vec(&s.cen, scale).try_into().unwrap();
358 | },
359 | glutin::event::WindowEvent::KeyboardInput {input, ..} =>
360 | {
361 | //println!("input = {:?}", input);
362 |
363 | let warp_increment = 0.1;
364 |
365 | if s.ctrl && input.state == PRESSED
366 | {
367 | match input.virtual_keycode.unwrap()
368 | {
369 | event::VirtualKeyCode::W =>
370 | {
371 | //println!("Ctrl+W");
372 | s.rm.warp_factor -= warp_increment;
373 | s.rm.warp();
374 | }
375 | _ => {}
376 | }
377 | }
378 | else if s.shift && input.state == PRESSED
379 | {
380 | match input.virtual_keycode.unwrap()
381 | {
382 | event::VirtualKeyCode::W =>
383 | {
384 | //println!("Shift+W");
385 | s.rm.warp_factor += warp_increment;
386 | s.rm.warp();
387 | }
388 | _ => {}
389 | }
390 | }
391 | else if input.state == PRESSED
392 | {
393 | match input.virtual_keycode.unwrap()
394 | {
395 | // TODO: parameterize keycodes
396 |
397 | event::VirtualKeyCode::C =>
398 | {
399 | let name;
400 | if s.rm.dindex < s.rm.m.point_data.len()
401 | {
402 | s.rm.comp = (s.rm.comp + 1)
403 | % s.rm.m.point_data[s.rm.dindex].num_comp;
404 | s.rm.bind_point_data();
405 | name = &s.rm.m.point_data[s.rm.dindex].name;
406 | }
407 | else
408 | {
409 | let cindex = s.rm.dindex - s.rm.m.point_data.len();
410 | s.rm.comp = (s.rm.comp + 1)
411 | % s.rm.m.cell_data[cindex].num_comp;
412 | s.rm.bind_cell_data();
413 | name = &s.rm.m.cell_data[cindex].name;
414 | }
415 |
416 | println!("Cycling data comp");
417 | println!("Data name = {}", name);
418 | println!("Data comp = {}\n", s.rm.comp);
419 | }
420 | event::VirtualKeyCode::D =>
421 | {
422 | let name;
423 | let data_len = s.rm.m.point_data.len()
424 | + s.rm.m. cell_data.len();
425 |
426 | s.rm.dindex = (s.rm.dindex + 1) % data_len;
427 | s.rm.comp = 0;
428 |
429 | // Cycle through point data first, then go to
430 | // cells if we're past the end of the points.
431 | if s.rm.dindex < s.rm.m.point_data.len()
432 | {
433 | s.rm.bind_point_data();
434 | name = &s.rm.m.point_data[s.rm.dindex].name;
435 | }
436 | else
437 | {
438 | // TODO: add a generic
439 | // s.rm.get_name() fn to handle this
440 | // index logic for both point and cell data
441 |
442 | let cindex = s.rm.dindex - s.rm.m.point_data.len();
443 | s.rm.bind_cell_data();
444 | name = &s.rm.m.cell_data[cindex].name;
445 | }
446 |
447 | println!("Cycling data array");
448 | println!("Data name = {}", name);
449 | }
450 | event::VirtualKeyCode::E =>
451 | {
452 | s.rm.edge_visibility = !s.rm.edge_visibility;
453 | println!("Toggling edge visibility {}",
454 | s.rm.edge_visibility);
455 | }
456 | event::VirtualKeyCode::M =>
457 | {
458 | println!("Cycling colormap");
459 |
460 | // Modulo wrapping happens inside
461 | // get_colormap(). Maybe I should make
462 | // bind_*_data() work like that too.
463 | s.map_index += 1;
464 | //s.colormap = get_colormap(&mut s.map_index, s.rm.facade);
465 | s.colormap = get_colormap(&mut s.map_index, &s.display);
466 | }
467 | event::VirtualKeyCode::W =>
468 | {
469 | println!("Cycling warp");
470 | s.rm.warp_index += 1;
471 | s.rm.warp();
472 | }
473 |
474 | _ => {}
475 | }
476 | }
477 | },
478 | _ => return,
479 | },
480 |
481 | glutin::event::Event::NewEvents(cause) => match cause
482 | {
483 | glutin::event::StartCause::ResumeTimeReached {..} => (),
484 | glutin::event::StartCause::Init => (),
485 | _ => return,
486 | },
487 | _ => return,
488 | }
489 |
490 | // Apparently the rendering below must be in the same fn as the event
491 | // handling above, otherwise perf takes a massive hit
492 |
493 | let mut target = s.display.draw();
494 |
495 | s.display_diam = tnorm(target.get_dimensions());
496 |
497 | target.clear_color_and_depth((0.0, 0.0, 0.0, 1.0), 1.0);
498 |
499 | let fov: f32 = PI / 6.0;
500 | let zfar = 1024.0;
501 | let znear = 0.1;
502 |
503 | let perspective =
504 | perspective_matrix(fov, zfar, znear, target.get_dimensions());
505 |
506 | // Light direction
507 | let light = [0.2, -0.6, -1.0f32];//[-1.4, -0.0, -0.7f32];
508 | //let light = [1.4, 0.4, -0.7f32];
509 |
510 | // Linear sampling works better than the default, especially around
511 | // texture 0
512 | let tex = glium::uniforms::Sampler::new(&s.colormap)
513 | .magnify_filter(glium::uniforms::MagnifySamplerFilter::Linear)
514 | .minify_filter(glium::uniforms::MinifySamplerFilter::Linear);
515 |
516 | let bg_tex = glium::uniforms::Sampler::new(&s.bg.colormap)
517 | .magnify_filter(glium::uniforms::MagnifySamplerFilter::Linear)
518 | .minify_filter(glium::uniforms::MinifySamplerFilter::Linear);
519 |
520 | let uniforms = uniform!
521 | {
522 | perspective: perspective,
523 | view : s.view ,
524 | world: s.world,
525 | model_mat: s.rm.mat,
526 | u_light: light,
527 | tex: tex,
528 | bg_tex: bg_tex,
529 | };
530 |
531 | let params = glium::DrawParameters
532 | {
533 | depth: glium::Depth
534 | {
535 | test: glium::draw_parameters::DepthTest::IfLessOrEqual,
536 | write: true,
537 |
538 | // High zoom levels are weird, but they're weirder without this.
539 | // Maybe increase depth buffer bits too?
540 | clamp: glium::draw_parameters::DepthClamp::Clamp,
541 |
542 | .. Default::default()
543 | },
544 |
545 | // Hack around z-fighting for edge display. Units are pixels
546 | polygon_offset: glium::draw_parameters::PolygonOffset
547 | {
548 | factor: 1.01,
549 | //units: 3.0,
550 | //line: true,
551 | fill: true,
552 | .. Default::default()
553 | },
554 |
555 | // This is the default. It could be increased, but the
556 | // polygon_offset works better than thickening. Could expose to
557 | // user as an option
558 | line_width: Some(1.0),
559 |
560 | //backface_culling: glium::draw_parameters::BackfaceCullingMode
561 | // ::CullClockwise,
562 |
563 | .. Default::default()
564 | };
565 |
566 | target.draw(&s.bg.vertices, &s.bg.indices, &s.bg.program,
567 | &uniforms, ¶ms).unwrap();
568 |
569 | // Clearing the depth again here forces the background to the back
570 | target.clear_depth(1.0);
571 |
572 | // TODO: move this to a RenderModel method? Either pass program, uniforms,
573 | // and params as args or encapsulate them in RenderModel struct. Actually
574 | // it seems nearly impossible to pass uniforms as a single arg. I tried and
575 | // failed to do so for the background. Maybe encapsulate them in another
576 | // struct (state?) and pass that instead?
577 | target.draw((
578 | &s.rm.vertices,
579 | &s.rm.normals,
580 | &s.rm.scalar),
581 | &s.rm.indices,
582 | &s.face_program, &uniforms, ¶ms).unwrap();
583 |
584 | if s.rm.edge_visibility
585 | {
586 | target.draw(
587 | &s.rm.edge_verts,
588 | &s.rm.edge_indices,
589 | &s.edge_program, &uniforms, ¶ms).unwrap();
590 | }
591 |
592 | // TODO: draw axes, colormap legend
593 |
594 | // Swap buffers
595 | target.finish().unwrap();
596 |
597 | // TODO: take screenshot and compare for testing (just don't do it
598 | // everytime in the main loop. maybe do that in a separate test/example)
599 | }
600 |
601 | //==============================================================================
602 |
603 |
--------------------------------------------------------------------------------
/src/background.rs:
--------------------------------------------------------------------------------
1 |
2 | //==============================================================================
3 |
4 | use crate::consts::*;
5 |
6 | #[derive(Copy, Clone, Debug)]
7 | pub struct Vert2
8 | {
9 | // 2D node for background
10 | position2: [f32; N2],
11 | tex_coord: f32,
12 | }
13 | implement_vertex!(Vert2, position2, tex_coord);
14 |
15 | pub struct Background
16 | {
17 | pub colormap: glium::texture::SrgbTexture1d,
18 | pub program : glium::Program,
19 | pub vertices: glium::VertexBuffer,
20 | pub indices : glium::IndexBuffer,
21 | }
22 |
23 | //==============================================================================
24 |
25 | fn get_colormap(facade: &dyn glium::backend::Facade) -> glium::texture::SrgbTexture1d
26 | {
27 | // Define the colormap for the gradient background. It has to be saved as
28 | // a texture to be able to use gamma correction (sRGB). Colors are based on
29 | // jekyll cayman theme.
30 | //
31 | // c.f. colormaps.rs
32 | //
33 | let cmap = vec!
34 | [
35 | 21u8, 87u8, 154u8, 255u8,
36 | 21u8, 154u8, 87u8, 255u8,
37 | ];
38 |
39 | let image = glium::texture::RawImage1d::from_raw_rgba(cmap);
40 | glium::texture::SrgbTexture1d::new(facade, image).unwrap()
41 | }
42 |
43 | //==============================================================================
44 |
45 | impl Background
46 | {
47 | pub fn new(facade: &dyn glium::backend::Facade) -> Background
48 | {
49 | let colormap = get_colormap(facade);
50 |
51 | let vertex_shader_src = r#"
52 | #version 150
53 |
54 | in vec2 position2;
55 | in float tex_coord;
56 | out float v_tex_coord;
57 |
58 | void main() {
59 | v_tex_coord = tex_coord;
60 | gl_Position = vec4(position2, 0, 1.0);
61 | }
62 | "#;
63 |
64 | let fragment_shader_src = r#"
65 | #version 150
66 |
67 | in float v_tex_coord;
68 | out vec4 color;
69 |
70 | uniform sampler1D bg_tex;
71 |
72 | void main() {
73 | color = texture(bg_tex, v_tex_coord);
74 | }
75 | "#;
76 |
77 | // c.f. shaders.rs
78 | let program = glium::Program::from_source(facade, vertex_shader_src,
79 | fragment_shader_src, None).unwrap();
80 |
81 | // background vertices
82 | let verts = vec!
83 | [
84 | Vert2 { position2: [-1.0, -1.0], tex_coord: 0.5, },
85 | Vert2 { position2: [ 1.0, -1.0], tex_coord: 1.0, },
86 | Vert2 { position2: [ 1.0, 1.0], tex_coord: 0.5, },
87 | Vert2 { position2: [-1.0, 1.0], tex_coord: 0.0, },
88 | ];
89 |
90 | Background
91 | {
92 | colormap: colormap,
93 | program : program,
94 | vertices: glium::VertexBuffer::new(facade, &verts).unwrap(),
95 | indices : glium::IndexBuffer::new(facade,
96 | glium::index::PrimitiveType::TrianglesList,
97 | &[
98 | 0, 1, 2,
99 | 2, 3, 0 as u32
100 | ]).unwrap(),
101 | }
102 | }
103 | }
104 |
105 | //==============================================================================
106 |
107 |
--------------------------------------------------------------------------------
/src/colormaps.rs:
--------------------------------------------------------------------------------
1 |
2 | //==============================================================================
3 |
4 | use serde_json;
5 | const CMAPS: &str = include_str!("../res/colormaps.json");
6 |
7 | pub fn get_colormap(index: &mut usize, display: &glium::Display) -> glium::texture::SrgbTexture1d
8 | {
9 | // Define the colormap by loading an indexed map from a json array
10 | //
11 | // TODO: currate resource file. Some maps need extra interp points to look
12 | // good, some are in color spaces that I can't handle properly, and some
13 | // just don't look that interesting
14 |
15 | //println!("CMAPS = {}", CMAPS);
16 |
17 | let cmaps: serde_json::Value = serde_json::from_str(CMAPS).unwrap();
18 |
19 | let cmaps_len = cmaps.as_array().unwrap().len();
20 | if *index >= cmaps_len
21 | {
22 | *index = 0;
23 | }
24 |
25 | //println!("CMAPS[{}] = {}", *index, cmaps[*index]);
26 |
27 | let xrgb = &cmaps[*index]["RGBPoints"];
28 | let xrgb_len = xrgb.as_array().unwrap().len();
29 |
30 | //println!("xrgb = {}", xrgb);
31 | //println!("xrgb.len() = {}", xrgb_len);
32 |
33 | let mut cmap = Vec::::with_capacity(xrgb_len);
34 |
35 | // Format is slightly different. Ignore x value from xrgb, add alpha value,
36 | // and scale everything from [0, 1] to [0, 255]
37 |
38 | let cmax = 255.0;
39 | for i in (0 .. xrgb_len).step_by(4)
40 | {
41 | cmap.push((xrgb[i+1].as_f64().unwrap() * cmax) as u8); // R
42 | cmap.push((xrgb[i+2].as_f64().unwrap() * cmax) as u8); // G
43 | cmap.push((xrgb[i+3].as_f64().unwrap() * cmax) as u8); // B
44 |
45 | // Alpha
46 | cmap.push(cmax as u8);
47 | }
48 |
49 | let image = glium::texture::RawImage1d::from_raw_rgba(cmap);
50 | glium::texture::SrgbTexture1d::new(display, image).unwrap()
51 | }
52 |
53 | //==============================================================================
54 |
55 |
--------------------------------------------------------------------------------
/src/consts.rs:
--------------------------------------------------------------------------------
1 |
2 | //==============================================================================
3 |
4 | // Global constants
5 |
6 | pub const ME: &str = "Skillet";
7 | pub const MAJOR: &str = env!("CARGO_PKG_VERSION_MAJOR");
8 | pub const MINOR: &str = env!("CARGO_PKG_VERSION_MINOR");
9 | pub const PATCH: &str = env!("CARGO_PKG_VERSION_PATCH");
10 |
11 | // I can't figure out how to cat const strs to another const str, but I can make
12 | // a macro
13 | #[macro_export]
14 | macro_rules! mev
15 | {
16 | () =>
17 | {
18 | format!("{} {}.{}.{}", ME, MAJOR, MINOR, PATCH)
19 | };
20 | }
21 |
22 | pub use std::f32::consts::PI;
23 |
24 | // Number of dimensions
25 | pub const ND: usize = 3;
26 | pub const N2: usize = 2;
27 |
28 | // Number of vertices per triangle
29 | pub const NT: usize = 3;
30 |
31 | // Number of vertices per edge (line)
32 | pub const NE: usize = 2;
33 |
34 | // Augmented matrix size
35 | pub const NM: usize = ND + 1;
36 |
37 | //==============================================================================
38 |
39 |
--------------------------------------------------------------------------------
/src/edge.glsl:
--------------------------------------------------------------------------------
1 |
2 | #version 150
3 | out vec4 color;
4 |
5 | // This could be a uniform
6 | const vec4 edge_color = vec4(0.0, 0.0, 0.0, 1.0);
7 |
8 | void main()
9 | {
10 | color = edge_color;
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/src/frag.glsl:
--------------------------------------------------------------------------------
1 |
2 | #version 150
3 |
4 | in vec3 v_normal;
5 | in vec3 v_position;
6 | in float v_tex_coord;
7 |
8 | out vec4 color;
9 |
10 | uniform vec3 u_light;
11 | uniform sampler1D tex;
12 |
13 | // Some of these parameters, like specular color or shininess, could be
14 | // moved into uniforms, or they're probably fine as defaults
15 |
16 | const vec4 specular_color = vec4(0.1, 0.1, 0.1, 1.0);
17 |
18 | vec4 diffuse_color = texture(tex, v_tex_coord);
19 | vec4 ambient_color = diffuse_color * 0.1;
20 |
21 | void main()
22 | {
23 | float diffuse =
24 | max(dot(normalize(v_normal), normalize(u_light)), 0.0);
25 |
26 | vec3 camera_dir = normalize(-v_position);
27 | vec3 half_dir = normalize(normalize(u_light) + camera_dir);
28 | float specular =
29 | pow(max(dot(half_dir, normalize(v_normal)), 0.0), 40.0);
30 |
31 | color = ambient_color + diffuse * diffuse_color
32 | + specular * specular_color;
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/src/lib.rs:
--------------------------------------------------------------------------------
1 |
2 | #[macro_use]
3 |
4 | pub mod colormaps;
5 | pub mod consts;
6 | pub mod math;
7 | pub mod model;
8 | pub mod shaders;
9 | pub mod utils;
10 |
11 |
--------------------------------------------------------------------------------
/src/main.rs:
--------------------------------------------------------------------------------
1 |
2 | //==============================================================================
3 |
4 | // Standard
5 | use std::env;
6 | use std::path::PathBuf;
7 | use std::rc::Rc;
8 |
9 | //****************
10 |
11 | // This crate, included in lib
12 | use skillet::*;
13 | use crate::consts::*;
14 | use crate::model;
15 | use crate::model::RenderModel;
16 |
17 | // Not included in lib
18 | pub mod app;
19 | pub mod background;
20 |
21 | use app::State;
22 |
23 | //****************
24 | // 3P(s)
25 | //****************
26 |
27 | #[macro_use]
28 | extern crate glium;
29 |
30 | use glium::glutin::event_loop::EventLoop;
31 |
32 | //==============================================================================
33 |
34 | fn main()
35 | {
36 |
37 | println!();
38 | println!("{}: Starting main()", ME);
39 | println!("{}: {}", ME, mev!());
40 | println!();
41 |
42 | let exe = utils::get_exe_base("skillet.exe");
43 |
44 | // Switch to clap if args become more complicated than a single filename
45 | let args: Vec = env::args().collect();
46 | if args.len() < 2
47 | {
48 | println!("Error: bad command-line arguments");
49 | println!("Usage:");
50 | println!();
51 | println!("\t{} FILE.VTK", exe);
52 | println!();
53 | return;
54 | }
55 |
56 | let file_path = PathBuf::from(args[1].clone());
57 |
58 | // Ownership of the Model is transferred to the RenderModel later, so it's
59 | // in a Box
60 | let model = Box::new(model::import(file_path));
61 |
62 | let event_loop = EventLoop::new();
63 |
64 | // Ownership of the Display is shared between the RenderModel and the State,
65 | // so it's in an Rc. It can't be singly-owned as far as I can tell, because
66 | // RenderModel uses it cast as a facade, while State uses it directly as
67 | // Display :(
68 | let display = Rc::new(app::display(&event_loop));
69 |
70 | let render_model = Box::new(RenderModel::new(model, display.clone()));
71 |
72 | let mut state = State::new(render_model, display);
73 |
74 | println!("{}: Starting main loop", ME);
75 | println!();
76 |
77 | event_loop.run(move |event, _, control_flow|
78 | {
79 | app::main_loop(&event, control_flow, &mut state);
80 | });
81 | }
82 |
83 | //==============================================================================
84 |
85 |
--------------------------------------------------------------------------------
/src/math.rs:
--------------------------------------------------------------------------------
1 |
2 | //==============================================================================
3 |
4 | use crate::consts::*;
5 |
6 | //==============================================================================
7 |
8 | // TODO: consider using nalgebra crate for vector/matrix wrapper types with
9 | // operator overloading
10 |
11 | // We can't overload "+" operator because rust makes it impossible by design
12 | // without a wrapper type :(
13 | pub fn add(a: &[f32], b: &[f32]) -> Vec
14 | {
15 | if a.len() != b.len()
16 | {
17 | panic!("Incorrect length for add() arguments");
18 | }
19 |
20 | //a.iter().zip(b.iter()).map(|(x, y)| x - y).collect()
21 |
22 | let mut c = Vec::with_capacity(a.len());
23 | for i in 0 .. a.len()
24 | {
25 | c.push(a[i] + b[i]);
26 | }
27 | c
28 | }
29 |
30 | //==============================================================================
31 |
32 | pub fn sub(a: &[f32], b: &[f32]) -> Vec
33 | {
34 | if a.len() != b.len()
35 | {
36 | panic!("Incorrect length for sub() arguments");
37 | }
38 |
39 | //a.iter().zip(b.iter()).map(|(x, y)| x - y).collect()
40 |
41 | let mut c = Vec::with_capacity(a.len());
42 | for i in 0 .. a.len()
43 | {
44 | c.push(a[i] - b[i]);
45 | }
46 | c
47 | }
48 |
49 | //==============================================================================
50 |
51 | pub fn neg(a: &[f32]) -> Vec
52 | {
53 | a.iter().map(|x| -x).collect()
54 | }
55 |
56 | //==============================================================================
57 |
58 | pub fn dot(a: &[f32], b: &[f32]) -> f32
59 | {
60 | if a.len() != b.len()
61 | {
62 | panic!("Incorrect length for dot() arguments");
63 | }
64 |
65 | //// Unreadable IMO
66 | //a.iter().zip(b.iter()).map(|(x, y)| x * y).sum()
67 |
68 | let mut d = 0.0;
69 | for i in 0 .. a.len()
70 | {
71 | d += a[i] * b[i];
72 | }
73 | d
74 | }
75 |
76 | //==============================================================================
77 |
78 | pub fn norm(a: &[f32]) -> f32
79 | {
80 | dot(&a, &a).sqrt()
81 | }
82 |
83 | //==============================================================================
84 |
85 | pub fn tnorm((w, h): (u32, u32)) -> f32
86 | {
87 | // Tuple norm
88 | ((w*w) as f32 + (h*h) as f32).sqrt()
89 | }
90 |
91 | //==============================================================================
92 |
93 | pub fn normalize(a: &[f32]) -> Vec
94 | {
95 | let norm = norm(a);
96 | a.iter().map(|x| x / norm).collect()
97 | }
98 |
99 | //==============================================================================
100 |
101 | pub fn scale_vec(a: &[f32], s: f32) -> Vec
102 | {
103 | a.iter().map(|x| s * x).collect()
104 | }
105 |
106 | //==============================================================================
107 |
108 | pub fn cross(a: &[f32], b: &[f32]) -> [f32; ND]
109 | {
110 | if a.len() != ND || b.len() != ND
111 | {
112 | // 3D only. This could return a Return value instead. I can't put this
113 | // check into the function signature because then rust will only accept
114 | // arrays as args, not slices or Vecs.
115 | panic!("Incorrect length for cross() argument. \
116 | Expected length {}", ND);
117 | }
118 |
119 | [
120 | a[1] * b[2] - a[2] * b[1],
121 | a[2] * b[0] - a[0] * b[2],
122 | a[0] * b[1] - a[1] * b[0],
123 | ]
124 | }
125 |
126 | //==============================================================================
127 |
128 | pub fn identity_matrix() -> [[f32; NM]; NM]
129 | {[
130 | [1.0, 0.0, 0.0, 0.0],
131 | [0.0, 1.0, 0.0, 0.0],
132 | [0.0, 0.0, 1.0, 0.0],
133 | [0.0, 0.0, 0.0, 1.0],
134 | ]}
135 |
136 | //==============================================================================
137 |
138 | pub fn mul_mat4(a: &[[f32; NM]; NM], b: &[[f32; NM]; NM]) -> [[f32; NM]; NM]
139 | {
140 | let mut c = [[0.0; NM]; NM];
141 | for i in 0 .. NM
142 | {
143 | for j in 0 .. NM
144 | {
145 | for k in 0 .. NM
146 | {
147 | c[i][j] += a[i][k] * b[k][j];
148 | }
149 | }
150 | }
151 | c
152 | }
153 |
154 | //==============================================================================
155 |
156 | pub fn scale_matrix(m: &[[f32; NM]; NM], s: f32) -> [[f32; NM]; NM]
157 | {
158 | // Scale in place and apply after m
159 |
160 | // Don't scale the 4th component
161 | let sm =
162 | [
163 | [ s, 0.0, 0.0, 0.0],
164 | [ 0.0, s, 0.0, 0.0],
165 | [ 0.0, 0.0, s, 0.0],
166 | [ 0.0, 0.0, 0.0, 1.0],
167 | ];
168 | mul_mat4(m, &sm)
169 | }
170 |
171 | //==============================================================================
172 |
173 | pub fn translate_matrix(m: &[[f32; NM]; NM], u: &[f32]) -> [[f32; NM]; NM]
174 | {
175 | // Translate in place and apply after m
176 |
177 | let t =
178 | [
179 | [ 1.0, 0.0, 0.0, 0.0],
180 | [ 0.0, 1.0, 0.0, 0.0],
181 | [ 0.0, 0.0, 1.0, 0.0],
182 | [u[0], u[1], u[2], 1.0],
183 | ];
184 |
185 | mul_mat4(m, &t)
186 | }
187 |
188 | //==============================================================================
189 |
190 | pub fn rotate_matrix(m: &[[f32; NM]; NM], u: &[f32; ND], theta: f32)
191 | -> [[f32; NM]; NM]
192 | {
193 | // General axis-angle rotation about an axis vector [x,y,z] by angle theta.
194 | // Vector must be normalized! Apply rotation r to input matrix m and return
195 | // m * r.
196 |
197 | // Skip identity/singular case. Caller likely set vector to garbage
198 | if theta == 0.0f32
199 | {
200 | return *m;
201 | }
202 |
203 | // Ref:
204 | //
205 | // https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle
206 | //
207 | // c.f.
208 | //
209 | // https://github.com/JeffIrwin/temple-viewer/blob/c25f28cf3457edc136d213fd01df47d826bc279b/Math.HC#L39
210 |
211 | let c = theta.cos();
212 | let s = theta.sin();
213 | let t = 1.0 - c;
214 |
215 | let x = u[0];
216 | let y = u[1];
217 | let z = u[2];
218 |
219 | let r =
220 | [
221 | [c + x*x*t , x*y*t - z*s, z*x*t + y*s, 0.0],
222 | [x*y*t + z*s, c + y*y*t, y*z*t - x*s, 0.0],
223 | [z*x*t - y*s, y*z*t + x*s, c + z*z*t, 0.0],
224 | [ 0.0, 0.0, 0.0, 1.0],
225 | ];
226 |
227 | //println!("theta = {:?}", theta);
228 | //println!("r = {:?}", r);
229 |
230 | mul_mat4(m, &r)
231 | }
232 |
233 | //==============================================================================
234 |
235 | pub fn view_matrix(position: &[f32; ND], direction: &[f32; ND], up: &[f32; ND])
236 | -> [[f32; NM]; NM]
237 | {
238 | // Ref:
239 | //
240 | // https://github.com/JeffIrwin/glfw/blob/9416a43404934cc54136e988a233bee64d4d48fb/deps/linmath.h#L404
241 | //
242 | // Note this version has a "direction" arg instead of "center", but it's
243 | // equivalent
244 |
245 | let f = normalize(direction);
246 | let s = normalize(&cross(&f, up));
247 | let u = cross(&s, &f);
248 |
249 | let p = [-dot(position, &s),
250 | -dot(position, &u),
251 | -dot(position, &f)];
252 |
253 | [
254 | [s[0], u[0], -f[0], 0.0],
255 | [s[1], u[1], -f[1], 0.0],
256 | [s[2], u[2], -f[2], 0.0],
257 | [p[0], p[1], -p[2], 1.0],
258 | ]
259 | }
260 |
261 | //==============================================================================
262 |
263 | pub fn perspective_matrix(fov: f32, zfar: f32, znear: f32,
264 | (width, height): (u32, u32))
265 | -> [[f32; NM]; NM]
266 | {
267 | // Right-handed (as god intended)
268 | //
269 | // Ref: http://perry.cz/articles/ProjectionMatrix.xhtml
270 |
271 | let aspect_ratio = height as f32 / width as f32;
272 | let f = 1.0 / (fov / 2.0).tan();
273 |
274 | [
275 | [f * aspect_ratio, 0.0, 0.0 , 0.0],
276 | [ 0.0 , f, 0.0 , 0.0],
277 | [ 0.0 , 0.0, - (zfar+znear)/(zfar-znear), -1.0],
278 | [ 0.0 , 0.0, -(2.0*zfar*znear)/(zfar-znear), 0.0],
279 | ]
280 | }
281 |
282 | //==============================================================================
283 |
284 |
--------------------------------------------------------------------------------
/src/model.rs:
--------------------------------------------------------------------------------
1 |
2 | //****************
3 |
4 | use std::ops::Deref;
5 | use std::rc::Rc;
6 |
7 | //****************
8 |
9 | use crate::consts::*;
10 | use crate::math::*;
11 | use crate::utils;
12 |
13 | //****************
14 |
15 | // 3P
16 | use vtkio::{model::{Attribute, DataArray, DataSet, ElementType, Vtk}};
17 |
18 | //==============================================================================
19 |
20 | #[derive(PartialEq, Clone, Copy)]
21 | pub enum Type
22 | {
23 | // There are a few others, but I'm not planning to implement them
24 |
25 | Tri,
26 | Quad,
27 | Tet,
28 | Hex,
29 | Wedge,
30 | Pyramid,
31 |
32 | // TODO: test quad, tet, wedge, and pyramid
33 |
34 | Invalid, // supported in vtkio but not here
35 | }
36 |
37 | pub fn cell_tris(t: Type) -> Vec
38 | {
39 | // These could be member fn's, but unit testing might be easier if they're
40 | // not.
41 | //
42 | // Return an array of indices of triangle vertices that make up a more
43 | // complex cell type
44 | //
45 | // Ref: http://www.princeton.edu/~efeibush/viscourse/vtk.pdf
46 | //
47 | // Right-hand ordering of 3 vertices points to the outward normal direction
48 | //
49 | match t
50 | {
51 | Type::Tri => vec!
52 | [
53 | 0, 1, 2,
54 | ],
55 | Type::Quad => vec!
56 | [
57 | 0, 1, 2,
58 | 2, 3, 0,
59 | ],
60 | Type::Tet => vec!
61 | [
62 | 0, 2, 1,
63 | 0, 1, 3,
64 | 0, 3, 2,
65 | 1, 2, 3,
66 | ],
67 | Type::Hex => vec!
68 | [
69 | 0, 3, 2, 2, 1, 0,
70 | 4, 5, 6, 6, 7, 4,
71 | 0, 1, 5, 5, 4, 0,
72 | 1, 2, 6, 6, 5, 1,
73 | 2, 3, 7, 7, 6, 2,
74 | 0, 4, 7, 7, 3, 0,
75 | ],
76 | Type::Wedge => vec!
77 | [
78 | 0, 1, 2,
79 | 3, 5, 4,
80 | 0, 2, 3, 2, 5, 3,
81 | 1, 4, 5, 5, 2, 1,
82 | 0, 3, 4, 4, 1, 0,
83 | ],
84 | Type::Pyramid => vec!
85 | [
86 | 0, 1, 4,
87 | 1, 2, 4,
88 | 2, 3, 4,
89 | 3, 0, 4,
90 | 0, 3, 2, 2, 1, 0,
91 | ],
92 |
93 | Type::Invalid => vec![],
94 | }
95 | }
96 |
97 | //==============================================================================
98 |
99 | pub fn cell_num_verts(t: Type) -> usize
100 | {
101 | // max(cell_tris) + 1
102 | //
103 | // TODO: ^ verify with unit tests
104 | match t
105 | {
106 | Type::Tri => 3,
107 | Type::Quad => 4,
108 | Type::Tet => 4,
109 | Type::Hex => 8,
110 | Type::Wedge => 6,
111 | Type::Pyramid => 5,
112 |
113 | Type::Invalid => 0,
114 | }
115 | }
116 |
117 | //==============================================================================
118 |
119 | pub fn cell_edges(t: Type) -> Vec
120 | {
121 | // Return an array of edge vertices that make up a more complex cell type
122 | match t
123 | {
124 | Type::Tri => vec!
125 | [
126 | 0, 1,
127 | 1, 2,
128 | 2, 0,
129 | ],
130 | Type::Quad => vec!
131 | [
132 | 0, 1,
133 | 1, 2,
134 | 2, 3,
135 | 3, 0,
136 | ],
137 | Type::Tet => vec!
138 | [
139 | 0, 1,
140 | 0, 2,
141 | 0, 3,
142 | 1, 2,
143 | 1, 3,
144 | 2, 3,
145 | ],
146 | Type::Hex => vec!
147 | [
148 | 0, 1,
149 | 1, 2,
150 | 2, 3,
151 | 3, 0,
152 | 4, 5,
153 | 5, 6,
154 | 6, 7,
155 | 7, 4,
156 | 0, 4,
157 | 1, 5,
158 | 2, 6,
159 | 3, 7,
160 | ],
161 | Type::Wedge => vec!
162 | [
163 | 0, 1, 1, 2, 2, 0,
164 | 3, 4, 4, 5, 5, 3,
165 | 0, 3,
166 | 1, 4,
167 | 2, 5,
168 | ],
169 | Type::Pyramid => vec!
170 | [
171 | 0, 1,
172 | 1, 2,
173 | 2, 3,
174 | 3, 0,
175 | 0, 4,
176 | 1, 4,
177 | 2, 4,
178 | 3, 4,
179 | ],
180 |
181 | Type::Invalid => vec![],
182 | }
183 | }
184 |
185 | //==============================================================================
186 |
187 | pub struct Model
188 | {
189 | // The Model struct contains the geometry and its associated point data
190 | //
191 | // For now, this is just a wrapper for the vtkio vtk struct, although it
192 | // could be generalized for other file formats
193 |
194 | // Point coordinates
195 | pub points: Vec,
196 |
197 | // Cell connectivity
198 | pub types : Vec,
199 | pub cells : Vec,
200 | pub offsets: Vec,
201 |
202 | // Data arrays (e.g. scalars, vectors, tensors)
203 | pub point_data: Vec,
204 | pub cell_data: Vec,
205 | }
206 |
207 | pub struct Data
208 | {
209 | // A single point or cell data array
210 | pub data: Vec,
211 | pub name: String,
212 | pub num_comp: usize,
213 | }
214 |
215 | impl Model
216 | {
217 | pub fn new() -> Model
218 | {
219 | Model
220 | {
221 | points: Vec::new(),
222 | //piece: UnstructuredGridPiece::new(),
223 |
224 | types : Vec::new(),
225 | cells : Vec::new(),
226 | offsets: Vec::new(),
227 |
228 | point_data: Vec::new(),
229 | cell_data: Vec::new(),
230 | }
231 | }
232 |
233 | //****************
234 |
235 | pub fn tris(&self) -> Vec
236 | {
237 | // TODO: can this be done without looking up tris again, and without
238 | // saving tris to memory as a struct member? Can RenderModel indices be
239 | // used instead? Tri lookup is only performed on loading and on
240 | // bind_point_data() for changing data arrays, so it doesn't seem worth
241 | // saving in memory.
242 |
243 | // Capacity could be set ahead of time for tris with an extra pass over
244 | // cell types to count triangles
245 | let mut tris = Vec::new();
246 | for i in 0 .. self.types.len() as usize
247 | {
248 | let t = cell_tris(self.types[i]);
249 | let nv = cell_num_verts(self.types[i]);
250 | let nt = t.len() / NT;
251 |
252 | //println!("nt = {}", nt);
253 |
254 | for it in 0 .. nt as usize
255 | {
256 | let i0 = self.offsets[i] as usize - nv + t[NT * it + 0];
257 | let i1 = self.offsets[i] as usize - nv + t[NT * it + 1];
258 | let i2 = self.offsets[i] as usize - nv + t[NT * it + 2];
259 |
260 | tris.push(self.cells[i0]);
261 | tris.push(self.cells[i1]);
262 | tris.push(self.cells[i2]);
263 | }
264 | }
265 | tris
266 | }
267 |
268 | //****************
269 |
270 | pub fn edges(&self) -> Vec
271 | {
272 | let mut edges = Vec::new();
273 | for i in 0 .. self.types.len() as usize
274 | {
275 | let e = cell_edges(self.types[i]);
276 | let nv = cell_num_verts(self.types[i]);
277 | let ne = e.len() / NE;
278 |
279 | //println!("ne = {}", ne);
280 |
281 | for ie in 0 .. ne as usize
282 | {
283 | let i0 = self.offsets[i] as usize - nv + e[NE * ie + 0];
284 | let i1 = self.offsets[i] as usize - nv + e[NE * ie + 1];
285 |
286 | edges.push(self.cells[i0]);
287 | edges.push(self.cells[i1]);
288 | }
289 | }
290 | edges
291 | }
292 | }
293 |
294 | //****************
295 |
296 | // Split position and texture coordinates into separate arrays. That way we can
297 | // change texture coordinates (e.g. rescale a colorbar range or load a different
298 | // data array) without sending the position arrays to the GPU again
299 |
300 | #[derive(Copy, Clone, Debug)]
301 | pub struct Vert
302 | {
303 | // 3D vert
304 | position: [f32; ND]
305 | }
306 | glium::implement_vertex!(Vert, position);
307 |
308 | // Even vectors and tensors are be rendered as "scalars", since you can
309 | // only colormap one component (or magnitude) at a time, which is a scalar
310 | #[derive(Copy, Clone)]
311 | pub struct Scalar
312 | {
313 | tex_coord: f32,
314 | }
315 | glium::implement_vertex!(Scalar, tex_coord);
316 |
317 | #[derive(Copy, Clone, Debug)]
318 | pub struct Normal
319 | {
320 | normal: [f32; ND]
321 | }
322 | glium::implement_vertex!(Normal, normal);
323 |
324 | //==============================================================================
325 |
326 | pub struct RenderModel
327 | {
328 | // The RenderModel struct is an interface layer between the Model and
329 | // glium's GL array/buffer object bindings
330 | //
331 | // TODO: should this struct contain a ref to the facade? That could
332 | // eliminate some fn args
333 |
334 | pub vertices: glium::VertexBuffer,
335 | pub normals : glium::VertexBuffer,
336 | pub scalar : glium::VertexBuffer,
337 | pub indices : glium::index::NoIndices,
338 |
339 | pub edge_visibility: bool,
340 | pub edge_verts : glium::VertexBuffer,
341 | pub edge_indices: glium::index::NoIndices,
342 |
343 | pub warp_factor: f32,
344 | pub warp_index: usize,
345 |
346 | // Data array and component indices for color contour
347 | pub comp : usize,
348 | pub dindex: usize,
349 |
350 | // Model matrix
351 | pub mat: [[f32; NM]; NM],
352 |
353 | // References to parent Model and facade/display
354 | pub m : Box,
355 | pub facade: Rc,
356 | }
357 |
358 | fn verts(m: &Model, enable_warp: bool, index: usize, factor: f32)
359 | -> (Vec, Vec, Vec)
360 | {
361 | let tris = m.tris();
362 |
363 | // You would think that normals could be 1/3 this size, but they need to
364 | // be duplicated for each vertex of a triangle for sharp edge shading
365 | let mut verts = Vec::with_capacity(tris.len());
366 | let mut normals = Vec::with_capacity(tris.len());
367 |
368 | for i in 0 .. tris.len() / NT
369 | {
370 | // Local array containing the coordinates of the vertices of
371 | // a single triangle
372 | let mut p: [f32; NT * ND] = [0.0; NT * ND];
373 |
374 | for j in 0 .. NT
375 | {
376 | p[NT*j + 0] = m.points[ND*tris[NT*i + j] as usize + 0];
377 | p[NT*j + 1] = m.points[ND*tris[NT*i + j] as usize + 1];
378 | p[NT*j + 2] = m.points[ND*tris[NT*i + j] as usize + 2];
379 |
380 | let (dx, dy, dz) = if enable_warp
381 | {(
382 | m.point_data[index].data[ND*tris[NT*i + j] as usize + 0],
383 | m.point_data[index].data[ND*tris[NT*i + j] as usize + 1],
384 | m.point_data[index].data[ND*tris[NT*i + j] as usize + 2],
385 | )}
386 | else
387 | {(
388 | 0.0, 0.0, 0.0,
389 | )};
390 |
391 | p[NT*j + 0] += factor * dx;
392 | p[NT*j + 1] += factor * dy;
393 | p[NT*j + 2] += factor * dz;
394 |
395 | verts.push(Vert{position:
396 | [
397 | p[NT*j + 0],
398 | p[NT*j + 1],
399 | p[NT*j + 2],
400 | ]});
401 | }
402 |
403 | let p01 = sub(&p[3..6], &p[0..3]);
404 | let p02 = sub(&p[6..9], &p[0..3]);
405 |
406 | let nrm = normalize(&cross(&p01, &p02));
407 |
408 | // Use inward normal for RH coordinate system
409 | for _j in 0 .. ND
410 | {
411 | normals.push(Normal{normal:
412 | [
413 | -nrm[0],
414 | -nrm[1],
415 | -nrm[2],
416 | ]
417 | });
418 | }
419 | }
420 |
421 | //println!("vert 0 = {:?}", verts[0]);
422 | //println!("vert 1 = {:?}", verts[1]);
423 | //println!("vert 2 = {:?}", verts[2]);
424 | //println!("normal 0 = {:?}", normals[0]);
425 |
426 | let edges = m.edges();
427 | let mut edge_verts = Vec::with_capacity(edges.len());
428 | for i in 0 .. edges.len() / NE
429 | {
430 | // This could be half the size. Unlike normal calculation above, we
431 | // only need to push 1 vert at a time without keeping the whole edge
432 | // in memory.
433 | let mut p: [f32; NE * ND] = [0.0; NE * ND];
434 |
435 | for j in 0 .. NE
436 | {
437 | p[NE*j + 0] = m.points[ND*edges[NE*i + j] as usize + 0];
438 | p[NE*j + 1] = m.points[ND*edges[NE*i + j] as usize + 1];
439 | p[NE*j + 2] = m.points[ND*edges[NE*i + j] as usize + 2];
440 |
441 | let (dx, dy, dz) = if enable_warp
442 | {(
443 | m.point_data[index].data[ND*edges[NE*i + j] as usize + 0],
444 | m.point_data[index].data[ND*edges[NE*i + j] as usize + 1],
445 | m.point_data[index].data[ND*edges[NE*i + j] as usize + 2],
446 | )}
447 | else
448 | {(
449 | 0.0, 0.0, 0.0,
450 | )};
451 |
452 | p[NE*j + 0] += factor * dx;
453 | p[NE*j + 1] += factor * dy;
454 | p[NE*j + 2] += factor * dz;
455 |
456 | // If we map edge to triangle, we could add a bit of the outward
457 | // normal to the edge position to fix z-fighting. Instead, just
458 | // increase polygon_offset and/or line_width in DrawParameters
459 |
460 | edge_verts.push(Vert{position:
461 | [
462 | p[NE*j + 0],// + 0.001,
463 | p[NE*j + 1],// + 0.001,
464 | p[NE*j + 2],// + 0.001,
465 | ]});
466 | }
467 | }
468 |
469 | (verts, normals, edge_verts)
470 | }
471 |
472 | impl RenderModel
473 | {
474 | //****************
475 |
476 | pub fn new(m: Box, facade: Rc) -> RenderModel
477 | {
478 | // Split scalar handling to a separate fn. Mesh geometry will only be
479 | // loaded once, but scalars are processed multiple times as the user
480 | // cycles through data to display
481 |
482 | let enable_warp = false;
483 | let (verts, normals, edge_verts) = verts(&m, enable_warp, 0, 0.0);
484 |
485 | let scalar = Vec::new();
486 | let mut render_model = RenderModel
487 | {
488 | // "x.deref()" is equivalent to "&*x"
489 | vertices: glium::VertexBuffer::new(facade.deref(), &verts ).unwrap(),
490 | normals : glium::VertexBuffer::new(facade.deref(), &normals).unwrap(),
491 | scalar : glium::VertexBuffer::new(facade.deref(), &scalar ).unwrap(),
492 |
493 | indices : glium::index::NoIndices(
494 | glium::index::PrimitiveType::TrianglesList),
495 |
496 | edge_visibility: false,
497 | edge_verts : glium::VertexBuffer::new(facade.deref(), &edge_verts).unwrap(),
498 | edge_indices: glium::index::NoIndices(
499 | glium::index::PrimitiveType::LinesList),
500 |
501 | warp_factor: 1.0,
502 |
503 | // Data array index for warping by vector. Initial value means no
504 | // warping
505 | warp_index: m.point_data.len(),
506 |
507 | comp : 0,
508 | dindex: 0,
509 |
510 | // Don't scale or translate here. Model matrix should always be
511 | // identity unless I add an option for a user to move one model
512 | // relative to others
513 | mat: identity_matrix(),
514 |
515 | m: m,
516 | facade: facade,
517 | };
518 |
519 | // If point data is empty, bind cell data instead. If both are empty,
520 | // panic. Otherwise, main will crash at my target_draw() call which
521 | // references the empty scalar
522 | if render_model.m.point_data.len() > 0
523 | {
524 | render_model.bind_point_data();
525 | }
526 | else if render_model.m.cell_data.len() > 0
527 | {
528 | render_model.bind_cell_data();
529 | }
530 | else
531 | {
532 | unimplemented!("Point data and cell data are both empty. \
533 | Geometry-only models cannot be rendered");
534 | }
535 |
536 | render_model
537 | }
538 |
539 | //****************
540 |
541 | pub fn warp(&mut self)
542 | {
543 | // Warp vertex positions by vector point data. Cell data cannot be
544 | // applied as a warp.
545 | //
546 | // Unlike ParaView, warping does not reset the color contour to
547 | // a different data array. Instead, we maintain the same scalar texture
548 | // as before.
549 |
550 | //index += 1;
551 | if self.warp_index >= self.m.point_data.len() + 1
552 | {
553 | self.warp_index = 0;
554 | }
555 |
556 | let index = self.warp_index;
557 |
558 | // We can't just return early here, because we need to reset positions
559 | // to their original values to undo the previous warp
560 | let enable_warp = index < self.m.point_data.len();
561 |
562 | if enable_warp
563 | {
564 | if self.m.point_data[index].num_comp != ND
565 | {
566 | // Only vectors can warp. TODO: auto cycle to next vector (don't
567 | // infinite loop)
568 | return;
569 | }
570 |
571 | //println!("Warping by \"{}\"", self.m.point_data[index].name);
572 | }
573 |
574 | let (verts, normals, edge_verts) = verts(&self.m, enable_warp,
575 | index, self.warp_factor);
576 |
577 | self.vertices = glium::VertexBuffer::new(self.facade.deref(), &verts ).unwrap();
578 | self.normals = glium::VertexBuffer::new(self.facade.deref(), &normals ).unwrap();
579 | self.edge_verts = glium::VertexBuffer::new(self.facade.deref(), &edge_verts).unwrap();
580 | }
581 |
582 | //****************
583 |
584 | pub fn bind_point_data(&mut self)
585 | {
586 | // Select point data array by index to bind for graphical display
587 |
588 | let index = self.dindex;
589 |
590 | // TODO: check index too
591 | if self.comp >= self.m.point_data[index].num_comp
592 | {
593 | panic!("Component is out of bounds");
594 | }
595 |
596 | let tris = self.m.tris();
597 | let mut scalar = Vec::with_capacity(tris.len());
598 | let step = self.m.point_data[index].num_comp;
599 |
600 | // Get min/max of scalar. TODO: add a magnitude option for vectors (but
601 | // not tensors). An extra pass will be needed to calculate
602 | let (smin, smax) = utils::get_bounds(&(self.m.point_data[index].data
603 | .iter().skip(self.comp).step_by(step).copied().collect::>()));
604 |
605 | for i in 0 .. tris.len()
606 | {
607 | let s = self.m.point_data[index].data[step * tris[i] as usize + self.comp];
608 |
609 | scalar.push(Scalar{tex_coord:
610 | ((s - smin) / (smax - smin)) as f32 });
611 | }
612 |
613 | self.scalar = glium::VertexBuffer::new(self.facade.deref(), &scalar).unwrap();
614 | }
615 |
616 | //****************
617 |
618 | pub fn bind_cell_data(&mut self)
619 | {
620 | // Select cell data array by index to bind for graphical display
621 |
622 | let index = self.dindex - self.m.point_data.len();
623 |
624 | // TODO: check index too
625 | if self.comp >= self.m.cell_data[index].num_comp
626 | {
627 | panic!("Component is out of bounds");
628 | }
629 |
630 | let tris = self.m.tris();
631 | let mut scalar = Vec::with_capacity(tris.len());
632 | let step = self.m.cell_data[index].num_comp;
633 |
634 | // Get min/max of scalar. TODO: add a magnitude option for vectors (but
635 | // not tensors). An extra pass will be needed to calculate
636 | let (smin, smax) = utils::get_bounds(&(self.m.cell_data[index].data
637 | .iter().skip(self.comp).step_by(step).copied().collect::>()));
638 |
639 | // Cell index
640 | let mut ic = 0;
641 |
642 | // Duplicated vert index within cell
643 | let mut iv = 0;
644 |
645 | // Number of duplicated verts in this cell (recall: verts are duplicated
646 | // for each triangle they belong too, both for sharp shading display
647 | // along edges, and here for per-cell scalar display)
648 | let mut nvc = cell_tris(self.m.types[ic]).len();
649 |
650 | for _i in 0 .. tris.len()
651 | {
652 | if iv >= nvc
653 | {
654 | iv = 0;
655 | ic += 1;
656 | nvc = cell_tris(self.m.types[ic]).len();
657 | }
658 | //println!("_i, ic, iv = {}, {}, {}", _i, ic, iv);
659 |
660 | let s = self.m.cell_data[index].data[step * ic as usize + self.comp];
661 |
662 | scalar.push(Scalar{tex_coord:
663 | ((s - smin) / (smax - smin)) as f32 });
664 |
665 | iv += 1;
666 | }
667 |
668 | self.scalar = glium::VertexBuffer::new(self.facade.deref(), &scalar).unwrap();
669 | }
670 |
671 | //****************
672 | }
673 |
674 | //==============================================================================
675 |
676 | pub fn import(f: std::path::PathBuf) -> Model
677 | {
678 | println!("Importing VTK file \"{}\"", f.display());
679 | println!();
680 |
681 | let vtk = Vtk::import(&f).expect(&format!(
682 | "Failed to load file: {:?}", f));
683 |
684 | //let file_out = PathBuf::from("./scratch/ascii.vtu");
685 | //vtk.export_ascii(&file_out)
686 | // .expect(&format!("Failed to save file: {:?}", file_out));
687 | //return;
688 |
689 | // TODO: match UnstructuredGrid vs PolyData, etc.
690 | //
691 | // VTK polydata files (or other piece types) can be saved as
692 | // UnstructuredGrid (.vtu) in ParaView with Filters -> Alphabetical ->
693 | // Append datasets, in the mean time until I implement polydata natively
694 | // here
695 | let pieces = if let DataSet::UnstructuredGrid { pieces, ..} = vtk.data
696 | {
697 | pieces
698 | }
699 | else
700 | {
701 | panic!("UnstructuredGrid not found. Wrong vtk data type");
702 | };
703 |
704 | println!("Number of pieces = {}", pieces.len());
705 |
706 | if pieces.len() > 1
707 | {
708 | // To do? Render each piece as if it's a totally separate VTK file.
709 | // They could have unrelated numbers of points, number and type of
710 | // data arrays, etc.
711 | unimplemented!("multiple pieces");
712 | }
713 |
714 | let piece = pieces[0].load_piece_data(None).unwrap();
715 | let num_points = piece.num_points();
716 |
717 | println!("Number of points = {}", num_points);
718 | println!("Number of cells = {}", piece.cells.types.len());
719 | println!();
720 |
721 | //let points = piece.points.cast_into::().unwrap();
722 | //m.points = points;
723 |
724 | // TODO: instead of making a new empty Model here and setting members one at
725 | // a time, set them all at the end (like RenderModel) and eliminate the
726 | // new() fn
727 | let mut m = Model::new();
728 |
729 | m.points = piece.points.cast_into::().unwrap();
730 |
731 | //println!("m.points = {:?}", m.points);
732 | //println!();
733 |
734 | // Convert legacy into XML so we don't have to match conditionally
735 | let cells = piece.cells.cell_verts.into_xml();
736 |
737 | //println!("connectivity = {:?}", cells.0);
738 | //println!("types = {:?}", piece.cells.types);
739 | //println!("offsets = {:?}", cells.1);
740 | //println!();
741 |
742 | // In vtkio, cells.0 is the actual connectivity, and cells.1 is the offset
743 | m.cells = cells.0;
744 | m.offsets = cells.1;
745 |
746 | //m.types = piece.cells.types;
747 |
748 | // Abstract away from vtkio's type enum
749 | m.types = Vec::with_capacity(piece.cells.types.len());
750 | for t in piece.cells.types
751 | {
752 | m.types.push(match t
753 | {
754 | vtkio::model::CellType::Triangle => Type::Tri,
755 | vtkio::model::CellType::Quad => Type::Quad,
756 | vtkio::model::CellType::Hexahedron => Type::Hex,
757 | vtkio::model::CellType::Wedge => Type::Wedge,
758 | vtkio::model::CellType::Pyramid => Type::Pyramid,
759 |
760 | //vtkio::model::CellType::Line => Type::Unsupported,
761 | //vtkio::model::CellType::PolyVertex => Type::Unsupported,
762 | //vtkio::model::CellType::Vertex => Type::Unsupported,
763 |
764 | _ => Type::Invalid,
765 | });
766 | }
767 |
768 | //println!("point 0 = {:?}", piece.data.point[0]);
769 | //println!();
770 |
771 | //let mut name: String = "".to_string();
772 |
773 | m.point_data = data(&piece.data.point, num_points);
774 | m. cell_data = data(&piece.data.cell , num_points);
775 |
776 | m
777 | }
778 |
779 | //==============================================================================
780 |
781 | fn data(attribs: &Vec, num: usize) -> Vec
782 | {
783 | // Return val. This could be either point data or cell data
784 | let mut data_vec = Vec::new();
785 |
786 | // Iterate attributes like this to get all data
787 | for attrib in attribs
788 | {
789 | println!("Attribute:");
790 | //println!("attrib = {:?}", attrib);
791 |
792 | // Get the contents of the point/cell data array. This is based on
793 | // write_attrib() from vtkio/src/writer.rs
794 |
795 | match attrib
796 | {
797 | Attribute::DataArray(DataArray {elem, data, name}) =>
798 | {
799 | let data_len = data.len();
800 | match elem
801 | {
802 | ElementType::Scalars{num_comp, ..}
803 | =>
804 | {
805 | println!("Scalars");
806 |
807 | // Cast everything to f32
808 |
809 | data_vec.push(Data
810 | {
811 | name: name.to_string(),
812 | data: data.clone().cast_into::().unwrap(),
813 | num_comp: *num_comp as usize,
814 | });
815 | }
816 |
817 | ElementType::Vectors{}
818 | =>
819 | {
820 | // Vector num_comp should always be 3, but calculate it
821 | // anyway
822 | println!("Vectors");
823 | data_vec.push(Data
824 | {
825 | name: name.to_string(),
826 | data: data.clone().cast_into::().unwrap(),
827 | num_comp: data_len / num,
828 | });
829 | }
830 |
831 | ElementType::Tensors{}
832 | =>
833 | {
834 | // Tensor num_comp may be 6 or 9
835 | println!("Tensors");
836 | data_vec.push(Data
837 | {
838 | name: name.to_string(),
839 | data: data.clone().cast_into::().unwrap(),
840 | num_comp: data_len / num,
841 | });
842 | }
843 |
844 | ElementType::Generic(num_comp)
845 | =>
846 | {
847 | println!("Generic");
848 | data_vec.push(Data
849 | {
850 | name: name.to_string(),
851 | data: data.clone().cast_into::().unwrap(),
852 | num_comp: *num_comp as usize,
853 | });
854 | }
855 |
856 | //ElementType::ColorScalars{..}
857 | //=>
858 | //{
859 | // println!("ColorScalars");
860 | //}
861 |
862 | //ElementType::LookupTable{..}
863 | //=>
864 | //{
865 | // println!("LookupTable");
866 | //}
867 |
868 | //ElementType::Normals{..}
869 | //=>
870 | //{
871 | // println!("Normals");
872 | //}
873 |
874 | //ElementType::TCoords{..}
875 | //=>
876 | //{
877 | // println!("TCoords");
878 | //}
879 |
880 | // Just ignore and don't push anything that I haven't
881 | // handled
882 | _ => ()
883 | }
884 | }
885 | Attribute::Field {..}
886 | => unimplemented!("Field attribute for point/cell data")
887 | };
888 | println!();
889 | }
890 |
891 | // TODO: display name in legend. Apparently I need another crate for GL
892 | // text display
893 |
894 | println!("data_vec.len() = {}", data_vec.len());
895 | for d in &data_vec
896 | {
897 | println!("\tname = {}", d.name);
898 | println!("\tnum_comp = {}", d.num_comp);
899 | println!("\tlen = {}", d.data.len());
900 | println!();
901 | }
902 |
903 | data_vec
904 | }
905 |
906 | //==============================================================================
907 |
908 |
--------------------------------------------------------------------------------
/src/shaders.rs:
--------------------------------------------------------------------------------
1 |
2 | const EDGE: &str = include_str!("./edge.glsl");
3 | const FRAG: &str = include_str!("./frag.glsl");
4 | const VERT: &str = include_str!("./vert.glsl");
5 |
6 | // TODO: add Gouraud option in addition to current Blinn-Phong frag shader
7 |
8 | pub fn edge(facade: &dyn glium::backend::Facade) -> glium::Program
9 | {
10 | glium::Program::from_source(facade, VERT, EDGE, None).unwrap()
11 | }
12 |
13 | pub fn face(facade: &dyn glium::backend::Facade) -> glium::Program
14 | {
15 | glium::Program::from_source(facade, VERT, FRAG, None).unwrap()
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/src/utils.rs:
--------------------------------------------------------------------------------
1 |
2 | use std::env;
3 |
4 | //==============================================================================
5 |
6 | pub fn get_exe_base(default: &str) -> String
7 | {
8 | // Safely get the basename of this exe or return a default
9 |
10 | let current_exe = match env::current_exe().ok()
11 | {
12 | Some(inner) => inner,
13 | None => return default.to_string(),
14 | };
15 | let file_name = match current_exe.file_name()
16 | {
17 | Some(inner) => inner,
18 | None => return default.to_string(),
19 | };
20 | match file_name.to_str()
21 | {
22 | Some(inner) => inner.to_string(),
23 | None => default.to_string(),
24 | }
25 | }
26 |
27 | //==============================================================================
28 |
29 | pub fn get_bounds(x: &[f32]) -> (f32, f32)
30 | {
31 | // Does this belong in utils or math?
32 | //
33 | // This may not handle NaN correctly
34 |
35 | let mut xmin = x[0];
36 | let mut xmax = x[0];
37 | for i in 1 .. x.len()
38 | {
39 | if x[i] < xmin { xmin = x[i]; }
40 | if x[i] > xmax { xmax = x[i]; }
41 | }
42 | (xmin, xmax)
43 | }
44 |
45 | //==============================================================================
46 |
47 | pub fn ff32(num: f32) -> String
48 | {
49 | // Format float in scientific notation for tabular output
50 | //
51 | // Rust doesn't do optional args, so we have 2 fn's instead
52 | fmt_f32(num, 12, 5, 2)
53 | }
54 |
55 | pub fn fmt_f32(num: f32, width: usize, precision: usize, exp_width: usize)
56 | -> String
57 | {
58 | // https://stackoverflow.com/questions/65264069/alignment-of-floating-point-numbers-printed-in-scientific-notation
59 |
60 | let mut num = format!("{:.precision$e}", num, precision = precision);
61 |
62 | // Safe to `unwrap` as `num` is guaranteed to contain `'e'`
63 | let exp = num.split_off(num.find('e').unwrap());
64 |
65 | let (sign, exp) = if exp.starts_with("e-")
66 | {
67 | ('-', &exp[2..])
68 | }
69 | else
70 | {
71 | ('+', &exp[1..])
72 | };
73 | num.push_str(&format!("e{}{:0>pad$}", sign, exp, pad = exp_width));
74 |
75 | format!("{:>width$}", num, width = width)
76 | }
77 |
78 | //==============================================================================
79 |
80 |
--------------------------------------------------------------------------------
/src/vert.glsl:
--------------------------------------------------------------------------------
1 |
2 | #version 150
3 |
4 | in vec3 position;
5 | in vec3 normal;
6 | in float tex_coord;
7 |
8 | out vec3 v_normal;
9 | out vec3 v_position;
10 | out float v_tex_coord;
11 |
12 | uniform mat4 perspective;
13 | uniform mat4 view;
14 | uniform mat4 model_mat;
15 | uniform mat4 world;
16 |
17 | void main()
18 | {
19 | v_tex_coord = tex_coord;
20 | mat4 modelview = view * world * model_mat;
21 | v_normal = transpose(inverse(mat3(modelview))) * normal;
22 | gl_Position = perspective * modelview * vec4(position, 1.0);
23 | v_position = gl_Position.xyz / gl_Position.w;
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/utils/genhex.py:
--------------------------------------------------------------------------------
1 |
2 | # Make an unstructured grid of hex cells in legacy VTK format. This can be
3 | # opened in ParaView to save as XML format (.vtu).
4 |
5 | npx = 4
6 | npy = 5
7 | npz = 6
8 |
9 | ncx = npx - 1
10 | ncy = npy - 1
11 | ncz = npz - 1
12 |
13 | nxy = npx * npy
14 | np = npx * npy * npz
15 | nc = ncx * ncy * ncz
16 |
17 | # num points per cell
18 | nppc = 8
19 |
20 | csize = (nppc + 1) * nc
21 |
22 | f = open("./scratch/hex.vtk", "w")
23 |
24 | print("# vtk DataFile Version 2.0", file = f)
25 | print("Really cool data", file = f)
26 | print("ASCII", file = f)
27 | print("DATASET UNSTRUCTURED_GRID", file = f)
28 |
29 | print(f"POINTS {np} float", file = f)
30 | for k in range(0, npz):
31 | for j in range(0, npy):
32 | for i in range(0, npx):
33 | print(f"{i} {j} {k}", file = f)
34 |
35 | print(f"CELLS {nc} {csize}", file = f)
36 | for k in range(0, ncz):
37 | for j in range(0, ncy):
38 | for i in range(0, ncx):
39 |
40 | # Ref: http://www.princeton.edu/~efeibush/viscourse/vtk.pdf
41 | i0 = (k+0) * nxy + (j+0) * npx + (i+0)
42 | i1 = (k+0) * nxy + (j+0) * npx + (i+1)
43 | i2 = (k+0) * nxy + (j+1) * npx + (i+1)
44 | i3 = (k+0) * nxy + (j+1) * npx + (i+0)
45 | i4 = (k+1) * nxy + (j+0) * npx + (i+0)
46 | i5 = (k+1) * nxy + (j+0) * npx + (i+1)
47 | i6 = (k+1) * nxy + (j+1) * npx + (i+1)
48 | i7 = (k+1) * nxy + (j+1) * npx + (i+0)
49 |
50 | print(f"{nppc} {i0} {i1} {i2} {i3} {i4} {i5} {i6} {i7}", file = f)
51 |
52 | print(f"CELL_TYPES {nc}", file = f)
53 | for i in range(0, nc):
54 | print("12", file = f)
55 |
56 |
--------------------------------------------------------------------------------
/utils/genhsv.py:
--------------------------------------------------------------------------------
1 |
2 | # Utility script for generating an HSV colormap
3 | #
4 | # Run:
5 | #
6 | # python3 genhsv.py
7 | #
8 | import sys
9 |
10 | cmax = 255
11 |
12 | for i in range(0, cmax + 1):
13 | r = 0
14 | g = i
15 | b = cmax
16 | print(f"{r}u8, {g}u8, {b}u8, {cmax}u8,")
17 |
18 | for i in range(0, cmax + 1):
19 | r = 0
20 | g = cmax
21 | b = cmax - i
22 | print(f"{r}u8, {g}u8, {b}u8, {cmax}u8,")
23 |
24 | for i in range(0, cmax + 1):
25 | r = i
26 | g = cmax
27 | b = 0
28 | print(f"{r}u8, {g}u8, {b}u8, {cmax}u8,")
29 |
30 | for i in range(0, cmax + 1):
31 | r = cmax
32 | g = cmax - i
33 | b = 0
34 | print(f"{r}u8, {g}u8, {b}u8, {cmax}u8,")
35 |
36 |
--------------------------------------------------------------------------------