src/misc.cpp

Fri, 06 Dec 2013 20:53:36 +0200

author
Santeri Piippo <crimsondusk64@gmail.com>
date
Fri, 06 Dec 2013 20:53:36 +0200
changeset 542
46a33bdc0b36
parent 541
0e38beeb050a
child 544
a52cfa218780
permissions
-rw-r--r--

- Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well

183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 /*
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 * LDForge: LDraw parts authoring CAD
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
3 * Copyright (C) 2013 Santeri Piippo
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
4 *
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 * This program is free software: you can redistribute it and/or modify
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 * it under the terms of the GNU General Public License as published by
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 * the Free Software Foundation, either version 3 of the License, or
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8 * (at your option) any later version.
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
9 *
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 * This program is distributed in the hope that it will be useful,
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
13 * GNU General Public License for more details.
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
14 *
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
17 */
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
18
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
19 #include <math.h>
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
20 #include <locale.h>
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
21 #include <QColor>
541
0e38beeb050a - Renamed common.h to main.h, split the PROPERTY macro and supporting macros to property.h
Santeri Piippo <crimsondusk64@gmail.com>
parents: 540
diff changeset
22 #include "main.h"
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
23 #include "misc.h"
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
24 #include "gui.h"
211
8d35e631bef3 Added dialog for rotation points
Santeri Piippo <crimsondusk64@gmail.com>
parents: 189
diff changeset
25 #include "dialogs.h"
332
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
26 #include "ui_rotpoint.h"
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
27
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
28 RingFinder g_RingFinder;
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
29
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
30 // Prime number table.
498
791c831c8020 further cleansing - removed most uses of unsigned ints, removed list reversers
Santeri Piippo <crimsondusk64@gmail.com>
parents: 493
diff changeset
31 const int g_primes[NUM_PRIMES] =
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
32 { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
33 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
34 73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
35 127, 131, 137, 139, 149, 151, 157, 163, 167, 173,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
36 179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
37 233, 239, 241, 251, 257, 263, 269, 271, 277, 281,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
38 283, 293, 307, 311, 313, 317, 331, 337, 347, 349,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
39 353, 359, 367, 373, 379, 383, 389, 397, 401, 409,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
40 419, 421, 431, 433, 439, 443, 449, 457, 461, 463,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
41 467, 479, 487, 491, 499, 503, 509, 521, 523, 541,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
42 547, 557, 563, 569, 571, 577, 587, 593, 599, 601,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
43 607, 613, 617, 619, 631, 641, 643, 647, 653, 659,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
44 661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
45 739, 743, 751, 757, 761, 769, 773, 787, 797, 809,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
46 811, 821, 823, 827, 829, 839, 853, 857, 859, 863,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
47 877, 881, 883, 887, 907, 911, 919, 929, 937, 941,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
48 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
49 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
50 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
51 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
52 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
53 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
54 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
55 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
56 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
57 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
58 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
59 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
60 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
61 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
62 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
63 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
64 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
65 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
66 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
67 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
68 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
69 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
70 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
71 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
72 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
73 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
74 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
75 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
76 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
77 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
78 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
79 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
80 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511,
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
81 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571,
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82 };
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
83
542
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
84 static const int32 g_e10[] =
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
85 { 1,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
86 10,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
87 100,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
88 1000,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
89 10000,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
90 100000,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
91 1000000,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
92 10000000,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
93 100000000,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
94 1000000000,
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
95 };
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
96
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
97 // =============================================================================
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
98 // -----------------------------------------------------------------------------
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99 // Grid stuff
461
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
100 cfg (Int, grid, Grid::Medium);
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101
461
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
102 cfg (Float, grid_coarse_x, 5.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
103 cfg (Float, grid_coarse_y, 5.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
104 cfg (Float, grid_coarse_z, 5.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
105 cfg (Float, grid_coarse_angle, 45.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
106 cfg (Float, grid_medium_x, 1.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
107 cfg (Float, grid_medium_y, 1.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
108 cfg (Float, grid_medium_z, 1.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
109 cfg (Float, grid_medium_angle, 22.5f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
110 cfg (Float, grid_fine_x, 0.1f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
111 cfg (Float, grid_fine_y, 0.1f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
112 cfg (Float, grid_fine_z, 0.1f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
113 cfg (Float, grid_fine_angle, 7.5f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
114 cfg (Int, edit_rotpoint, 0);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
115 cfg (Float, edit_rotpoint_x, 0.0f); // TODO: make a VertexConfig and use it here
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
116 cfg (Float, edit_rotpoint_y, 0.0f);
fbcc91ae1dd2 - added "Go to line" action, renamed the config classes to proper camelcase
Santeri Piippo <crimsondusk64@gmail.com>
parents: 455
diff changeset
117 cfg (Float, edit_rotpoint_z, 0.0f);
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
119 const gridinfo g_GridInfo[3] =
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
120 { { "Coarse", { &grid_coarse_x, &grid_coarse_y, &grid_coarse_z, &grid_coarse_angle }},
382
c1642530ea35 Converted ForgeWindow to Designer UI(!)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 381
diff changeset
121 { "Medium", { &grid_medium_x, &grid_medium_y, &grid_medium_z, &grid_medium_angle }},
c1642530ea35 Converted ForgeWindow to Designer UI(!)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 381
diff changeset
122 { "Fine", { &grid_fine_x, &grid_fine_y, &grid_fine_z, &grid_fine_angle }}
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
123 };
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
124
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
125 // =============================================================================
185
6fea53f1ffc2 Speed up picking - no need to rebuild the object list as its contents do not change while picking. Fixed transparent stuff always being opaque (although it still appears messed up for some reason)
Santeri Piippo <crimsondusk64@gmail.com>
parents: 183
diff changeset
126 // Snap the given coordinate value on the current grid's given axis.
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
127 // -----------------------------------------------------------------------------
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
128 double Grid::snap (double in, const Grid::Config axis)
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
129 { const double gridval = currentGrid().confs[axis]->value;
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
130 const long mult = abs (in / gridval);
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
131 const bool neg = (in < 0);
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
132 double out = mult * gridval;
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
133
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
134 if (abs<double> (in) - (mult * gridval) > gridval / 2)
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
135 out += gridval;
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
136
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
137 if (neg && out != 0)
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
138 out *= -1;
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
139
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
140 return out;
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
141 }
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
142
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
143 // =============================================================================
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
144 // -----------------------------------------------------------------------------
508
7ace3537a560 removed some custom functions in favor of Qt implementations
Santeri Piippo <crimsondusk64@gmail.com>
parents: 507
diff changeset
145 bool numeric (const str& tok)
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
146 { bool gotDot = false;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
147
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
148 for (int i = 0; i < tok.length(); ++i)
538
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
149 { const QChar c = tok[i];
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
150
256
9f7e6e288953 rewrote isNumber using range-for
Santeri Piippo <crimsondusk64@gmail.com>
parents: 223
diff changeset
151 // Allow leading hyphen for negatives
286
7a562bf3d829 Converted to 16-bit strings.. again
Santeri Piippo <crimsondusk64@gmail.com>
parents: 268
diff changeset
152 if (i == 0 && c == '-')
256
9f7e6e288953 rewrote isNumber using range-for
Santeri Piippo <crimsondusk64@gmail.com>
parents: 223
diff changeset
153 continue;
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
154
256
9f7e6e288953 rewrote isNumber using range-for
Santeri Piippo <crimsondusk64@gmail.com>
parents: 223
diff changeset
155 // Check for decimal point
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
156 if (!gotDot && c == '.')
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
157 { gotDot = true;
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
158 continue;
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
159 }
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
160
256
9f7e6e288953 rewrote isNumber using range-for
Santeri Piippo <crimsondusk64@gmail.com>
parents: 223
diff changeset
161 if (c >= '0' && c <= '9')
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
162 continue; // Digit
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
163
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
164 // If the above cases didn't catch this character, it was
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
165 // illegal and this is therefore not a number.
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
166 return false;
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
167 }
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
168
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
169 return true;
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
170 }
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
171
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
172 // =============================================================================
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
173 // -----------------------------------------------------------------------------
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
174 void simplify (int& numer, int& denom)
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
175 { bool repeat;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
176
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
177 do
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
178 { repeat = false;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
179
498
791c831c8020 further cleansing - removed most uses of unsigned ints, removed list reversers
Santeri Piippo <crimsondusk64@gmail.com>
parents: 493
diff changeset
180 for (int x = 0; x < NUM_PRIMES; x++)
791c831c8020 further cleansing - removed most uses of unsigned ints, removed list reversers
Santeri Piippo <crimsondusk64@gmail.com>
parents: 493
diff changeset
181 { const int prime = g_primes[NUM_PRIMES - x - 1];
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
182
268
778eed342ee4 Make LDMatrixObject's transform and pos members properties
Santeri Piippo <crimsondusk64@gmail.com>
parents: 257
diff changeset
183 if (numer <= prime || denom <= prime)
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
184 continue;
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
185
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
186 if ( (numer % prime == 0) && (denom % prime == 0))
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
187 { numer /= prime;
268
778eed342ee4 Make LDMatrixObject's transform and pos members properties
Santeri Piippo <crimsondusk64@gmail.com>
parents: 257
diff changeset
188 denom /= prime;
778eed342ee4 Make LDMatrixObject's transform and pos members properties
Santeri Piippo <crimsondusk64@gmail.com>
parents: 257
diff changeset
189 repeat = true;
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
190 break;
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
191 }
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
192 }
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
193 }
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
194 while (repeat);
183
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
195 }
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
196
f1b8cb53d2a2 Moved source files to src/, removed zz_ prefix off dialog files.
Santeri Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
197 // =============================================================================
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
198 // -----------------------------------------------------------------------------
504
6a1fa662bfc1 Removed the List -> QList alias, use QList directly
Santeri Piippo <crimsondusk64@gmail.com>
parents: 502
diff changeset
199 vertex rotPoint (const QList<LDObject*>& objs)
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
200 { LDBoundingBox box;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
201
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
202 switch (edit_rotpoint)
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
203 { case ObjectOrigin:
540
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
204 { // Calculate center vertex
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
205 for (LDObject* obj : objs)
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
206 if (obj->hasMatrix())
540
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
207 box << dynamic_cast<LDMatrixObject*> (obj)->getPosition();
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
208 else
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
209 box << obj;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
210
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
211 return box.center();
540
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
212 }
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
213
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
214 case WorldOrigin:
540
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
215 { return g_origin;
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
216 }
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
217
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
218 case CustomPoint:
540
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
219 { return vertex (edit_rotpoint_x, edit_rotpoint_y, edit_rotpoint_z);
0334789cb4d7 - Changed the callback parm of PROPERTY to a stock/custom write method argument.
Santeri Piippo <crimsondusk64@gmail.com>
parents: 538
diff changeset
220 }
211
8d35e631bef3 Added dialog for rotation points
Santeri Piippo <crimsondusk64@gmail.com>
parents: 189
diff changeset
221 }
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
222
332
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
223 return vertex();
211
8d35e631bef3 Added dialog for rotation points
Santeri Piippo <crimsondusk64@gmail.com>
parents: 189
diff changeset
224 }
8d35e631bef3 Added dialog for rotation points
Santeri Piippo <crimsondusk64@gmail.com>
parents: 189
diff changeset
225
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
226 // =============================================================================
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
227 // -----------------------------------------------------------------------------
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
228 void configRotationPoint()
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
229 { QDialog* dlg = new QDialog;
332
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
230 Ui::RotPointUI ui;
421
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
231 ui.setupUi (dlg);
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
232
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
233 switch (edit_rotpoint)
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
234 { case ObjectOrigin:
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
235 ui.objectPoint->setChecked (true);
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
236 break;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
237
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
238 case WorldOrigin:
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
239 ui.worldPoint->setChecked (true);
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
240 break;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
241
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
242 case CustomPoint:
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
243 ui.customPoint->setChecked (true);
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
244 break;
332
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
245 }
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
246
421
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
247 ui.customX->setValue (edit_rotpoint_x);
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
248 ui.customY->setValue (edit_rotpoint_y);
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
249 ui.customZ->setValue (edit_rotpoint_z);
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
250
421
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
251 if (!dlg->exec())
211
8d35e631bef3 Added dialog for rotation points
Santeri Piippo <crimsondusk64@gmail.com>
parents: 189
diff changeset
252 return;
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
253
332
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
254 edit_rotpoint =
421
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
255 (ui.objectPoint->isChecked()) ? ObjectOrigin :
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
256 (ui.worldPoint->isChecked()) ? WorldOrigin :
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
257 CustomPoint;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
258
332
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
259 edit_rotpoint_x = ui.customX->value();
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
260 edit_rotpoint_y = ui.customY->value();
3013acb1df53 Converted rotation point prompt
Santeri Piippo <crimsondusk64@gmail.com>
parents: 308
diff changeset
261 edit_rotpoint_z = ui.customZ->value();
211
8d35e631bef3 Added dialog for rotation points
Santeri Piippo <crimsondusk64@gmail.com>
parents: 189
diff changeset
262 }
8d35e631bef3 Added dialog for rotation points
Santeri Piippo <crimsondusk64@gmail.com>
parents: 189
diff changeset
263
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
264 // =============================================================================
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
265 // -----------------------------------------------------------------------------
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
266 str join (initlist<StringFormatArg> vals, str delim)
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
267 { QStringList list;
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
268
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
269 for (const StringFormatArg& arg : vals)
421
7d26db0be944 style cleanup - it should be all unified now
Santeri Piippo <crimsondusk64@gmail.com>
parents: 406
diff changeset
270 list << arg.value();
493
16766ac1bbd9 last code reformatting i swear
Santeri Piippo <crimsondusk64@gmail.com>
parents: 461
diff changeset
271
286
7a562bf3d829 Converted to 16-bit strings.. again
Santeri Piippo <crimsondusk64@gmail.com>
parents: 268
diff changeset
272 return list.join (delim);
7a562bf3d829 Converted to 16-bit strings.. again
Santeri Piippo <crimsondusk64@gmail.com>
parents: 268
diff changeset
273 }
7a562bf3d829 Converted to 16-bit strings.. again
Santeri Piippo <crimsondusk64@gmail.com>
parents: 268
diff changeset
274
455
c5d14d112034 Code formatting: use same separators everywhere, remove extra spaces from license headers, simplified message manager api a bit
Santeri Piippo <crimsondusk64@gmail.com>
parents: 421
diff changeset
275 // =============================================================================
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
276 // This is the main algorithm of the ring finder. It tries to use math to find
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
277 // the one ring between r0 and r1. If it fails (the ring number is non-integral),
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
278 // it finds an intermediate radius (ceil of the ring number times scale) and
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
279 // splits the radius at this point, calling this function again to try find the
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
280 // rings between r0 - r and r - r1.
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
281 //
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
282 // This does not always yield into usable results. If at some point r == r0 or
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
283 // r == r1, there is no hope of finding the rings, at least with this algorithm,
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
284 // as it would fall into an infinite recursion.
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
285 // -----------------------------------------------------------------------------
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
286 bool RingFinder::findRingsRecursor (double r0, double r1, Solution& currentSolution)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
287 { char tabs[64];
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
288 memset (tabs, '\t', m_stack);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
289 tabs[m_stack] = '\0';
501
8f314f3f5054 ring finder integrated! it lives!
Santeri Piippo <crimsondusk64@gmail.com>
parents: 500
diff changeset
290
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
291 // Don't recurse too deep.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
292 if (m_stack >= 5)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
293 return false;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
294
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
295 // Find the scale and number of a ring between r1 and r0.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
296 assert (r1 >= r0);
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
297 double scale = r1 - r0;
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
298 double num = r0 / scale;
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
299
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
300 // If the ring number is integral, we have found a fitting ring to r0 -> r1!
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
301 if (isInteger (num))
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
302 { Component cmp;
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
303 cmp.scale = scale;
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
304 cmp.num = (int) round (num);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
305 currentSolution.addComponent (cmp);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
306
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
307 // If we're still at the first recursion, this is the only
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
308 // ring and there's nothing left to do. Guess we found the winner.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
309 if (m_stack == 0)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
310 { m_solutions.push_back (currentSolution);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
311 return true;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
312 }
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
313 }
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
314 else
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
315 { // Try find solutions by splitting the ring in various positions.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
316 if (isZero (r1 - r0))
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
317 return false;
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
318
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
319 double interval;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
320
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
321 // Determine interval. The smaller delta between radii, the more precise
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
322 // interval should be used. We can't really use a 0.5 increment when
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
323 // calculating rings to 10 -> 105... that would take ages to process!
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
324 if (r1 - r0 < 0.5)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
325 interval = 0.1;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
326 else if (r1 - r0 < 10)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
327 interval = 0.5;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
328 else if (r1 - r0 < 50)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
329 interval = 1;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
330 else
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
331 interval = 5;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
332
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
333 // Now go through possible splits and try find rings for both segments.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
334 for (double r = r0 + interval; r < r1; r += interval)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
335 { Solution sol = currentSolution;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
336
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
337 m_stack++;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
338 bool res = findRingsRecursor (r0, r, sol) && findRingsRecursor (r, r1, sol);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
339 m_stack--;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
340
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
341 if (res)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
342 { // We succeeded in finding radii for this segment. If the stack is 0, this
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
343 // is the first recursion to this function. Thus there are no more ring segments
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
344 // to process and we can add the solution.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
345 //
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
346 // If not, when this function ends, it will be called again with more arguments.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
347 // Accept the solution to this segment by setting currentSolution to sol, and
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
348 // return true to continue processing.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
349 if (m_stack == 0)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
350 m_solutions.push_back (sol);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
351 else
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
352 { currentSolution = sol;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
353 return true;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
354 }
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
355 }
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
356 }
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
357
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
358 return false;
500
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
359 }
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
360
cad8cdc42a64 Finally got the ringfinder working! Working on integrating it to ring drawing...
Santeri Piippo <crimsondusk64@gmail.com>
parents: 498
diff changeset
361 return true;
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
362 }
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
363
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
364 // =============================================================================
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
365 // Main function. Call this with r0 and r1. If this returns true, use bestSolution
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
366 // for the solution that was presented.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
367 // -----------------------------------------------------------------------------
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
368 bool RingFinder::findRings (double r0, double r1)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
369 { m_solutions.clear();
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
370 Solution sol;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
371
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
372 // Recurse in and try find solutions.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
373 findRingsRecursor (r0, r1, sol);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
374
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
375 // Compare the solutions and find the best one. The solution class has an operator>
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
376 // overload to compare two solutions.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
377 m_bestSolution = null;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
378
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
379 for (QVector<Solution>::iterator solp = m_solutions.begin(); solp != m_solutions.end(); ++solp)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
380 { const Solution& sol = *solp;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
381
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
382 if (m_bestSolution == null || sol > *m_bestSolution)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
383 m_bestSolution = &sol;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
384 }
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
385
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
386 return (m_bestSolution != null);
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
387 }
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
388
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
389 // =============================================================================
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
390 // -----------------------------------------------------------------------------
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
391 bool RingFinder::Solution::operator> (const RingFinder::Solution& other) const
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
392 { // If this solution has less components than the other one, this one
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
393 // is definitely better.
538
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
394 if (getComponents().size() < other.getComponents().size())
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
395 return true;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
396
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
397 // vice versa
538
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
398 if (other.getComponents().size() < getComponents().size())
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
399 return false;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
400
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
401 // Calculate the maximum ring number. Since the solutions have equal
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
402 // ring counts, the solutions with lesser maximum rings should result
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
403 // in cleaner code and less new primitives, right?
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
404 int maxA = 0,
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
405 maxB = 0;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
406
538
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
407 for (int i = 0; i < getComponents().size(); ++i)
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
408 { if (getComponents()[i].num > maxA)
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
409 maxA = getComponents()[i].num;
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
410
538
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
411 if (other.getComponents()[i].num > maxB)
2f85d4d286e5 - ensured header files' guards start with LDFORGE_
Santeri Piippo <crimsondusk64@gmail.com>
parents: 508
diff changeset
412 maxB = other.getComponents()[i].num;
507
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
413 }
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
414
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
415 if (maxA < maxB)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
416 return true;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
417
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
418 if (maxB < maxA)
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
419 return false;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
420
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
421 // Solutions have equal rings and equal maximum ring numbers. Let's
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
422 // just say this one is better, at this point it does not matter which
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
423 // one is chosen.
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
424 return true;
fc76d38c3530 reworked the ring finder algorithm greatly, tries harder to find the optimal solution
Santeri Piippo <crimsondusk64@gmail.com>
parents: 504
diff changeset
425 }
542
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
426
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
427 // =============================================================================
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
428 // -----------------------------------------------------------------------------
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
429 void roundToDecimals (double& a, int decimals)
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
430 { assert (decimals >= 0 && decimals < (signed) (sizeof g_e10 / sizeof *g_e10));
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
431 a = round (a * g_e10[decimals]) / g_e10[decimals];
46a33bdc0b36 - Improved coordinate rounding, replaced the hack with a proper implementation, now rounds properly and works on subfiles as well
Santeri Piippo <crimsondusk64@gmail.com>
parents: 541
diff changeset
432 }

mercurial