Compare commits
1430 Commits
jars_remov
...
0.7.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b3e2385ba5 | ||
|
|
03821e1f51 | ||
|
|
77dc06d650 | ||
|
|
0cd6c48b16 | ||
|
|
8a595fd37f | ||
|
|
967875d6b8 | ||
|
|
d60e2ef575 | ||
|
|
58ecf60d9d | ||
|
|
17356e5a2b | ||
|
|
296fdd3c13 | ||
|
|
735acc520a | ||
|
|
ac115b1f0f | ||
|
|
d2ba6647ea | ||
|
|
0180c40855 | ||
|
|
817bd13d7b | ||
|
|
d22dc79655 | ||
|
|
fc9ef062c0 | ||
|
|
f2dda7c8eb | ||
|
|
fdc793d9ec | ||
|
|
3d24aade21 | ||
|
|
6d93aaf57f | ||
|
|
8fc354c96a | ||
|
|
e30f3f7cc3 | ||
|
|
aff2c77267 | ||
|
|
33365b3f7d | ||
|
|
33fdc938fa | ||
|
|
8397d5a3be | ||
|
|
980e9d5e54 | ||
|
|
bc7c55b1f8 | ||
|
|
120182ec15 | ||
|
|
945b84f04f | ||
|
|
f67c457006 | ||
|
|
a2852b0761 | ||
|
|
ebf5d408bc | ||
|
|
75719eae29 | ||
|
|
5c825ea9eb | ||
|
|
15bc23cadf | ||
|
|
88f3283878 | ||
|
|
80848f9d2d | ||
|
|
f1f5726457 | ||
|
|
2ccf3e4c64 | ||
|
|
c8cbf8e0ce | ||
|
|
6544cc1081 | ||
|
|
4c72831336 | ||
|
|
06ac5142f7 | ||
|
|
feae45f78b | ||
|
|
61b8233b97 | ||
|
|
7acbea88cc | ||
|
|
19109516ae | ||
|
|
c1a5ad7e74 | ||
|
|
1a93e4ae13 | ||
|
|
1de6ca8fb7 | ||
|
|
02db7ca08d | ||
|
|
e9bb7aaae4 | ||
|
|
989e9c2ae8 | ||
|
|
e8f41cd339 | ||
|
|
eabd90d14c | ||
|
|
3e4aad4d51 | ||
|
|
b6dc72bbb6 | ||
|
|
4cd11462da | ||
|
|
6344542b10 | ||
|
|
e0031ae8aa | ||
|
|
229ea0b350 | ||
|
|
0a5d08a908 | ||
|
|
aed54c9a49 | ||
|
|
1a3bf4e4fe | ||
|
|
591ae03667 | ||
|
|
3a191fb513 | ||
|
|
2821d8ddb8 | ||
|
|
71d7b71035 | ||
|
|
85858911fa | ||
|
|
0a92c84668 | ||
|
|
c21d7b4390 | ||
|
|
38a9c71bc2 | ||
|
|
2573e458d5 | ||
|
|
25a9891133 | ||
|
|
8ee4e5fb8c | ||
|
|
a38b054228 | ||
|
|
d9bf94da99 | ||
|
|
77653096f9 | ||
|
|
5f534656ea | ||
|
|
ba93445259 | ||
|
|
71f7c45b21 | ||
|
|
ca5e34e1fb | ||
|
|
d937f3516c | ||
|
|
a8909fca08 | ||
|
|
b39feae045 | ||
|
|
9f4ef47b95 | ||
|
|
25e79bac55 | ||
|
|
311f4c7929 | ||
|
|
557e1858a7 | ||
|
|
16fa42d462 | ||
|
|
1133edb83d | ||
|
|
f6dbeba3d8 | ||
|
|
bf8f0745a6 | ||
|
|
829e45224f | ||
|
|
acde5d565d | ||
|
|
f0a652faf3 | ||
|
|
41867344e2 | ||
|
|
0c39ff8be0 | ||
|
|
6f78f08a04 | ||
|
|
3388e1401f | ||
|
|
308497ffa6 | ||
|
|
bfa5a095f0 | ||
|
|
96be36edb8 | ||
|
|
7c9c3732fb | ||
|
|
add62c9fe8 | ||
|
|
4aaa1ce620 | ||
|
|
aa63b49e5a | ||
|
|
1f1d91202c | ||
|
|
51eae28926 | ||
|
|
58b5f2741b | ||
|
|
d82faad435 | ||
|
|
fc8223bfc8 | ||
|
|
3584c4be1e | ||
|
|
001dbe8447 | ||
|
|
54feb7a25e | ||
|
|
ea2a94f76b | ||
|
|
b6bfbc612a | ||
|
|
1d545fd804 | ||
|
|
3acf77c102 | ||
|
|
6dfe2df2fb | ||
|
|
6cb40e1c15 | ||
|
|
afd03809e8 | ||
|
|
efa3cb0231 | ||
|
|
a709bd2623 | ||
|
|
439f2b20ff | ||
|
|
877d217f31 | ||
|
|
885264ad8c | ||
|
|
e224a7cf5b | ||
|
|
e10a223ea6 | ||
|
|
f85453e60c | ||
|
|
a6b3d7b0c2 | ||
|
|
dc15ba5f34 | ||
|
|
1d7afaf8de | ||
|
|
422d81d665 | ||
|
|
4b55043dcc | ||
|
|
7885529fff | ||
|
|
2c610f5e0b | ||
|
|
64a586dde8 | ||
|
|
c1f65144df | ||
|
|
ad2ee3f40e | ||
|
|
01365686fa | ||
|
|
dece13ddc9 | ||
|
|
05e9e0cdc8 | ||
|
|
a9283dd408 | ||
|
|
53ca77d18a | ||
|
|
97654f0670 | ||
|
|
cbd0ac01df | ||
|
|
ca841f5181 | ||
|
|
a322768f8a | ||
|
|
fc7bb2df9b | ||
|
|
062bb8d573 | ||
|
|
ccdea3b663 | ||
|
|
985bbc3f36 | ||
|
|
aa5fc79681 | ||
|
|
58095f31a4 | ||
|
|
e53523b82a | ||
|
|
e5c62c9bc4 | ||
|
|
3c1091d8e0 | ||
|
|
d4f3c32358 | ||
|
|
75b22fee2d | ||
|
|
8a27d14f9a | ||
|
|
ac7706eb7a | ||
|
|
4994d611fe | ||
|
|
1ac57cb719 | ||
|
|
bed6f8f0f2 | ||
|
|
e8a105d892 | ||
|
|
e57bacb957 | ||
|
|
311886e23b | ||
|
|
1e745a6e9b | ||
|
|
41c35ea114 | ||
|
|
2b24bf82f9 | ||
|
|
929beb87fc | ||
|
|
1a1d94e755 | ||
|
|
52bb54c006 | ||
|
|
96f0a60b44 | ||
|
|
98924b83af | ||
|
|
050114eff3 | ||
|
|
ea884f56b1 | ||
|
|
cb732c6823 | ||
|
|
bf420db0f9 | ||
|
|
2a2b30f9fc | ||
|
|
c991666d97 | ||
|
|
aa3aec0218 | ||
|
|
ec4f12b576 | ||
|
|
1b9e9206cb | ||
|
|
f9aa723e53 | ||
|
|
e20196a46a | ||
|
|
f944dab28f | ||
|
|
f19ab87abe | ||
|
|
d937a4d6bb | ||
|
|
5c370cf3ab | ||
|
|
9b460b0f3b | ||
|
|
bc0bbcb4b5 | ||
|
|
0c898bf682 | ||
|
|
50ccecc259 | ||
|
|
769dd696e3 | ||
|
|
7cdeacd1c2 | ||
|
|
3703cf7e00 | ||
|
|
2bded1e05f | ||
|
|
ac6877fcfc | ||
|
|
319a1b6663 | ||
|
|
7427624275 | ||
|
|
8f58966e9e | ||
|
|
10060e4001 | ||
|
|
bd8cdd5d6c | ||
|
|
50d37971b2 | ||
|
|
7d56260c12 | ||
|
|
801eda470d | ||
|
|
1328d050e0 | ||
|
|
a7356e5723 | ||
|
|
41921aa98d | ||
|
|
7c97ac5101 | ||
|
|
290aee9a8b | ||
|
|
12869c6718 | ||
|
|
ab98b676fc | ||
|
|
9c1574eb41 | ||
|
|
3d83c188e0 | ||
|
|
164950e399 | ||
|
|
3a8db9cc7c | ||
|
|
b03fe48760 | ||
|
|
33b68fd0d6 | ||
|
|
b18dae5bef | ||
|
|
083fe22f08 | ||
|
|
ebd07950a4 | ||
|
|
46f4d592d3 | ||
|
|
dd2f240792 | ||
|
|
79d209a225 | ||
|
|
55544b97d9 | ||
|
|
81f105e2db | ||
|
|
19338fab3a | ||
|
|
c4d7b30f0d | ||
|
|
4fb8234e2d | ||
|
|
99f45bfa22 | ||
|
|
c77e131721 | ||
|
|
7355463090 | ||
|
|
3a1ee523bc | ||
|
|
52b362be8b | ||
|
|
1101e894cd | ||
|
|
6e6984f4ed | ||
|
|
8ce3e2e488 | ||
|
|
ba913eb484 | ||
|
|
0d64dfedd4 | ||
|
|
1fa9f133bd | ||
|
|
67357fe2f0 | ||
|
|
136c323a75 | ||
|
|
1db23decca | ||
|
|
85adc04a05 | ||
|
|
b434b38872 | ||
|
|
a922ae7e78 | ||
|
|
435cc602a7 | ||
|
|
dd7d37c745 | ||
|
|
f55fb501a0 | ||
|
|
b58dbc6a16 | ||
|
|
14108fcfe7 | ||
|
|
b32b5ceb0b | ||
|
|
de74719672 | ||
|
|
a4934a50cd | ||
|
|
c926a714db | ||
|
|
88611257f1 | ||
|
|
4a663f949e | ||
|
|
5eae87e892 | ||
|
|
a9bb6e3788 | ||
|
|
f736530049 | ||
|
|
cfa9326e2b | ||
|
|
8eff27c303 | ||
|
|
0f06f854c7 | ||
|
|
89198c1a30 | ||
|
|
8dce91b035 | ||
|
|
49a81cbe04 | ||
|
|
462be14edb | ||
|
|
94c30c1e10 | ||
|
|
fa637cd202 | ||
|
|
42fd941d64 | ||
|
|
6801102631 | ||
|
|
77cf4e7b8f | ||
|
|
6f0a008ffd | ||
|
|
70c5812b09 | ||
|
|
e39c099bdc | ||
|
|
f0a849f4c7 | ||
|
|
0f276c52f3 | ||
|
|
ea36c8c69f | ||
|
|
b96890b24b | ||
|
|
1700936872 | ||
|
|
4904eaf2d3 | ||
|
|
c88b2799b1 | ||
|
|
436b66be82 | ||
|
|
c67b35a277 | ||
|
|
4eebbcea2d | ||
|
|
faada6625f | ||
|
|
52da03ce59 | ||
|
|
ecb76f9af7 | ||
|
|
f1cc7c98b0 | ||
|
|
dde1025e73 | ||
|
|
8a2afd7b40 | ||
|
|
243aca9ae9 | ||
|
|
d01c3eecf3 | ||
|
|
942ed10344 | ||
|
|
938e8167dc | ||
|
|
8b599dbf53 | ||
|
|
11f02128e6 | ||
|
|
440ae04a7e | ||
|
|
3d6cad1a0c | ||
|
|
21ea5a7842 | ||
|
|
4c5de7453d | ||
|
|
418329441f | ||
|
|
166b0ab772 | ||
|
|
5fb07499a7 | ||
|
|
c8ff7a9e07 | ||
|
|
a8b341763e | ||
|
|
bb95008197 | ||
|
|
e08966c418 | ||
|
|
7347844c48 | ||
|
|
d9c65a92ba | ||
|
|
05184e7f5f | ||
|
|
68c72437b4 | ||
|
|
561ec4be85 | ||
|
|
a5679ce214 | ||
|
|
44b40608f6 | ||
|
|
fab7020d3d | ||
|
|
7f42be2d67 | ||
|
|
3fc1583649 | ||
|
|
726d825e07 | ||
|
|
1d46b2f63a | ||
|
|
1cfae3a47f | ||
|
|
fed2cd05e4 | ||
|
|
9b4cf470f9 | ||
|
|
73bc26dd2d | ||
|
|
57a152d0aa | ||
|
|
081e6b8f2b | ||
|
|
ba00a5384d | ||
|
|
43ca550832 | ||
|
|
e793e8851b | ||
|
|
7919d0ab9c | ||
|
|
915046fb9a | ||
|
|
37ace257cf | ||
|
|
e74052c164 | ||
|
|
c02cf5792f | ||
|
|
51f3e2368b | ||
|
|
7a88524343 | ||
|
|
dfe4a10bf0 | ||
|
|
1882806b05 | ||
|
|
5d56d81d83 | ||
|
|
0061b3ae7e | ||
|
|
11caa2a2d3 | ||
|
|
48d6b3e5ba | ||
|
|
178c88c20c | ||
|
|
d6a65ff731 | ||
|
|
53cafa2f3b | ||
|
|
122618c00a | ||
|
|
c389abc7a2 | ||
|
|
b3217ae2c0 | ||
|
|
234bd625e9 | ||
|
|
2a50f89b90 | ||
|
|
bb7aa34905 | ||
|
|
59f74664a2 | ||
|
|
7a1d56d888 | ||
|
|
6b69c9cf94 | ||
|
|
9dfb2678c4 | ||
|
|
7e24b9cf4a | ||
|
|
507f9eca1e | ||
|
|
eca77a0afc | ||
|
|
11d7002841 | ||
|
|
2b171739aa | ||
|
|
0953862f72 | ||
|
|
d719542018 | ||
|
|
d4c6a0730d | ||
|
|
314c2df66b | ||
|
|
9cc2aad1ec | ||
|
|
d7ec1e0ac3 | ||
|
|
af9481d084 | ||
|
|
9b7d893fd5 | ||
|
|
d97511e1e1 | ||
|
|
9bd1cd1159 | ||
|
|
d5954d350f | ||
|
|
bbdc431b9a | ||
|
|
7b00161184 | ||
|
|
bb8dd4db7c | ||
|
|
1bfd76c3da | ||
|
|
d2f61f9bfa | ||
|
|
dc46238af6 | ||
|
|
adb217734f | ||
|
|
e403c45fa3 | ||
|
|
4383726e55 | ||
|
|
6e6e423c74 | ||
|
|
29dfb241fb | ||
|
|
ae1d4fd5d9 | ||
|
|
726f91556c | ||
|
|
278661e569 | ||
|
|
fc4c9cf9bf | ||
|
|
958dfb8166 | ||
|
|
f3d4a8ef7d | ||
|
|
b726f5b6a8 | ||
|
|
8f8d0534b2 | ||
|
|
58354155f6 | ||
|
|
891efed6e6 | ||
|
|
34c0cee0ca | ||
|
|
7e891c452a | ||
|
|
16ae323731 | ||
|
|
eb58dc9e67 | ||
|
|
bf370bceb7 | ||
|
|
d1fd03a52f | ||
|
|
f7f20f486e | ||
|
|
8a34908f36 | ||
|
|
cf4ff8046d | ||
|
|
3ea5af2477 | ||
|
|
e85ec48468 | ||
|
|
7a952cdaf9 | ||
|
|
c8f74e649e | ||
|
|
c238916d89 | ||
|
|
a06973241c | ||
|
|
b8d382a9f3 | ||
|
|
35d8d2d57e | ||
|
|
92c10edb11 | ||
|
|
ec4fa0ed5f | ||
|
|
7af0be9af7 | ||
|
|
0a465abbfe | ||
|
|
e0f02323bb | ||
|
|
9022ec14ec | ||
|
|
adc04ace7f | ||
|
|
e3fdaff470 | ||
|
|
7f5577ff24 | ||
|
|
b174f65122 | ||
|
|
3402308ced | ||
|
|
1ea26e576e | ||
|
|
231d596b69 | ||
|
|
c0ece9dd7d | ||
|
|
c29c85db41 | ||
|
|
0814a06d42 | ||
|
|
9642c8c5aa | ||
|
|
ff630fdcfa | ||
|
|
d492358a94 | ||
|
|
6f85e24ed9 | ||
|
|
da93f0ab72 | ||
|
|
b1cfdfd454 | ||
|
|
0c5a7e7aa6 | ||
|
|
e1c1a20074 | ||
|
|
dfc1aeb98f | ||
|
|
8626aa2f53 | ||
|
|
381907526e | ||
|
|
d8fb724d61 | ||
|
|
de7c203926 | ||
|
|
c3cf288548 | ||
|
|
1bb112e685 | ||
|
|
00ceb9f359 | ||
|
|
35c22e68dc | ||
|
|
ecc26caec0 | ||
|
|
d32b13fed4 | ||
|
|
711ca7f6d9 | ||
|
|
aaec15a66a | ||
|
|
77f383913d | ||
|
|
e6d42a5a61 | ||
|
|
ef391a3994 | ||
|
|
6c98e600bc | ||
|
|
1d5fa4b9db | ||
|
|
a492aaa733 | ||
|
|
424126216c | ||
|
|
c3ac8a412c | ||
|
|
3178787954 | ||
|
|
4fdae2a94c | ||
|
|
68fe1f8b8a | ||
|
|
ef34ba9766 | ||
|
|
bf2909585b | ||
|
|
a85b435fb6 | ||
|
|
4c78f8652b | ||
|
|
f4ffac44d2 | ||
|
|
0bc45dfd74 | ||
|
|
df909daccb | ||
|
|
fa62602826 | ||
|
|
a8641ce535 | ||
|
|
bbe6067569 | ||
|
|
f7b539f5c7 | ||
|
|
78d438dfe6 | ||
|
|
a098e669c3 | ||
|
|
3f3dca30d7 | ||
|
|
7b9301d479 | ||
|
|
01a41d5f87 | ||
|
|
0b1fba58bb | ||
|
|
29f19b36ce | ||
|
|
1ded32d303 | ||
|
|
ffe14e11d5 | ||
|
|
846d90f9fe | ||
|
|
b2008aa086 | ||
|
|
b0ee833301 | ||
|
|
9d86c6306d | ||
|
|
03f6f96988 | ||
|
|
113ea64297 | ||
|
|
7f2f798a94 | ||
|
|
de04030257 | ||
|
|
7053cf8405 | ||
|
|
ded178be6c | ||
|
|
d1daa92126 | ||
|
|
5a4e422740 | ||
|
|
9b5d31bcf3 | ||
|
|
de24860ad4 | ||
|
|
1a4ec3f7ad | ||
|
|
8f6f1bf238 | ||
|
|
82525ec769 | ||
|
|
26cb2e6603 | ||
|
|
33c645e888 | ||
|
|
71715dccd9 | ||
|
|
5f9a9cc909 | ||
|
|
41085f915e | ||
|
|
5109eda6da | ||
|
|
e20a342f81 | ||
|
|
85377b42c4 | ||
|
|
cb3296ebdd | ||
|
|
a8400dd48a | ||
|
|
3fa121d31a | ||
|
|
8303a611ea | ||
|
|
2aa75ddbf5 | ||
|
|
b5214ef35a | ||
|
|
e32f45b585 | ||
|
|
84c094000b | ||
|
|
3577e648d1 | ||
|
|
c632b865b0 | ||
|
|
33c48b3d53 | ||
|
|
2317975c63 | ||
|
|
b031f98fff | ||
|
|
b057c56466 | ||
|
|
a60f326e16 | ||
|
|
66653df3dc | ||
|
|
3a30476f7e | ||
|
|
3f8b028d60 | ||
|
|
f6d85ce8bd | ||
|
|
b4a567884f | ||
|
|
8741357c9a | ||
|
|
20afbfe230 | ||
|
|
7db70f239f | ||
|
|
59ab24da90 | ||
|
|
c34bc3306c | ||
|
|
31a45b0468 | ||
|
|
990e04477c | ||
|
|
7be8155939 | ||
|
|
d6cf845fef | ||
|
|
01830707dc | ||
|
|
a835d44187 | ||
|
|
123b0aa098 | ||
|
|
e645696adb | ||
|
|
e830252c85 | ||
|
|
7bf2544a83 | ||
|
|
b69923e05d | ||
|
|
3cd2f9ea47 | ||
|
|
f390a903dc | ||
|
|
033a0d9c9d | ||
|
|
8c13a82df7 | ||
|
|
59dd9425c8 | ||
|
|
9f8a383ce6 | ||
|
|
530e2b7cb4 | ||
|
|
c311004bd8 | ||
|
|
0c245f4f6d | ||
|
|
7779e30635 | ||
|
|
707769f124 | ||
|
|
5a0f10559d | ||
|
|
af3ee3a742 | ||
|
|
52813ea29f | ||
|
|
c48c620963 | ||
|
|
64068730db | ||
|
|
95c9f47e63 | ||
|
|
84968d201d | ||
|
|
6d690ff5af | ||
|
|
a97b3283a0 | ||
|
|
67336e0c93 | ||
|
|
691a18873d | ||
|
|
47b2a55b11 | ||
|
|
243af371be | ||
|
|
3c281e8824 | ||
|
|
a849b30efe | ||
|
|
d42302a150 | ||
|
|
3aac9272ee | ||
|
|
a8ed9b80ef | ||
|
|
2e5ff2e4a4 | ||
|
|
f7a98017b1 | ||
|
|
bb5cf608a6 | ||
|
|
c2a5ad4104 | ||
|
|
2a6f6c28a0 | ||
|
|
4f5125cf22 | ||
|
|
a81e3adae1 | ||
|
|
490f0c35b1 | ||
|
|
3d1cc6fe36 | ||
|
|
51b2773ef2 | ||
|
|
2995de938e | ||
|
|
978b5ead44 | ||
|
|
6c830575c9 | ||
|
|
27b9294a36 | ||
|
|
a2abbe5197 | ||
|
|
3f49361e4a | ||
|
|
ad0eff3fac | ||
|
|
7c995534eb | ||
|
|
2c6a85ee6d | ||
|
|
9b719d857e | ||
|
|
e961eba9c0 | ||
|
|
b460b4ebaf | ||
|
|
4e94a8f269 | ||
|
|
6eeb21623b | ||
|
|
225613ec28 | ||
|
|
7cd5084777 | ||
|
|
5e1705e621 | ||
|
|
ee5e6b511e | ||
|
|
480d639def | ||
|
|
9d078142aa | ||
|
|
bf8cc329cf | ||
|
|
dc0529c59e | ||
|
|
a65b35f8de | ||
|
|
97857cf4e4 | ||
|
|
dc0089dc07 | ||
|
|
9c393d25dc | ||
|
|
7667b08b50 | ||
|
|
fb628f4e25 | ||
|
|
a9d3b0a302 | ||
|
|
5d939cdbfd | ||
|
|
b593179376 | ||
|
|
19701b7563 | ||
|
|
a26aa9de15 | ||
|
|
037c25153b | ||
|
|
b9ebf1e57b | ||
|
|
5af831abb5 | ||
|
|
6bc3818318 | ||
|
|
c0369236d2 | ||
|
|
4ddf9dcf39 | ||
|
|
7466b6206f | ||
|
|
774dd43a18 | ||
|
|
1a22a39991 | ||
|
|
5c388e7fcb | ||
|
|
d96e9c4070 | ||
|
|
10e186780c | ||
|
|
6d9b62af72 | ||
|
|
dfe6ca99ce | ||
|
|
f62ea65f25 | ||
|
|
89edbf90f2 | ||
|
|
9c1ae887ea | ||
|
|
607b6d6266 | ||
|
|
ee3ffa8cec | ||
|
|
f207a6eb4a | ||
|
|
1ca175c598 | ||
|
|
fbfe17743e | ||
|
|
62255e7583 | ||
|
|
35cda5c7d1 | ||
|
|
0d8454a079 | ||
|
|
4e454ef84c | ||
|
|
a8662d4dce | ||
|
|
e7a015a1d7 | ||
|
|
b75a3712d5 | ||
|
|
b509e3c8d1 | ||
|
|
37ffdadf1a | ||
|
|
9bd327cbe6 | ||
|
|
c9bd08dcdf | ||
|
|
64383a8406 | ||
|
|
c161ea9cca | ||
|
|
fcc29eaa41 | ||
|
|
b0f0455ccf | ||
|
|
24c8b4c16f | ||
|
|
5cac7894c3 | ||
|
|
f304462a7c | ||
|
|
4ab053df3b | ||
|
|
803fbcac47 | ||
|
|
0139452787 | ||
|
|
d6b95c936a | ||
|
|
d263089c06 | ||
|
|
04ea503184 | ||
|
|
db37897740 | ||
|
|
24f699993b | ||
|
|
d5827de12e | ||
|
|
469ca9093f | ||
|
|
804c91c701 | ||
|
|
559a5d0508 | ||
|
|
c00000edc8 | ||
|
|
f132edf459 | ||
|
|
15023432cc | ||
|
|
2833d0f5c2 | ||
|
|
d26bd52689 | ||
|
|
d42b8d6af2 | ||
|
|
ca69f329cc | ||
|
|
e84afa32f7 | ||
|
|
cb5de5135f | ||
|
|
0b82df4c21 | ||
|
|
85a4bbe125 | ||
|
|
6b7ccd68c9 | ||
|
|
15cf4810cf | ||
|
|
98e30a468f | ||
|
|
5ad68ff2c7 | ||
|
|
5c277f4d54 | ||
|
|
3f9847f617 | ||
|
|
9c4e04c4d6 | ||
|
|
d709d7f39a | ||
|
|
2bf5313c2b | ||
|
|
9bca50dfed | ||
|
|
f75702a575 | ||
|
|
f3035d827b | ||
|
|
af7d70cfd8 | ||
|
|
e13bc7822f | ||
|
|
e1feb4e5b7 | ||
|
|
3297998a42 | ||
|
|
6a71e53f93 | ||
|
|
2a2ff723ee | ||
|
|
f614244043 | ||
|
|
bf7db38ef8 | ||
|
|
05910f23fb | ||
|
|
267108d20b | ||
|
|
ef36c8a3d8 | ||
|
|
82f2070e99 | ||
|
|
a37b503628 | ||
|
|
55714ae01e | ||
|
|
b45e38ef4d | ||
|
|
e80981e0c5 | ||
|
|
01f248632f | ||
|
|
5131d2efd7 | ||
|
|
4eedb7ff30 | ||
|
|
1f1675f188 | ||
|
|
dc70104676 | ||
|
|
120797fe96 | ||
|
|
4f254bde75 | ||
|
|
f5645cf292 | ||
|
|
191e94c670 | ||
|
|
211ba90108 | ||
|
|
a3251a4aa6 | ||
|
|
9f8bc93d91 | ||
|
|
f5752b048e | ||
|
|
92d9bba0e1 | ||
|
|
e8aa7d55bd | ||
|
|
de27227ed7 | ||
|
|
5fd05d5d01 | ||
|
|
fb46f73eb0 | ||
|
|
b39f9ca003 | ||
|
|
aee1b22c89 | ||
|
|
2f5a71df6b | ||
|
|
f18642eff9 | ||
|
|
fe728318b1 | ||
|
|
21d32bacb7 | ||
|
|
44974d90a7 | ||
|
|
b286e8f6eb | ||
|
|
aac57ee0d5 | ||
|
|
6f7ce36ec4 | ||
|
|
04391815e4 | ||
|
|
5f14a87abd | ||
|
|
43a62e90bb | ||
|
|
60cad376e0 | ||
|
|
a6df240b8b | ||
|
|
a7897427a3 | ||
|
|
d90a0e9475 | ||
|
|
cc95c485ce | ||
|
|
3071cdd0ac | ||
|
|
acdfefa55f | ||
|
|
41c92f0a38 | ||
|
|
ce38b484f6 | ||
|
|
c57b388472 | ||
|
|
647a8fc2a3 | ||
|
|
e7aeb92b12 | ||
|
|
d6ec9a1c6d | ||
|
|
aa4a1de6f7 | ||
|
|
fd941858dd | ||
|
|
72b2349e11 | ||
|
|
150c7d911c | ||
|
|
a98bcdd999 | ||
|
|
b85713b437 | ||
|
|
78f3d82d2f | ||
|
|
e1943e2808 | ||
|
|
c11a0d698b | ||
|
|
af823f74c7 | ||
|
|
fed257a1f7 | ||
|
|
26704d3ce5 | ||
|
|
45db59650a | ||
|
|
4f77643321 | ||
|
|
c7508d330d | ||
|
|
e6eab7f773 | ||
|
|
4115bdf4c0 | ||
|
|
334943c094 | ||
|
|
c2b17899a2 | ||
|
|
966009e18e | ||
|
|
19b040c7e6 | ||
|
|
4fb3d13404 | ||
|
|
4e4d4270db | ||
|
|
1bbf77df0c | ||
|
|
07b2d57b52 | ||
|
|
f224486e70 | ||
|
|
211efc4d5a | ||
|
|
53a705ead5 | ||
|
|
7673ab16e5 | ||
|
|
37639f965c | ||
|
|
2a58f43256 | ||
|
|
a377e96128 | ||
|
|
e900b4243d | ||
|
|
3b65983706 | ||
|
|
3b212214ab | ||
|
|
d434c11e78 | ||
|
|
bda73374ca | ||
|
|
0a76dafd9c | ||
|
|
37ab92534a | ||
|
|
6b388c12d1 | ||
|
|
bcaaa0637a | ||
|
|
581cddaa0e | ||
|
|
967ad4cba4 | ||
|
|
e52bed199a | ||
|
|
feeebae5fb | ||
|
|
f51fb210b8 | ||
|
|
aeff737250 | ||
|
|
8064dda6ac | ||
|
|
eb41496c5a | ||
|
|
c2112d68aa | ||
|
|
e67f4e8c62 | ||
|
|
c02287fc9b | ||
|
|
a548e6c34b | ||
|
|
a18d20a916 | ||
|
|
f929c15e2d | ||
|
|
5ad631f1ea | ||
|
|
cb2aee6d60 | ||
|
|
fb3e50cc88 | ||
|
|
27750ac11e | ||
|
|
ea711aea77 | ||
|
|
ff56d5c67a | ||
|
|
afea93be73 | ||
|
|
c6f44e7bbf | ||
|
|
1b211df73e | ||
|
|
bed1edbc82 | ||
|
|
1a9d3ca4fc | ||
|
|
c107e197f5 | ||
|
|
0fb0aa59c2 | ||
|
|
357713b3a2 | ||
|
|
b44ef4144b | ||
|
|
eccbf58c80 | ||
|
|
18f6784e81 | ||
|
|
4205d42e7f | ||
|
|
83dbce18fe | ||
|
|
5b58898975 | ||
|
|
19bd1dab9f | ||
|
|
5f18415bf9 | ||
|
|
9a16899824 | ||
|
|
d50a67527e | ||
|
|
d507022c4a | ||
|
|
56a223e6c6 | ||
|
|
6113d284d8 | ||
|
|
913afab264 | ||
|
|
7587c1a041 | ||
|
|
537b53d877 | ||
|
|
1a521d2ad4 | ||
|
|
818ea0b0c7 | ||
|
|
a46940a6b1 | ||
|
|
b0217767b8 | ||
|
|
1b09774413 | ||
|
|
8f0c51675d | ||
|
|
2e56e3facc | ||
|
|
879e0ccb81 | ||
|
|
4688943290 | ||
|
|
641977b5ca | ||
|
|
1127660f2d | ||
|
|
61e2be18ab | ||
|
|
77d33bb02c | ||
|
|
bd96c018f7 | ||
|
|
31e1b0ec99 | ||
|
|
8f94fa7ac5 | ||
|
|
402e4c3cd6 | ||
|
|
c234507edb | ||
|
|
20d5c20e72 | ||
|
|
2d15324ead | ||
|
|
bb2a86b5ac | ||
|
|
56c4323959 | ||
|
|
a475aa6c22 | ||
|
|
7b9f2ac6bd | ||
|
|
1f5efb9a33 | ||
|
|
8926c84ca9 | ||
|
|
3eba47b0bb | ||
|
|
ff01b3f80d | ||
|
|
d00e9771e0 | ||
|
|
5ebc5b6244 | ||
|
|
e7ad7110c8 | ||
|
|
192bd9c96c | ||
|
|
6188baa4db | ||
|
|
968d97f440 | ||
|
|
2fd9addc59 | ||
|
|
6f9d2dafb6 | ||
|
|
0b68a9cf58 | ||
|
|
d502ab2561 | ||
|
|
fc9901e493 | ||
|
|
604c1449e4 | ||
|
|
0a23dc2c27 | ||
|
|
c7805c82c6 | ||
|
|
46b2eb2a3e | ||
|
|
4e473bf242 | ||
|
|
f80b4ee2b1 | ||
|
|
ff7c74bc70 | ||
|
|
14e5e28998 | ||
|
|
b879830045 | ||
|
|
494e553ac0 | ||
|
|
a4555631b1 | ||
|
|
a4cd4ad767 | ||
|
|
abade416df | ||
|
|
4e3fc1643d | ||
|
|
61ca022d5b | ||
|
|
ca1a7b90d7 | ||
|
|
5a55e33f76 | ||
|
|
c24b4addfa | ||
|
|
a8f46fdd8d | ||
|
|
6d3bc0caea | ||
|
|
26846d752f | ||
|
|
c17eb32a8b | ||
|
|
f313bb30f7 | ||
|
|
12ad13c0af | ||
|
|
e3234ecf8d | ||
|
|
397dd27649 | ||
|
|
5aefd7f5cb | ||
|
|
11870a500b | ||
|
|
2c133a87cb | ||
|
|
bb439236d6 | ||
|
|
a480ef4b8b | ||
|
|
3fd92982c4 | ||
|
|
9109da9784 | ||
|
|
05b977be70 | ||
|
|
b04b5f235c | ||
|
|
10a00753e7 | ||
|
|
906ad1be15 | ||
|
|
7605e55ac7 | ||
|
|
4eeaf59075 | ||
|
|
9a473e84dc | ||
|
|
1c4979bdaa | ||
|
|
3cda9684cb | ||
|
|
1cec1bb0dc | ||
|
|
5bb865a561 | ||
|
|
45dba44432 | ||
|
|
3118086ff3 | ||
|
|
cee96c9ed0 | ||
|
|
1f1cd2ef57 | ||
|
|
ae808dce2e | ||
|
|
ec7f75cf67 | ||
|
|
50e3794cb9 | ||
|
|
9fe4be522a | ||
|
|
7e2cd4459c | ||
|
|
d7914f4807 | ||
|
|
8068d6c25a | ||
|
|
5134b522ae | ||
|
|
fdda6988ba | ||
|
|
0ef16b6c5b | ||
|
|
60438b2925 | ||
|
|
9c138beb5d | ||
|
|
5c05b81dfa | ||
|
|
a98ddca171 | ||
|
|
96b512c831 | ||
|
|
d8e23fbafe | ||
|
|
2583ad2ce6 | ||
|
|
5449d1cdd5 | ||
|
|
6d332f6ba9 | ||
|
|
759e7b97b8 | ||
|
|
da6c0608a2 | ||
|
|
dac9b8adad | ||
|
|
c5479c18f6 | ||
|
|
60f9ccc9f6 | ||
|
|
df7fa68787 | ||
|
|
f193921432 | ||
|
|
ff83629054 | ||
|
|
ad62e26b59 | ||
|
|
3b232b403e | ||
|
|
6e422ade94 | ||
|
|
6d4f344326 | ||
|
|
2241f3f27f | ||
|
|
e3b279ed6d | ||
|
|
1653e54541 | ||
|
|
e947248ea4 | ||
|
|
8428f438db | ||
|
|
6a40c3c375 | ||
|
|
1b232cca84 | ||
|
|
99cfdd6e14 | ||
|
|
5c2eaf961f | ||
|
|
48fa5d5434 | ||
|
|
6507b1369a | ||
|
|
e15163bb08 | ||
|
|
940a753b41 | ||
|
|
733d9dac96 | ||
|
|
3896358ba8 | ||
|
|
deff7d2a86 | ||
|
|
b006cacc89 | ||
|
|
2fc078e80d | ||
|
|
848449e32a | ||
|
|
adb56c7613 | ||
|
|
5cffe3a3b3 | ||
|
|
46ad2be83b | ||
|
|
904360ff69 | ||
|
|
79b5a09ac8 | ||
|
|
91d1e7b1a6 | ||
|
|
46878c81b7 | ||
|
|
5d07d45f86 | ||
|
|
38c27c051d | ||
|
|
dc0d161c14 | ||
|
|
9285ae8536 | ||
|
|
0aaca44795 | ||
|
|
106b45f0c4 | ||
|
|
c6b27aadf0 | ||
|
|
c299529ccb | ||
|
|
77fa5b1fd0 | ||
|
|
478078dc23 | ||
|
|
eacc9a2d30 | ||
|
|
d3b25cd3d5 | ||
|
|
7468d0beeb | ||
|
|
ea49b47afd | ||
|
|
ef395ddb39 | ||
|
|
00ff342e86 | ||
|
|
eab9d26594 | ||
|
|
d56eb31aef | ||
|
|
ab0cadf81f | ||
|
|
e9d8cdd329 | ||
|
|
424f44ba12 | ||
|
|
8d350238cf | ||
|
|
27153c8093 | ||
|
|
3409f5ff3c | ||
|
|
67e168bf92 | ||
|
|
78d125a0f6 | ||
|
|
320295bfba | ||
|
|
2df9e8fccc | ||
|
|
025c482725 | ||
|
|
d3c03fb564 | ||
|
|
4dfbf1f088 | ||
|
|
3ef832efb8 | ||
|
|
83b914d1b2 | ||
|
|
87f4277b8b | ||
|
|
438c8d15e1 | ||
|
|
fd87d1480d | ||
|
|
99b7a5eb74 | ||
|
|
eb9194fe73 | ||
|
|
fccf3212e6 | ||
|
|
f49c9e2b3a | ||
|
|
14bc0aea74 | ||
|
|
35566a2334 | ||
|
|
c64eb9aa88 | ||
|
|
5ef8026ac4 | ||
|
|
7f64fff46d | ||
|
|
1d0fcedeb0 | ||
|
|
46f8f7d22a | ||
|
|
1bda4d29e1 | ||
|
|
316f4b7461 | ||
|
|
ed179e6207 | ||
|
|
b0ebe7e0cf | ||
|
|
a26dea0065 | ||
|
|
7e4f314646 | ||
|
|
d836ffaad1 | ||
|
|
7bbb74b985 | ||
|
|
cb82d4cc45 | ||
|
|
5b09735249 | ||
|
|
d1dbce8682 | ||
|
|
ccb00b17a5 | ||
|
|
5443cf5417 | ||
|
|
a53568f100 | ||
|
|
77c933b7d8 | ||
|
|
ae24860d1e | ||
|
|
e71f866b14 | ||
|
|
ebaffdb123 | ||
|
|
dd954e3416 | ||
|
|
db780d9939 | ||
|
|
655136f52d | ||
|
|
bdc18c9eb6 | ||
|
|
bf2e0e44a8 | ||
|
|
6dddf614dd | ||
|
|
8aa9cafa5e | ||
|
|
3ea697763f | ||
|
|
59e6240766 | ||
|
|
600bf2c105 | ||
|
|
bb4bee7623 | ||
|
|
7ade143297 | ||
|
|
cabd470709 | ||
|
|
cefb9f367f | ||
|
|
aa1b2f32b1 | ||
|
|
625c0ecc1c | ||
|
|
76c7a49648 | ||
|
|
8685b3331b | ||
|
|
8157af9fb0 | ||
|
|
9f7e8dbad7 | ||
|
|
842d20cf7b | ||
|
|
bbaa19ef7b | ||
|
|
83d36fe04b | ||
|
|
91d99c0efb | ||
|
|
e80eae230c | ||
|
|
bfadf66053 | ||
|
|
f95f31f5f3 | ||
|
|
ccebf49e46 | ||
|
|
ebc8cbcaf0 | ||
|
|
9b1eb04a51 | ||
|
|
3c46fb15cf | ||
|
|
f48144791b | ||
|
|
a5c9b9edac | ||
|
|
5e722c091f | ||
|
|
b3125c607e | ||
|
|
f6f64deffb | ||
|
|
a828007c89 | ||
|
|
50d9481d73 | ||
|
|
e99200cd61 | ||
|
|
f631e6736f | ||
|
|
8b645a0e8f | ||
|
|
ce69dde08a | ||
|
|
c5de7d6051 | ||
|
|
67d1813665 | ||
|
|
e0e94f7286 | ||
|
|
20ddff3d26 | ||
|
|
5235e8483b | ||
|
|
e38c9a11ff | ||
|
|
e6c9bd09f1 | ||
|
|
3ad98603a4 | ||
|
|
f5c162330a | ||
|
|
a0111e09b7 | ||
|
|
bc28e0ed11 | ||
|
|
be03c58402 | ||
|
|
246d692dd7 | ||
|
|
aaf250dca4 | ||
|
|
5ca313a9b2 | ||
|
|
2ac7cfc7b9 | ||
|
|
d52d761a5c | ||
|
|
a7519724f8 | ||
|
|
9b771595f8 | ||
|
|
beef0bfae9 | ||
|
|
a19a82cf6e | ||
|
|
e300664a28 | ||
|
|
2525b60f86 | ||
|
|
0198f3d6af | ||
|
|
0bc0d59446 | ||
|
|
bda080f34f | ||
|
|
2c0eb751a7 | ||
|
|
d70a6c5997 | ||
|
|
b6d9ed254e | ||
|
|
e620d15964 | ||
|
|
cad5c1ed7b | ||
|
|
3543b71671 | ||
|
|
9351380645 | ||
|
|
666803250c | ||
|
|
c49618a653 | ||
|
|
ffce767615 | ||
|
|
9ec72aabe3 | ||
|
|
8eb6377a69 | ||
|
|
67edb98d12 | ||
|
|
d85782b055 | ||
|
|
e0df6ce58a | ||
|
|
27dc7f1f2d | ||
|
|
a42bd9684f | ||
|
|
457e3006a6 | ||
|
|
4351ff82fc | ||
|
|
7ae8ee4405 | ||
|
|
44fc754b6f | ||
|
|
77e2a6607c | ||
|
|
818e9ecbb8 | ||
|
|
f8603dafe1 | ||
|
|
45b851c55c | ||
|
|
0f02215e63 | ||
|
|
eff5935068 | ||
|
|
fa2d3dd7a4 | ||
|
|
f2a140e414 | ||
|
|
dc37296750 | ||
|
|
36d540da18 | ||
|
|
a0586a1897 | ||
|
|
401b0bf2dc | ||
|
|
c8d79ee6fc | ||
|
|
683e0733a5 | ||
|
|
baceacccd5 | ||
|
|
ec1954a83a | ||
|
|
9f626e3716 | ||
|
|
cb629744ec | ||
|
|
64c4c3b93c | ||
|
|
a82da20981 | ||
|
|
1bda9aff3f | ||
|
|
305032707b | ||
|
|
7f41a591c8 | ||
|
|
ddb410fea0 | ||
|
|
984a17ef35 | ||
|
|
3c133af4df | ||
|
|
833f49eb35 | ||
|
|
1e2837c33f | ||
|
|
3e2a9a5187 | ||
|
|
142b2e143d | ||
|
|
5364651a94 | ||
|
|
1170e4a91a | ||
|
|
a739c92f4a | ||
|
|
93af135d6d | ||
|
|
b2f0bd0e3d | ||
|
|
154da99d40 | ||
|
|
dc74949736 | ||
|
|
404df03f25 | ||
|
|
b6cbc960f3 | ||
|
|
29189c77ff | ||
|
|
8890875a7f | ||
|
|
d2381e06fb | ||
|
|
1e34a823b3 | ||
|
|
f2e1b33db5 | ||
|
|
ec69fc7a68 | ||
|
|
c027ebdbb4 | ||
|
|
c8949194cc | ||
|
|
77088b84ad | ||
|
|
9baf5b2b6e | ||
|
|
f9d262d6a7 | ||
|
|
6e543303c6 | ||
|
|
94011804be | ||
|
|
652024c5dc | ||
|
|
c88d5707ad | ||
|
|
b70090ea3a | ||
|
|
402cbe7e57 | ||
|
|
9ed4bb6ec5 | ||
|
|
764a62986e | ||
|
|
ab2e82a456 | ||
|
|
5b3c2ed1a8 | ||
|
|
2fa0a53fdd | ||
|
|
0b9e81a6c0 | ||
|
|
350f6394fd | ||
|
|
35d7d2c0b5 | ||
|
|
e4eeae2821 | ||
|
|
b587990602 | ||
|
|
aba6cc5778 | ||
|
|
90b005a2fd | ||
|
|
2c7cd1c880 | ||
|
|
25c95da80c | ||
|
|
e76b0a3740 | ||
|
|
ec8821e557 | ||
|
|
c2eac63ce6 | ||
|
|
0710e5776e | ||
|
|
42a6887ae2 | ||
|
|
348e63b4fb | ||
|
|
ab56e9c212 | ||
|
|
2de6576765 | ||
|
|
7d57b8e9ec | ||
|
|
58e48088f9 | ||
|
|
8a8cf64873 | ||
|
|
d76d5ca754 | ||
|
|
dd681e390d | ||
|
|
143e981ad1 | ||
|
|
ec7b7276c5 | ||
|
|
8ea6fef1ca | ||
|
|
5e27740761 | ||
|
|
f385725311 | ||
|
|
bfb86e0a57 | ||
|
|
828c6d9212 | ||
|
|
6f14569da4 | ||
|
|
1f3124ac6e | ||
|
|
a9db7989c3 | ||
|
|
4789ecb8d7 | ||
|
|
cf9bbec9a5 | ||
|
|
4a5cfa5d5a | ||
|
|
96b5b09501 | ||
|
|
d021ac4a6f | ||
|
|
b48f3fb1a2 | ||
|
|
b28ef3d877 | ||
|
|
bb90488018 | ||
|
|
1c7473e534 | ||
|
|
aa5f11e754 | ||
|
|
73e46e7a6f | ||
|
|
9ff8e149ef | ||
|
|
98ea108b22 | ||
|
|
30714a3ba6 | ||
|
|
05b0902754 | ||
|
|
ba52bfddbe | ||
|
|
68bfa27a99 | ||
|
|
50fb6c1531 | ||
|
|
3630155ad0 | ||
|
|
c16ffef0bd | ||
|
|
16f4d85086 | ||
|
|
467fbb386e | ||
|
|
e6eecebf4e | ||
|
|
0a474bd3d9 | ||
|
|
940a32668e | ||
|
|
50ec62264e | ||
|
|
02706d40ef | ||
|
|
294d50c50c | ||
|
|
4eae1575a3 | ||
|
|
ae414292c1 | ||
|
|
bda65d6ad3 | ||
|
|
9314e2bc0f | ||
|
|
f7308f748c | ||
|
|
6c66b2d6eb | ||
|
|
c40fc7faa3 | ||
|
|
104a9c689f | ||
|
|
215d1261ca | ||
|
|
7533b98780 | ||
|
|
153c9b3ec5 | ||
|
|
e33a863d3b | ||
|
|
bb02b5d461 | ||
|
|
b9b1830451 | ||
|
|
1d6bdcb0f2 | ||
|
|
0b880e0f0c | ||
|
|
5cb3eb9dd1 | ||
|
|
2d18e7d25f | ||
|
|
1cf2ea60a7 | ||
|
|
33d5e39869 | ||
|
|
7f4825afa5 | ||
|
|
46b641c6cc | ||
|
|
afeaf60c3f | ||
|
|
a5c3f92826 | ||
|
|
d0dd09a5a4 | ||
|
|
bd0b45d0b4 | ||
|
|
75206211f8 | ||
|
|
0d62cc5279 | ||
|
|
eb8fd81aef | ||
|
|
d44489819a | ||
|
|
6a28480510 | ||
|
|
3b92134b2a | ||
|
|
af4df27d42 | ||
|
|
19ee048582 | ||
|
|
6bc24595da | ||
|
|
03908dc437 | ||
|
|
82061f1410 | ||
|
|
0ae1f99269 | ||
|
|
0762e13c0f | ||
|
|
fc1a907af0 | ||
|
|
9189cbd51c | ||
|
|
18d0bfc3c5 | ||
|
|
e35f39c9f4 | ||
|
|
af37be4502 | ||
|
|
c07709803c | ||
|
|
8ab84c4e85 | ||
|
|
5367fe4537 | ||
|
|
03f5c7fc39 | ||
|
|
82f169f2d5 | ||
|
|
a6c2ac1d41 | ||
|
|
d1fa4d426f | ||
|
|
53572671de | ||
|
|
b5ec02e2a0 | ||
|
|
f236fa33de | ||
|
|
206003e1ec | ||
|
|
7c090e921a | ||
|
|
5775c8cbf3 | ||
|
|
d771d70c3a | ||
|
|
47e6602f9b | ||
|
|
f4224eb4d1 | ||
|
|
3c3d68d073 | ||
|
|
7ef611945d | ||
|
|
f807e003fd | ||
|
|
9107beff7e | ||
|
|
d7b3ef43d6 | ||
|
|
538998cb83 | ||
|
|
3e4aa25446 | ||
|
|
f34d23ca18 | ||
|
|
0cf7364c78 | ||
|
|
620ce368b5 | ||
|
|
5b2cd72940 | ||
|
|
92abdbb328 | ||
|
|
c1bb637fbf | ||
|
|
9653c02b46 | ||
|
|
1226e6c292 | ||
|
|
170e8287ab | ||
|
|
01d98cbcb7 | ||
|
|
32d17cca18 | ||
|
|
113f8180cc | ||
|
|
4ccc8ed147 | ||
|
|
68cd2f345a | ||
|
|
ed7ff6e7a1 | ||
|
|
c05710fcdb | ||
|
|
2db1cf8b6c | ||
|
|
a9d9c97bff | ||
|
|
c519a4f34b | ||
|
|
836f6a60e0 | ||
|
|
768df7f6d6 | ||
|
|
3161013481 | ||
|
|
39c0fcafea | ||
|
|
47b8a379a4 | ||
|
|
beba45fcdf | ||
|
|
4c77ae6c4b | ||
|
|
178f096b60 | ||
|
|
3782ab8f57 | ||
|
|
86a77a77d6 | ||
|
|
0c175119b9 | ||
|
|
1fd50d1faa | ||
|
|
c720cf22aa | ||
|
|
57dfd91378 | ||
|
|
ab53fecce5 | ||
|
|
5a602786f3 | ||
|
|
31e1fce550 | ||
|
|
b7b15e120a | ||
|
|
973949180f | ||
|
|
425c12593b | ||
|
|
fa28799a5b | ||
|
|
5c011a2402 | ||
|
|
8a2060ca6e | ||
|
|
e40d7136f1 | ||
|
|
7e6833d5fd | ||
|
|
21020abcbd | ||
|
|
da4d1c1ee7 | ||
|
|
bc3885cd54 | ||
|
|
8cc115a108 | ||
|
|
4aae6c0a09 | ||
|
|
3608e49885 | ||
|
|
df9d94ac51 | ||
|
|
19b32adc34 | ||
|
|
5ce9024eae | ||
|
|
c093fe3b0c | ||
|
|
ba9300da91 | ||
|
|
510c201e17 | ||
|
|
7dde869f4a | ||
|
|
83a276becf | ||
|
|
4fadd929ee | ||
|
|
f049673412 | ||
|
|
43de62f4bc | ||
|
|
eab0f5e87a | ||
|
|
57b94e1d5d | ||
|
|
0dc0ec9394 | ||
|
|
eada09d060 | ||
|
|
61e9deb101 | ||
|
|
949ebb5d8e | ||
|
|
1a4e3b4c7c | ||
|
|
d91402da3c | ||
|
|
0107ade039 | ||
|
|
f6bb944907 | ||
|
|
e5761ef601 | ||
|
|
1421a1f6b6 | ||
|
|
1738bfd0bc | ||
|
|
4f1b3f262b | ||
|
|
9a82c24a89 | ||
|
|
3b5539da22 | ||
|
|
b71ef1667c | ||
|
|
96b582b58d | ||
|
|
7a35bb48b1 | ||
|
|
15aa35e56f | ||
|
|
7f4cdc86bc | ||
|
|
131876463a | ||
|
|
36a721a8e1 | ||
|
|
a660048bcb | ||
|
|
1498325ecd | ||
|
|
1c0315cd54 | ||
|
|
d50a6fa203 | ||
|
|
876b8b6d37 | ||
|
|
1137f48882 | ||
|
|
2f9e303889 | ||
|
|
027c2e7618 | ||
|
|
8fe8c3a1f2 | ||
|
|
0f52eff9c9 | ||
|
|
4e01de31f7 | ||
|
|
5389f59df0 | ||
|
|
67a3cbadf7 | ||
|
|
c6eedc4df7 | ||
|
|
7c0e1540cb | ||
|
|
d05c4ad0d1 | ||
|
|
6f2f74089b | ||
|
|
e43545eec9 | ||
|
|
3eca8ee8b4 | ||
|
|
0aa7818731 | ||
|
|
eb1e8b63c5 | ||
|
|
51c2c5d62a | ||
|
|
2474fe621b | ||
|
|
6fbfeb2848 | ||
|
|
d397624fdc |
11
.gitattributes
vendored
Normal file
11
.gitattributes
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# Set default behaviour, in case users don't have core.autocrlf set.
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Explicitly declare text files we want to always be normalized and converted
|
||||||
|
# to native line endings on checkout.
|
||||||
|
*.sh text
|
||||||
|
*.java text
|
||||||
|
*.xml text
|
||||||
|
*.js text
|
||||||
|
*.css text
|
||||||
|
*.svg text
|
||||||
15
.github/CONTRIBUTING.md
vendored
Normal file
15
.github/CONTRIBUTING.md
vendored
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
## How to contribute
|
||||||
|
|
||||||
|
As an open source project, we welcome new contributors and appreciate your help.
|
||||||
|
|
||||||
|
Before you start working on an unresolved issue or try to implement a new feature, please contact us via our public [mailing list](https://groups.google.com/group/mapsforge-dev).
|
||||||
|
|
||||||
|
You may also create a new issue on [Github](https://github.com/mapsforge/vtm/issues) or comment on an existing one to describe your ideas. We will then discuss the best way to realize your proposal and figure out how we can help you to get started quickly.
|
||||||
|
|
||||||
|
If you are only requesting a small change in the code, you may attach a patch file to the corresponding issue, but it is best to create a pull request on Github. Make sure that your patch is derived from the latest version in our **master** repository, otherwise we might be unable to apply it. Please follow our code and style conventions.
|
||||||
|
|
||||||
|
Also please keep the pull request commits squashed, in order to avoid the clutter in repository and have only the finally changed files together. One way is described [here](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html).
|
||||||
|
|
||||||
|
Regarding syntax make sure your IDE uses for indentation 4 spaces (no tabs) and follow the conventions you already see in the code.
|
||||||
|
|
||||||
|
Please note that the VTM project is licenced under the [GNU LGPL3 licence](http://www.gnu.org/licenses/lgpl.html). Thus, all your contributions are going to be published under this license.
|
||||||
48
.gitignore
vendored
48
.gitignore
vendored
@@ -1,24 +1,34 @@
|
|||||||
*/bin/*
|
*/bin/*
|
||||||
*/gen/*
|
*/gen/*
|
||||||
*/obj/*
|
*/obj/*
|
||||||
|
target/
|
||||||
|
build/
|
||||||
|
robovm-build
|
||||||
*.o
|
*.o
|
||||||
*.jar
|
*.so
|
||||||
*.class
|
*.class
|
||||||
vtm/jni/jni-headers/
|
/vtm-tests/tmp/
|
||||||
vtm/jni/build*
|
/vtm-web/war/
|
||||||
vtm/jni/*.mk
|
/vtm-web/assets/
|
||||||
vtm/jni/memcpy_wrap.c
|
/vtm-web/gwt-unitCache
|
||||||
vtm/jni/poly2tri/
|
/vtm-web-app/assets/
|
||||||
vtm/libs/
|
/vtm-web-app/src/main/webapp/
|
||||||
vtm-gdx-html/war/assets/
|
/vtm-web-js/assets/
|
||||||
vtm-gdx-html/war/WEB_INF/
|
/vtm-web-js/src/main/webapp/
|
||||||
vtm-gdx-html/war/org.oscim.gdx.GwtDefinition/
|
/vtm-spatialite/
|
||||||
vtm-gdx-html/gwt-unitCache
|
/vtm-spatialite-android/
|
||||||
vtm-gdx-ios/
|
/vtm-examples/
|
||||||
vtm-spatialite/
|
/vtm-osmscout/
|
||||||
vtm-spatialite-android/
|
|
||||||
vtm-ext-libs/
|
.gradle
|
||||||
tmp/
|
.idea
|
||||||
themes/
|
*.iml
|
||||||
vtm/assets/freizeitkarte/
|
|
||||||
vtm/jni/target/
|
.settings
|
||||||
|
.classpath
|
||||||
|
.project
|
||||||
|
project.properties
|
||||||
|
|
||||||
|
local.properties
|
||||||
|
|
||||||
|
/ma*/
|
||||||
|
|||||||
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[submodule "libtess2"]
|
||||||
|
path = jni/jni/libtess2
|
||||||
|
url = https://github.com/memononen/libtess2.git
|
||||||
22
.travis.yml
Normal file
22
.travis.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
sudo: false
|
||||||
|
language: android
|
||||||
|
jdk:
|
||||||
|
- oraclejdk8
|
||||||
|
android:
|
||||||
|
components:
|
||||||
|
- platform-tools
|
||||||
|
- tools
|
||||||
|
- build-tools-25.0.2
|
||||||
|
- android-25
|
||||||
|
- extra-android-m2repository
|
||||||
|
env:
|
||||||
|
global:
|
||||||
|
- GRADLE_OPTS="-Xmx2048m"
|
||||||
|
- secure: sW674wuFZOuoX7jHQHDbX3j8NxL8JxR07cyq+CrrqJ537dU9lxWQmMBRUpOb+p/q7sQ74PUtiKJkmFgKCSJSAKY+nr6GJ8P/q6u5TUKbmUWODSn8znehX2zualfvFwpF4PILok/wUzXBQE62jn4lUua7cMdsHRMNHbLmKqBoVL0meObDDjsaJ/RCbOPuruy3FmgvXPp0+Y4zl1GsklDSyjFzg4LBzjAk9Ryvh1O4zvJBkkyfCgurLKCnOKIPy3v5fPMS9oDfO1aarAVGoZZe416pvTW4hb8cdB6kn9XWYDob4NDFX/sP5k7XIhd/NAIn9LrKFg0sLtATaKLX+BcasF1CgDR/u6+SEeQd5QaRF7Go2Nq5Ltuu4OIFONI2qhEeVDDK6Otf2WSWj9KPno2GHuumBfbg4ypWoJgmZrMXk8JeVV/OP/0jIQz3p/7yfF21X1XBEqYaVHPAMKdEYYkCSa46KfACyOt6LfnkuCHtoTOpFo7sq0omIA2HOtpIx1u3vMBUyAbQqT6cokkKB1b6gNTFwhHc+8ybfLFPljJB8cWshI+V/b06S6fekRmvTNxvDykWNsdlkENBYqc9hMfjcT4hO4K+76SWN62mimQYODvFyfTVMC7WkQ3k/XEnmqUPV5XkbaILbS1d/tA57N148FiJ5/QXtI6Y94imubYyVqU=
|
||||||
|
- secure: AdKSZKA4gMuKXI4X4dQNJqcMv5OmPIHdN8fpy55Y9yoOQPQHZE3Zwc4QDWBh20q298jyEC854tVTPTysdZ7h+2s2FhsprYv1Bt/QNzKIrLpeIMj2quuVGMbdPuk08y55gost94KwVLJv0sIDpRlB/PEQkA7Mg/UDsT9zR8E1Ms5x+ul2C8e1ag0zzNl1wVnT5jY8WCp74uA/XXCcJl/80qT1stUERazCKwbKNo007hi7rdm4HA7YGevORq8e2r67je+WIBZUAwrHT0Zjuo4ibwUii4LdwvjuN3w0Z6e9Wf4x5bBqGgnih0T31uom2yPjNx+U/c2AWI+Nxfy/SEF2U+9bjBEZ3ZhI7F1B9ofXo2mhvvsVDiUrymMBbG2V64C9kAzeUh7xIBTqIrbdtpAEBV9FlLAtF2swVTwtCgZgcVTOt3RKXCi3X3nk3cuH7PAorFa/QGfT4xxVu2011FVAt2Rm7SD0ZWztZTSTz/4Nt/egtGBOJfrCc7oLEygLzDmLqsqCwCROITVQjWLjrtqDyLteaNiSXeNIQMKun3izApbXnHmXB+FV3R3EZocboqk3v5bmPTahnG6Ghc2zknWyyxSx+O9qIfOpHUL8JMJiT82lUQUeibtCn7DCE8wVQ/gYC5i+a+KO/d3NemSzIFlZ8aoUiEPYq18dYlsDXeLXwF0=
|
||||||
|
script:
|
||||||
|
- ./gradlew clean build
|
||||||
|
after_success:
|
||||||
|
- if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
|
||||||
|
./gradlew uploadArchives -PSONATYPE_USERNAME="${SONATYPE_USERNAME}" -PSONATYPE_PASSWORD="${SONATYPE_PASSWORD}";
|
||||||
|
fi
|
||||||
88
README.md
88
README.md
@@ -1,38 +1,72 @@
|
|||||||
## VTM - Very experimental Tile Map library
|
[](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.mapsforge%22)
|
||||||
|
[](https://travis-ci.org/mapsforge/vtm)
|
||||||
|
[](http://www.gnu.org/licenses/lgpl-3.0)
|
||||||
|
|
||||||
Future development branch based on https://github.com/opensciencemap/vtm-android
|
# V™
|
||||||
|
|
||||||
VectorTileMap is part of the OpenScienceMap project, developed at University of Bremen.
|
VTM was developed within the [OpenScienceMap](https://github.com/opensciencemap) project.
|
||||||
http://www.opensciencemap.org
|
|
||||||
|
|
||||||
### Features
|
**This fork continues VTM development. And provides compatibility with latest [Mapsforge](https://github.com/mapsforge/mapsforge).**
|
||||||
|
|
||||||
|
See the **[integration guide](docs/Integration.md)** and [changelog](docs/Changelog.md). And read through [how to contribute](.github/CONTRIBUTING.md) guidelines.
|
||||||
|
|
||||||
|
If you have any questions or problems, don't hesitate to ask our public [mailing list](https://groups.google.com/group/mapsforge-dev) for help.
|
||||||
|
|
||||||
|
## Features
|
||||||
- Java map library
|
- Java map library
|
||||||
- OpenGL vector-tile rendering
|
- OpenGL vector-tile rendering
|
||||||
- Themeable vector layers
|
- Themeable vector layers
|
||||||
- Support for multiple tile sources: primary opensciencemap (.vtm)
|
- Support for multiple tile sources:
|
||||||
- vector: partially mapbox vector-tile and mapsforge files
|
- OpenScienceMap (.vtm)
|
||||||
- bitmap: any quadtree-scheme tiles as texture
|
- Mapsforge (.map)
|
||||||
- Backends for Android, Desktop and HTML5/WebGL (through libgdx and GWT)
|
- Mapbox tiles (.mvt)
|
||||||
|
- GeoJSON tiles
|
||||||
|
- Raster tiles: any quadtree-scheme tiles as texture
|
||||||
|
- Backends:
|
||||||
|
- Android (optional libGDX)
|
||||||
|
- iOS (using libGDX/RoboVM, [instructions](docs/ios.md))
|
||||||
|
- Desktop (using libGDX/LWJGL)
|
||||||
|
- HTML5/WebGL (using libGDX/GWT, [instructions](docs/web.md))
|
||||||
|
|
||||||
### Notes
|
### Projects
|
||||||
- To set up your own tile server for .vtm tiles see https://github.com/opensciencemap/TileStache/tree/master/TileStache/OSciMap4
|
- **vtm** contains the core library
|
||||||
- Almost everything is still in early/experimental stage and subject for being rewritten
|
- **vtm-android** Android backend (no libGDX required)
|
||||||
- pull requests welcome :)
|
- **vtm-android-example** provides examples using vtm-android
|
||||||
|
- **vtm-gdx** common libGDX backend
|
||||||
|
- **vtm-android-gdx** Android backend (with libGDX)
|
||||||
|
- **vtm-desktop** Desktop backend
|
||||||
|
- **vtm-ios** iOS backend
|
||||||
|
- **vtm-web** HTML5/GWT backend
|
||||||
|
- **vtm-web-app** HTML5/GWT application
|
||||||
|
|
||||||
### Demo
|
## WebGL Demo
|
||||||
work in progress..
|
[OpenScienceMap](http://opensciencemap.org/s3db/#scale=17,rot=61,tilt=51,lat=53.075,lon=8.807) view of Bremen.
|
||||||
http://city.informatik.uni-bremen.de/~jeff/map/#scale=17,rot=61,tilt=51,lat=53.075,lon=8.807
|
- Hold right mouse button to change view direction.
|
||||||
- hold middle mouse button to change view direction
|
|
||||||
- Keys
|
|
||||||
- g - toggle tile-grid layer
|
|
||||||
- d - default theme
|
|
||||||
- t - tubes theme
|
|
||||||
|
|
||||||
|
## Applications
|
||||||
|
- VTM is used by many [applications](docs/Applications.md).
|
||||||
|
|
||||||
### Credits
|
## Maps
|
||||||
|
- Mapsforge [map providers](docs/Mapsforge-Maps.md).
|
||||||
|
|
||||||
|
## Credits
|
||||||
This library contains code from several projects:
|
This library contains code from several projects:
|
||||||
- mapsforge: based on 0.2.4
|
- **Android** (Apache 2.0): some Matrix code, TimSort (http://source.android.com)
|
||||||
- osmdroid: some overlay code
|
- **libGDX** (Apache 2.0): AsyncTask, MathUtils and Interpolation classes (https://github.com/libgdx)
|
||||||
- libgdx: AsyncTask, some modfied classes
|
- **mapsforge** (LGPL3): based on 0.2.4 (https://github.com/mapsforge/mapsforge)
|
||||||
- android: some Matrix code
|
- **osmdroid** (Apache 2.0): some overlay classes (https://github.com/osmdroid/osmdroid)
|
||||||
- Triangle: stripped down for simple triangulation (through jni)
|
- **tessellate** (SGI Free Software License B 2.0): (https://github.com/cscheid/tessellate)
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|
### Android
|
||||||
|

|
||||||
|
|
||||||
|
### iOS
|
||||||
|

|
||||||
|
|
||||||
|
### Desktop
|
||||||
|

|
||||||
|
|
||||||
|
### Browser
|
||||||
|

|
||||||
|
|||||||
49
build.gradle
Normal file
49
build.gradle
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
buildscript {
|
||||||
|
repositories {
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
dependencies {
|
||||||
|
classpath 'com.android.tools.build:gradle:2.2.3'
|
||||||
|
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
group = 'org.mapsforge'
|
||||||
|
version = 'master-SNAPSHOT'
|
||||||
|
ext.isReleaseVersion = !version.endsWith("SNAPSHOT")
|
||||||
|
|
||||||
|
ext.androidBuildVersionTools = "25.0.2"
|
||||||
|
ext.gdxVersion = "1.9.5"
|
||||||
|
ext.gwtVersion = "2.8.0"
|
||||||
|
|
||||||
|
if (JavaVersion.current().isJava8Compatible()) {
|
||||||
|
tasks.withType(Javadoc) {
|
||||||
|
options.addStringOption('Xdoclint:none', '-quiet')
|
||||||
|
logging.captureStandardError LogLevel.INFO
|
||||||
|
logging.captureStandardOutput LogLevel.INFO
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def androidCompileSdk() { return 25 }
|
||||||
|
|
||||||
|
def androidMinSdk() { return 10 }
|
||||||
|
|
||||||
|
def androidTargetSdk() { return 22 }
|
||||||
|
|
||||||
|
def versionCode() { return 50 }
|
||||||
|
|
||||||
|
def versionName() { return version }
|
||||||
|
|
||||||
|
subprojects {
|
||||||
|
repositories {
|
||||||
|
maven { url 'https://repo.boundlessgeo.com/main' }
|
||||||
|
jcenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType(JavaCompile) {
|
||||||
|
sourceCompatibility = JavaVersion.VERSION_1_7
|
||||||
|
targetCompatibility = JavaVersion.VERSION_1_7
|
||||||
|
}
|
||||||
|
}
|
||||||
49
config/vtm-pmd.xml
Normal file
49
config/vtm-pmd.xml
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<ruleset name="vtm ruleset"
|
||||||
|
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"
|
||||||
|
xsi:noNamespaceSchemaLocation="http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
|
||||||
|
|
||||||
|
<description>
|
||||||
|
This ruleset checks my code for bad stuff
|
||||||
|
</description>
|
||||||
|
|
||||||
|
<!-- We'll use the entire 'strings' ruleset -->
|
||||||
|
<rule ref="rulesets/java/strings.xml"/>
|
||||||
|
|
||||||
|
<!-- Here's some rules we'll specify one at a time -->
|
||||||
|
<rule ref="rulesets/java/unusedcode.xml/UnusedLocalVariable"/>
|
||||||
|
<rule ref="rulesets/java/unusedcode.xml/UnusedPrivateField"/>
|
||||||
|
<rule ref="rulesets/java/imports.xml/DuplicateImports"/>
|
||||||
|
<rule ref="rulesets/java/basic.xml/UnnecessaryConversionTemporary"/>
|
||||||
|
|
||||||
|
<!-- We want to customize this rule a bit, change the message and raise the priority -->
|
||||||
|
<rule
|
||||||
|
ref="rulesets/java/basic.xml/EmptyCatchBlock"
|
||||||
|
message="Must handle exceptions">
|
||||||
|
<priority>2</priority>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<!-- Now we'll customize a rule's property value -->
|
||||||
|
<rule ref="rulesets/java/codesize.xml/CyclomaticComplexity">
|
||||||
|
<properties>
|
||||||
|
<property name="reportLevel" value="30"/>
|
||||||
|
</properties>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<!-- We want everything from braces.xml except WhileLoopsMustUseBraces -->
|
||||||
|
<!-- ><rule ref="rulesets/java/braces.xml">
|
||||||
|
<exclude name="WhileLoopsMustUseBraces"/>
|
||||||
|
<exclude name="IfElseStmtsMustUseBraces"/>
|
||||||
|
</rule>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<rule ref="rulesets/java/design.xml">
|
||||||
|
<exclude name="AvoidSynchronizedAtMethodLevel" />
|
||||||
|
<exclude name="AvoidReassigningParameters" />
|
||||||
|
<exclude name="CompareObjectsWithEquals" />
|
||||||
|
<exclude name="FieldDeclarationsShouldBeAtStartOfClass" />
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
</ruleset>
|
||||||
BIN
data/g3d/test.g3db
Normal file
BIN
data/g3d/test.g3db
Normal file
Binary file not shown.
4748
data/g3d/test.g3dj
Normal file
4748
data/g3d/test.g3dj
Normal file
File diff suppressed because it is too large
Load Diff
BIN
data/g3d/tree.png
Normal file
BIN
data/g3d/tree.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.1 KiB |
177
data/g3d/treeA.g3dj
Normal file
177
data/g3d/treeA.g3dj
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
{
|
||||||
|
"version": [ 0, 1],
|
||||||
|
"id": "",
|
||||||
|
"meshes": [
|
||||||
|
{
|
||||||
|
"attributes": ["POSITION", "NORMAL", "TEXCOORD0"],
|
||||||
|
"vertices": [
|
||||||
|
-0.003717, -0.043092, 0.000001, 0.000000, -1.000000, 0.000000, 0.000000, 0.000000,
|
||||||
|
-0.003717, -0.043092, -0.019798, 0.000000, -0.609973, -0.792383, 0.000000, 0.000000,
|
||||||
|
0.013430, -0.043092, -0.009898, 0.686239, -0.609973, -0.396191, 0.000000, 0.000000,
|
||||||
|
-0.003717, 0.527242, 0.000001, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000,
|
||||||
|
0.013430, 0.527242, -0.009898, 0.686239, 0.609973, -0.396191, 0.000000, 0.000000,
|
||||||
|
-0.003717, 0.527242, -0.019798, 0.000000, 0.609973, -0.792383, 0.000000, 0.000000,
|
||||||
|
0.013430, -0.043092, 0.009901, 0.686239, -0.609973, 0.396191, 0.000000, 0.000000,
|
||||||
|
0.013430, 0.527242, 0.009901, 0.686239, 0.609973, 0.396191, 0.000000, 0.000000,
|
||||||
|
-0.003717, -0.043092, 0.019801, 0.000000, -0.609973, 0.792383, 0.000000, 0.000000,
|
||||||
|
-0.003717, 0.527242, 0.019801, 0.000000, 0.609973, 0.792383, 0.000000, 0.000000,
|
||||||
|
-0.020865, -0.043092, 0.009901, -0.686239, -0.609973, 0.396191, 0.000000, 0.000000,
|
||||||
|
-0.020865, 0.527242, 0.009901, -0.686239, 0.609973, 0.396191, 0.000000, 0.000000,
|
||||||
|
-0.020865, -0.043092, -0.009898, -0.686239, -0.609973, -0.396191, 0.000000, 0.000000,
|
||||||
|
-0.020865, 0.527242, -0.009898, -0.686239, 0.609973, -0.396191, 0.000000, 0.000000,
|
||||||
|
-0.000052, 1.708732, 0.000001, 0.000000, 1.000000, 0.000000, 0.627643, 0.963260,
|
||||||
|
-0.056858, 1.692897, -0.056805, -0.359325, 0.861232, -0.359325, 0.811107, 0.943917,
|
||||||
|
-0.080388, 1.692897, 0.000001, -0.508194, 0.861232, 0.000000, 0.930977, 0.971962,
|
||||||
|
-0.112293, 1.619116, -0.112239, -0.584552, 0.562639, -0.584552, 0.871491, 0.884983,
|
||||||
|
-0.158784, 1.619116, 0.000001, -0.826655, 0.562639, 0.000000, 1.012361, 0.910828,
|
||||||
|
-0.176420, 1.422079, -0.176367, -0.675863, 0.293832, -0.675863, 0.903795, 0.728324,
|
||||||
|
-0.249474, 1.422079, 0.000001, -0.955840, 0.293832, 0.000000, 1.035246, 0.751852,
|
||||||
|
-0.210746, 1.159339, -0.210693, -0.704306, 0.088870, -0.704306, 0.922129, 0.451029,
|
||||||
|
-0.298019, 1.159339, 0.000001, -0.996033, 0.088870, 0.000000, 1.045340, 0.473093,
|
||||||
|
-0.210605, 0.903175, -0.210552, -0.705252, -0.072024, -0.705252, 0.936767, 0.254108,
|
||||||
|
-0.297820, 0.903175, 0.000001, -0.997375, -0.072024, 0.000000, 1.052424, 0.274946,
|
||||||
|
-0.180964, 0.617981, -0.180911, -0.685263, -0.246529, -0.685263, 0.956801, 0.142573,
|
||||||
|
-0.255900, 0.617981, 0.000001, -0.969115, -0.246529, 0.000000, 1.061122, 0.161660,
|
||||||
|
-0.116291, 0.378825, -0.116238, -0.610279, -0.505051, -0.610279, 0.991689, 0.079506,
|
||||||
|
-0.164439, 0.378825, 0.000001, -0.863063, -0.505051, 0.000000, 1.074527, 0.095355,
|
||||||
|
-0.059153, 0.290116, -0.059100, -0.407514, -0.817194, -0.407544, 1.038003, 0.052079,
|
||||||
|
-0.083634, 0.290116, 0.000001, -0.576312, -0.817194, 0.000000, 1.090933, 0.063214,
|
||||||
|
-0.083634, 0.290116, 0.000001, -0.576312, -0.817194, 0.000000, 0.090933, 0.063214,
|
||||||
|
-0.059153, 0.290116, -0.059100, -0.407514, -0.817194, -0.407544, 0.038003, 0.052079,
|
||||||
|
-0.000125, 0.265210, -0.000071, -0.000244, -0.999969, -0.000244, 0.127500, 0.036749,
|
||||||
|
-0.000051, 0.290116, -0.083580, 0.000000, -0.817194, -0.576312, 0.994047, 0.033372,
|
||||||
|
-0.000125, 0.265210, -0.000071, -0.000244, -0.999969, -0.000244, 1.127500, 0.036749,
|
||||||
|
-0.000051, 0.378825, -0.164386, 0.000000, -0.505051, -0.863063, 0.893772, 0.053663,
|
||||||
|
-0.000052, 0.617981, -0.255847, 0.000000, -0.246529, -0.969115, 0.836458, 0.114704,
|
||||||
|
-0.000052, 0.903175, -0.297766, 0.000000, -0.072024, -0.997375, 0.812221, 0.226047,
|
||||||
|
-0.000052, 1.159339, -0.297966, 0.000000, 0.088870, -0.996033, 0.797565, 0.423137,
|
||||||
|
-0.000052, 1.422079, -0.249421, 0.000000, 0.293832, -0.955840, 0.781975, 0.700922,
|
||||||
|
-0.000052, 1.619116, -0.158731, 0.000000, 0.562639, -0.826655, 0.759783, 0.858997,
|
||||||
|
-0.000052, 1.692897, -0.080335, 0.000000, 0.861232, -0.508194, 0.728165, 0.921879,
|
||||||
|
0.056754, 1.692897, -0.056805, 0.359325, 0.861232, -0.359325, 0.652361, 0.910987,
|
||||||
|
0.112189, 1.619116, -0.112239, 0.584552, 0.562639, -0.584552, 0.659906, 0.845090,
|
||||||
|
0.176316, 1.422079, -0.176367, 0.675863, 0.293832, -0.675863, 0.665734, 0.684958,
|
||||||
|
0.210643, 1.159339, -0.210693, 0.704306, 0.088870, -0.704306, 0.670277, 0.405750,
|
||||||
|
0.210502, 0.903175, -0.210552, 0.705252, -0.072024, -0.705252, 0.675032, 0.207335,
|
||||||
|
0.180860, 0.617981, -0.180910, 0.685263, -0.246529, -0.685263, 0.684415, 0.093825,
|
||||||
|
0.116188, 0.378825, -0.116237, 0.610279, -0.505051, -0.610279, 0.723612, 0.027920,
|
||||||
|
0.059050, 0.290116, -0.059099, 0.407483, -0.817255, -0.407422, 1.018456, 0.011649,
|
||||||
|
0.059050, 0.290116, -0.059099, 0.407483, -0.817255, -0.407422, 0.018456, 0.011649,
|
||||||
|
0.083530, 0.290116, 0.000002, 0.576159, -0.817316, 0.000000, 0.267608, 0.018648,
|
||||||
|
0.164335, 0.378825, 0.000002, 0.863063, -0.505051, 0.000000, 0.457225, 0.035136,
|
||||||
|
0.255796, 0.617981, 0.000002, 0.969115, -0.246529, 0.000000, 0.515690, 0.098717,
|
||||||
|
0.297716, 0.903175, 0.000002, 0.997375, -0.072024, 0.000000, 0.532803, 0.211513,
|
||||||
|
0.297915, 1.159339, 0.000002, 0.996033, 0.088870, 0.000000, 0.541872, 0.409545,
|
||||||
|
0.249370, 1.422079, 0.000002, 0.955840, 0.293832, 0.000000, 0.550746, 0.688375,
|
||||||
|
0.158680, 1.619116, 0.000002, 0.826655, 0.562639, 0.000000, 0.562378, 0.848006,
|
||||||
|
0.080284, 1.692897, 0.000001, 0.508194, 0.861232, 0.000000, 0.577714, 0.913236,
|
||||||
|
0.056754, 1.692897, 0.056808, 0.359325, 0.861232, 0.359325, 0.500528, 0.928224,
|
||||||
|
0.112188, 1.619116, 0.112242, 0.584552, 0.562670, 0.584552, 0.459880, 0.866817,
|
||||||
|
0.176316, 1.422079, 0.176370, 0.675863, 0.293832, 0.675863, 0.433163, 0.709519,
|
||||||
|
0.210642, 1.159339, 0.210696, 0.704306, 0.088870, 0.704306, 0.415507, 0.432148,
|
||||||
|
0.210501, 0.903175, 0.210555, 0.705252, -0.072024, 0.705252, 0.399773, 0.235351,
|
||||||
|
0.180860, 0.617981, 0.180914, 0.685263, -0.246529, 0.685263, 0.375517, 0.124299,
|
||||||
|
0.116187, 0.378825, 0.116241, 0.610279, -0.505051, 0.610279, 0.325269, 0.063109,
|
||||||
|
0.059049, 0.290116, 0.059103, 0.407361, -0.817347, 0.407392, 0.248452, 0.040330,
|
||||||
|
-0.000053, 0.290116, 0.083583, 0.000000, -0.817316, 0.576159, 0.199939, 0.056802,
|
||||||
|
-0.000053, 0.378825, 0.164389, 0.000000, -0.505051, 0.863063, 0.234895, 0.086200,
|
||||||
|
-0.000053, 0.617981, 0.255850, 0.000000, -0.246529, 0.969115, 0.262269, 0.150492,
|
||||||
|
-0.000052, 0.903175, 0.297769, 0.000000, -0.072024, 0.997375, 0.278892, 0.262611,
|
||||||
|
-0.000052, 1.159339, 0.297968, 0.000000, 0.088870, 0.996033, 0.291619, 0.459894,
|
||||||
|
-0.000052, 1.422079, 0.249424, 0.000000, 0.293832, 0.955840, 0.308400, 0.737559,
|
||||||
|
-0.000052, 1.619116, 0.158734, 0.000000, 0.562670, 0.826655, 0.340691, 0.894603,
|
||||||
|
-0.000052, 1.692897, 0.080338, 0.000000, 0.861232, 0.508194, 0.411564, 0.953109,
|
||||||
|
-0.056858, 1.692897, 0.056808, -0.359325, 0.861232, 0.359325, 0.247502, 0.980115,
|
||||||
|
-0.112293, 1.619116, 0.112242, -0.584552, 0.562670, 0.584552, 0.186319, 0.915857,
|
||||||
|
-0.176420, 1.422079, 0.176369, -0.675863, 0.293832, 0.675863, 0.173739, 0.755927,
|
||||||
|
-0.210747, 1.159339, 0.210696, -0.704306, 0.088870, 0.704306, 0.168491, 0.476740,
|
||||||
|
-0.210606, 0.903175, 0.210555, -0.705252, -0.072024, 0.705252, 0.164886, 0.278291,
|
||||||
|
-0.180964, 0.617981, 0.180913, -0.685263, -0.246529, 0.685263, 0.160531, 0.164632,
|
||||||
|
-0.116292, 0.378825, 0.116240, -0.610279, -0.505051, 0.610279, 0.153922, 0.097744,
|
||||||
|
-0.059154, 0.290116, 0.059102, -0.407453, -0.817255, 0.407483, 0.145909, 0.064880,
|
||||||
|
-0.164439, 0.378825, 0.000001, -0.863063, -0.505051, 0.000000, 0.074527, 0.095355,
|
||||||
|
-0.255900, 0.617981, 0.000001, -0.969115, -0.246529, 0.000000, 0.061122, 0.161660,
|
||||||
|
-0.297820, 0.903175, 0.000001, -0.997375, -0.072024, 0.000000, 0.052424, 0.274946,
|
||||||
|
-0.298019, 1.159339, 0.000001, -0.996033, 0.088870, 0.000000, 0.045340, 0.473093,
|
||||||
|
-0.249474, 1.422079, 0.000001, -0.955840, 0.293832, 0.000000, 0.035246, 0.751852,
|
||||||
|
-0.158784, 1.619116, 0.000001, -0.826655, 0.562639, 0.000000, 0.012361, 0.910828,
|
||||||
|
-0.056858, 1.692897, 0.056808, -0.359325, 0.861232, 0.359325, 1.247502, 0.980115,
|
||||||
|
-0.112293, 1.619116, 0.112242, -0.584552, 0.562670, 0.584552, 1.186319, 0.915857
|
||||||
|
],
|
||||||
|
"parts": [
|
||||||
|
{
|
||||||
|
"id": "mpart1",
|
||||||
|
"type": "TRIANGLES",
|
||||||
|
"indices": [
|
||||||
|
0, 1, 2, 3, 4, 5, 0, 2, 6, 3, 7, 4,
|
||||||
|
0, 6, 8, 3, 9, 7, 0, 8, 10, 3, 11, 9,
|
||||||
|
0, 10, 12, 3, 13, 11, 12, 1, 0, 3, 5, 13,
|
||||||
|
1, 5, 4, 1, 4, 2, 2, 4, 7, 2, 7, 6,
|
||||||
|
6, 7, 9, 6, 9, 8, 8, 9, 11, 8, 11, 10,
|
||||||
|
10, 11, 13, 10, 13, 12, 5, 1, 12, 5, 12, 13,
|
||||||
|
14, 15, 16, 16, 15, 17, 16, 17, 18, 18, 17, 19,
|
||||||
|
18, 19, 20, 20, 19, 21, 20, 21, 22, 22, 21, 23,
|
||||||
|
22, 23, 24, 24, 23, 25, 24, 25, 26, 26, 25, 27,
|
||||||
|
26, 27, 28, 28, 27, 29, 28, 29, 30, 31, 32, 33,
|
||||||
|
29, 34, 35, 27, 36, 34, 27, 34, 29, 25, 37, 36,
|
||||||
|
25, 36, 27, 23, 38, 37, 23, 37, 25, 21, 39, 38,
|
||||||
|
21, 38, 23, 19, 40, 39, 19, 39, 21, 17, 41, 40,
|
||||||
|
17, 40, 19, 15, 42, 41, 15, 41, 17, 15, 14, 42,
|
||||||
|
42, 14, 43, 42, 43, 44, 42, 44, 41, 41, 44, 45,
|
||||||
|
41, 45, 40, 40, 45, 46, 40, 46, 39, 39, 46, 47,
|
||||||
|
39, 47, 38, 38, 47, 48, 38, 48, 37, 37, 48, 49,
|
||||||
|
37, 49, 36, 36, 49, 50, 36, 50, 34, 34, 50, 35,
|
||||||
|
51, 52, 33, 49, 53, 52, 49, 52, 50, 48, 54, 53,
|
||||||
|
48, 53, 49, 47, 55, 54, 47, 54, 48, 46, 56, 55,
|
||||||
|
46, 55, 47, 45, 57, 56, 45, 56, 46, 44, 58, 57,
|
||||||
|
44, 57, 45, 43, 59, 58, 43, 58, 44, 43, 14, 59,
|
||||||
|
59, 14, 60, 59, 60, 61, 59, 61, 58, 58, 61, 62,
|
||||||
|
58, 62, 57, 57, 62, 63, 57, 63, 56, 56, 63, 64,
|
||||||
|
56, 64, 55, 55, 64, 65, 55, 65, 54, 54, 65, 66,
|
||||||
|
54, 66, 53, 53, 66, 67, 53, 67, 52, 52, 67, 33,
|
||||||
|
67, 68, 33, 66, 69, 68, 66, 68, 67, 65, 70, 69,
|
||||||
|
65, 69, 66, 64, 71, 70, 64, 70, 65, 63, 72, 71,
|
||||||
|
63, 71, 64, 62, 73, 72, 62, 72, 63, 61, 74, 73,
|
||||||
|
61, 73, 62, 60, 75, 74, 60, 74, 61, 60, 14, 75,
|
||||||
|
75, 14, 76, 75, 76, 77, 75, 77, 74, 74, 77, 78,
|
||||||
|
74, 78, 73, 73, 78, 79, 73, 79, 72, 72, 79, 80,
|
||||||
|
72, 80, 71, 71, 80, 81, 71, 81, 70, 70, 81, 82,
|
||||||
|
70, 82, 69, 69, 82, 83, 69, 83, 68, 68, 83, 33,
|
||||||
|
83, 31, 33, 82, 84, 31, 82, 31, 83, 81, 85, 84,
|
||||||
|
81, 84, 82, 80, 86, 85, 80, 85, 81, 79, 87, 86,
|
||||||
|
79, 86, 80, 78, 88, 87, 78, 87, 79, 77, 89, 88,
|
||||||
|
77, 88, 78, 90, 16, 18, 90, 18, 91, 90, 14, 16
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"materials": [
|
||||||
|
{
|
||||||
|
"id": "_tree.png",
|
||||||
|
"diffuse": [ 0.900000, 0.900000, 0.900000],
|
||||||
|
"specular": [ 0.100000, 0.100000, 0.100000],
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"id": "_tree.png",
|
||||||
|
"filename": "tree.png",
|
||||||
|
"type": "DIFFUSE"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"id": "treeA_root",
|
||||||
|
"parts": [
|
||||||
|
{
|
||||||
|
"meshpartid": "mpart1",
|
||||||
|
"materialid": "_tree.png",
|
||||||
|
"uvMapping": [[ 0]]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"animations": []
|
||||||
|
}
|
||||||
85
deploy.gradle
Normal file
85
deploy.gradle
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
apply plugin: 'signing'
|
||||||
|
|
||||||
|
if (project.hasProperty("android")) {
|
||||||
|
task sourcesJar(type: Jar) {
|
||||||
|
classifier = 'sources'
|
||||||
|
from android.sourceSets.main.java.srcDirs
|
||||||
|
exclude 'android-logger.properties'
|
||||||
|
}
|
||||||
|
|
||||||
|
task javadoc(type: Javadoc) {
|
||||||
|
source = android.sourceSets.main.java.srcDirs
|
||||||
|
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
|
||||||
|
exclude 'android-logger.properties'
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
task sourcesJar(type: Jar) {
|
||||||
|
classifier = 'sources'
|
||||||
|
from sourceSets.main.allSource
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
task javadocJar(type: Jar, dependsOn: javadoc) {
|
||||||
|
classifier = 'javadoc'
|
||||||
|
from javadoc.destinationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
artifacts {
|
||||||
|
archives javadocJar
|
||||||
|
archives sourcesJar
|
||||||
|
}
|
||||||
|
|
||||||
|
signing {
|
||||||
|
required { isReleaseVersion && gradle.taskGraph.hasTask("uploadArchives") }
|
||||||
|
sign configurations.archives
|
||||||
|
}
|
||||||
|
|
||||||
|
uploadArchives {
|
||||||
|
repositories {
|
||||||
|
mavenDeployer {
|
||||||
|
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
|
||||||
|
|
||||||
|
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
|
||||||
|
authentication(userName: SONATYPE_USERNAME, password: SONATYPE_PASSWORD)
|
||||||
|
}
|
||||||
|
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
|
||||||
|
authentication(userName: SONATYPE_USERNAME, password: SONATYPE_PASSWORD)
|
||||||
|
}
|
||||||
|
|
||||||
|
pom.project {
|
||||||
|
packaging 'jar'
|
||||||
|
|
||||||
|
name 'vtm'
|
||||||
|
description 'OpenGL vector map library written in Java - running on Android, iOS, Desktop and within the browser.'
|
||||||
|
url 'https://github.com/mapsforge/vtm'
|
||||||
|
|
||||||
|
licenses {
|
||||||
|
license {
|
||||||
|
name 'GNU Lesser GPL'
|
||||||
|
url 'http://www.gnu.org/licenses/lgpl.html'
|
||||||
|
distribution 'repo'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
scm {
|
||||||
|
connection 'scm:git:https://github.com/mapsforge/vtm'
|
||||||
|
developerConnection 'scm:git:https://github.com/mapsforge/vtm'
|
||||||
|
url 'https://github.com/mapsforge/vtm'
|
||||||
|
}
|
||||||
|
|
||||||
|
developers {
|
||||||
|
developer {
|
||||||
|
id 'hannes.janetzek'
|
||||||
|
name 'Hannes Janetzek'
|
||||||
|
email 'hannes.janetzek@gmail.com'
|
||||||
|
}
|
||||||
|
developer {
|
||||||
|
id 'devemux86'
|
||||||
|
name 'Emux'
|
||||||
|
email 'devemux86@gmail.com'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
docs/Applications.md
Normal file
10
docs/Applications.md
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# Applications using VTM software (in lexical order)
|
||||||
|
|
||||||
|
|**Name**|**Type**|**License/Cost**|**Platforms**|**Sources**|
|
||||||
|
|--------|--------|----------------|-------------|-----------|
|
||||||
|
| [Cachebox 3.0](https://github.com/Longri/cachebox3.0) | Geocaching application | Apache 2.0/Free | Android, Desktop, iOS | Open |
|
||||||
|
| [Cruiser](http://wiki.openstreetmap.org/wiki/Cruiser) | Map and navigation application | Proprietary/Free | Android, Desktop | Closed |
|
||||||
|
| [Hunt Cyprus](https://play.google.com/store/apps/details?id=gr.talent.hunt.cy17) | Map and navigation application for hunters | Proprietary/Commercial | Android | Closed |
|
||||||
|
| [MapTrek](http://maptrek.mobi) | Application for outdoor activities | GPL3/Free and Commercial | Android | Open |
|
||||||
|
|
||||||
|
You know an application that is missing here? Please inform us by sending a message via our public [mailing list](https://groups.google.com/group/mapsforge-dev).
|
||||||
71
docs/Changelog.md
Normal file
71
docs/Changelog.md
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## Version 0.7.0 (2017-02-26)
|
||||||
|
|
||||||
|
- Same as 0.7.0-rc2
|
||||||
|
|
||||||
|
### Version 0.7.0-rc2 (2017-02-20)
|
||||||
|
|
||||||
|
- Fix theme parsing in non-Latin locales [#297](https://github.com/mapsforge/vtm/issues/297)
|
||||||
|
|
||||||
|
### Version 0.7.0-rc1 (2017-02-16)
|
||||||
|
|
||||||
|
- Mapsforge multiple map files [#208](https://github.com/mapsforge/vtm/issues/208)
|
||||||
|
- Improved gestures implementation [#253](https://github.com/mapsforge/vtm/issues/253)
|
||||||
|
- Polygon label position enhancements [#80](https://github.com/mapsforge/vtm/issues/80)
|
||||||
|
- vtm-web modules update [#51](https://github.com/mapsforge/vtm/issues/51)
|
||||||
|
- Mapbox (Mapzen) vector tiles [#57](https://github.com/mapsforge/vtm/issues/57)
|
||||||
|
- SVG resources scaling in themes [#214](https://github.com/mapsforge/vtm/issues/214)
|
||||||
|
- Circle map style [#122](https://github.com/mapsforge/vtm/issues/122)
|
||||||
|
- Oneway arrows in themes [#275](https://github.com/mapsforge/vtm/issues/275)
|
||||||
|
- Texture atlas from bitmaps [#283](https://github.com/mapsforge/vtm/pull/283)
|
||||||
|
- PathLayer (vtm) fix disappearing segments [#108](https://github.com/mapsforge/vtm/issues/108)
|
||||||
|
- House numbers (nodes) fix visibility [#168](https://github.com/mapsforge/vtm/issues/168)
|
||||||
|
- Android fix quick scale vs long press [#250](https://github.com/mapsforge/vtm/issues/250)
|
||||||
|
- Use baseline 160dpi in scaling [#236](https://github.com/mapsforge/vtm/issues/236)
|
||||||
|
- OkHttp3 update [#138](https://github.com/mapsforge/vtm/issues/138)
|
||||||
|
- libGDX double tap zoom [#263](https://github.com/mapsforge/vtm/issues/263)
|
||||||
|
- MapFileTileSource zoom level API enhancements [#219](https://github.com/mapsforge/vtm/issues/219)
|
||||||
|
- Animator enhancements with easing functions [#246](https://github.com/mapsforge/vtm/issues/246)
|
||||||
|
- Tile grid layer scaling [#238](https://github.com/mapsforge/vtm/issues/238)
|
||||||
|
- Internal render themes new SVG resources [#251](https://github.com/mapsforge/vtm/issues/251)
|
||||||
|
- Internal render themes various improvements [#41](https://github.com/mapsforge/vtm/issues/41)
|
||||||
|
- Many other minor improvements and bug fixes
|
||||||
|
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.7.0)
|
||||||
|
|
||||||
|
## Version 0.6.0 (2016-10-28) -- VTM revive
|
||||||
|
|
||||||
|
- Same as 0.6.0-rc3
|
||||||
|
|
||||||
|
### Version 0.6.0-rc3 (2016-10-22)
|
||||||
|
|
||||||
|
- Minor improvements and bug fixes
|
||||||
|
|
||||||
|
### Version 0.6.0-rc2 (2016-10-16)
|
||||||
|
|
||||||
|
- Location layer [#171](https://github.com/mapsforge/vtm/issues/171)
|
||||||
|
- Minor improvements and bug fixes
|
||||||
|
|
||||||
|
### Version 0.6.0-rc1 (2016-10-08)
|
||||||
|
|
||||||
|
- Render theme SVG resources [#60](https://github.com/mapsforge/vtm/issues/60)
|
||||||
|
- Mapsforge multilingual maps [#34](https://github.com/mapsforge/vtm/issues/34)
|
||||||
|
- Render theme styles [#93](https://github.com/mapsforge/vtm/issues/93)
|
||||||
|
- vtm-ios module update [#29](https://github.com/mapsforge/vtm/issues/29)
|
||||||
|
- Native libraries for all platforms [#14](https://github.com/mapsforge/vtm/issues/14)
|
||||||
|
- Line stipple and texture rendering [#105](https://github.com/mapsforge/vtm/issues/105)
|
||||||
|
- Layer groups [#99](https://github.com/mapsforge/vtm/issues/99) [#103](https://github.com/mapsforge/vtm/issues/103)
|
||||||
|
- Location renderer [#171](https://github.com/mapsforge/vtm/issues/171)
|
||||||
|
- Map scale bar [#84](https://github.com/mapsforge/vtm/issues/84)
|
||||||
|
- Tile size based on scale factor [#183](https://github.com/mapsforge/vtm/issues/183)
|
||||||
|
- libGDX layer gestures [#151](https://github.com/mapsforge/vtm/issues/151)
|
||||||
|
- Render theme area tessellation option [#37](https://github.com/mapsforge/vtm/issues/37)
|
||||||
|
- Graphics API platform enhancements [#92](https://github.com/mapsforge/vtm/issues/92)
|
||||||
|
- GeoPoint & BoundingBox improvements [#201](https://github.com/mapsforge/vtm/issues/201) [#200](https://github.com/mapsforge/vtm/issues/200)
|
||||||
|
- vtm-jts module [#53](https://github.com/mapsforge/vtm/issues/53)
|
||||||
|
- vtm-http module [#140](https://github.com/mapsforge/vtm/issues/140)
|
||||||
|
- Internal render themes various improvements [#41](https://github.com/mapsforge/vtm/issues/41)
|
||||||
|
- LWJGL desktop libGDX backend [#129](https://github.com/mapsforge/vtm/issues/129)
|
||||||
|
- SNAPSHOT builds publish to Sonatype OSSRH [#165](https://github.com/mapsforge/vtm/issues/165)
|
||||||
|
- Many other minor improvements and bug fixes
|
||||||
|
- [Solved issues](https://github.com/mapsforge/vtm/issues?q=is%3Aclosed+milestone%3A0.6.0)
|
||||||
84
docs/Integration.md
Normal file
84
docs/Integration.md
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# Integration guide
|
||||||
|
|
||||||
|
This article describes how to integrate the library in your project, with Gradle / Maven / Jars or SNAPSHOT builds.
|
||||||
|
|
||||||
|
Current version is [](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.mapsforge%22)
|
||||||
|
|
||||||
|
## Gradle
|
||||||
|
|
||||||
|
### Core
|
||||||
|
```groovy
|
||||||
|
compile 'org.mapsforge:vtm:[CURRENT-VERSION]'
|
||||||
|
compile 'org.mapsforge:vtm-themes:[CURRENT-VERSION]'
|
||||||
|
compile 'org.slf4j:slf4j-api:1.7.21'
|
||||||
|
```
|
||||||
|
|
||||||
|
### Android
|
||||||
|
```groovy
|
||||||
|
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]'
|
||||||
|
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-armeabi'
|
||||||
|
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-armeabi-v7a'
|
||||||
|
compile 'org.mapsforge:vtm-android:[CURRENT-VERSION]:natives-x86'
|
||||||
|
compile 'com.caverock:androidsvg:1.2.2-beta-1'
|
||||||
|
```
|
||||||
|
|
||||||
|
### iOS
|
||||||
|
|
||||||
|
Detailed iOS instructions can be found [here](ios.md).
|
||||||
|
|
||||||
|
### Desktop
|
||||||
|
```groovy
|
||||||
|
compile 'org.mapsforge:vtm-gdx:[CURRENT-VERSION]'
|
||||||
|
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]'
|
||||||
|
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-linux'
|
||||||
|
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-osx'
|
||||||
|
compile 'org.mapsforge:vtm-desktop:[CURRENT-VERSION]:natives-windows'
|
||||||
|
compile 'com.badlogicgames.gdx:gdx:1.9.5'
|
||||||
|
compile 'com.badlogicgames.gdx:gdx-platform:1.9.5:natives-desktop'
|
||||||
|
compile 'com.badlogicgames.gdx:gdx-backend-lwjgl:1.9.5'
|
||||||
|
compile 'org.lwjgl.lwjgl:lwjgl:2.9.3'
|
||||||
|
compile 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-linux'
|
||||||
|
compile 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-osx'
|
||||||
|
compile 'org.lwjgl.lwjgl:lwjgl-platform:2.9.3:natives-windows'
|
||||||
|
compile 'com.metsci.ext.com.kitfox.svg:svg-salamander:0.1.19'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Snapshots
|
||||||
|
|
||||||
|
We publish regularly SNAPSHOT builds to Sonatype OSS Repository Hosting.
|
||||||
|
|
||||||
|
You need to add the repository:
|
||||||
|
```groovy
|
||||||
|
configurations.all {
|
||||||
|
// check for latest snapshot on every build
|
||||||
|
resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
|
||||||
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
And declare the dependencies like:
|
||||||
|
```groovy
|
||||||
|
compile 'org.mapsforge:vtm:master-SNAPSHOT'
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Maven
|
||||||
|
|
||||||
|
The dependencies for Maven are declared in a similar way. For example:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mapsforge</groupId>
|
||||||
|
<artifactId>vtm</artifactId>
|
||||||
|
<version>[CURRENT-VERSION]</version>
|
||||||
|
</dependency>
|
||||||
|
```
|
||||||
|
|
||||||
|
## Jars
|
||||||
|
|
||||||
|
You can find release and snapshot jars (regular and with dependencies) in [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.mapsforge%22) and [Sonatype OSS Repository Hosting](https://oss.sonatype.org/content/repositories/snapshots/org/mapsforge/).
|
||||||
|
|
||||||
|
Third party jars can be found at their respective sites or in Maven Central repository.
|
||||||
9
docs/Mapsforge-Maps.md
Normal file
9
docs/Mapsforge-Maps.md
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# Mapsforge map providers (in lexical order)
|
||||||
|
|
||||||
|
- [AndroidMaps](http://www.androidmaps.co.uk/)
|
||||||
|
- [Freizeitkarte](http://www.freizeitkarte-osm.de/android/en/index.html)
|
||||||
|
- [Locusvectormaps](http://www.locusvectormaps.com)
|
||||||
|
- [Mapsforge](http://download.mapsforge.org/)
|
||||||
|
- [OpenAndroMaps](http://www.openandromaps.org/en/)
|
||||||
|
|
||||||
|
You know a Mapsforge map provider that is missing here? Please inform us by sending a message via our public [mailing list](https://groups.google.com/group/mapsforge-dev).
|
||||||
BIN
docs/images/android.png
Normal file
BIN
docs/images/android.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 717 KiB |
BIN
docs/images/browser.png
Normal file
BIN
docs/images/browser.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 791 KiB |
BIN
docs/images/desktop.png
Normal file
BIN
docs/images/desktop.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 580 KiB |
BIN
docs/images/ios.png
Normal file
BIN
docs/images/ios.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 450 KiB |
64
docs/ios.md
Normal file
64
docs/ios.md
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
### iOS implementation
|
||||||
|
|
||||||
|
RoboVm needs the native libs / frameworks to create a build.
|
||||||
|
|
||||||
|
Create a copy task into your iOS **build.gradle** and add the dependencies.
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
configurations { natives }
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile "org.mapsforge:vtm-ios:[CURRENT-VERSION]"
|
||||||
|
natives "org.mapsforge:vtm-ios:[CURRENT-VERSION]:natives"
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called every time Gradle gets executed. Takes the native dependencies of
|
||||||
|
// the 'natives' configuration and extracts them to the proper build folders
|
||||||
|
// so they get packed with the IPA.
|
||||||
|
task copyNatives() {
|
||||||
|
file("build/native/").mkdirs();
|
||||||
|
configurations.natives.files.each { jar ->
|
||||||
|
def outputDir = null
|
||||||
|
if (jar.name.endsWith("natives.jar")) outputDir = file("build/native/")
|
||||||
|
if (outputDir != null) {
|
||||||
|
copy {
|
||||||
|
from zipTree(jar)
|
||||||
|
into outputDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you can configure your `robovm.xml` to implement the vtm-natives and the SVG-Framework.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<libs>
|
||||||
|
<lib>z</lib>
|
||||||
|
<lib>build/native/libvtm-jni.a</lib> <!--vtm native -->
|
||||||
|
</libs>
|
||||||
|
<frameworkPaths>
|
||||||
|
<path>build/native</path> <!--SVGgh framework path -->
|
||||||
|
</frameworkPaths>
|
||||||
|
<frameworks>
|
||||||
|
<framework>SVGgh</framework> <!--SVGgh framework name -->
|
||||||
|
<framework>UIKit</framework>
|
||||||
|
<framework>OpenGLES</framework>
|
||||||
|
<framework>QuartzCore</framework>
|
||||||
|
<framework>CoreGraphics</framework>
|
||||||
|
<framework>OpenAL</framework>
|
||||||
|
<framework>AudioToolbox</framework>
|
||||||
|
<framework>AVFoundation</framework>
|
||||||
|
</frameworks>
|
||||||
|
```
|
||||||
|
|
||||||
|
Remember the implementation of a iOS framework is possible since iOS 8.
|
||||||
|
So we must set the min iOS-Version at `Info.plist.xml`.
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<dict>
|
||||||
|
<key>MinimumOSVersion</key>
|
||||||
|
<string>8.0</string>
|
||||||
|
...
|
||||||
|
```
|
||||||
7
docs/web.md
Normal file
7
docs/web.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
### Web implementation
|
||||||
|
|
||||||
|
`./gradlew :vtm-web-app:jettyDraftWar` will run standalone Jetty server at port 8080.
|
||||||
|
|
||||||
|
Then go to `http://localhost:8080/vtm-web-app` in the web browser to see the map.
|
||||||
|
|
||||||
|
Hold right mouse button to change view direction.
|
||||||
@@ -2,18 +2,18 @@
|
|||||||
<profiles version="12">
|
<profiles version="12">
|
||||||
<profile kind="CodeFormatterProfile" name="eclipse-vtm" version="12">
|
<profile kind="CodeFormatterProfile" name="eclipse-vtm" version="12">
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
|
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
|
||||||
@@ -33,37 +33,37 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="82"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
|
||||||
<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
|
<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="82"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="84"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
|
||||||
@@ -72,7 +72,7 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="true"/>
|
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
|
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="100"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
|
||||||
@@ -87,9 +87,9 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="80"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
|
<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="tab"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
|
||||||
@@ -104,8 +104,8 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
|
||||||
@@ -116,17 +116,17 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="true"/>
|
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="true"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
|
<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
|
||||||
@@ -141,24 +141,24 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="true"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
|
||||||
@@ -170,35 +170,35 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="82"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
|
<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="82"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
|
<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
|
||||||
@@ -248,9 +248,9 @@
|
|||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
|
||||||
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
|
<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
|
||||||
|
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="true"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
|
||||||
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
|
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
eclipse.preferences.version=1
|
eclipse.preferences.version=1
|
||||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
|
||||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
org.eclipse.jdt.core.compiler.compliance=1.7
|
||||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
||||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
org.eclipse.jdt.core.compiler.source=1.7
|
||||||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
|
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
|
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=82
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
|
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
|
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
|
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=82
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
|
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=82
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
|
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=82
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
|
org.eclipse.jdt.core.formatter.alignment_for_assignment=80
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
|
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
|
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
|
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
|
||||||
@@ -27,7 +27,7 @@ org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
|
|||||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
|
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
|
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
|
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
|
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=84
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
|
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
|
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
|
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
|
||||||
@@ -56,8 +56,8 @@ org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
|
|||||||
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
|
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
|
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
|
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
|
||||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
|
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false
|
||||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
|
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false
|
||||||
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
|
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
|
||||||
org.eclipse.jdt.core.formatter.comment.format_header=false
|
org.eclipse.jdt.core.formatter.comment.format_header=false
|
||||||
org.eclipse.jdt.core.formatter.comment.format_html=true
|
org.eclipse.jdt.core.formatter.comment.format_html=true
|
||||||
@@ -69,7 +69,7 @@ org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
|
|||||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
|
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert
|
||||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
|
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
|
||||||
org.eclipse.jdt.core.formatter.comment.line_length=80
|
org.eclipse.jdt.core.formatter.comment.line_length=80
|
||||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true
|
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=false
|
||||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
||||||
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
|
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
|
||||||
org.eclipse.jdt.core.formatter.compact_else_if=true
|
org.eclipse.jdt.core.formatter.compact_else_if=true
|
||||||
@@ -282,10 +282,10 @@ org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
|
|||||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
|
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
|
||||||
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
|
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
|
||||||
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
|
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
|
||||||
org.eclipse.jdt.core.formatter.tabulation.char=tab
|
org.eclipse.jdt.core.formatter.tabulation.char=space
|
||||||
org.eclipse.jdt.core.formatter.tabulation.size=4
|
org.eclipse.jdt.core.formatter.tabulation.size=4
|
||||||
org.eclipse.jdt.core.formatter.use_on_off_tags=false
|
org.eclipse.jdt.core.formatter.use_on_off_tags=false
|
||||||
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
|
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true
|
||||||
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
|
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
|
||||||
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
|
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
|
||||||
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
|
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
|
||||||
17
gradle.properties
Normal file
17
gradle.properties
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
# Project-wide Gradle settings.
|
||||||
|
|
||||||
|
# IDE (e.g. Android Studio) users:
|
||||||
|
# Gradle settings configured through the IDE *will override*
|
||||||
|
# any settings specified in this file.
|
||||||
|
|
||||||
|
# For more details on how to configure your build environment visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/build_environment.html
|
||||||
|
|
||||||
|
# Specifies the JVM arguments used for the daemon process.
|
||||||
|
# The setting is particularly useful for tweaking memory settings.
|
||||||
|
# org.gradle.jvmargs=-Xmx1536m
|
||||||
|
|
||||||
|
# When configured, Gradle will run in incubating parallel mode.
|
||||||
|
# This option should only be used with decoupled projects. More details, visit
|
||||||
|
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
|
||||||
|
# org.gradle.parallel=true
|
||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Normal file
Binary file not shown.
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
6
gradle/wrapper/gradle-wrapper.properties
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#Tue Aug 16 13:14:49 EEST 2016
|
||||||
|
distributionBase=GRADLE_USER_HOME
|
||||||
|
distributionPath=wrapper/dists
|
||||||
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
zipStorePath=wrapper/dists
|
||||||
|
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
|
||||||
160
gradlew
vendored
Executable file
160
gradlew
vendored
Executable file
@@ -0,0 +1,160 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
##
|
||||||
|
## Gradle start up script for UN*X
|
||||||
|
##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
DEFAULT_JVM_OPTS=""
|
||||||
|
|
||||||
|
APP_NAME="Gradle"
|
||||||
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
|
MAX_FD="maximum"
|
||||||
|
|
||||||
|
warn ( ) {
|
||||||
|
echo "$*"
|
||||||
|
}
|
||||||
|
|
||||||
|
die ( ) {
|
||||||
|
echo
|
||||||
|
echo "$*"
|
||||||
|
echo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# OS specific support (must be 'true' or 'false').
|
||||||
|
cygwin=false
|
||||||
|
msys=false
|
||||||
|
darwin=false
|
||||||
|
case "`uname`" in
|
||||||
|
CYGWIN* )
|
||||||
|
cygwin=true
|
||||||
|
;;
|
||||||
|
Darwin* )
|
||||||
|
darwin=true
|
||||||
|
;;
|
||||||
|
MINGW* )
|
||||||
|
msys=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Attempt to set APP_HOME
|
||||||
|
# Resolve links: $0 may be a link
|
||||||
|
PRG="$0"
|
||||||
|
# Need this for relative symlinks.
|
||||||
|
while [ -h "$PRG" ] ; do
|
||||||
|
ls=`ls -ld "$PRG"`
|
||||||
|
link=`expr "$ls" : '.*-> \(.*\)$'`
|
||||||
|
if expr "$link" : '/.*' > /dev/null; then
|
||||||
|
PRG="$link"
|
||||||
|
else
|
||||||
|
PRG=`dirname "$PRG"`"/$link"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
SAVED="`pwd`"
|
||||||
|
cd "`dirname \"$PRG\"`/" >/dev/null
|
||||||
|
APP_HOME="`pwd -P`"
|
||||||
|
cd "$SAVED" >/dev/null
|
||||||
|
|
||||||
|
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||||
|
|
||||||
|
# Determine the Java command to use to start the JVM.
|
||||||
|
if [ -n "$JAVA_HOME" ] ; then
|
||||||
|
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||||
|
# IBM's JDK on AIX uses strange locations for the executables
|
||||||
|
JAVACMD="$JAVA_HOME/jre/sh/java"
|
||||||
|
else
|
||||||
|
JAVACMD="$JAVA_HOME/bin/java"
|
||||||
|
fi
|
||||||
|
if [ ! -x "$JAVACMD" ] ; then
|
||||||
|
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
JAVACMD="java"
|
||||||
|
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
|
||||||
|
Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
location of your Java installation."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Increase the maximum file descriptors if we can.
|
||||||
|
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
|
||||||
|
MAX_FD_LIMIT=`ulimit -H -n`
|
||||||
|
if [ $? -eq 0 ] ; then
|
||||||
|
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
|
||||||
|
MAX_FD="$MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
ulimit -n $MAX_FD
|
||||||
|
if [ $? -ne 0 ] ; then
|
||||||
|
warn "Could not set maximum file descriptor limit: $MAX_FD"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Darwin, add options to specify how the application appears in the dock
|
||||||
|
if $darwin; then
|
||||||
|
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
|
||||||
|
fi
|
||||||
|
|
||||||
|
# For Cygwin, switch paths to Windows format before running java
|
||||||
|
if $cygwin ; then
|
||||||
|
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
|
||||||
|
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
|
||||||
|
JAVACMD=`cygpath --unix "$JAVACMD"`
|
||||||
|
|
||||||
|
# We build the pattern for arguments to be converted via cygpath
|
||||||
|
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
|
||||||
|
SEP=""
|
||||||
|
for dir in $ROOTDIRSRAW ; do
|
||||||
|
ROOTDIRS="$ROOTDIRS$SEP$dir"
|
||||||
|
SEP="|"
|
||||||
|
done
|
||||||
|
OURCYGPATTERN="(^($ROOTDIRS))"
|
||||||
|
# Add a user-defined pattern to the cygpath arguments
|
||||||
|
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
|
||||||
|
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
|
||||||
|
fi
|
||||||
|
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||||
|
i=0
|
||||||
|
for arg in "$@" ; do
|
||||||
|
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
|
||||||
|
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
|
||||||
|
|
||||||
|
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
|
||||||
|
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
|
||||||
|
else
|
||||||
|
eval `echo args$i`="\"$arg\""
|
||||||
|
fi
|
||||||
|
i=$((i+1))
|
||||||
|
done
|
||||||
|
case $i in
|
||||||
|
(0) set -- ;;
|
||||||
|
(1) set -- "$args0" ;;
|
||||||
|
(2) set -- "$args0" "$args1" ;;
|
||||||
|
(3) set -- "$args0" "$args1" "$args2" ;;
|
||||||
|
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
|
||||||
|
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
|
||||||
|
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
|
||||||
|
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
|
||||||
|
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
|
||||||
|
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
|
||||||
|
function splitJvmOpts() {
|
||||||
|
JVM_OPTS=("$@")
|
||||||
|
}
|
||||||
|
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
|
||||||
|
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
|
||||||
|
|
||||||
|
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
|
||||||
90
gradlew.bat
vendored
Normal file
90
gradlew.bat
vendored
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
|
@rem
|
||||||
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
|
@rem ##########################################################################
|
||||||
|
|
||||||
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
|
|
||||||
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
|
set DEFAULT_JVM_OPTS=
|
||||||
|
|
||||||
|
set DIRNAME=%~dp0
|
||||||
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
|
set APP_BASE_NAME=%~n0
|
||||||
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
|
@rem Find java.exe
|
||||||
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
|
if "%ERRORLEVEL%" == "0" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
|
|
||||||
|
if exist "%JAVA_EXE%" goto init
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
|
|
||||||
|
goto fail
|
||||||
|
|
||||||
|
:init
|
||||||
|
@rem Get command-line arguments, handling Windowz variants
|
||||||
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
|
if "%@eval[2+2]" == "4" goto 4NT_args
|
||||||
|
|
||||||
|
:win9xME_args
|
||||||
|
@rem Slurp the command line arguments.
|
||||||
|
set CMD_LINE_ARGS=
|
||||||
|
set _SKIP=2
|
||||||
|
|
||||||
|
:win9xME_args_slurp
|
||||||
|
if "x%~1" == "x" goto execute
|
||||||
|
|
||||||
|
set CMD_LINE_ARGS=%*
|
||||||
|
goto execute
|
||||||
|
|
||||||
|
:4NT_args
|
||||||
|
@rem Get arguments from the 4NT Shell from JP Software
|
||||||
|
set CMD_LINE_ARGS=%$
|
||||||
|
|
||||||
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
|
|
||||||
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
||||||
75
jni/.cproject
Normal file
75
jni/.cproject
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
|
<cconfiguration id="cdt.managedbuild.toolchain.gnu.base.1587393048">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.toolchain.gnu.base.1587393048" moduleId="org.eclipse.cdt.core.settings" name="Default">
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<configuration buildProperties="" description="" id="cdt.managedbuild.toolchain.gnu.base.1587393048" name="Default" parent="org.eclipse.cdt.build.core.emptycfg">
|
||||||
|
<folderInfo id="cdt.managedbuild.toolchain.gnu.base.1587393048.116574534" name="/" resourcePath="">
|
||||||
|
<toolChain id="cdt.managedbuild.toolchain.gnu.base.223412825" name="cdt.managedbuild.toolchain.gnu.base" superClass="cdt.managedbuild.toolchain.gnu.base">
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="cdt.managedbuild.target.gnu.platform.base.385578518" name="Debug Platform" osList="linux,hpux,aix,qnx" superClass="cdt.managedbuild.target.gnu.platform.base"/>
|
||||||
|
<builder command="make" enableCleanBuild="false" enabledIncrementalBuild="false" id="cdt.managedbuild.target.gnu.builder.base.156937647" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.base"/>
|
||||||
|
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1823835369" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
|
||||||
|
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.base.360207042" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.base">
|
||||||
|
<option id="gnu.cpp.compiler.option.preprocessor.def.145805607" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="CORE_EXPORT"/>
|
||||||
|
</option>
|
||||||
|
<option id="gnu.cpp.compiler.option.include.paths.1744312971" name="Include paths (-I)" superClass="gnu.cpp.compiler.option.include.paths" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/vtm-jni}""/>
|
||||||
|
</option>
|
||||||
|
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.111801070" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="cdt.managedbuild.tool.gnu.c.compiler.base.1095290162" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.base">
|
||||||
|
<option id="gnu.c.compiler.option.include.paths.542022155" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" valueType="includePath">
|
||||||
|
<listOptionValue builtIn="false" value="/usr/lib/jvm/java-7-openjdk-amd64/include"/>
|
||||||
|
<listOptionValue builtIn="false" value="/usr/lib/jvm/java-7-openjdk-amd64/include/linux"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.506992692" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="cdt.managedbuild.tool.gnu.c.linker.base.335083411" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.base"/>
|
||||||
|
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.base.1727739418" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.base">
|
||||||
|
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1457207088" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
</inputType>
|
||||||
|
</tool>
|
||||||
|
<tool id="cdt.managedbuild.tool.gnu.assembler.base.2019534622" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.base">
|
||||||
|
<option id="gnu.both.asm.option.include.paths.66240236" name="Include paths (-I)" superClass="gnu.both.asm.option.include.paths"/>
|
||||||
|
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.622641223" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
</cconfiguration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<project id="vtm-jni.null.1777174385" name="vtm-jni"/>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
|
<storageModule moduleId="scannerConfiguration">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.1587393048;cdt.managedbuild.toolchain.gnu.base.1587393048.116574534;cdt.managedbuild.tool.gnu.c.compiler.base.1095290162;cdt.managedbuild.tool.gnu.c.compiler.input.506992692">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
<scannerConfigBuildInfo instanceId="cdt.managedbuild.toolchain.gnu.base.1587393048;cdt.managedbuild.toolchain.gnu.base.1587393048.116574534;cdt.managedbuild.tool.gnu.cpp.compiler.base.360207042;cdt.managedbuild.tool.gnu.cpp.compiler.input.111801070">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||||
|
<configuration configurationName="Default">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/vtm-jni"/>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
</cproject>
|
||||||
14
jni/BUILD_JNI.txt
Normal file
14
jni/BUILD_JNI.txt
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Build native libraries:
|
||||||
|
- modify src/JniBuilder.java for your platform.
|
||||||
|
|
||||||
|
## to build android:
|
||||||
|
export NDK_HOME=/path_to_android_sdk
|
||||||
|
|
||||||
|
## compile
|
||||||
|
ant -v
|
||||||
|
|
||||||
|
## copy vtm/libs/armeabi* to vtm-android/libs
|
||||||
|
rm -rf ../../vtm-ext-libs/vtm-android/libs/*
|
||||||
|
cp -r ../libs/armeabi* ../../vtm-ext-libs/vtm-android/libs/
|
||||||
|
|
||||||
|
|
||||||
10
jni/build.gradle
Normal file
10
jni/build.gradle
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
apply plugin: 'java'
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compile "com.badlogicgames.gdx:gdx-jnigen:$gdxVersion"
|
||||||
|
}
|
||||||
|
|
||||||
|
sourceSets {
|
||||||
|
main.java.srcDirs = ['src']
|
||||||
|
main.resources.srcDirs = ['src']
|
||||||
|
}
|
||||||
3
jni/cp.sh
Executable file
3
jni/cp.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
cp libs/armeabi/libvtm-jni.so ../vtm-ext-libs/vtm-android/armeabi
|
||||||
|
cp libs/armeabi-v7a/libvtm-jni.so ../vtm-ext-libs/vtm-android/armeabi-v7a
|
||||||
|
cp libs/vtm-jni-natives.jar ../vtm-ext-libs/gdx/
|
||||||
22
jni/jni/Android.mk
Normal file
22
jni/jni/Android.mk
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
LOCAL_PATH:= $(call my-dir)
|
||||||
|
include $(CLEAR_VARS)
|
||||||
|
|
||||||
|
LOCAL_MODULE := vtm-jni
|
||||||
|
LOCAL_C_INCLUDES := . libtess2/Include
|
||||||
|
|
||||||
|
LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O2 -Wall -D__ANDROID__ -Wall -std=c99 -O2 -ffast-math -DNDEBUG
|
||||||
|
LOCAL_CPPFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O2 -Wall -D__ANDROID__ -Wall -std=c99 -O2 -ffast-math -DNDEBUG
|
||||||
|
LOCAL_LDLIBS := -lm -llog
|
||||||
|
LOCAL_ARM_MODE := arm
|
||||||
|
|
||||||
|
LOCAL_SRC_FILES := org.oscim.utils.TessJNI.cpp\
|
||||||
|
libtess2/Source/sweep.c\
|
||||||
|
libtess2/Source/priorityq.c\
|
||||||
|
libtess2/Source/bucketalloc.c\
|
||||||
|
libtess2/Source/geom.c\
|
||||||
|
libtess2/Source/tess.c\
|
||||||
|
libtess2/Source/dict.c\
|
||||||
|
libtess2/Source/mesh.c\
|
||||||
|
gl/utils.c
|
||||||
|
|
||||||
|
include $(BUILD_SHARED_LIBRARY)
|
||||||
2
jni/jni/Application.mk
Normal file
2
jni/jni/Application.mk
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
APP_ABI := armeabi armeabi-v7a x86
|
||||||
|
APP_PLATFORM := android-8
|
||||||
@@ -1,33 +1,33 @@
|
|||||||
<project name="android-natives" basedir="." default="postcompile">
|
<project name="android-natives" basedir="." default="postcompile">
|
||||||
<property environment="env" />
|
<property environment="env" />
|
||||||
<!-- the suffix ndk-build executable -->
|
<!-- the suffix ndk-build executable -->
|
||||||
<property name="ndkSuffix" value="" />
|
<property name="ndkSuffix" value="" />
|
||||||
|
|
||||||
<target name="clean" depends="check-for-ndk" if="has-ndk-build">
|
<target name="clean" depends="check-for-ndk" if="has-ndk-build">
|
||||||
<exec executable="${env.NDK_HOME}/ndk-build${ndkSuffix}" failonerror="true">
|
<exec executable="${env.NDK_HOME}/ndk-build${ndkSuffix}" failonerror="true">
|
||||||
<arg value="clean"/>
|
<arg value="clean"/>
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="precompile" depends="check-for-ndk">
|
<target name="precompile" depends="check-for-ndk">
|
||||||
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="compile-natives" depends="precompile" if="has-ndk-build">
|
<target name="compile-natives" depends="precompile" if="has-ndk-build">
|
||||||
<echo>ndk_home: ${env.NDK_HOME}</echo>
|
<echo>ndk_home: ${env.NDK_HOME}</echo>
|
||||||
<exec executable="${env.NDK_HOME}/ndk-build${ndkSuffix}" failonerror="true"/>
|
<exec executable="${env.NDK_HOME}/ndk-build${ndkSuffix}" failonerror="true"/>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="postcompile" depends="compile-natives">
|
<target name="postcompile" depends="compile-natives">
|
||||||
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="check-for-ndk">
|
<target name="check-for-ndk">
|
||||||
<condition property="ndk-build-found">
|
<condition property="ndk-build-found">
|
||||||
<available file="ndk-build${ndkSuffix}" filepath="${env.NDK_HOME}"/>
|
<available file="ndk-build${ndkSuffix}" filepath="${env.NDK_HOME}"/>
|
||||||
</condition>
|
</condition>
|
||||||
<condition property="has-ndk-build">
|
<condition property="has-ndk-build">
|
||||||
<equals arg1="${ndk-build-found}" arg2="true"/>
|
<equals arg1="${ndk-build-found}" arg2="true"/>
|
||||||
</condition>
|
</condition>
|
||||||
</target>
|
</target>
|
||||||
</project>
|
</project>
|
||||||
@@ -1,147 +1,153 @@
|
|||||||
<project name="vtm-jni-Linux-64" basedir="." default="postcompile">
|
<project name="vtm-jni-Linux-64" basedir="." default="postcompile">
|
||||||
<!-- include the environment -->
|
<!-- include the environment -->
|
||||||
<property environment="env"/>
|
<property environment="env"/>
|
||||||
<!-- output directory for temporary object files -->
|
<!-- output directory for temporary object files -->
|
||||||
<property name="buildDir" value="target/linux64" />
|
<property name="buildDir" value="target/linux64" />
|
||||||
<!-- output directory for the shared library -->
|
<!-- output directory for the shared library -->
|
||||||
<property name="libsDir" value="../libs/linux64" />
|
<property name="libsDir" value="../libs/linux64" />
|
||||||
<!-- the name of the shared library -->
|
<!-- the name of the shared library -->
|
||||||
<property name="libName" value="libvtm-jni64.so"/>
|
<property name="libName" value="libvtm-jni64.so"/>
|
||||||
<!-- the jni header jniPlatform to use -->
|
<!-- the jni header jniPlatform to use -->
|
||||||
<property name="jniPlatform" value="linux"/>
|
<property name="jniPlatform" value="linux"/>
|
||||||
<!-- the compilerPrefix for the C & C++ compilers -->
|
<!-- the compilerPrefix for the C & C++ compilers -->
|
||||||
<property name="compilerPrefix" value=""/>
|
<property name="compilerPrefix" value=""/>
|
||||||
<!-- the compilerSuffix for the C & C++ compilers -->
|
<!-- the compilerSuffix for the C & C++ compilers -->
|
||||||
<property name="compilerSuffix" value="" />
|
<property name="compilerSuffix" value="" />
|
||||||
|
|
||||||
<!-- define gcc compiler, options and files to compile -->
|
<!-- define gcc compiler, options and files to compile -->
|
||||||
<property name="gcc" value="${compilerPrefix}gcc${compilerSuffix}"/>
|
<property name="gcc" value="${compilerPrefix}gcc${compilerSuffix}"/>
|
||||||
<property name="gcc-opts" value="-c -Wall -O2 -mfpmath=sse -msse -fmessage-length=0 -m64 -fPIC -Wall -std=c99 -O2 -DTRILIBRARY -DREDUCED -DCDT_ONLY -DNO_TIMER"/>
|
<property name="gcc-opts" value="-c -Wall -O2 -mfpmath=sse -msse -fmessage-length=0 -m64 -fPIC -Wall -std=c99 -O2 -ffast-math -DNDEBUG"/>
|
||||||
<fileset id="gcc-files" dir="./">
|
<fileset id="gcc-files" dir="./">
|
||||||
<exclude name="target/"/>
|
<exclude name="target/"/>
|
||||||
<include name="memcpy_wrap.c"/>
|
<include name="memcpy_wrap.c"/>
|
||||||
<include name="gl/utils.c"/>
|
<include name="gl/utils.c"/>
|
||||||
<include name="triangle/TriangleJni.c"/>
|
<include name="libtess2/Source/bucketalloc.c"/>
|
||||||
<include name="triangle/triangle.c"/>
|
<include name="libtess2/Source/dict.c"/>
|
||||||
<include name="triangle/triangle_dbg.c"/>
|
<include name="libtess2/Source/geom.c"/>
|
||||||
|
<include name="libtess2/Source/mesh.c"/>
|
||||||
|
<include name="libtess2/Source/priorityq.c"/>
|
||||||
</fileset>
|
<include name="libtess2/Source/sweep.c"/>
|
||||||
|
<include name="libtess2/Source/tess.c"/>
|
||||||
<!-- define g++ compiler, options and files to compile -->
|
|
||||||
<property name="g++" value="${compilerPrefix}g++${compilerSuffix}"/>
|
|
||||||
<property name="g++-opts" value="-c -Wall -O2 -mfpmath=sse -msse -fmessage-length=0 -m64 -fPIC -Wall -std=c99 -O2 -DTRILIBRARY -DREDUCED -DCDT_ONLY -DNO_TIMER"/>
|
</fileset>
|
||||||
<fileset id="g++-files" dir="./">
|
|
||||||
<exclude name="target/"/>
|
<!-- define g++ compiler, options and files to compile -->
|
||||||
|
<property name="g++" value="${compilerPrefix}g++${compilerSuffix}"/>
|
||||||
|
<property name="g++-opts" value="-c -Wall -O2 -mfpmath=sse -msse -fmessage-length=0 -m64 -fPIC -Wall -std=c99 -O2 -ffast-math -DNDEBUG"/>
|
||||||
|
<fileset id="g++-files" dir="./">
|
||||||
|
<exclude name="target/"/>
|
||||||
<include name="**/*.cpp"/>
|
<include name="**/*.cpp"/>
|
||||||
|
|
||||||
|
|
||||||
</fileset>
|
</fileset>
|
||||||
|
|
||||||
<!-- define linker and options -->
|
<!-- define linker and options -->
|
||||||
<property name="linker" value="${compilerPrefix}g++${compilerSuffix}"/>
|
<property name="linker" value="${compilerPrefix}g++${compilerSuffix}"/>
|
||||||
<property name="linker-opts" value="-shared -m64 -Wl,-wrap,memcpy"/>
|
<property name="linker-opts" value="-shared -m64 -Wl,-wrap,memcpy"/>
|
||||||
<property name="libraries" value=""/>
|
<property name="libraries" value=""/>
|
||||||
|
|
||||||
<!-- cleans the build directory, removes all object files and shared libs -->
|
<!-- cleans the build directory, removes all object files and shared libs -->
|
||||||
<target name="clean">
|
<target name="clean">
|
||||||
<delete includeemptydirs="true" quiet="true">
|
<delete includeemptydirs="true" quiet="true">
|
||||||
<fileset dir="${buildDir}"/>
|
<fileset dir="${buildDir}"/>
|
||||||
<fileset dir="${libsDir}" includes="**/*" excludes="**/.svn"/>
|
<fileset dir="${libsDir}" includes="**/*" excludes="**/.svn"/>
|
||||||
</delete>
|
</delete>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="precompile">
|
<target name="precompile">
|
||||||
<condition property="compiler-found">
|
<condition property="compiler-found">
|
||||||
<and>
|
<and>
|
||||||
<or>
|
<or>
|
||||||
<!-- Include both b/c Windows might be either -->
|
<!-- Include both b/c Windows might be either -->
|
||||||
<available file="${g++}" filepath="${env.PATH}"/>
|
<available file="${g++}" filepath="${env.PATH}"/>
|
||||||
<available file="${g++}" filepath="${env.Path}"/>
|
<available file="${g++}" filepath="${env.Path}"/>
|
||||||
</or>
|
</or>
|
||||||
<or>
|
<or>
|
||||||
<!-- Include both b/c Windows might be either -->
|
<!-- Include both b/c Windows might be either -->
|
||||||
<available file="${gcc}" filepath="${env.PATH}"/>
|
<available file="${gcc}" filepath="${env.PATH}"/>
|
||||||
<available file="${gcc}" filepath="${env.Path}"/>
|
<available file="${gcc}" filepath="${env.Path}"/>
|
||||||
</or>
|
</or>
|
||||||
</and>
|
</and>
|
||||||
</condition>
|
</condition>
|
||||||
<condition property="has-compiler">
|
<condition property="has-compiler">
|
||||||
<equals arg1="${compiler-found}" arg2="true"/>
|
<equals arg1="${compiler-found}" arg2="true"/>
|
||||||
</condition>
|
</condition>
|
||||||
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="create-build-dir" depends="precompile" if="has-compiler">
|
<target name="create-build-dir" depends="precompile" if="has-compiler">
|
||||||
<!-- FIXME this is pretty nasty :/ -->
|
<!-- FIXME this is pretty nasty :/ -->
|
||||||
<copy todir="${buildDir}">
|
<copy todir="${buildDir}">
|
||||||
<fileset refid="g++-files"/>
|
<fileset refid="g++-files"/>
|
||||||
<fileset refid="gcc-files"/>
|
<fileset refid="gcc-files"/>
|
||||||
</copy>
|
</copy>
|
||||||
<delete>
|
<delete>
|
||||||
<fileset dir="${buildDir}">
|
<fileset dir="${buildDir}">
|
||||||
<include name="*"/>
|
<include name="*"/>
|
||||||
<exclude name="*.o"/>
|
<exclude name="*.o"/>
|
||||||
</fileset>
|
</fileset>
|
||||||
</delete>
|
</delete>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- compiles all C and C++ files to object files in the build directory -->
|
<!-- compiles all C and C++ files to object files in the build directory -->
|
||||||
<target name="compile" depends="create-build-dir" if="has-compiler">
|
<target name="compile" depends="create-build-dir" if="has-compiler">
|
||||||
<mkdir dir="${buildDir}"/>
|
<mkdir dir="${buildDir}"/>
|
||||||
<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
|
<apply failonerror="true" executable="${g++}" dest="${buildDir}" verbose="true">
|
||||||
<arg line="${g++-opts}"/>
|
<arg line="${g++-opts}"/>
|
||||||
<arg value="-Ijni-headers"/>
|
<arg value="-Ijni-headers"/>
|
||||||
<arg value="-Ijni-headers/${jniPlatform}"/>
|
<arg value="-Ijni-headers/${jniPlatform}"/>
|
||||||
<arg value="-I."/>
|
<arg value="-I."/>
|
||||||
<arg value="-I."/>
|
<arg value="-I."/>
|
||||||
|
<arg value="-Ilibtess2/Include"/>
|
||||||
<srcfile/>
|
|
||||||
<arg value="-o"/>
|
<srcfile/>
|
||||||
<targetfile/>
|
<arg value="-o"/>
|
||||||
<fileset refid="g++-files"/>
|
<targetfile/>
|
||||||
<compositemapper>
|
<fileset refid="g++-files"/>
|
||||||
<mapper type="glob" from="*.cpp" to="*.o"/>
|
<compositemapper>
|
||||||
<mapper type="glob" from="*.mm" to="*.o"/>
|
<mapper type="glob" from="*.cpp" to="*.o"/>
|
||||||
</compositemapper>
|
<mapper type="glob" from="*.mm" to="*.o"/>
|
||||||
</apply>
|
</compositemapper>
|
||||||
<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
|
</apply>
|
||||||
<arg line="${gcc-opts}"/>
|
<apply failonerror="true" executable="${gcc}" dest="${buildDir}" verbose="true">
|
||||||
<arg value="-Ijni-headers"/>
|
<arg line="${gcc-opts}"/>
|
||||||
<arg value="-Ijni-headers/${jniPlatform}"/>
|
<arg value="-Ijni-headers"/>
|
||||||
<arg value="-I."/>
|
<arg value="-Ijni-headers/${jniPlatform}"/>
|
||||||
|
<arg value="-I."/>
|
||||||
<arg value="-I."/>
|
<arg value="-I."/>
|
||||||
|
<arg value="-Ilibtess2/Include"/>
|
||||||
<srcfile/>
|
|
||||||
<arg value="-o"/>
|
<srcfile/>
|
||||||
<targetfile/>
|
<arg value="-o"/>
|
||||||
<fileset refid="gcc-files"/>
|
<targetfile/>
|
||||||
<compositemapper>
|
<fileset refid="gcc-files"/>
|
||||||
|
<compositemapper>
|
||||||
<mapper type="glob" from="*.c" to="*.o"/>
|
<mapper type="glob" from="*.c" to="*.o"/>
|
||||||
<mapper type="glob" from="*.m" to="*.o"/>
|
<mapper type="glob" from="*.m" to="*.o"/>
|
||||||
</compositemapper>
|
</compositemapper>
|
||||||
</apply>
|
</apply>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<!-- links the shared library based on the previously compiled object files -->
|
<!-- links the shared library based on the previously compiled object files -->
|
||||||
<target name="link" depends="compile" if="has-compiler">
|
<target name="link" depends="compile" if="has-compiler">
|
||||||
<fileset dir="${buildDir}" id="objFileSet">
|
<fileset dir="${buildDir}" id="objFileSet">
|
||||||
<patternset>
|
<patternset>
|
||||||
<include name="**/*.o" />
|
<include name="**/*.o" />
|
||||||
</patternset>
|
</patternset>
|
||||||
</fileset>
|
</fileset>
|
||||||
<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
|
<pathconvert pathsep=" " property="objFiles" refid="objFileSet" />
|
||||||
<mkdir dir="${libsDir}" />
|
<mkdir dir="${libsDir}" />
|
||||||
<exec executable="${linker}" failonerror="true" dir="${buildDir}">
|
<exec executable="${linker}" failonerror="true" dir="${buildDir}">
|
||||||
<arg line="${linker-opts}" />
|
<arg line="${linker-opts}" />
|
||||||
<arg value="-o" />
|
<arg value="-o" />
|
||||||
<arg path="${libsDir}/${libName}" />
|
<arg path="${libsDir}/${libName}" />
|
||||||
<arg line="${objFiles}"/>
|
<arg line="${objFiles}"/>
|
||||||
<arg line="${libraries}" />
|
<arg line="${libraries}" />
|
||||||
</exec>
|
</exec>
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="postcompile" depends="link">
|
<target name="postcompile" depends="link">
|
||||||
|
|
||||||
</target>
|
</target>
|
||||||
</project>
|
</project>
|
||||||
@@ -1,20 +1,29 @@
|
|||||||
<project name="vtm-jni-natives" basedir="." default="all">
|
<project name="vtm-jni-natives" basedir="." default="all">
|
||||||
<target name="clean">
|
<target name="clean">
|
||||||
<ant antfile="build-linux64.xml" target="clean"/>
|
|
||||||
<ant antfile="build-android32.xml" target="clean"/>
|
<ant antfile="build-android32.xml" target="clean"/>
|
||||||
|
<ant antfile="build-linux64.xml" target="clean"/>
|
||||||
|
<ant antfile="build-linux32.xml" target="clean"/>
|
||||||
|
<ant antfile="build-windows32.xml" target="clean"/>
|
||||||
|
<ant antfile="build-windows64.xml" target="clean"/>
|
||||||
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="compile-natives">
|
<target name="compile-natives">
|
||||||
<ant antfile="build-linux64.xml"/>
|
|
||||||
<ant antfile="build-android32.xml"/>
|
<ant antfile="build-android32.xml"/>
|
||||||
|
<ant antfile="build-linux64.xml"/>
|
||||||
|
<ant antfile="build-linux32.xml"/>
|
||||||
|
<ant antfile="build-windows32.xml"/>
|
||||||
|
<ant antfile="build-windows64.xml"/>
|
||||||
|
|
||||||
</target>
|
</target>
|
||||||
|
|
||||||
<target name="pack-natives">
|
<target name="pack-natives">
|
||||||
<jar destfile="../libs/vtm-jni-natives.jar">
|
<jar destfile="../libs/vtm-jni-natives.jar">
|
||||||
<fileset dir="../libs/linux64" includes="libvtm-jni64.so"/>
|
<fileset dir="../libs/linux64" includes="libvtm-jni64.so"/>
|
||||||
<fileset dir="../libs/android32" includes="libvtm-jni.so"/>
|
<fileset dir="../libs/linux32" includes="libvtm-jni.so"/>
|
||||||
|
<fileset dir="../libs/macosx32" includes="libvtm-jni.so"/>
|
||||||
|
<fileset dir="../libs/windows32" includes="libvtm-jni.dylib"/>
|
||||||
|
<fileset dir="../libs/windows64" includes="libvtm-jni.a"/>
|
||||||
|
|
||||||
</jar>
|
</jar>
|
||||||
</target>
|
</target>
|
||||||
@@ -3,10 +3,15 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <alloca.h>
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#ifndef __WIN32__
|
||||||
|
#include <alloca.h>
|
||||||
|
//#else
|
||||||
|
//#define alloca(size) __builtin_alloca(size)
|
||||||
|
#endif
|
||||||
|
|
||||||
//#ifndef uintptr_t
|
//#ifndef uintptr_t
|
||||||
//typedef unsigned long uintptr_t;
|
//typedef unsigned long uintptr_t;
|
||||||
//#endif
|
//#endif
|
||||||
@@ -72,7 +77,7 @@ void JNI(setColorBlend)(JNIEnv *env, jclass* clazz, jint location, jint c1, jint
|
|||||||
#endif // 0
|
#endif // 0
|
||||||
|
|
||||||
#undef JNI
|
#undef JNI
|
||||||
#define JNI(X) JNIEXPORT Java_org_oscim_utils_Matrix4_##X
|
#define JNI(X) JNIEXPORT Java_org_oscim_renderer_GLMatrix_##X
|
||||||
|
|
||||||
#define CAST(x) (float *)(uintptr_t) x
|
#define CAST(x) (float *)(uintptr_t) x
|
||||||
#define MAT_SIZE 16 * sizeof(float)
|
#define MAT_SIZE 16 * sizeof(float)
|
||||||
@@ -92,6 +97,9 @@ transposeM(float* mTrans, int mTransOffset, float* m, int mOffset);
|
|||||||
static inline void
|
static inline void
|
||||||
matrix4_proj(float* mat, float* vec);
|
matrix4_proj(float* mat, float* vec);
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
matrix4_proj2D(float* mat, float* vec, float *out);
|
||||||
|
|
||||||
jlong JNI(alloc)(JNIEnv *env, jclass* clazz)
|
jlong JNI(alloc)(JNIEnv *env, jclass* clazz)
|
||||||
{
|
{
|
||||||
return (long) calloc(16, sizeof(float));
|
return (long) calloc(16, sizeof(float));
|
||||||
@@ -239,16 +247,59 @@ void JNI(strans)(JNIEnv* env, jclass* clazz, jlong ptr_r, jlong ptr_a)
|
|||||||
transposeM(matr, 0, mata, 0);
|
transposeM(matr, 0, mata, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JNI(prj)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec)
|
void JNI(prj)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec){
|
||||||
|
float* m = CAST(ptr);
|
||||||
|
float* vec = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_vec, 0);
|
||||||
|
|
||||||
|
matrix4_proj(m, vec);
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_vec, vec, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JNI(prj3D)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec, int offset, int cnt)
|
||||||
{
|
{
|
||||||
float* m = CAST(ptr);
|
float* m = CAST(ptr);
|
||||||
float* vec = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_vec, 0);
|
float* vec = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_vec, 0);
|
||||||
|
|
||||||
matrix4_proj(m, vec);
|
int length = cnt * 3;
|
||||||
|
for (int i = offset * 3; i < length; i += 3)
|
||||||
|
matrix4_proj(m, (vec + i));
|
||||||
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, obj_vec, vec, 0);
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_vec, vec, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JNI(prj2D)(JNIEnv* env, jclass* clazz, jlong ptr, jfloatArray obj_vec, int offset, int cnt)
|
||||||
|
{
|
||||||
|
float* m = CAST(ptr);
|
||||||
|
float* vec = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_vec, 0);
|
||||||
|
|
||||||
|
offset *= 2;
|
||||||
|
|
||||||
|
for (int end = offset + cnt * 2; offset < end; offset += 2)
|
||||||
|
matrix4_proj2D(m, (vec + offset), (vec + offset));
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_vec, vec, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void JNI(prj2D2)(JNIEnv* env, jclass* clazz, jlong ptr,
|
||||||
|
jfloatArray obj_src_vec, int src_offset,
|
||||||
|
jfloatArray obj_dst_vec, int dst_offset, int cnt)
|
||||||
|
{
|
||||||
|
float* m = CAST(ptr);
|
||||||
|
float* src = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_src_vec, 0);
|
||||||
|
float* dst = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_dst_vec, 0);
|
||||||
|
|
||||||
|
int off_src = src_offset * 2;
|
||||||
|
int off_dst = dst_offset * 2;
|
||||||
|
|
||||||
|
|
||||||
|
for (int end = off_src + cnt * 2; off_src < end; off_src += 2, off_dst += 2)
|
||||||
|
matrix4_proj2D(m, (src + off_src), (dst + off_dst));
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_dst_vec, dst, 0);
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_src_vec, src, 0);
|
||||||
|
}
|
||||||
|
|
||||||
static float someRandomEpsilon = 1.0f / (1 << 11);
|
static float someRandomEpsilon = 1.0f / (1 << 11);
|
||||||
|
|
||||||
void JNI(addDepthOffset)(JNIEnv* env, jclass* clazz, jlong ptr, jint delta)
|
void JNI(addDepthOffset)(JNIEnv* env, jclass* clazz, jlong ptr, jint delta)
|
||||||
@@ -485,3 +536,15 @@ matrix4_proj(float* mat, float* vec)
|
|||||||
vec[1] = y;
|
vec[1] = y;
|
||||||
vec[2] = z;
|
vec[2] = z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
matrix4_proj2D(float* mat, float* vec, float *out)
|
||||||
|
{
|
||||||
|
|
||||||
|
float inv_w = 1.0f / (vec[0] * mat[M30] + vec[1] * mat[M31] + mat[M33]);
|
||||||
|
float x = (vec[0] * mat[M00] + vec[1] * mat[M01] + mat[M03]) * inv_w;
|
||||||
|
float y = (vec[0] * mat[M10] + vec[1] * mat[M11] + mat[M13]) * inv_w;
|
||||||
|
|
||||||
|
out[0] = x;
|
||||||
|
out[1] = y;
|
||||||
|
}
|
||||||
523
jni/jni/jni-headers/classfile_constants.h
Normal file
523
jni/jni/jni-headers/classfile_constants.h
Normal file
@@ -0,0 +1,523 @@
|
|||||||
|
/*
|
||||||
|
* %W% %E%
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef CLASSFILE_CONSTANTS_H
|
||||||
|
#define CLASSFILE_CONSTANTS_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Flags */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JVM_ACC_PUBLIC = 0x0001,
|
||||||
|
JVM_ACC_PRIVATE = 0x0002,
|
||||||
|
JVM_ACC_PROTECTED = 0x0004,
|
||||||
|
JVM_ACC_STATIC = 0x0008,
|
||||||
|
JVM_ACC_FINAL = 0x0010,
|
||||||
|
JVM_ACC_SYNCHRONIZED = 0x0020,
|
||||||
|
JVM_ACC_SUPER = 0x0020,
|
||||||
|
JVM_ACC_VOLATILE = 0x0040,
|
||||||
|
JVM_ACC_BRIDGE = 0x0040,
|
||||||
|
JVM_ACC_TRANSIENT = 0x0080,
|
||||||
|
JVM_ACC_VARARGS = 0x0080,
|
||||||
|
JVM_ACC_NATIVE = 0x0100,
|
||||||
|
JVM_ACC_INTERFACE = 0x0200,
|
||||||
|
JVM_ACC_ABSTRACT = 0x0400,
|
||||||
|
JVM_ACC_STRICT = 0x0800,
|
||||||
|
JVM_ACC_SYNTHETIC = 0x1000,
|
||||||
|
JVM_ACC_ANNOTATION = 0x2000,
|
||||||
|
JVM_ACC_ENUM = 0x4000
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Used in newarray instruction. */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JVM_T_BOOLEAN = 4,
|
||||||
|
JVM_T_CHAR = 5,
|
||||||
|
JVM_T_FLOAT = 6,
|
||||||
|
JVM_T_DOUBLE = 7,
|
||||||
|
JVM_T_BYTE = 8,
|
||||||
|
JVM_T_SHORT = 9,
|
||||||
|
JVM_T_INT = 10,
|
||||||
|
JVM_T_LONG = 11
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Constant Pool Entries */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JVM_CONSTANT_Utf8 = 1,
|
||||||
|
JVM_CONSTANT_Unicode = 2, /* unused */
|
||||||
|
JVM_CONSTANT_Integer = 3,
|
||||||
|
JVM_CONSTANT_Float = 4,
|
||||||
|
JVM_CONSTANT_Long = 5,
|
||||||
|
JVM_CONSTANT_Double = 6,
|
||||||
|
JVM_CONSTANT_Class = 7,
|
||||||
|
JVM_CONSTANT_String = 8,
|
||||||
|
JVM_CONSTANT_Fieldref = 9,
|
||||||
|
JVM_CONSTANT_Methodref = 10,
|
||||||
|
JVM_CONSTANT_InterfaceMethodref = 11,
|
||||||
|
JVM_CONSTANT_NameAndType = 12
|
||||||
|
};
|
||||||
|
|
||||||
|
/* StackMapTable type item numbers */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JVM_ITEM_Top = 0,
|
||||||
|
JVM_ITEM_Integer = 1,
|
||||||
|
JVM_ITEM_Float = 2,
|
||||||
|
JVM_ITEM_Double = 3,
|
||||||
|
JVM_ITEM_Long = 4,
|
||||||
|
JVM_ITEM_Null = 5,
|
||||||
|
JVM_ITEM_UninitializedThis = 6,
|
||||||
|
JVM_ITEM_Object = 7,
|
||||||
|
JVM_ITEM_Uninitialized = 8
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Type signatures */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JVM_SIGNATURE_ARRAY = '[',
|
||||||
|
JVM_SIGNATURE_BYTE = 'B',
|
||||||
|
JVM_SIGNATURE_CHAR = 'C',
|
||||||
|
JVM_SIGNATURE_CLASS = 'L',
|
||||||
|
JVM_SIGNATURE_ENDCLASS = ';',
|
||||||
|
JVM_SIGNATURE_ENUM = 'E',
|
||||||
|
JVM_SIGNATURE_FLOAT = 'F',
|
||||||
|
JVM_SIGNATURE_DOUBLE = 'D',
|
||||||
|
JVM_SIGNATURE_FUNC = '(',
|
||||||
|
JVM_SIGNATURE_ENDFUNC = ')',
|
||||||
|
JVM_SIGNATURE_INT = 'I',
|
||||||
|
JVM_SIGNATURE_LONG = 'J',
|
||||||
|
JVM_SIGNATURE_SHORT = 'S',
|
||||||
|
JVM_SIGNATURE_VOID = 'V',
|
||||||
|
JVM_SIGNATURE_BOOLEAN = 'Z'
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Opcodes */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JVM_OPC_nop = 0,
|
||||||
|
JVM_OPC_aconst_null = 1,
|
||||||
|
JVM_OPC_iconst_m1 = 2,
|
||||||
|
JVM_OPC_iconst_0 = 3,
|
||||||
|
JVM_OPC_iconst_1 = 4,
|
||||||
|
JVM_OPC_iconst_2 = 5,
|
||||||
|
JVM_OPC_iconst_3 = 6,
|
||||||
|
JVM_OPC_iconst_4 = 7,
|
||||||
|
JVM_OPC_iconst_5 = 8,
|
||||||
|
JVM_OPC_lconst_0 = 9,
|
||||||
|
JVM_OPC_lconst_1 = 10,
|
||||||
|
JVM_OPC_fconst_0 = 11,
|
||||||
|
JVM_OPC_fconst_1 = 12,
|
||||||
|
JVM_OPC_fconst_2 = 13,
|
||||||
|
JVM_OPC_dconst_0 = 14,
|
||||||
|
JVM_OPC_dconst_1 = 15,
|
||||||
|
JVM_OPC_bipush = 16,
|
||||||
|
JVM_OPC_sipush = 17,
|
||||||
|
JVM_OPC_ldc = 18,
|
||||||
|
JVM_OPC_ldc_w = 19,
|
||||||
|
JVM_OPC_ldc2_w = 20,
|
||||||
|
JVM_OPC_iload = 21,
|
||||||
|
JVM_OPC_lload = 22,
|
||||||
|
JVM_OPC_fload = 23,
|
||||||
|
JVM_OPC_dload = 24,
|
||||||
|
JVM_OPC_aload = 25,
|
||||||
|
JVM_OPC_iload_0 = 26,
|
||||||
|
JVM_OPC_iload_1 = 27,
|
||||||
|
JVM_OPC_iload_2 = 28,
|
||||||
|
JVM_OPC_iload_3 = 29,
|
||||||
|
JVM_OPC_lload_0 = 30,
|
||||||
|
JVM_OPC_lload_1 = 31,
|
||||||
|
JVM_OPC_lload_2 = 32,
|
||||||
|
JVM_OPC_lload_3 = 33,
|
||||||
|
JVM_OPC_fload_0 = 34,
|
||||||
|
JVM_OPC_fload_1 = 35,
|
||||||
|
JVM_OPC_fload_2 = 36,
|
||||||
|
JVM_OPC_fload_3 = 37,
|
||||||
|
JVM_OPC_dload_0 = 38,
|
||||||
|
JVM_OPC_dload_1 = 39,
|
||||||
|
JVM_OPC_dload_2 = 40,
|
||||||
|
JVM_OPC_dload_3 = 41,
|
||||||
|
JVM_OPC_aload_0 = 42,
|
||||||
|
JVM_OPC_aload_1 = 43,
|
||||||
|
JVM_OPC_aload_2 = 44,
|
||||||
|
JVM_OPC_aload_3 = 45,
|
||||||
|
JVM_OPC_iaload = 46,
|
||||||
|
JVM_OPC_laload = 47,
|
||||||
|
JVM_OPC_faload = 48,
|
||||||
|
JVM_OPC_daload = 49,
|
||||||
|
JVM_OPC_aaload = 50,
|
||||||
|
JVM_OPC_baload = 51,
|
||||||
|
JVM_OPC_caload = 52,
|
||||||
|
JVM_OPC_saload = 53,
|
||||||
|
JVM_OPC_istore = 54,
|
||||||
|
JVM_OPC_lstore = 55,
|
||||||
|
JVM_OPC_fstore = 56,
|
||||||
|
JVM_OPC_dstore = 57,
|
||||||
|
JVM_OPC_astore = 58,
|
||||||
|
JVM_OPC_istore_0 = 59,
|
||||||
|
JVM_OPC_istore_1 = 60,
|
||||||
|
JVM_OPC_istore_2 = 61,
|
||||||
|
JVM_OPC_istore_3 = 62,
|
||||||
|
JVM_OPC_lstore_0 = 63,
|
||||||
|
JVM_OPC_lstore_1 = 64,
|
||||||
|
JVM_OPC_lstore_2 = 65,
|
||||||
|
JVM_OPC_lstore_3 = 66,
|
||||||
|
JVM_OPC_fstore_0 = 67,
|
||||||
|
JVM_OPC_fstore_1 = 68,
|
||||||
|
JVM_OPC_fstore_2 = 69,
|
||||||
|
JVM_OPC_fstore_3 = 70,
|
||||||
|
JVM_OPC_dstore_0 = 71,
|
||||||
|
JVM_OPC_dstore_1 = 72,
|
||||||
|
JVM_OPC_dstore_2 = 73,
|
||||||
|
JVM_OPC_dstore_3 = 74,
|
||||||
|
JVM_OPC_astore_0 = 75,
|
||||||
|
JVM_OPC_astore_1 = 76,
|
||||||
|
JVM_OPC_astore_2 = 77,
|
||||||
|
JVM_OPC_astore_3 = 78,
|
||||||
|
JVM_OPC_iastore = 79,
|
||||||
|
JVM_OPC_lastore = 80,
|
||||||
|
JVM_OPC_fastore = 81,
|
||||||
|
JVM_OPC_dastore = 82,
|
||||||
|
JVM_OPC_aastore = 83,
|
||||||
|
JVM_OPC_bastore = 84,
|
||||||
|
JVM_OPC_castore = 85,
|
||||||
|
JVM_OPC_sastore = 86,
|
||||||
|
JVM_OPC_pop = 87,
|
||||||
|
JVM_OPC_pop2 = 88,
|
||||||
|
JVM_OPC_dup = 89,
|
||||||
|
JVM_OPC_dup_x1 = 90,
|
||||||
|
JVM_OPC_dup_x2 = 91,
|
||||||
|
JVM_OPC_dup2 = 92,
|
||||||
|
JVM_OPC_dup2_x1 = 93,
|
||||||
|
JVM_OPC_dup2_x2 = 94,
|
||||||
|
JVM_OPC_swap = 95,
|
||||||
|
JVM_OPC_iadd = 96,
|
||||||
|
JVM_OPC_ladd = 97,
|
||||||
|
JVM_OPC_fadd = 98,
|
||||||
|
JVM_OPC_dadd = 99,
|
||||||
|
JVM_OPC_isub = 100,
|
||||||
|
JVM_OPC_lsub = 101,
|
||||||
|
JVM_OPC_fsub = 102,
|
||||||
|
JVM_OPC_dsub = 103,
|
||||||
|
JVM_OPC_imul = 104,
|
||||||
|
JVM_OPC_lmul = 105,
|
||||||
|
JVM_OPC_fmul = 106,
|
||||||
|
JVM_OPC_dmul = 107,
|
||||||
|
JVM_OPC_idiv = 108,
|
||||||
|
JVM_OPC_ldiv = 109,
|
||||||
|
JVM_OPC_fdiv = 110,
|
||||||
|
JVM_OPC_ddiv = 111,
|
||||||
|
JVM_OPC_irem = 112,
|
||||||
|
JVM_OPC_lrem = 113,
|
||||||
|
JVM_OPC_frem = 114,
|
||||||
|
JVM_OPC_drem = 115,
|
||||||
|
JVM_OPC_ineg = 116,
|
||||||
|
JVM_OPC_lneg = 117,
|
||||||
|
JVM_OPC_fneg = 118,
|
||||||
|
JVM_OPC_dneg = 119,
|
||||||
|
JVM_OPC_ishl = 120,
|
||||||
|
JVM_OPC_lshl = 121,
|
||||||
|
JVM_OPC_ishr = 122,
|
||||||
|
JVM_OPC_lshr = 123,
|
||||||
|
JVM_OPC_iushr = 124,
|
||||||
|
JVM_OPC_lushr = 125,
|
||||||
|
JVM_OPC_iand = 126,
|
||||||
|
JVM_OPC_land = 127,
|
||||||
|
JVM_OPC_ior = 128,
|
||||||
|
JVM_OPC_lor = 129,
|
||||||
|
JVM_OPC_ixor = 130,
|
||||||
|
JVM_OPC_lxor = 131,
|
||||||
|
JVM_OPC_iinc = 132,
|
||||||
|
JVM_OPC_i2l = 133,
|
||||||
|
JVM_OPC_i2f = 134,
|
||||||
|
JVM_OPC_i2d = 135,
|
||||||
|
JVM_OPC_l2i = 136,
|
||||||
|
JVM_OPC_l2f = 137,
|
||||||
|
JVM_OPC_l2d = 138,
|
||||||
|
JVM_OPC_f2i = 139,
|
||||||
|
JVM_OPC_f2l = 140,
|
||||||
|
JVM_OPC_f2d = 141,
|
||||||
|
JVM_OPC_d2i = 142,
|
||||||
|
JVM_OPC_d2l = 143,
|
||||||
|
JVM_OPC_d2f = 144,
|
||||||
|
JVM_OPC_i2b = 145,
|
||||||
|
JVM_OPC_i2c = 146,
|
||||||
|
JVM_OPC_i2s = 147,
|
||||||
|
JVM_OPC_lcmp = 148,
|
||||||
|
JVM_OPC_fcmpl = 149,
|
||||||
|
JVM_OPC_fcmpg = 150,
|
||||||
|
JVM_OPC_dcmpl = 151,
|
||||||
|
JVM_OPC_dcmpg = 152,
|
||||||
|
JVM_OPC_ifeq = 153,
|
||||||
|
JVM_OPC_ifne = 154,
|
||||||
|
JVM_OPC_iflt = 155,
|
||||||
|
JVM_OPC_ifge = 156,
|
||||||
|
JVM_OPC_ifgt = 157,
|
||||||
|
JVM_OPC_ifle = 158,
|
||||||
|
JVM_OPC_if_icmpeq = 159,
|
||||||
|
JVM_OPC_if_icmpne = 160,
|
||||||
|
JVM_OPC_if_icmplt = 161,
|
||||||
|
JVM_OPC_if_icmpge = 162,
|
||||||
|
JVM_OPC_if_icmpgt = 163,
|
||||||
|
JVM_OPC_if_icmple = 164,
|
||||||
|
JVM_OPC_if_acmpeq = 165,
|
||||||
|
JVM_OPC_if_acmpne = 166,
|
||||||
|
JVM_OPC_goto = 167,
|
||||||
|
JVM_OPC_jsr = 168,
|
||||||
|
JVM_OPC_ret = 169,
|
||||||
|
JVM_OPC_tableswitch = 170,
|
||||||
|
JVM_OPC_lookupswitch = 171,
|
||||||
|
JVM_OPC_ireturn = 172,
|
||||||
|
JVM_OPC_lreturn = 173,
|
||||||
|
JVM_OPC_freturn = 174,
|
||||||
|
JVM_OPC_dreturn = 175,
|
||||||
|
JVM_OPC_areturn = 176,
|
||||||
|
JVM_OPC_return = 177,
|
||||||
|
JVM_OPC_getstatic = 178,
|
||||||
|
JVM_OPC_putstatic = 179,
|
||||||
|
JVM_OPC_getfield = 180,
|
||||||
|
JVM_OPC_putfield = 181,
|
||||||
|
JVM_OPC_invokevirtual = 182,
|
||||||
|
JVM_OPC_invokespecial = 183,
|
||||||
|
JVM_OPC_invokestatic = 184,
|
||||||
|
JVM_OPC_invokeinterface = 185,
|
||||||
|
JVM_OPC_xxxunusedxxx = 186,
|
||||||
|
JVM_OPC_new = 187,
|
||||||
|
JVM_OPC_newarray = 188,
|
||||||
|
JVM_OPC_anewarray = 189,
|
||||||
|
JVM_OPC_arraylength = 190,
|
||||||
|
JVM_OPC_athrow = 191,
|
||||||
|
JVM_OPC_checkcast = 192,
|
||||||
|
JVM_OPC_instanceof = 193,
|
||||||
|
JVM_OPC_monitorenter = 194,
|
||||||
|
JVM_OPC_monitorexit = 195,
|
||||||
|
JVM_OPC_wide = 196,
|
||||||
|
JVM_OPC_multianewarray = 197,
|
||||||
|
JVM_OPC_ifnull = 198,
|
||||||
|
JVM_OPC_ifnonnull = 199,
|
||||||
|
JVM_OPC_goto_w = 200,
|
||||||
|
JVM_OPC_jsr_w = 201,
|
||||||
|
JVM_OPC_MAX = 201
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Opcode length initializer, use with something like:
|
||||||
|
* unsigned char opcode_length[JVM_OPC_MAX+1] = JVM_OPCODE_LENGTH_INITIALIZER;
|
||||||
|
*/
|
||||||
|
#define JVM_OPCODE_LENGTH_INITIALIZER { \
|
||||||
|
1, /* nop */ \
|
||||||
|
1, /* aconst_null */ \
|
||||||
|
1, /* iconst_m1 */ \
|
||||||
|
1, /* iconst_0 */ \
|
||||||
|
1, /* iconst_1 */ \
|
||||||
|
1, /* iconst_2 */ \
|
||||||
|
1, /* iconst_3 */ \
|
||||||
|
1, /* iconst_4 */ \
|
||||||
|
1, /* iconst_5 */ \
|
||||||
|
1, /* lconst_0 */ \
|
||||||
|
1, /* lconst_1 */ \
|
||||||
|
1, /* fconst_0 */ \
|
||||||
|
1, /* fconst_1 */ \
|
||||||
|
1, /* fconst_2 */ \
|
||||||
|
1, /* dconst_0 */ \
|
||||||
|
1, /* dconst_1 */ \
|
||||||
|
2, /* bipush */ \
|
||||||
|
3, /* sipush */ \
|
||||||
|
2, /* ldc */ \
|
||||||
|
3, /* ldc_w */ \
|
||||||
|
3, /* ldc2_w */ \
|
||||||
|
2, /* iload */ \
|
||||||
|
2, /* lload */ \
|
||||||
|
2, /* fload */ \
|
||||||
|
2, /* dload */ \
|
||||||
|
2, /* aload */ \
|
||||||
|
1, /* iload_0 */ \
|
||||||
|
1, /* iload_1 */ \
|
||||||
|
1, /* iload_2 */ \
|
||||||
|
1, /* iload_3 */ \
|
||||||
|
1, /* lload_0 */ \
|
||||||
|
1, /* lload_1 */ \
|
||||||
|
1, /* lload_2 */ \
|
||||||
|
1, /* lload_3 */ \
|
||||||
|
1, /* fload_0 */ \
|
||||||
|
1, /* fload_1 */ \
|
||||||
|
1, /* fload_2 */ \
|
||||||
|
1, /* fload_3 */ \
|
||||||
|
1, /* dload_0 */ \
|
||||||
|
1, /* dload_1 */ \
|
||||||
|
1, /* dload_2 */ \
|
||||||
|
1, /* dload_3 */ \
|
||||||
|
1, /* aload_0 */ \
|
||||||
|
1, /* aload_1 */ \
|
||||||
|
1, /* aload_2 */ \
|
||||||
|
1, /* aload_3 */ \
|
||||||
|
1, /* iaload */ \
|
||||||
|
1, /* laload */ \
|
||||||
|
1, /* faload */ \
|
||||||
|
1, /* daload */ \
|
||||||
|
1, /* aaload */ \
|
||||||
|
1, /* baload */ \
|
||||||
|
1, /* caload */ \
|
||||||
|
1, /* saload */ \
|
||||||
|
2, /* istore */ \
|
||||||
|
2, /* lstore */ \
|
||||||
|
2, /* fstore */ \
|
||||||
|
2, /* dstore */ \
|
||||||
|
2, /* astore */ \
|
||||||
|
1, /* istore_0 */ \
|
||||||
|
1, /* istore_1 */ \
|
||||||
|
1, /* istore_2 */ \
|
||||||
|
1, /* istore_3 */ \
|
||||||
|
1, /* lstore_0 */ \
|
||||||
|
1, /* lstore_1 */ \
|
||||||
|
1, /* lstore_2 */ \
|
||||||
|
1, /* lstore_3 */ \
|
||||||
|
1, /* fstore_0 */ \
|
||||||
|
1, /* fstore_1 */ \
|
||||||
|
1, /* fstore_2 */ \
|
||||||
|
1, /* fstore_3 */ \
|
||||||
|
1, /* dstore_0 */ \
|
||||||
|
1, /* dstore_1 */ \
|
||||||
|
1, /* dstore_2 */ \
|
||||||
|
1, /* dstore_3 */ \
|
||||||
|
1, /* astore_0 */ \
|
||||||
|
1, /* astore_1 */ \
|
||||||
|
1, /* astore_2 */ \
|
||||||
|
1, /* astore_3 */ \
|
||||||
|
1, /* iastore */ \
|
||||||
|
1, /* lastore */ \
|
||||||
|
1, /* fastore */ \
|
||||||
|
1, /* dastore */ \
|
||||||
|
1, /* aastore */ \
|
||||||
|
1, /* bastore */ \
|
||||||
|
1, /* castore */ \
|
||||||
|
1, /* sastore */ \
|
||||||
|
1, /* pop */ \
|
||||||
|
1, /* pop2 */ \
|
||||||
|
1, /* dup */ \
|
||||||
|
1, /* dup_x1 */ \
|
||||||
|
1, /* dup_x2 */ \
|
||||||
|
1, /* dup2 */ \
|
||||||
|
1, /* dup2_x1 */ \
|
||||||
|
1, /* dup2_x2 */ \
|
||||||
|
1, /* swap */ \
|
||||||
|
1, /* iadd */ \
|
||||||
|
1, /* ladd */ \
|
||||||
|
1, /* fadd */ \
|
||||||
|
1, /* dadd */ \
|
||||||
|
1, /* isub */ \
|
||||||
|
1, /* lsub */ \
|
||||||
|
1, /* fsub */ \
|
||||||
|
1, /* dsub */ \
|
||||||
|
1, /* imul */ \
|
||||||
|
1, /* lmul */ \
|
||||||
|
1, /* fmul */ \
|
||||||
|
1, /* dmul */ \
|
||||||
|
1, /* idiv */ \
|
||||||
|
1, /* ldiv */ \
|
||||||
|
1, /* fdiv */ \
|
||||||
|
1, /* ddiv */ \
|
||||||
|
1, /* irem */ \
|
||||||
|
1, /* lrem */ \
|
||||||
|
1, /* frem */ \
|
||||||
|
1, /* drem */ \
|
||||||
|
1, /* ineg */ \
|
||||||
|
1, /* lneg */ \
|
||||||
|
1, /* fneg */ \
|
||||||
|
1, /* dneg */ \
|
||||||
|
1, /* ishl */ \
|
||||||
|
1, /* lshl */ \
|
||||||
|
1, /* ishr */ \
|
||||||
|
1, /* lshr */ \
|
||||||
|
1, /* iushr */ \
|
||||||
|
1, /* lushr */ \
|
||||||
|
1, /* iand */ \
|
||||||
|
1, /* land */ \
|
||||||
|
1, /* ior */ \
|
||||||
|
1, /* lor */ \
|
||||||
|
1, /* ixor */ \
|
||||||
|
1, /* lxor */ \
|
||||||
|
3, /* iinc */ \
|
||||||
|
1, /* i2l */ \
|
||||||
|
1, /* i2f */ \
|
||||||
|
1, /* i2d */ \
|
||||||
|
1, /* l2i */ \
|
||||||
|
1, /* l2f */ \
|
||||||
|
1, /* l2d */ \
|
||||||
|
1, /* f2i */ \
|
||||||
|
1, /* f2l */ \
|
||||||
|
1, /* f2d */ \
|
||||||
|
1, /* d2i */ \
|
||||||
|
1, /* d2l */ \
|
||||||
|
1, /* d2f */ \
|
||||||
|
1, /* i2b */ \
|
||||||
|
1, /* i2c */ \
|
||||||
|
1, /* i2s */ \
|
||||||
|
1, /* lcmp */ \
|
||||||
|
1, /* fcmpl */ \
|
||||||
|
1, /* fcmpg */ \
|
||||||
|
1, /* dcmpl */ \
|
||||||
|
1, /* dcmpg */ \
|
||||||
|
3, /* ifeq */ \
|
||||||
|
3, /* ifne */ \
|
||||||
|
3, /* iflt */ \
|
||||||
|
3, /* ifge */ \
|
||||||
|
3, /* ifgt */ \
|
||||||
|
3, /* ifle */ \
|
||||||
|
3, /* if_icmpeq */ \
|
||||||
|
3, /* if_icmpne */ \
|
||||||
|
3, /* if_icmplt */ \
|
||||||
|
3, /* if_icmpge */ \
|
||||||
|
3, /* if_icmpgt */ \
|
||||||
|
3, /* if_icmple */ \
|
||||||
|
3, /* if_acmpeq */ \
|
||||||
|
3, /* if_acmpne */ \
|
||||||
|
3, /* goto */ \
|
||||||
|
3, /* jsr */ \
|
||||||
|
2, /* ret */ \
|
||||||
|
99, /* tableswitch */ \
|
||||||
|
99, /* lookupswitch */ \
|
||||||
|
1, /* ireturn */ \
|
||||||
|
1, /* lreturn */ \
|
||||||
|
1, /* freturn */ \
|
||||||
|
1, /* dreturn */ \
|
||||||
|
1, /* areturn */ \
|
||||||
|
1, /* return */ \
|
||||||
|
3, /* getstatic */ \
|
||||||
|
3, /* putstatic */ \
|
||||||
|
3, /* getfield */ \
|
||||||
|
3, /* putfield */ \
|
||||||
|
3, /* invokevirtual */ \
|
||||||
|
3, /* invokespecial */ \
|
||||||
|
3, /* invokestatic */ \
|
||||||
|
5, /* invokeinterface */ \
|
||||||
|
0, /* xxxunusedxxx */ \
|
||||||
|
3, /* new */ \
|
||||||
|
2, /* newarray */ \
|
||||||
|
3, /* anewarray */ \
|
||||||
|
1, /* arraylength */ \
|
||||||
|
1, /* athrow */ \
|
||||||
|
3, /* checkcast */ \
|
||||||
|
3, /* instanceof */ \
|
||||||
|
1, /* monitorenter */ \
|
||||||
|
1, /* monitorexit */ \
|
||||||
|
0, /* wide */ \
|
||||||
|
4, /* multianewarray */ \
|
||||||
|
3, /* ifnull */ \
|
||||||
|
3, /* ifnonnull */ \
|
||||||
|
5, /* goto_w */ \
|
||||||
|
5 /* jsr_w */ \
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* CLASSFILE_CONSTANTS */
|
||||||
278
jni/jni/jni-headers/jawt.h
Normal file
278
jni/jni/jni-headers/jawt.h
Normal file
@@ -0,0 +1,278 @@
|
|||||||
|
/*
|
||||||
|
* %W% %E%
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _JAVASOFT_JAWT_H_
|
||||||
|
#define _JAVASOFT_JAWT_H_
|
||||||
|
|
||||||
|
#include "jni.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AWT native interface (new in JDK 1.3)
|
||||||
|
*
|
||||||
|
* The AWT native interface allows a native C or C++ application a means
|
||||||
|
* by which to access native structures in AWT. This is to facilitate moving
|
||||||
|
* legacy C and C++ applications to Java and to target the needs of the
|
||||||
|
* community who, at present, wish to do their own native rendering to canvases
|
||||||
|
* for performance reasons. Standard extensions such as Java3D also require a
|
||||||
|
* means to access the underlying native data structures of AWT.
|
||||||
|
*
|
||||||
|
* There may be future extensions to this API depending on demand.
|
||||||
|
*
|
||||||
|
* A VM does not have to implement this API in order to pass the JCK.
|
||||||
|
* It is recommended, however, that this API is implemented on VMs that support
|
||||||
|
* standard extensions, such as Java3D.
|
||||||
|
*
|
||||||
|
* Since this is a native API, any program which uses it cannot be considered
|
||||||
|
* 100% pure java.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AWT Native Drawing Surface (JAWT_DrawingSurface).
|
||||||
|
*
|
||||||
|
* For each platform, there is a native drawing surface structure. This
|
||||||
|
* platform-specific structure can be found in jawt_md.h. It is recommended
|
||||||
|
* that additional platforms follow the same model. It is also recommended
|
||||||
|
* that VMs on Win32 and Solaris support the existing structures in jawt_md.h.
|
||||||
|
*
|
||||||
|
*******************
|
||||||
|
* EXAMPLE OF USAGE:
|
||||||
|
*******************
|
||||||
|
*
|
||||||
|
* In Win32, a programmer wishes to access the HWND of a canvas to perform
|
||||||
|
* native rendering into it. The programmer has declared the paint() method
|
||||||
|
* for their canvas subclass to be native:
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* MyCanvas.java:
|
||||||
|
*
|
||||||
|
* import java.awt.*;
|
||||||
|
*
|
||||||
|
* public class MyCanvas extends Canvas {
|
||||||
|
*
|
||||||
|
* static {
|
||||||
|
* System.loadLibrary("mylib");
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* public native void paint(Graphics g);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* myfile.c:
|
||||||
|
*
|
||||||
|
* #include "jawt_md.h"
|
||||||
|
* #include <assert.h>
|
||||||
|
*
|
||||||
|
* JNIEXPORT void JNICALL
|
||||||
|
* Java_MyCanvas_paint(JNIEnv* env, jobject canvas, jobject graphics)
|
||||||
|
* {
|
||||||
|
* JAWT awt;
|
||||||
|
* JAWT_DrawingSurface* ds;
|
||||||
|
* JAWT_DrawingSurfaceInfo* dsi;
|
||||||
|
* JAWT_Win32DrawingSurfaceInfo* dsi_win;
|
||||||
|
* jboolean result;
|
||||||
|
* jint lock;
|
||||||
|
*
|
||||||
|
* // Get the AWT
|
||||||
|
* awt.version = JAWT_VERSION_1_3;
|
||||||
|
* result = JAWT_GetAWT(env, &awt);
|
||||||
|
* assert(result != JNI_FALSE);
|
||||||
|
*
|
||||||
|
* // Get the drawing surface
|
||||||
|
* ds = awt.GetDrawingSurface(env, canvas);
|
||||||
|
* assert(ds != NULL);
|
||||||
|
*
|
||||||
|
* // Lock the drawing surface
|
||||||
|
* lock = ds->Lock(ds);
|
||||||
|
* assert((lock & JAWT_LOCK_ERROR) == 0);
|
||||||
|
*
|
||||||
|
* // Get the drawing surface info
|
||||||
|
* dsi = ds->GetDrawingSurfaceInfo(ds);
|
||||||
|
*
|
||||||
|
* // Get the platform-specific drawing info
|
||||||
|
* dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
|
||||||
|
*
|
||||||
|
* //////////////////////////////
|
||||||
|
* // !!! DO PAINTING HERE !!! //
|
||||||
|
* //////////////////////////////
|
||||||
|
*
|
||||||
|
* // Free the drawing surface info
|
||||||
|
* ds->FreeDrawingSurfaceInfo(dsi);
|
||||||
|
*
|
||||||
|
* // Unlock the drawing surface
|
||||||
|
* ds->Unlock(ds);
|
||||||
|
*
|
||||||
|
* // Free the drawing surface
|
||||||
|
* awt.FreeDrawingSurface(ds);
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JAWT_Rectangle
|
||||||
|
* Structure for a native rectangle.
|
||||||
|
*/
|
||||||
|
typedef struct jawt_Rectangle {
|
||||||
|
jint x;
|
||||||
|
jint y;
|
||||||
|
jint width;
|
||||||
|
jint height;
|
||||||
|
} JAWT_Rectangle;
|
||||||
|
|
||||||
|
struct jawt_DrawingSurface;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JAWT_DrawingSurfaceInfo
|
||||||
|
* Structure for containing the underlying drawing information of a component.
|
||||||
|
*/
|
||||||
|
typedef struct jawt_DrawingSurfaceInfo {
|
||||||
|
/*
|
||||||
|
* Pointer to the platform-specific information. This can be safely
|
||||||
|
* cast to a JAWT_Win32DrawingSurfaceInfo on Windows or a
|
||||||
|
* JAWT_X11DrawingSurfaceInfo on Solaris. See jawt_md.h for details.
|
||||||
|
*/
|
||||||
|
void* platformInfo;
|
||||||
|
/* Cached pointer to the underlying drawing surface */
|
||||||
|
struct jawt_DrawingSurface* ds;
|
||||||
|
/* Bounding rectangle of the drawing surface */
|
||||||
|
JAWT_Rectangle bounds;
|
||||||
|
/* Number of rectangles in the clip */
|
||||||
|
jint clipSize;
|
||||||
|
/* Clip rectangle array */
|
||||||
|
JAWT_Rectangle* clip;
|
||||||
|
} JAWT_DrawingSurfaceInfo;
|
||||||
|
|
||||||
|
#define JAWT_LOCK_ERROR 0x00000001
|
||||||
|
#define JAWT_LOCK_CLIP_CHANGED 0x00000002
|
||||||
|
#define JAWT_LOCK_BOUNDS_CHANGED 0x00000004
|
||||||
|
#define JAWT_LOCK_SURFACE_CHANGED 0x00000008
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JAWT_DrawingSurface
|
||||||
|
* Structure for containing the underlying drawing information of a component.
|
||||||
|
* All operations on a JAWT_DrawingSurface MUST be performed from the same
|
||||||
|
* thread as the call to GetDrawingSurface.
|
||||||
|
*/
|
||||||
|
typedef struct jawt_DrawingSurface {
|
||||||
|
/*
|
||||||
|
* Cached reference to the Java environment of the calling thread.
|
||||||
|
* If Lock(), Unlock(), GetDrawingSurfaceInfo() or
|
||||||
|
* FreeDrawingSurfaceInfo() are called from a different thread,
|
||||||
|
* this data member should be set before calling those functions.
|
||||||
|
*/
|
||||||
|
JNIEnv* env;
|
||||||
|
/* Cached reference to the target object */
|
||||||
|
jobject target;
|
||||||
|
/*
|
||||||
|
* Lock the surface of the target component for native rendering.
|
||||||
|
* When finished drawing, the surface must be unlocked with
|
||||||
|
* Unlock(). This function returns a bitmask with one or more of the
|
||||||
|
* following values:
|
||||||
|
*
|
||||||
|
* JAWT_LOCK_ERROR - When an error has occurred and the surface could not
|
||||||
|
* be locked.
|
||||||
|
*
|
||||||
|
* JAWT_LOCK_CLIP_CHANGED - When the clip region has changed.
|
||||||
|
*
|
||||||
|
* JAWT_LOCK_BOUNDS_CHANGED - When the bounds of the surface have changed.
|
||||||
|
*
|
||||||
|
* JAWT_LOCK_SURFACE_CHANGED - When the surface itself has changed
|
||||||
|
*/
|
||||||
|
jint (JNICALL *Lock)
|
||||||
|
(struct jawt_DrawingSurface* ds);
|
||||||
|
/*
|
||||||
|
* Get the drawing surface info.
|
||||||
|
* The value returned may be cached, but the values may change if
|
||||||
|
* additional calls to Lock() or Unlock() are made.
|
||||||
|
* Lock() must be called before this can return a valid value.
|
||||||
|
* Returns NULL if an error has occurred.
|
||||||
|
* When finished with the returned value, FreeDrawingSurfaceInfo must be
|
||||||
|
* called.
|
||||||
|
*/
|
||||||
|
JAWT_DrawingSurfaceInfo* (JNICALL *GetDrawingSurfaceInfo)
|
||||||
|
(struct jawt_DrawingSurface* ds);
|
||||||
|
/*
|
||||||
|
* Free the drawing surface info.
|
||||||
|
*/
|
||||||
|
void (JNICALL *FreeDrawingSurfaceInfo)
|
||||||
|
(JAWT_DrawingSurfaceInfo* dsi);
|
||||||
|
/*
|
||||||
|
* Unlock the drawing surface of the target component for native rendering.
|
||||||
|
*/
|
||||||
|
void (JNICALL *Unlock)
|
||||||
|
(struct jawt_DrawingSurface* ds);
|
||||||
|
} JAWT_DrawingSurface;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JAWT
|
||||||
|
* Structure for containing native AWT functions.
|
||||||
|
*/
|
||||||
|
typedef struct jawt {
|
||||||
|
/*
|
||||||
|
* Version of this structure. This must always be set before
|
||||||
|
* calling JAWT_GetAWT()
|
||||||
|
*/
|
||||||
|
jint version;
|
||||||
|
/*
|
||||||
|
* Return a drawing surface from a target jobject. This value
|
||||||
|
* may be cached.
|
||||||
|
* Returns NULL if an error has occurred.
|
||||||
|
* Target must be a java.awt.Component (should be a Canvas
|
||||||
|
* or Window for native rendering).
|
||||||
|
* FreeDrawingSurface() must be called when finished with the
|
||||||
|
* returned JAWT_DrawingSurface.
|
||||||
|
*/
|
||||||
|
JAWT_DrawingSurface* (JNICALL *GetDrawingSurface)
|
||||||
|
(JNIEnv* env, jobject target);
|
||||||
|
/*
|
||||||
|
* Free the drawing surface allocated in GetDrawingSurface.
|
||||||
|
*/
|
||||||
|
void (JNICALL *FreeDrawingSurface)
|
||||||
|
(JAWT_DrawingSurface* ds);
|
||||||
|
/*
|
||||||
|
* Since 1.4
|
||||||
|
* Locks the entire AWT for synchronization purposes
|
||||||
|
*/
|
||||||
|
void (JNICALL *Lock)(JNIEnv* env);
|
||||||
|
/*
|
||||||
|
* Since 1.4
|
||||||
|
* Unlocks the entire AWT for synchronization purposes
|
||||||
|
*/
|
||||||
|
void (JNICALL *Unlock)(JNIEnv* env);
|
||||||
|
/*
|
||||||
|
* Since 1.4
|
||||||
|
* Returns a reference to a java.awt.Component from a native
|
||||||
|
* platform handle. On Windows, this corresponds to an HWND;
|
||||||
|
* on Solaris and Linux, this is a Drawable. For other platforms,
|
||||||
|
* see the appropriate machine-dependent header file for a description.
|
||||||
|
* The reference returned by this function is a local
|
||||||
|
* reference that is only valid in this environment.
|
||||||
|
* This function returns a NULL reference if no component could be
|
||||||
|
* found with matching platform information.
|
||||||
|
*/
|
||||||
|
jobject (JNICALL *GetComponent)(JNIEnv* env, void* platformInfo);
|
||||||
|
|
||||||
|
} JAWT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get the AWT native structure. This function returns JNI_FALSE if
|
||||||
|
* an error occurs.
|
||||||
|
*/
|
||||||
|
_JNI_IMPORT_OR_EXPORT_
|
||||||
|
jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt);
|
||||||
|
|
||||||
|
#define JAWT_VERSION_1_3 0x00010003
|
||||||
|
#define JAWT_VERSION_1_4 0x00010004
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_JAVASOFT_JAWT_H_ */
|
||||||
237
jni/jni/jni-headers/jdwpTransport.h
Normal file
237
jni/jni/jni-headers/jdwpTransport.h
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
/*
|
||||||
|
* %W% %E%
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Java Debug Wire Protocol Transport Service Provider Interface.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef JDWPTRANSPORT_H
|
||||||
|
#define JDWPTRANSPORT_H
|
||||||
|
|
||||||
|
#include "jni.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JDWPTRANSPORT_VERSION_1_0 = 0x00010000
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct jdwpTransportNativeInterface_;
|
||||||
|
|
||||||
|
struct _jdwpTransportEnv;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
typedef _jdwpTransportEnv jdwpTransportEnv;
|
||||||
|
#else
|
||||||
|
typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv;
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Errors. Universal errors with JVMTI/JVMDI equivalents keep the
|
||||||
|
* values the same.
|
||||||
|
*/
|
||||||
|
typedef enum {
|
||||||
|
JDWPTRANSPORT_ERROR_NONE = 0,
|
||||||
|
JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103,
|
||||||
|
JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110,
|
||||||
|
JDWPTRANSPORT_ERROR_INTERNAL = 113,
|
||||||
|
JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201,
|
||||||
|
JDWPTRANSPORT_ERROR_IO_ERROR = 202,
|
||||||
|
JDWPTRANSPORT_ERROR_TIMEOUT = 203,
|
||||||
|
JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204
|
||||||
|
} jdwpTransportError;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structure to define capabilities
|
||||||
|
*/
|
||||||
|
typedef struct {
|
||||||
|
unsigned int can_timeout_attach :1;
|
||||||
|
unsigned int can_timeout_accept :1;
|
||||||
|
unsigned int can_timeout_handshake :1;
|
||||||
|
unsigned int reserved3 :1;
|
||||||
|
unsigned int reserved4 :1;
|
||||||
|
unsigned int reserved5 :1;
|
||||||
|
unsigned int reserved6 :1;
|
||||||
|
unsigned int reserved7 :1;
|
||||||
|
unsigned int reserved8 :1;
|
||||||
|
unsigned int reserved9 :1;
|
||||||
|
unsigned int reserved10 :1;
|
||||||
|
unsigned int reserved11 :1;
|
||||||
|
unsigned int reserved12 :1;
|
||||||
|
unsigned int reserved13 :1;
|
||||||
|
unsigned int reserved14 :1;
|
||||||
|
unsigned int reserved15 :1;
|
||||||
|
} JDWPTransportCapabilities;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Structures to define packet layout.
|
||||||
|
*
|
||||||
|
* See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html
|
||||||
|
*/
|
||||||
|
|
||||||
|
enum {
|
||||||
|
JDWPTRANSPORT_FLAGS_NONE = 0x0,
|
||||||
|
JDWPTRANSPORT_FLAGS_REPLY = 0x80
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
jint len;
|
||||||
|
jint id;
|
||||||
|
jbyte flags;
|
||||||
|
jbyte cmdSet;
|
||||||
|
jbyte cmd;
|
||||||
|
jbyte *data;
|
||||||
|
} jdwpCmdPacket;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
jint len;
|
||||||
|
jint id;
|
||||||
|
jbyte flags;
|
||||||
|
jshort errorCode;
|
||||||
|
jbyte *data;
|
||||||
|
} jdwpReplyPacket;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
union {
|
||||||
|
jdwpCmdPacket cmd;
|
||||||
|
jdwpReplyPacket reply;
|
||||||
|
} type;
|
||||||
|
} jdwpPacket;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* JDWP functions called by the transport.
|
||||||
|
*/
|
||||||
|
typedef struct jdwpTransportCallback {
|
||||||
|
void *(*alloc)(jint numBytes); /* Call this for all allocations */
|
||||||
|
void (*free)(void *buffer); /* Call this for all deallocations */
|
||||||
|
} jdwpTransportCallback;
|
||||||
|
|
||||||
|
typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm,
|
||||||
|
jdwpTransportCallback *callback,
|
||||||
|
jint version,
|
||||||
|
jdwpTransportEnv** env);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Function Interface */
|
||||||
|
|
||||||
|
struct jdwpTransportNativeInterface_ {
|
||||||
|
/* 1 : RESERVED */
|
||||||
|
void *reserved1;
|
||||||
|
|
||||||
|
/* 2 : Get Capabilities */
|
||||||
|
jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env,
|
||||||
|
JDWPTransportCapabilities *capabilities_ptr);
|
||||||
|
|
||||||
|
/* 3 : Attach */
|
||||||
|
jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env,
|
||||||
|
const char* address,
|
||||||
|
jlong attach_timeout,
|
||||||
|
jlong handshake_timeout);
|
||||||
|
|
||||||
|
/* 4: StartListening */
|
||||||
|
jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env,
|
||||||
|
const char* address,
|
||||||
|
char** actual_address);
|
||||||
|
|
||||||
|
/* 5: StopListening */
|
||||||
|
jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env);
|
||||||
|
|
||||||
|
/* 6: Accept */
|
||||||
|
jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env,
|
||||||
|
jlong accept_timeout,
|
||||||
|
jlong handshake_timeout);
|
||||||
|
|
||||||
|
/* 7: IsOpen */
|
||||||
|
jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env);
|
||||||
|
|
||||||
|
/* 8: Close */
|
||||||
|
jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env);
|
||||||
|
|
||||||
|
/* 9: ReadPacket */
|
||||||
|
jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env,
|
||||||
|
jdwpPacket *pkt);
|
||||||
|
|
||||||
|
/* 10: Write Packet */
|
||||||
|
jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env,
|
||||||
|
const jdwpPacket* pkt);
|
||||||
|
|
||||||
|
/* 11: GetLastError */
|
||||||
|
jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env,
|
||||||
|
char** error);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Use inlined functions so that C++ code can use syntax such as
|
||||||
|
* env->Attach("mymachine:5000", 10*1000, 0);
|
||||||
|
*
|
||||||
|
* rather than using C's :-
|
||||||
|
*
|
||||||
|
* (*env)->Attach(env, "mymachine:5000", 10*1000, 0);
|
||||||
|
*/
|
||||||
|
struct _jdwpTransportEnv {
|
||||||
|
const struct jdwpTransportNativeInterface_ *functions;
|
||||||
|
#ifdef __cplusplus
|
||||||
|
|
||||||
|
jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) {
|
||||||
|
return functions->GetCapabilities(this, capabilities_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError Attach(const char* address, jlong attach_timeout,
|
||||||
|
jlong handshake_timeout) {
|
||||||
|
return functions->Attach(this, address, attach_timeout, handshake_timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError StartListening(const char* address,
|
||||||
|
char** actual_address) {
|
||||||
|
return functions->StartListening(this, address, actual_address);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError StopListening(void) {
|
||||||
|
return functions->StopListening(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) {
|
||||||
|
return functions->Accept(this, accept_timeout, handshake_timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
jboolean IsOpen(void) {
|
||||||
|
return functions->IsOpen(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError Close(void) {
|
||||||
|
return functions->Close(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError ReadPacket(jdwpPacket *pkt) {
|
||||||
|
return functions->ReadPacket(this, pkt);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError WritePacket(const jdwpPacket* pkt) {
|
||||||
|
return functions->WritePacket(this, pkt);
|
||||||
|
}
|
||||||
|
|
||||||
|
jdwpTransportError GetLastError(char** error) {
|
||||||
|
return functions->GetLastError(this, error);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* JDWPTRANSPORT_H */
|
||||||
|
|
||||||
1944
jni/jni/jni-headers/jni.h
Normal file
1944
jni/jni/jni-headers/jni.h
Normal file
File diff suppressed because it is too large
Load Diff
43
jni/jni/jni-headers/linux/jawt_md.h
Normal file
43
jni/jni/jni-headers/linux/jawt_md.h
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* @(#)jawt_md.h 1.13 10/03/23
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _JAVASOFT_JAWT_MD_H_
|
||||||
|
#define _JAVASOFT_JAWT_MD_H_
|
||||||
|
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xutil.h>
|
||||||
|
#include <X11/Intrinsic.h>
|
||||||
|
#include "jawt.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* X11-specific declarations for AWT native interface.
|
||||||
|
* See notes in jawt.h for an example of use.
|
||||||
|
*/
|
||||||
|
typedef struct jawt_X11DrawingSurfaceInfo {
|
||||||
|
Drawable drawable;
|
||||||
|
Display* display;
|
||||||
|
VisualID visualID;
|
||||||
|
Colormap colormapID;
|
||||||
|
int depth;
|
||||||
|
/*
|
||||||
|
* Since 1.4
|
||||||
|
* Returns a pixel value from a set of RGB values.
|
||||||
|
* This is useful for paletted color (256 color) modes.
|
||||||
|
*/
|
||||||
|
int (JNICALL *GetAWTColor)(JAWT_DrawingSurface* ds,
|
||||||
|
int r, int g, int b);
|
||||||
|
} JAWT_X11DrawingSurfaceInfo;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_JAVASOFT_JAWT_MD_H_ */
|
||||||
24
jni/jni/jni-headers/linux/jni_md.h
Normal file
24
jni/jni/jni-headers/linux/jni_md.h
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* @(#)jni_md.h 1.20 10/03/23
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _JAVASOFT_JNI_MD_H_
|
||||||
|
#define _JAVASOFT_JNI_MD_H_
|
||||||
|
|
||||||
|
#define JNIEXPORT
|
||||||
|
#define JNIIMPORT
|
||||||
|
#define JNICALL
|
||||||
|
|
||||||
|
typedef int jint;
|
||||||
|
#ifdef _LP64 /* 64-bit Solaris */
|
||||||
|
typedef long jlong;
|
||||||
|
#else
|
||||||
|
typedef long long jlong;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef signed char jbyte;
|
||||||
|
|
||||||
|
#endif /* !_JAVASOFT_JNI_MD_H_ */
|
||||||
23
jni/jni/jni-headers/mac/jni_md.h
Normal file
23
jni/jni/jni-headers/mac/jni_md.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* @(#)jni_md.h 1.19 05/11/17
|
||||||
|
*
|
||||||
|
* Copyright 2006 Sun Microsystems, Inc. All rights reserved.
|
||||||
|
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _JAVASOFT_JNI_MD_H_
|
||||||
|
#define _JAVASOFT_JNI_MD_H_
|
||||||
|
|
||||||
|
#define JNIEXPORT __attribute__((visibility("default")))
|
||||||
|
#define JNIIMPORT
|
||||||
|
#define JNICALL
|
||||||
|
|
||||||
|
#if __LP64__
|
||||||
|
typedef int jint;
|
||||||
|
#else
|
||||||
|
typedef long jint;
|
||||||
|
#endif
|
||||||
|
typedef long long jlong;
|
||||||
|
typedef signed char jbyte;
|
||||||
|
|
||||||
|
#endif /* !_JAVASOFT_JNI_MD_H_ */
|
||||||
41
jni/jni/jni-headers/win32/jawt_md.h
Normal file
41
jni/jni/jni-headers/win32/jawt_md.h
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
/*
|
||||||
|
* %W% %E%
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _JAVASOFT_JAWT_MD_H_
|
||||||
|
#define _JAVASOFT_JAWT_MD_H_
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include "jawt.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Win32-specific declarations for AWT native interface.
|
||||||
|
* See notes in jawt.h for an example of use.
|
||||||
|
*/
|
||||||
|
typedef struct jawt_Win32DrawingSurfaceInfo {
|
||||||
|
/* Native window, DDB, or DIB handle */
|
||||||
|
union {
|
||||||
|
HWND hwnd;
|
||||||
|
HBITMAP hbitmap;
|
||||||
|
void* pbits;
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
* This HDC should always be used instead of the HDC returned from
|
||||||
|
* BeginPaint() or any calls to GetDC().
|
||||||
|
*/
|
||||||
|
HDC hdc;
|
||||||
|
HPALETTE hpalette;
|
||||||
|
} JAWT_Win32DrawingSurfaceInfo;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* !_JAVASOFT_JAWT_MD_H_ */
|
||||||
19
jni/jni/jni-headers/win32/jni_md.h
Normal file
19
jni/jni/jni-headers/win32/jni_md.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* %W% %E%
|
||||||
|
*
|
||||||
|
* Copyright (c) 2006, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _JAVASOFT_JNI_MD_H_
|
||||||
|
#define _JAVASOFT_JNI_MD_H_
|
||||||
|
|
||||||
|
#define JNIEXPORT __declspec(dllexport)
|
||||||
|
#define JNIIMPORT __declspec(dllimport)
|
||||||
|
#define JNICALL __stdcall
|
||||||
|
|
||||||
|
typedef long jint;
|
||||||
|
typedef __int64 jlong;
|
||||||
|
typedef signed char jbyte;
|
||||||
|
|
||||||
|
#endif /* !_JAVASOFT_JNI_MD_H_ */
|
||||||
1
jni/jni/libtess2
Submodule
1
jni/jni/libtess2
Submodule
Submodule jni/jni/libtess2 added at a43504d78a
18
jni/jni/memcpy_wrap.c
Normal file
18
jni/jni/memcpy_wrap.c
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef __ANDROID__
|
||||||
|
#ifdef __linux__
|
||||||
|
#ifdef __x86_64__
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
|
||||||
|
|
||||||
|
void *__wrap_memcpy(void * destination, const void * source, size_t num)
|
||||||
|
{
|
||||||
|
return memcpy(destination, source, num);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
237
jni/jni/org.oscim.utils.TessJNI.cpp
Normal file
237
jni/jni/org.oscim.utils.TessJNI.cpp
Normal file
@@ -0,0 +1,237 @@
|
|||||||
|
#include <org.oscim.utils.TessJNI.h>
|
||||||
|
|
||||||
|
//@line:114
|
||||||
|
|
||||||
|
#include <tesselator.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
void* heapAlloc( void* userData, unsigned int size ){
|
||||||
|
TESS_NOTUSED( userData );
|
||||||
|
return malloc( size );
|
||||||
|
}
|
||||||
|
void* heapRealloc( void *userData, void* ptr, unsigned int size ){
|
||||||
|
TESS_NOTUSED( userData );
|
||||||
|
return realloc( ptr, size );
|
||||||
|
}
|
||||||
|
void heapFree( void* userData, void* ptr ){
|
||||||
|
TESS_NOTUSED( userData );
|
||||||
|
free( ptr );
|
||||||
|
}
|
||||||
|
JNIEXPORT jlong JNICALL Java_org_oscim_utils_TessJNI_newTess(JNIEnv* env, jclass clazz, jint size) {
|
||||||
|
|
||||||
|
|
||||||
|
//@line:131
|
||||||
|
{
|
||||||
|
if (size <= 0)
|
||||||
|
return (long)tessNewTess(0);
|
||||||
|
if (size > 10)
|
||||||
|
size = 10;
|
||||||
|
TESSalloc ma;
|
||||||
|
memset(&ma, 0, sizeof(ma));
|
||||||
|
ma.memalloc = heapAlloc;
|
||||||
|
ma.memfree = heapFree;
|
||||||
|
ma.memrealloc = heapRealloc;
|
||||||
|
//ma.userData = (void*)&allocated;
|
||||||
|
ma.meshEdgeBucketSize = 2 << size; // 512
|
||||||
|
ma.meshVertexBucketSize = 2 << size; // 512
|
||||||
|
ma.meshFaceBucketSize = 1 << size; // 256
|
||||||
|
ma.dictNodeBucketSize = 2 << size; // 512
|
||||||
|
ma.regionBucketSize = 1 << size; // 256
|
||||||
|
ma.extraVertices = 8;
|
||||||
|
//ma.extraVertices = 256;
|
||||||
|
return (long)tessNewTess(&ma);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_freeTess(JNIEnv* env, jclass clazz, jlong inst) {
|
||||||
|
|
||||||
|
|
||||||
|
//@line:151
|
||||||
|
{
|
||||||
|
tessDeleteTess((TESStesselator*) inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_addContour(JNIEnv* env, jclass clazz, jlong inst, jint size, jfloatArray obj_contour, jint stride, jint offset, jint count) {
|
||||||
|
float* contour = (float*)env->GetPrimitiveArrayCritical(obj_contour, 0);
|
||||||
|
|
||||||
|
|
||||||
|
//@line:164
|
||||||
|
{
|
||||||
|
tessAddContour((TESStesselator*) inst, size, contour + (offset * stride), stride, count);
|
||||||
|
}
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_contour, contour, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_addMultiContour2D(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_index, jfloatArray obj_contour, jint idxStart, jint idxCount) {
|
||||||
|
int* index = (int*)env->GetPrimitiveArrayCritical(obj_index, 0);
|
||||||
|
float* contour = (float*)env->GetPrimitiveArrayCritical(obj_contour, 0);
|
||||||
|
|
||||||
|
|
||||||
|
//@line:167
|
||||||
|
{
|
||||||
|
TESStesselator* tess = (TESStesselator*) inst;
|
||||||
|
int offset = 0;
|
||||||
|
// start at 0 to get the correct offset in contour..
|
||||||
|
for (int i = 0; i < idxStart + idxCount; i++){
|
||||||
|
int len = index[i];
|
||||||
|
if ((len % 2 != 0) || (len < 0))
|
||||||
|
break;
|
||||||
|
if (len < 6 || i < idxStart) {
|
||||||
|
offset += len;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
tessAddContour(tess, 2, contour + offset, 8, len >> 1);
|
||||||
|
offset += len;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_index, index, 0);
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_contour, contour, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_tessContour2D(JNIEnv* env, jclass clazz, jlong inst, jint windingRule, jint elementType, jint polySize, jint vertexSize) {
|
||||||
|
|
||||||
|
|
||||||
|
//@line:194
|
||||||
|
{
|
||||||
|
return tessTesselate((TESStesselator*) inst, windingRule, elementType, polySize, vertexSize, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_getVertexCount(JNIEnv* env, jclass clazz, jlong inst) {
|
||||||
|
|
||||||
|
|
||||||
|
//@line:197
|
||||||
|
{
|
||||||
|
return tessGetVertexCount((TESStesselator*) inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline jboolean wrapped_Java_org_oscim_utils_TessJNI_getVertices
|
||||||
|
(JNIEnv* env, jclass clazz, jlong inst, jfloatArray obj_out, jint offset, jint length, float* out) {
|
||||||
|
|
||||||
|
//@line:203
|
||||||
|
{
|
||||||
|
const TESSreal* vertices = tessGetVertices((TESStesselator*) inst);
|
||||||
|
if (!vertices)
|
||||||
|
return 0;
|
||||||
|
memcpy(out, vertices + offset, length * sizeof(TESSreal));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getVertices(JNIEnv* env, jclass clazz, jlong inst, jfloatArray obj_out, jint offset, jint length) {
|
||||||
|
float* out = (float*)env->GetPrimitiveArrayCritical(obj_out, 0);
|
||||||
|
|
||||||
|
jboolean JNI_returnValue = wrapped_Java_org_oscim_utils_TessJNI_getVertices(env, clazz, inst, obj_out, offset, length, out);
|
||||||
|
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
|
||||||
|
|
||||||
|
return JNI_returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getVerticesS(JNIEnv* env, jclass clazz, jlong inst, jshortArray obj_out, jint offset, jint length, jfloat scale) {
|
||||||
|
short* out = (short*)env->GetPrimitiveArrayCritical(obj_out, 0);
|
||||||
|
|
||||||
|
|
||||||
|
//@line:213
|
||||||
|
{
|
||||||
|
const TESSreal* vertices = tessGetVertices((TESStesselator*) inst);
|
||||||
|
for(int i = 0; i < length; i++)
|
||||||
|
out[i] = (short)(vertices[offset++] * scale + 0.5f);
|
||||||
|
}
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline jboolean wrapped_Java_org_oscim_utils_TessJNI_getVertexIndices
|
||||||
|
(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length, int* out) {
|
||||||
|
|
||||||
|
//@line:225
|
||||||
|
{
|
||||||
|
const TESSindex* indices = tessGetVertexIndices((TESStesselator*) inst);
|
||||||
|
if (!indices)
|
||||||
|
return 0;
|
||||||
|
memcpy(out, indices + offset, length * sizeof(TESSindex));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getVertexIndices(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length) {
|
||||||
|
int* out = (int*)env->GetPrimitiveArrayCritical(obj_out, 0);
|
||||||
|
|
||||||
|
jboolean JNI_returnValue = wrapped_Java_org_oscim_utils_TessJNI_getVertexIndices(env, clazz, inst, obj_out, offset, length, out);
|
||||||
|
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
|
||||||
|
|
||||||
|
return JNI_returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_getElementCount(JNIEnv* env, jclass clazz, jlong inst) {
|
||||||
|
|
||||||
|
|
||||||
|
//@line:235
|
||||||
|
{
|
||||||
|
return tessGetElementCount((TESStesselator*) inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline jboolean wrapped_Java_org_oscim_utils_TessJNI_getElements
|
||||||
|
(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length, int* out) {
|
||||||
|
|
||||||
|
//@line:241
|
||||||
|
{
|
||||||
|
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
|
||||||
|
if (!elements)
|
||||||
|
return 0;
|
||||||
|
memcpy(out, elements + offset, length * sizeof(TESSindex));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getElements(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length) {
|
||||||
|
int* out = (int*)env->GetPrimitiveArrayCritical(obj_out, 0);
|
||||||
|
|
||||||
|
jboolean JNI_returnValue = wrapped_Java_org_oscim_utils_TessJNI_getElements(env, clazz, inst, obj_out, offset, length, out);
|
||||||
|
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
|
||||||
|
|
||||||
|
return JNI_returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getElementsS(JNIEnv* env, jclass clazz, jlong inst, jshortArray obj_out, jint offset, jint length) {
|
||||||
|
short* out = (short*)env->GetPrimitiveArrayCritical(obj_out, 0);
|
||||||
|
|
||||||
|
|
||||||
|
//@line:251
|
||||||
|
{
|
||||||
|
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
|
||||||
|
for(int i = 0; i < length; i++)
|
||||||
|
out[i] = (short)elements[offset++];
|
||||||
|
}
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getElementsWithInputVertexIds(JNIEnv* env, jclass clazz, jlong inst, jshortArray obj_out, jint dstOffset, jint offset, jint length) {
|
||||||
|
short* out = (short*)env->GetPrimitiveArrayCritical(obj_out, 0);
|
||||||
|
|
||||||
|
|
||||||
|
//@line:259
|
||||||
|
{
|
||||||
|
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
|
||||||
|
const TESSindex* indices = tessGetVertexIndices((TESStesselator*) inst);
|
||||||
|
for(int i = 0; i < length; i++)
|
||||||
|
out[dstOffset++] = (short)(indices[elements[offset++]]);
|
||||||
|
}
|
||||||
|
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
155
jni/jni/org.oscim.utils.TessJNI.h
Normal file
155
jni/jni/org.oscim.utils.TessJNI.h
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||||
|
#include <jni.h>
|
||||||
|
/* Header for class org_oscim_utils_TessJNI */
|
||||||
|
|
||||||
|
#ifndef _Included_org_oscim_utils_TessJNI
|
||||||
|
#define _Included_org_oscim_utils_TessJNI
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: newTess
|
||||||
|
* Signature: (I)J
|
||||||
|
*/
|
||||||
|
JNIEXPORT jlong JNICALL Java_org_oscim_utils_TessJNI_newTess
|
||||||
|
(JNIEnv *, jclass, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: freeTess
|
||||||
|
* Signature: (J)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_freeTess
|
||||||
|
(JNIEnv *, jclass, jlong);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: addContour
|
||||||
|
* Signature: (JI[FIII)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_addContour
|
||||||
|
(JNIEnv *, jclass, jlong, jint, jfloatArray, jint, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: addMultiContour2D
|
||||||
|
* Signature: (J[I[FII)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_addMultiContour2D
|
||||||
|
(JNIEnv *, jclass, jlong, jintArray, jfloatArray, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: tessContour2D
|
||||||
|
* Signature: (JIIII)I
|
||||||
|
*/
|
||||||
|
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_tessContour2D
|
||||||
|
(JNIEnv *, jclass, jlong, jint, jint, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getVertexCount
|
||||||
|
* Signature: (J)I
|
||||||
|
*/
|
||||||
|
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_getVertexCount
|
||||||
|
(JNIEnv *, jclass, jlong);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getVertices
|
||||||
|
* Signature: (J[FII)Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getVertices
|
||||||
|
(JNIEnv *, jclass, jlong, jfloatArray, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getVerticesS
|
||||||
|
* Signature: (J[SIIF)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getVerticesS
|
||||||
|
(JNIEnv *, jclass, jlong, jshortArray, jint, jint, jfloat);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getVertexIndices
|
||||||
|
* Signature: (J[III)Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getVertexIndices
|
||||||
|
(JNIEnv *, jclass, jlong, jintArray, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getElementCount
|
||||||
|
* Signature: (J)I
|
||||||
|
*/
|
||||||
|
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_getElementCount
|
||||||
|
(JNIEnv *, jclass, jlong);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getElements
|
||||||
|
* Signature: (J[III)Z
|
||||||
|
*/
|
||||||
|
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getElements
|
||||||
|
(JNIEnv *, jclass, jlong, jintArray, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getElementsS
|
||||||
|
* Signature: (J[SII)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getElementsS
|
||||||
|
(JNIEnv *, jclass, jlong, jshortArray, jint, jint);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Class: org_oscim_utils_TessJNI
|
||||||
|
* Method: getElementsWithInputVertexIds
|
||||||
|
* Signature: (J[SIII)V
|
||||||
|
*/
|
||||||
|
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getElementsWithInputVertexIds
|
||||||
|
(JNIEnv *, jclass, jlong, jshortArray, jint, jint, jint);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
/* Header for class org_oscim_utils_TessJNI_ElementType */
|
||||||
|
|
||||||
|
#ifndef _Included_org_oscim_utils_TessJNI_ElementType
|
||||||
|
#define _Included_org_oscim_utils_TessJNI_ElementType
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#undef org_oscim_utils_TessJNI_ElementType_POLYGONS
|
||||||
|
#define org_oscim_utils_TessJNI_ElementType_POLYGONS 0L
|
||||||
|
#undef org_oscim_utils_TessJNI_ElementType_CONNECTED_POLYGONS
|
||||||
|
#define org_oscim_utils_TessJNI_ElementType_CONNECTED_POLYGONS 1L
|
||||||
|
#undef org_oscim_utils_TessJNI_ElementType_BOUNDARY_CONTOURS
|
||||||
|
#define org_oscim_utils_TessJNI_ElementType_BOUNDARY_CONTOURS 2L
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
/* Header for class org_oscim_utils_TessJNI_WindingRule */
|
||||||
|
|
||||||
|
#ifndef _Included_org_oscim_utils_TessJNI_WindingRule
|
||||||
|
#define _Included_org_oscim_utils_TessJNI_WindingRule
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
#undef org_oscim_utils_TessJNI_WindingRule_ODD
|
||||||
|
#define org_oscim_utils_TessJNI_WindingRule_ODD 0L
|
||||||
|
#undef org_oscim_utils_TessJNI_WindingRule_NONZERO
|
||||||
|
#define org_oscim_utils_TessJNI_WindingRule_NONZERO 1L
|
||||||
|
#undef org_oscim_utils_TessJNI_WindingRule_POSITIVE
|
||||||
|
#define org_oscim_utils_TessJNI_WindingRule_POSITIVE 2L
|
||||||
|
#undef org_oscim_utils_TessJNI_WindingRule_NEGATIVE
|
||||||
|
#define org_oscim_utils_TessJNI_WindingRule_NEGATIVE 3L
|
||||||
|
#undef org_oscim_utils_TessJNI_WindingRule_ABS_GEQ_TWO
|
||||||
|
#define org_oscim_utils_TessJNI_WindingRule_ABS_GEQ_TWO 4L
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
102
jni/src/JniBuilder.java
Normal file
102
jni/src/JniBuilder.java
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
import com.badlogic.gdx.jnigen.AntScriptGenerator;
|
||||||
|
import com.badlogic.gdx.jnigen.BuildConfig;
|
||||||
|
import com.badlogic.gdx.jnigen.BuildTarget;
|
||||||
|
import com.badlogic.gdx.jnigen.BuildTarget.TargetOs;
|
||||||
|
import com.badlogic.gdx.jnigen.NativeCodeGenerator;
|
||||||
|
|
||||||
|
public class JniBuilder {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
String[] headers = {".", "libtess2/Include"};
|
||||||
|
String[] sources = {
|
||||||
|
"gl/utils.c",
|
||||||
|
"libtess2/Source/bucketalloc.c",
|
||||||
|
"libtess2/Source/dict.c",
|
||||||
|
"libtess2/Source/geom.c",
|
||||||
|
"libtess2/Source/mesh.c",
|
||||||
|
"libtess2/Source/priorityq.c",
|
||||||
|
"libtess2/Source/sweep.c",
|
||||||
|
"libtess2/Source/tess.c",
|
||||||
|
};
|
||||||
|
|
||||||
|
String cflags = " -Wall -std=c99 -O2 -ffast-math";
|
||||||
|
cflags += " -DNDEBUG"; /* disable debug in libtess2 */
|
||||||
|
|
||||||
|
//BuildTarget win32home = BuildTarget
|
||||||
|
// .newDefaultTarget(TargetOs.Windows, false);
|
||||||
|
//win32home.compilerPrefix = "";
|
||||||
|
//win32home.buildFileName = "build-windows32home.xml";
|
||||||
|
//win32home.excludeFromMasterBuildFile = true;
|
||||||
|
//win32home.headerDirs = headers;
|
||||||
|
//win32home.cIncludes = sources;
|
||||||
|
//win32home.cFlags += cflags;
|
||||||
|
//win32home.cppFlags += cflags;
|
||||||
|
|
||||||
|
BuildTarget win32 = BuildTarget
|
||||||
|
.newDefaultTarget(TargetOs.Windows, false);
|
||||||
|
win32.headerDirs = headers;
|
||||||
|
win32.cIncludes = sources;
|
||||||
|
win32.cFlags += cflags;
|
||||||
|
win32.cppFlags += cflags;
|
||||||
|
|
||||||
|
BuildTarget win64 = BuildTarget
|
||||||
|
.newDefaultTarget(TargetOs.Windows, true);
|
||||||
|
win64.headerDirs = headers;
|
||||||
|
win64.cIncludes = sources;
|
||||||
|
win64.cFlags += cflags;
|
||||||
|
win64.cppFlags += cflags;
|
||||||
|
|
||||||
|
BuildTarget lin32 = BuildTarget
|
||||||
|
.newDefaultTarget(TargetOs.Linux, false);
|
||||||
|
lin32.headerDirs = headers;
|
||||||
|
lin32.cIncludes = sources;
|
||||||
|
lin32.cFlags += cflags;
|
||||||
|
lin32.cppFlags += cflags;
|
||||||
|
|
||||||
|
BuildTarget lin64 = BuildTarget
|
||||||
|
.newDefaultTarget(TargetOs.Linux, true);
|
||||||
|
lin64.headerDirs = headers;
|
||||||
|
lin64.cIncludes = sources;
|
||||||
|
lin64.cFlags += cflags;
|
||||||
|
lin64.cppFlags += cflags;
|
||||||
|
|
||||||
|
BuildTarget mac = BuildTarget
|
||||||
|
.newDefaultTarget(TargetOs.MacOsX, false);
|
||||||
|
mac.headerDirs = headers;
|
||||||
|
mac.cIncludes = sources;
|
||||||
|
mac.cFlags += cflags;
|
||||||
|
mac.cppFlags += cflags;
|
||||||
|
mac.linkerFlags += " -framework CoreServices -framework Carbon";
|
||||||
|
|
||||||
|
BuildTarget android = BuildTarget
|
||||||
|
.newDefaultTarget(TargetOs.Android, false);
|
||||||
|
android.headerDirs = headers;
|
||||||
|
android.cIncludes = sources;
|
||||||
|
android.cFlags += cflags;
|
||||||
|
android.cppFlags += cflags;
|
||||||
|
android.linkerFlags += " -llog";
|
||||||
|
|
||||||
|
BuildTarget ios = BuildTarget.newDefaultTarget(TargetOs.IOS, false);
|
||||||
|
ios.headerDirs = headers;
|
||||||
|
ios.cIncludes = sources;
|
||||||
|
ios.cFlags += cflags;
|
||||||
|
ios.cppFlags += cflags;
|
||||||
|
|
||||||
|
new NativeCodeGenerator().generate();
|
||||||
|
|
||||||
|
new AntScriptGenerator()
|
||||||
|
.generate(new BuildConfig("vtm-jni"),
|
||||||
|
android,
|
||||||
|
lin64,
|
||||||
|
lin32,
|
||||||
|
mac,
|
||||||
|
ios,
|
||||||
|
//win32home,
|
||||||
|
win32,
|
||||||
|
win64
|
||||||
|
);
|
||||||
|
|
||||||
|
// BuildExecutor.executeAnt("jni/build-windows32home.xml", "-v clean");
|
||||||
|
// BuildExecutor.executeAnt("jni/build-linux64.xml", "-v");
|
||||||
|
// BuildExecutor.executeAnt("jni/build.xml", "pack-natives -v");
|
||||||
|
}
|
||||||
|
}
|
||||||
277
jni/src/org/oscim/utils/TessJNI.java
Normal file
277
jni/src/org/oscim/utils/TessJNI.java
Normal file
@@ -0,0 +1,277 @@
|
|||||||
|
package org.oscim.utils;
|
||||||
|
|
||||||
|
public class TessJNI {
|
||||||
|
private long inst;
|
||||||
|
|
||||||
|
public TessJNI() {
|
||||||
|
inst = newTess(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TessJNI(int bucketSize) {
|
||||||
|
inst = newTess(bucketSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void finalize() {
|
||||||
|
dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void dispose() {
|
||||||
|
if (inst != 0) {
|
||||||
|
freeTess(inst);
|
||||||
|
inst = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected long instance() {
|
||||||
|
return inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See OpenGL Red Book for description of the winding rules
|
||||||
|
* http://www.glprogramming.com/red/chapter11.html
|
||||||
|
*/
|
||||||
|
public static final class WindingRule {
|
||||||
|
public static final int ODD = 0;
|
||||||
|
public static final int NONZERO = 1;
|
||||||
|
public static final int POSITIVE = 2;
|
||||||
|
public static final int NEGATIVE = 3;
|
||||||
|
public static final int ABS_GEQ_TWO = 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class ElementType {
|
||||||
|
public static final int POLYGONS = 0;
|
||||||
|
public static final int CONNECTED_POLYGONS = 1;
|
||||||
|
public static final int BOUNDARY_CONTOURS = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addContour2D(float[] points) {
|
||||||
|
addContour2D(points, 0, points.length >> 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addContour2D(float[] points, int offset, int length) {
|
||||||
|
if (length < 6)
|
||||||
|
return;
|
||||||
|
if ((length % 2 != 0) || (offset % 2 != 0) || (points.length >> 1) < (offset + length))
|
||||||
|
throw new IllegalArgumentException("Invalid input: length:" + length
|
||||||
|
+ ", offset:" + offset
|
||||||
|
+ ", points.length:" + points.length);
|
||||||
|
addContour(inst, 2, points, 8, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addContour2D(int[] index, float[] contour) {
|
||||||
|
addMultiContour2D(inst, index, contour, 0, index.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void addContour2D(int[] index, float[] contour, int idxStart, int idxEnd) {
|
||||||
|
addMultiContour2D(inst, index, contour, idxStart, idxEnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean tesselate() {
|
||||||
|
return tessContour2D(inst,
|
||||||
|
TessJNI.WindingRule.POSITIVE,
|
||||||
|
TessJNI.ElementType.POLYGONS,
|
||||||
|
3, 2) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean tesselate(int windingRule, int elementType) {
|
||||||
|
return tessContour2D(inst, windingRule, elementType, 3, 2) == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getVertexCount() {
|
||||||
|
return getVertexCount(inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getElementCount() {
|
||||||
|
return getElementCount(inst);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getVertices(float[] out, int offset, int length) {
|
||||||
|
getVertices(inst, out, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getVertices(short[] out, int offset, int length, float scale) {
|
||||||
|
getVerticesS(inst, out, offset, length, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getElements(int[] out, int offset, int length) {
|
||||||
|
getElements(inst, out, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getElements(short[] out, int offset, int length) {
|
||||||
|
getElementsS(inst, out, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getVertexIndices(int[] out, int offset, int length) {
|
||||||
|
getVertexIndices(inst, out, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getElementsWithInputVertexIds(short[] dst, int dstOffset, int offset, int length) {
|
||||||
|
getElementsWithInputVertexIds(inst, dst, dstOffset, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @formatter:off
|
||||||
|
/*JNI
|
||||||
|
#include <tesselator.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
void* heapAlloc( void* userData, unsigned int size ){
|
||||||
|
TESS_NOTUSED( userData );
|
||||||
|
return malloc( size );
|
||||||
|
}
|
||||||
|
void* heapRealloc( void *userData, void* ptr, unsigned int size ){
|
||||||
|
TESS_NOTUSED( userData );
|
||||||
|
return realloc( ptr, size );
|
||||||
|
}
|
||||||
|
void heapFree( void* userData, void* ptr ){
|
||||||
|
TESS_NOTUSED( userData );
|
||||||
|
free( ptr );
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
static native long newTess(int size); /* {
|
||||||
|
if (size <= 0)
|
||||||
|
return (long)tessNewTess(0);
|
||||||
|
if (size > 10)
|
||||||
|
size = 10;
|
||||||
|
TESSalloc ma;
|
||||||
|
memset(&ma, 0, sizeof(ma));
|
||||||
|
ma.memalloc = heapAlloc;
|
||||||
|
ma.memfree = heapFree;
|
||||||
|
ma.memrealloc = heapRealloc;
|
||||||
|
//ma.userData = (void*)&allocated;
|
||||||
|
ma.meshEdgeBucketSize = 2 << size; // 512
|
||||||
|
ma.meshVertexBucketSize = 2 << size; // 512
|
||||||
|
ma.meshFaceBucketSize = 1 << size; // 256
|
||||||
|
ma.dictNodeBucketSize = 2 << size; // 512
|
||||||
|
ma.regionBucketSize = 1 << size; // 256
|
||||||
|
ma.extraVertices = 8;
|
||||||
|
//ma.extraVertices = 256;
|
||||||
|
return (long)tessNewTess(&ma);
|
||||||
|
} */
|
||||||
|
|
||||||
|
static native void freeTess(long inst); /* {
|
||||||
|
tessDeleteTess((TESStesselator*) inst);
|
||||||
|
} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a contour to be tesselated.
|
||||||
|
* The type of the vertex coordinates is assumed to be TESSreal.
|
||||||
|
*
|
||||||
|
* @param tess - pointer to tesselator object.
|
||||||
|
* @param size - number of coordinates per vertex. Must be 2 or 3.
|
||||||
|
* @param pointer - pointer to the first coordinate of the first vertex in the array.
|
||||||
|
* @param stride - defines offset in bytes between consecutive vertices.
|
||||||
|
* @param count - number of vertices in contour.
|
||||||
|
*/
|
||||||
|
static native void addContour(long inst, int size, float[] contour, int stride, int offset, int count);/* {
|
||||||
|
tessAddContour((TESStesselator*) inst, size, contour + (offset * stride), stride, count);
|
||||||
|
} */
|
||||||
|
|
||||||
|
static native void addMultiContour2D(long inst, int[] index, float[] contour, int idxStart, int idxCount);/* {
|
||||||
|
TESStesselator* tess = (TESStesselator*) inst;
|
||||||
|
int offset = 0;
|
||||||
|
// start at 0 to get the correct offset in contour..
|
||||||
|
for (int i = 0; i < idxStart + idxCount; i++){
|
||||||
|
int len = index[i];
|
||||||
|
if ((len % 2 != 0) || (len < 0))
|
||||||
|
break;
|
||||||
|
if (len < 6 || i < idxStart) {
|
||||||
|
offset += len;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
tessAddContour(tess, 2, contour + offset, 8, len >> 1);
|
||||||
|
offset += len;
|
||||||
|
}
|
||||||
|
} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tesselate contours.
|
||||||
|
*
|
||||||
|
* @param tess - pointer to tesselator object.
|
||||||
|
* @param windingRule - winding rules used for tesselation, must be one of TessWindingRule.
|
||||||
|
* @param elementType - defines the tesselation result element type, must be one of TessElementType.
|
||||||
|
* @param polySize - defines maximum vertices per polygons if output is polygons.
|
||||||
|
* @param vertexSize - defines the number of coordinates in tesselation result vertex, must be 2 or 3.
|
||||||
|
* @param normal - defines the normal of the input contours, of null the normal is calculated automatically.
|
||||||
|
* @return 1 if succeed, 0 if failed.
|
||||||
|
*/
|
||||||
|
static native int tessContour2D(long inst, int windingRule, int elementType, int polySize, int vertexSize);/*{
|
||||||
|
return tessTesselate((TESStesselator*) inst, windingRule, elementType, polySize, vertexSize, 0);
|
||||||
|
} */
|
||||||
|
|
||||||
|
static native int getVertexCount(long inst); /*{
|
||||||
|
return tessGetVertexCount((TESStesselator*) inst);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns pointer to first coordinate of first vertex.
|
||||||
|
*/
|
||||||
|
static native boolean getVertices(long inst, float[] out, int offset, int length);/*{
|
||||||
|
const TESSreal* vertices = tessGetVertices((TESStesselator*) inst);
|
||||||
|
if (!vertices)
|
||||||
|
return 0;
|
||||||
|
memcpy(out, vertices + offset, length * sizeof(TESSreal));
|
||||||
|
return 1;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns pointer to first coordinate of first vertex.
|
||||||
|
*/
|
||||||
|
static native void getVerticesS(long inst, short[] out, int offset, int length, float scale);/*{
|
||||||
|
const TESSreal* vertices = tessGetVertices((TESStesselator*) inst);
|
||||||
|
for(int i = 0; i < length; i++)
|
||||||
|
out[i] = (short)(vertices[offset++] * scale + 0.5f);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns pointer to first vertex index.
|
||||||
|
* <p/>
|
||||||
|
* Vertex indices can be used to map the generated vertices to the original vertices.
|
||||||
|
* Every point added using tessAddContour() will get a new index starting at 0.
|
||||||
|
* New vertices generated at the intersections of segments are assigned value TESS_UNDEF.
|
||||||
|
*/
|
||||||
|
static native boolean getVertexIndices(long inst, int[] out, int offset, int length);/* {
|
||||||
|
const TESSindex* indices = tessGetVertexIndices((TESStesselator*) inst);
|
||||||
|
if (!indices)
|
||||||
|
return 0;
|
||||||
|
memcpy(out, indices + offset, length * sizeof(TESSindex));
|
||||||
|
return 1;
|
||||||
|
} */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns number of elements in the the tesselated output.
|
||||||
|
*/
|
||||||
|
static native int getElementCount(long inst);/*{
|
||||||
|
return tessGetElementCount((TESStesselator*) inst);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns pointer to the first element.
|
||||||
|
*/
|
||||||
|
static native boolean getElements(long inst, int[] out, int offset, int length);/*{
|
||||||
|
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
|
||||||
|
if (!elements)
|
||||||
|
return 0;
|
||||||
|
memcpy(out, elements + offset, length * sizeof(TESSindex));
|
||||||
|
return 1;
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns pointer to the first element.
|
||||||
|
*/
|
||||||
|
static native void getElementsS(long inst, short[] out, int offset, int length);/*{
|
||||||
|
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
|
||||||
|
for(int i = 0; i < length; i++)
|
||||||
|
out[i] = (short)elements[offset++];
|
||||||
|
}*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns list of triangles indices (or to the first element of convex polygons).
|
||||||
|
*/
|
||||||
|
static native void getElementsWithInputVertexIds(long inst, short[] out, int dstOffset, int offset, int length);/*{
|
||||||
|
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
|
||||||
|
const TESSindex* indices = tessGetVertexIndices((TESStesselator*) inst);
|
||||||
|
for(int i = 0; i < length; i++)
|
||||||
|
out[dstOffset++] = (short)(indices[elements[offset++]]);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
2
jni/tessellate/Makefile
Normal file
2
jni/tessellate/Makefile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
all:
|
||||||
|
gcc -g -DTEST dict.c mesh.c render.c tess.c geom.c memalloc.c normal.c priorityq.c sweep.c tessmono.c tessellate.c main.c -o tessellate
|
||||||
256
jni/tessellate/TessellateJni.c
Normal file
256
jni/tessellate/TessellateJni.c
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
#include "tessellate.h"
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <jni.h>
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
#include <android/log.h>
|
||||||
|
|
||||||
|
#define printf(...) __android_log_print(ANDROID_LOG_DEBUG, "Tesselate", __VA_ARGS__)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define CAST_CTX(x) (TessContext *)(uintptr_t) x
|
||||||
|
|
||||||
|
void Java_org_oscim_utils_Tessellator_tessFinish(JNIEnv *env, jclass c, jlong ptr_context) {
|
||||||
|
|
||||||
|
TessContext *ctx = CAST_CTX(ptr_context);
|
||||||
|
|
||||||
|
while (ctx->latest_v) {
|
||||||
|
Vertex *prev = ctx->latest_v->prev;
|
||||||
|
free(ctx->latest_v);
|
||||||
|
ctx->latest_v = prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (ctx->latest_t) {
|
||||||
|
Triangle *prev = ctx->latest_t->prev;
|
||||||
|
free(ctx->latest_t);
|
||||||
|
ctx->latest_t = prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
//destroy_tess_context(ctx);
|
||||||
|
free(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
Vertex *reverse(Vertex *root) {
|
||||||
|
Vertex *start = 0;
|
||||||
|
|
||||||
|
while (root) {
|
||||||
|
Vertex *prev = root->prev;
|
||||||
|
root->prev = start;
|
||||||
|
start = root;
|
||||||
|
root = prev;
|
||||||
|
}
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
|
||||||
|
jint Java_org_oscim_utils_Tessellator_tessGetVerticesWO(JNIEnv *env, jclass c,
|
||||||
|
jlong ptr_context, jshortArray obj_coords, jint offset, jfloat scale) {
|
||||||
|
|
||||||
|
TessContext *ctx = CAST_CTX(ptr_context);
|
||||||
|
|
||||||
|
int length = (*env)->GetArrayLength(env, obj_coords);
|
||||||
|
|
||||||
|
jshort* coords = (jshort*) (*env)->GetPrimitiveArrayCritical(env, obj_coords, 0);
|
||||||
|
if (coords == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ctx->reversed) {
|
||||||
|
ctx->reversed = 1;
|
||||||
|
ctx->latest_v = reverse(ctx->latest_v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int pos = offset;
|
||||||
|
|
||||||
|
for (; ctx->latest_v && pos < length; pos += 2) {
|
||||||
|
coords[pos + 0] = (ctx->latest_v->pt[0] * scale) + 0.5f;
|
||||||
|
coords[pos + 1] = (ctx->latest_v->pt[1] * scale) + 0.5f;
|
||||||
|
Vertex *prev = ctx->latest_v->prev;
|
||||||
|
free(ctx->latest_v);
|
||||||
|
ctx->latest_v = prev;
|
||||||
|
}
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_coords, coords, JNI_ABORT);
|
||||||
|
|
||||||
|
return pos - offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
jint Java_org_oscim_utils_Tessellator_tessGetVertices(JNIEnv *env, jclass c,
|
||||||
|
jlong ptr_context, jshortArray obj_coords, jfloat scale) {
|
||||||
|
|
||||||
|
return Java_org_oscim_utils_Tessellator_tessGetVerticesWO(env, c, ptr_context, obj_coords, 0,
|
||||||
|
scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
jint Java_org_oscim_utils_Tessellator_tessGetVerticesD(JNIEnv *env, jclass c,
|
||||||
|
jlong ptr_context, jdoubleArray obj_coords) {
|
||||||
|
|
||||||
|
TessContext *ctx = CAST_CTX(ptr_context);
|
||||||
|
|
||||||
|
int length = (*env)->GetArrayLength(env, obj_coords);
|
||||||
|
|
||||||
|
jdouble* coords = (jdouble*) (*env)->GetPrimitiveArrayCritical(env, obj_coords, 0);
|
||||||
|
if (coords == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ctx->reversed) {
|
||||||
|
ctx->reversed = 1;
|
||||||
|
ctx->latest_v = reverse(ctx->latest_v);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cnt = 0;
|
||||||
|
for (; ctx->latest_v && cnt < length; cnt += 2) {
|
||||||
|
coords[cnt + 0] = ctx->latest_v->pt[0];
|
||||||
|
coords[cnt + 1] = ctx->latest_v->pt[1];
|
||||||
|
Vertex *prev = ctx->latest_v->prev;
|
||||||
|
free(ctx->latest_v);
|
||||||
|
ctx->latest_v = prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_coords, coords, JNI_ABORT);
|
||||||
|
|
||||||
|
return cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
jint Java_org_oscim_utils_Tessellator_tessGetIndicesWO(JNIEnv *env, jclass c,
|
||||||
|
jlong ptr_context, jshortArray obj_indices, int offset) {
|
||||||
|
|
||||||
|
TessContext *ctx = CAST_CTX(ptr_context);
|
||||||
|
|
||||||
|
int length = (*env)->GetArrayLength(env, obj_indices);
|
||||||
|
|
||||||
|
jshort* tris = (jshort*) (*env)->GetPrimitiveArrayCritical(env, obj_indices, 0);
|
||||||
|
if (tris == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int n_tris_copy = ctx->n_tris;
|
||||||
|
|
||||||
|
int pos = offset;
|
||||||
|
|
||||||
|
for (; ctx->latest_t && pos < length; pos += 3) {
|
||||||
|
tris[pos + 0] = ctx->latest_t->v[0];
|
||||||
|
tris[pos + 1] = ctx->latest_t->v[1];
|
||||||
|
tris[pos + 2] = ctx->latest_t->v[2];
|
||||||
|
Triangle *prev = ctx->latest_t->prev;
|
||||||
|
|
||||||
|
free(ctx->latest_t);
|
||||||
|
ctx->latest_t = prev;
|
||||||
|
n_tris_copy--;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx->n_tris = n_tris_copy;
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_indices, tris, JNI_ABORT);
|
||||||
|
|
||||||
|
return pos - offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
jint Java_org_oscim_utils_Tessellator_tessGetIndices(JNIEnv *env, jclass c,
|
||||||
|
jlong ptr_context, jshortArray obj_indices, int offset){
|
||||||
|
|
||||||
|
return Java_org_oscim_utils_Tessellator_tessGetIndicesWO(env, c,
|
||||||
|
ptr_context, obj_indices, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
jlong Java_org_oscim_utils_Tessellator_tessellate(JNIEnv *env, jclass c,
|
||||||
|
jfloatArray obj_points, jint pos,
|
||||||
|
jshortArray obj_index, jint ipos,
|
||||||
|
jint num_rings, jintArray obj_out) {
|
||||||
|
|
||||||
|
//printf("add %d %d %d\n", pos, ipos, num_rings);
|
||||||
|
jboolean isCopy;
|
||||||
|
|
||||||
|
float* orig_points = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_points, &isCopy);
|
||||||
|
if (orig_points == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
const float *points = orig_points + pos;
|
||||||
|
|
||||||
|
jshort* orig_indices = (jshort*) (*env)->GetPrimitiveArrayCritical(env, obj_index, &isCopy);
|
||||||
|
if (orig_indices == NULL) {
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
jshort* indices = orig_indices + ipos;
|
||||||
|
|
||||||
|
const float **rings = malloc(sizeof(float*) * (num_rings + 1));
|
||||||
|
int offset = 0;
|
||||||
|
for (int i = 0; i < num_rings; i++) {
|
||||||
|
rings[i] = points + offset;
|
||||||
|
offset += indices[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_index, orig_indices, JNI_ABORT);
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT);
|
||||||
|
|
||||||
|
rings[num_rings] = points + offset;
|
||||||
|
|
||||||
|
int nverts, ntris;
|
||||||
|
|
||||||
|
TessContext *ctx = tessellate(NULL, &nverts, NULL, &ntris,
|
||||||
|
rings, rings + (num_rings + 1));
|
||||||
|
|
||||||
|
free(rings);
|
||||||
|
|
||||||
|
nverts = 1 + ctx->latest_v->index;
|
||||||
|
ntris = ctx->n_tris;
|
||||||
|
|
||||||
|
jint* out = (jint*) (*env)->GetPrimitiveArrayCritical(env, obj_out, &isCopy);
|
||||||
|
if (out == NULL) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
out[0] = nverts;
|
||||||
|
out[1] = ntris;
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_out, out, JNI_ABORT);
|
||||||
|
|
||||||
|
return (long) ctx;
|
||||||
|
}
|
||||||
|
|
||||||
|
jlong Java_org_oscim_renderer_sublayers_MeshLayer_tessellateD(JNIEnv *env, jclass c,
|
||||||
|
jdoubleArray obj_points, jint pos,
|
||||||
|
jshortArray obj_index, jint ipos,
|
||||||
|
jint num_rings) { //, jintArray obj_out) {
|
||||||
|
|
||||||
|
jboolean isCopy;
|
||||||
|
|
||||||
|
//printf("add %d %d %d\n", pos, ipos, num_rings);
|
||||||
|
|
||||||
|
double* orig_points = (double*) (*env)->GetPrimitiveArrayCritical(env, obj_points, &isCopy);
|
||||||
|
if (orig_points == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
const double *points = orig_points + pos;
|
||||||
|
|
||||||
|
jshort* orig_indices = (jshort*) (*env)->GetPrimitiveArrayCritical(env, obj_index, &isCopy);
|
||||||
|
if (orig_indices == NULL) {
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
jshort* indices = orig_indices + ipos;
|
||||||
|
|
||||||
|
const double **rings = malloc(sizeof(double*) * (num_rings + 1));
|
||||||
|
int offset = 0;
|
||||||
|
for (int i = 0; i < num_rings; i++) {
|
||||||
|
rings[i] = points + offset;
|
||||||
|
offset += indices[i];
|
||||||
|
}
|
||||||
|
rings[num_rings] = points + offset;
|
||||||
|
|
||||||
|
int nverts, ntris;
|
||||||
|
|
||||||
|
TessContext *ctx = tessellateD(NULL, &nverts, NULL, &ntris,
|
||||||
|
rings, rings + (num_rings + 1));
|
||||||
|
|
||||||
|
free(rings);
|
||||||
|
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_index, orig_indices, JNI_ABORT);
|
||||||
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT);
|
||||||
|
|
||||||
|
return (long) ctx;
|
||||||
|
}
|
||||||
@@ -7,22 +7,25 @@ void run_example(const double vertices_array[],
|
|||||||
int contours_size)
|
int contours_size)
|
||||||
{
|
{
|
||||||
double *coordinates_out;
|
double *coordinates_out;
|
||||||
|
|
||||||
int *tris_out;
|
int *tris_out;
|
||||||
int nverts, ntris, i;
|
int nverts, ntris, i;
|
||||||
|
|
||||||
const double *p = vertices_array;
|
const double *p = vertices_array;
|
||||||
/* const double **contours = contours_array; */
|
//const double **contours = contours_array;
|
||||||
|
|
||||||
tessellate(&coordinates_out, &nverts,
|
tessellateD(&coordinates_out, &nverts,
|
||||||
&tris_out, &ntris,
|
&tris_out, &ntris,
|
||||||
contours_array, contours_array + contours_size);
|
contours_array, contours_array + contours_size);
|
||||||
|
|
||||||
for (i=0; i<2 * nverts; ++i) {
|
|
||||||
fprintf(stdout, "%g ", coordinates_out[i]);
|
for (i=0; i< nverts; i += 1) {
|
||||||
|
fprintf(stdout, "%g %g, ", coordinates_out[i*2], coordinates_out[i*2+1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
for (i=0; i<3 * ntris; ++i) {
|
for (i=0; i< ntris; i += 1) {
|
||||||
fprintf(stdout, "%d ", tris_out[i]);
|
fprintf(stdout, "%d %d %d\n", tris_out[i*3], tris_out[i*3+1], tris_out[i*3+2]);
|
||||||
}
|
}
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
free(coordinates_out);
|
free(coordinates_out);
|
||||||
@@ -30,15 +33,23 @@ void run_example(const double vertices_array[],
|
|||||||
free(tris_out);
|
free(tris_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main() {
|
||||||
{
|
double a1[] = {
|
||||||
double a1[] = { 0, 0, 1, 5, 2, 0, -1, 3, 3, 3 };
|
0, 0,
|
||||||
const double *c1[] = {a1, a1+10};
|
1, 0,
|
||||||
int s1 = 2;
|
1, 1,
|
||||||
|
0, 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
const double *c1[] = {a1, a1 + 8};
|
||||||
|
|
||||||
run_example(a1, c1, 2);
|
run_example(a1, c1, 2);
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
double a2[] = { 0, 0, 3, 0, 3, 3, 0, 3,
|
double a2[] = { 0, 0, 3, 0, 3, 3, 0, 3,
|
||||||
1, 1, 2, 1, 2, 2, 1, 2 };
|
1, 1, 2, 1, 2, 2, 1, 2 };
|
||||||
|
|
||||||
|
|
||||||
const double *c2[] = {a2, a2+8, a2+16};
|
const double *c2[] = {a2, a2+8, a2+16};
|
||||||
int s2 = 3;
|
int s2 = 3;
|
||||||
run_example(a2, c2, s2);
|
run_example(a2, c2, s2);
|
||||||
276
jni/tessellate/normal.c
Normal file
276
jni/tessellate/normal.c
Normal file
@@ -0,0 +1,276 @@
|
|||||||
|
/*
|
||||||
|
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
|
||||||
|
* Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice including the dates of first publication and
|
||||||
|
* either this permission notice or a reference to
|
||||||
|
* http://oss.sgi.com/projects/FreeB/
|
||||||
|
* shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* Except as contained in this notice, the name of Silicon Graphics, Inc.
|
||||||
|
* shall not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
* other dealings in this Software without prior written authorization from
|
||||||
|
* Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
** Author: Eric Veach, July 1994.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gluos.h"
|
||||||
|
#include "mesh.h"
|
||||||
|
#include "tess.h"
|
||||||
|
#include "normal.h"
|
||||||
|
#include <math.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define Dot(u,v) (u[0]*v[0] + u[1]*v[1] + u[2]*v[2])
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
static void Normalize( GLdouble v[3] )
|
||||||
|
{
|
||||||
|
GLdouble len = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];
|
||||||
|
|
||||||
|
assert( len > 0 );
|
||||||
|
len = sqrt( len );
|
||||||
|
v[0] /= len;
|
||||||
|
v[1] /= len;
|
||||||
|
v[2] /= len;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef ABS
|
||||||
|
#define ABS(x) ((x) < 0 ? -(x) : (x))
|
||||||
|
|
||||||
|
static int LongAxis(GLdouble v[3])
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
if (ABS(v[1]) > ABS(v[0])) {
|
||||||
|
i = 1;
|
||||||
|
}
|
||||||
|
if (ABS(v[2]) > ABS(v[i])) {
|
||||||
|
i = 2;
|
||||||
|
}
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ComputeNormal(GLUtesselator *tess, GLdouble norm[3])
|
||||||
|
{
|
||||||
|
GLUvertex *v, *v1, *v2;
|
||||||
|
GLdouble c, tLen2, maxLen2;
|
||||||
|
GLdouble maxVal[3], minVal[3], d1[3], d2[3], tNorm[3];
|
||||||
|
GLUvertex *maxVert[3], *minVert[3];
|
||||||
|
GLUvertex *vHead = &tess->mesh->vHead;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
maxVal[0] = maxVal[1] = maxVal[2] = -2 * GLU_TESS_MAX_COORD;
|
||||||
|
minVal[0] = minVal[1] = minVal[2] = 2 * GLU_TESS_MAX_COORD;
|
||||||
|
|
||||||
|
for (v = vHead->next; v != vHead; v = v->next) {
|
||||||
|
for (i = 0; i < 3; ++i) {
|
||||||
|
c = v->coords[i];
|
||||||
|
if (c < minVal[i]) {
|
||||||
|
minVal[i] = c;
|
||||||
|
minVert[i] = v;
|
||||||
|
}
|
||||||
|
if (c > maxVal[i]) {
|
||||||
|
maxVal[i] = c;
|
||||||
|
maxVert[i] = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find two vertices separated by at least 1/sqrt(3) of the maximum
|
||||||
|
* distance between any two vertices
|
||||||
|
*/
|
||||||
|
i = 0;
|
||||||
|
if (maxVal[1] - minVal[1] > maxVal[0] - minVal[0]) {
|
||||||
|
i = 1;
|
||||||
|
}
|
||||||
|
if (maxVal[2] - minVal[2] > maxVal[i] - minVal[i]) {
|
||||||
|
i = 2;
|
||||||
|
}
|
||||||
|
if (minVal[i] >= maxVal[i]) {
|
||||||
|
/* All vertices are the same -- normal doesn't matter */
|
||||||
|
norm[0] = 0;
|
||||||
|
norm[1] = 0;
|
||||||
|
norm[2] = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Look for a third vertex which forms the triangle with maximum area
|
||||||
|
* (Length of normal == twice the triangle area)
|
||||||
|
*/
|
||||||
|
maxLen2 = 0;
|
||||||
|
v1 = minVert[i];
|
||||||
|
v2 = maxVert[i];
|
||||||
|
d1[0] = v1->coords[0] - v2->coords[0];
|
||||||
|
d1[1] = v1->coords[1] - v2->coords[1];
|
||||||
|
d1[2] = v1->coords[2] - v2->coords[2];
|
||||||
|
for (v = vHead->next; v != vHead; v = v->next) {
|
||||||
|
d2[0] = v->coords[0] - v2->coords[0];
|
||||||
|
d2[1] = v->coords[1] - v2->coords[1];
|
||||||
|
d2[2] = v->coords[2] - v2->coords[2];
|
||||||
|
tNorm[0] = d1[1] * d2[2] - d1[2] * d2[1];
|
||||||
|
tNorm[1] = d1[2] * d2[0] - d1[0] * d2[2];
|
||||||
|
tNorm[2] = d1[0] * d2[1] - d1[1] * d2[0];
|
||||||
|
tLen2 = tNorm[0] * tNorm[0] + tNorm[1] * tNorm[1] + tNorm[2] * tNorm[2];
|
||||||
|
if (tLen2 > maxLen2) {
|
||||||
|
maxLen2 = tLen2;
|
||||||
|
norm[0] = tNorm[0];
|
||||||
|
norm[1] = tNorm[1];
|
||||||
|
norm[2] = tNorm[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxLen2 <= 0) {
|
||||||
|
/* All points lie on a single line -- any decent normal will do */
|
||||||
|
norm[0] = norm[1] = norm[2] = 0;
|
||||||
|
norm[LongAxis(d1)] = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
//printf("compute normal %f %f %f\n", norm[0], norm[1], norm[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CheckOrientation(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
GLdouble area;
|
||||||
|
GLUface *f, *fHead = &tess->mesh->fHead;
|
||||||
|
GLUvertex *v, *vHead = &tess->mesh->vHead;
|
||||||
|
GLUhalfEdge *e;
|
||||||
|
|
||||||
|
/* When we compute the normal automatically, we choose the orientation
|
||||||
|
* so that the sum of the signed areas of all contours is non-negative.
|
||||||
|
*/
|
||||||
|
area = 0;
|
||||||
|
for (f = fHead->next; f != fHead; f = f->next) {
|
||||||
|
e = f->anEdge;
|
||||||
|
if (e->winding <= 0)
|
||||||
|
continue;
|
||||||
|
do {
|
||||||
|
area += (e->Org->s - e->Dst->s) * (e->Org->t + e->Dst->t);
|
||||||
|
e = e->Lnext;
|
||||||
|
} while (e != f->anEdge);
|
||||||
|
}
|
||||||
|
if (area < 0) {
|
||||||
|
/* Reverse the orientation by flipping all the t-coordinates */
|
||||||
|
for (v = vHead->next; v != vHead; v = v->next) {
|
||||||
|
v->t = -v->t;
|
||||||
|
}
|
||||||
|
tess->tUnit[0] = -tess->tUnit[0];
|
||||||
|
tess->tUnit[1] = -tess->tUnit[1];
|
||||||
|
tess->tUnit[2] = -tess->tUnit[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef FOR_TRITE_TEST_PROGRAM
|
||||||
|
#include <stdlib.h>
|
||||||
|
extern int RandomSweep;
|
||||||
|
#define S_UNIT_X (RandomSweep ? (2*drand48()-1) : 1.0)
|
||||||
|
#define S_UNIT_Y (RandomSweep ? (2*drand48()-1) : 0.0)
|
||||||
|
#else
|
||||||
|
#if defined(SLANTED_SWEEP)
|
||||||
|
/* The "feature merging" is not intended to be complete. There are
|
||||||
|
* special cases where edges are nearly parallel to the sweep line
|
||||||
|
* which are not implemented. The algorithm should still behave
|
||||||
|
* robustly (ie. produce a reasonable tesselation) in the presence
|
||||||
|
* of such edges, however it may miss features which could have been
|
||||||
|
* merged. We could minimize this effect by choosing the sweep line
|
||||||
|
* direction to be something unusual (ie. not parallel to one of the
|
||||||
|
* coordinate axes).
|
||||||
|
*/
|
||||||
|
#define S_UNIT_X 0.50941539564955385 /* Pre-normalized */
|
||||||
|
#define S_UNIT_Y 0.86052074622010633
|
||||||
|
#else
|
||||||
|
#define S_UNIT_X 1.0
|
||||||
|
#define S_UNIT_Y 0.0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Determine the polygon normal and project vertices onto the plane
|
||||||
|
* of the polygon.
|
||||||
|
*/
|
||||||
|
void __gl_projectPolygon(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
GLUvertex *v, *vHead = &tess->mesh->vHead;
|
||||||
|
GLdouble norm[3];
|
||||||
|
GLdouble *sUnit, *tUnit;
|
||||||
|
int i, computedNormal = FALSE;
|
||||||
|
|
||||||
|
norm[0] = tess->normal[0];
|
||||||
|
norm[1] = tess->normal[1];
|
||||||
|
norm[2] = tess->normal[2];
|
||||||
|
if (norm[0] == 0 && norm[1] == 0 && norm[2] == 0) {
|
||||||
|
ComputeNormal(tess, norm);
|
||||||
|
computedNormal = TRUE;
|
||||||
|
}
|
||||||
|
sUnit = tess->sUnit;
|
||||||
|
tUnit = tess->tUnit;
|
||||||
|
i = LongAxis(norm);
|
||||||
|
|
||||||
|
#if defined(FOR_TRITE_TEST_PROGRAM) || defined(TRUE_PROJECT)
|
||||||
|
/* Choose the initial sUnit vector to be approximately perpendicular
|
||||||
|
* to the normal.
|
||||||
|
*/
|
||||||
|
Normalize( norm );
|
||||||
|
|
||||||
|
sUnit[i] = 0;
|
||||||
|
sUnit[(i+1)%3] = S_UNIT_X;
|
||||||
|
sUnit[(i+2)%3] = S_UNIT_Y;
|
||||||
|
|
||||||
|
/* Now make it exactly perpendicular */
|
||||||
|
w = Dot( sUnit, norm );
|
||||||
|
sUnit[0] -= w * norm[0];
|
||||||
|
sUnit[1] -= w * norm[1];
|
||||||
|
sUnit[2] -= w * norm[2];
|
||||||
|
Normalize( sUnit );
|
||||||
|
|
||||||
|
/* Choose tUnit so that (sUnit,tUnit,norm) form a right-handed frame */
|
||||||
|
tUnit[0] = norm[1]*sUnit[2] - norm[2]*sUnit[1];
|
||||||
|
tUnit[1] = norm[2]*sUnit[0] - norm[0]*sUnit[2];
|
||||||
|
tUnit[2] = norm[0]*sUnit[1] - norm[1]*sUnit[0];
|
||||||
|
Normalize( tUnit );
|
||||||
|
#else
|
||||||
|
/* Project perpendicular to a coordinate axis -- better numerically */
|
||||||
|
sUnit[i] = 0;
|
||||||
|
sUnit[(i + 1) % 3] = S_UNIT_X;
|
||||||
|
sUnit[(i + 2) % 3] = S_UNIT_Y;
|
||||||
|
|
||||||
|
tUnit[i] = 0;
|
||||||
|
tUnit[(i + 1) % 3] = (norm[i] > 0) ? -S_UNIT_Y : S_UNIT_Y;
|
||||||
|
tUnit[(i + 2) % 3] = (norm[i] > 0) ? S_UNIT_X : -S_UNIT_X;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Project the vertices onto the sweep plane */
|
||||||
|
for (v = vHead->next; v != vHead; v = v->next) {
|
||||||
|
v->s = Dot( v->coords, sUnit );
|
||||||
|
v->t = Dot( v->coords, tUnit );
|
||||||
|
}
|
||||||
|
if (computedNormal) {
|
||||||
|
CheckOrientation(tess);
|
||||||
|
}
|
||||||
|
}
|
||||||
529
jni/tessellate/render.c
Normal file
529
jni/tessellate/render.c
Normal file
@@ -0,0 +1,529 @@
|
|||||||
|
/*
|
||||||
|
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
|
||||||
|
* Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice including the dates of first publication and
|
||||||
|
* either this permission notice or a reference to
|
||||||
|
* http://oss.sgi.com/projects/FreeB/
|
||||||
|
* shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* Except as contained in this notice, the name of Silicon Graphics, Inc.
|
||||||
|
* shall not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
* other dealings in this Software without prior written authorization from
|
||||||
|
* Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
** Author: Eric Veach, July 1994.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gluos.h"
|
||||||
|
#include <assert.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "mesh.h"
|
||||||
|
#include "tess.h"
|
||||||
|
#include "render.h"
|
||||||
|
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This structure remembers the information we need about a primitive
|
||||||
|
* to be able to render it later, once we have determined which
|
||||||
|
* primitive is able to use the most triangles.
|
||||||
|
*/
|
||||||
|
struct FaceCount {
|
||||||
|
long size; /* number of triangles used */
|
||||||
|
GLUhalfEdge *eStart; /* edge where this primitive starts */
|
||||||
|
void (*render)(GLUtesselator *, GLUhalfEdge *, long);
|
||||||
|
/* routine to render this primitive */
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct FaceCount MaximumFan(GLUhalfEdge *eOrig);
|
||||||
|
static struct FaceCount MaximumStrip(GLUhalfEdge *eOrig);
|
||||||
|
|
||||||
|
static void RenderFan(GLUtesselator *tess, GLUhalfEdge *eStart, long size);
|
||||||
|
static void RenderStrip(GLUtesselator *tess, GLUhalfEdge *eStart, long size);
|
||||||
|
static void RenderTriangle(GLUtesselator *tess, GLUhalfEdge *eStart,
|
||||||
|
long size);
|
||||||
|
|
||||||
|
static void RenderMaximumFaceGroup(GLUtesselator *tess, GLUface *fOrig);
|
||||||
|
static void RenderLonelyTriangles(GLUtesselator *tess, GLUface *head);
|
||||||
|
|
||||||
|
/************************ Strips and Fans decomposition ******************/
|
||||||
|
|
||||||
|
/* __gl_renderMesh( tess, mesh ) takes a mesh and breaks it into triangle
|
||||||
|
* fans, strips, and separate triangles. A substantial effort is made
|
||||||
|
* to use as few rendering primitives as possible (ie. to make the fans
|
||||||
|
* and strips as large as possible).
|
||||||
|
*
|
||||||
|
* The rendering output is provided as callbacks (see the api).
|
||||||
|
*/
|
||||||
|
void __gl_renderMesh(GLUtesselator *tess, GLUmesh *mesh)
|
||||||
|
{
|
||||||
|
GLUface *f;
|
||||||
|
|
||||||
|
/* Make a list of separate triangles so we can render them all at once */
|
||||||
|
tess->lonelyTriList = NULL;
|
||||||
|
|
||||||
|
for (f = mesh->fHead.next; f != &mesh->fHead; f = f->next) {
|
||||||
|
f->marked = FALSE;
|
||||||
|
}
|
||||||
|
for (f = mesh->fHead.next; f != &mesh->fHead; f = f->next) {
|
||||||
|
|
||||||
|
/* We examine all faces in an arbitrary order. Whenever we find
|
||||||
|
* an unprocessed face F, we output a group of faces including F
|
||||||
|
* whose size is maximum.
|
||||||
|
*/
|
||||||
|
if (f->inside && !f->marked) {
|
||||||
|
RenderMaximumFaceGroup(tess, f);
|
||||||
|
assert( f->marked);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tess->lonelyTriList != NULL) {
|
||||||
|
RenderLonelyTriangles(tess, tess->lonelyTriList);
|
||||||
|
tess->lonelyTriList = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RenderMaximumFaceGroup(GLUtesselator *tess, GLUface *fOrig)
|
||||||
|
{
|
||||||
|
/* We want to find the largest triangle fan or strip of unmarked faces
|
||||||
|
* which includes the given face fOrig. There are 3 possible fans
|
||||||
|
* passing through fOrig (one centered at each vertex), and 3 possible
|
||||||
|
* strips (one for each CCW permutation of the vertices). Our strategy
|
||||||
|
* is to try all of these, and take the primitive which uses the most
|
||||||
|
* triangles (a greedy approach).
|
||||||
|
*/
|
||||||
|
GLUhalfEdge *e = fOrig->anEdge;
|
||||||
|
struct FaceCount max, newFace;
|
||||||
|
|
||||||
|
max.size = 1;
|
||||||
|
max.eStart = e;
|
||||||
|
max.render = &RenderTriangle;
|
||||||
|
|
||||||
|
if (!tess->flagBoundary) {
|
||||||
|
newFace = MaximumFan(e);
|
||||||
|
if (newFace.size > max.size) {
|
||||||
|
max = newFace;
|
||||||
|
}
|
||||||
|
newFace = MaximumFan(e->Lnext);
|
||||||
|
if (newFace.size > max.size) {
|
||||||
|
max = newFace;
|
||||||
|
}
|
||||||
|
newFace = MaximumFan(e->Lprev);
|
||||||
|
if (newFace.size > max.size) {
|
||||||
|
max = newFace;
|
||||||
|
}
|
||||||
|
|
||||||
|
newFace = MaximumStrip(e);
|
||||||
|
if (newFace.size > max.size) {
|
||||||
|
max = newFace;
|
||||||
|
}
|
||||||
|
newFace = MaximumStrip(e->Lnext);
|
||||||
|
if (newFace.size > max.size) {
|
||||||
|
max = newFace;
|
||||||
|
}
|
||||||
|
newFace = MaximumStrip(e->Lprev);
|
||||||
|
if (newFace.size > max.size) {
|
||||||
|
max = newFace;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(*(max.render))(tess, max.eStart, max.size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Macros which keep track of faces we have marked temporarily, and allow
|
||||||
|
* us to backtrack when necessary. With triangle fans, this is not
|
||||||
|
* really necessary, since the only awkward case is a loop of triangles
|
||||||
|
* around a single origin vertex. However with strips the situation is
|
||||||
|
* more complicated, and we need a general tracking method like the
|
||||||
|
* one here.
|
||||||
|
*/
|
||||||
|
#define Marked(f) (! (f)->inside || (f)->marked)
|
||||||
|
|
||||||
|
#define AddToTrail(f,t) ((f)->trail = (t), (t) = (f), (f)->marked = TRUE)
|
||||||
|
|
||||||
|
#define FreeTrail(t) do { \
|
||||||
|
while( (t) != NULL ) { \
|
||||||
|
(t)->marked = FALSE; t = (t)->trail; \
|
||||||
|
} \
|
||||||
|
} while(0) /* absorb trailing semicolon */
|
||||||
|
|
||||||
|
static struct FaceCount MaximumFan(GLUhalfEdge *eOrig)
|
||||||
|
{
|
||||||
|
/* eOrig->Lface is the face we want to render. We want to find the size
|
||||||
|
* of a maximal fan around eOrig->Org. To do this we just walk around
|
||||||
|
* the origin vertex as far as possible in both directions.
|
||||||
|
*/
|
||||||
|
struct FaceCount newFace = { 0, NULL, &RenderFan };
|
||||||
|
GLUface *trail = NULL;
|
||||||
|
GLUhalfEdge *e;
|
||||||
|
|
||||||
|
for (e = eOrig; !Marked( e->Lface ); e = e->Onext) {
|
||||||
|
AddToTrail( e->Lface, trail);
|
||||||
|
++newFace.size;
|
||||||
|
}
|
||||||
|
for (e = eOrig; !Marked( e->Rface ); e = e->Oprev) {
|
||||||
|
AddToTrail( e->Rface, trail);
|
||||||
|
++newFace.size;
|
||||||
|
}
|
||||||
|
newFace.eStart = e;
|
||||||
|
/*LINTED*/
|
||||||
|
FreeTrail( trail);
|
||||||
|
return newFace;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define IsEven(n) (((n) & 1) == 0)
|
||||||
|
|
||||||
|
static struct FaceCount MaximumStrip(GLUhalfEdge *eOrig)
|
||||||
|
{
|
||||||
|
/* Here we are looking for a maximal strip that contains the vertices
|
||||||
|
* eOrig->Org, eOrig->Dst, eOrig->Lnext->Dst (in that order or the
|
||||||
|
* reverse, such that all triangles are oriented CCW).
|
||||||
|
*
|
||||||
|
* Again we walk forward and backward as far as possible. However for
|
||||||
|
* strips there is a twist: to get CCW orientations, there must be
|
||||||
|
* an *even* number of triangles in the strip on one side of eOrig.
|
||||||
|
* We walk the strip starting on a side with an even number of triangles;
|
||||||
|
* if both side have an odd number, we are forced to shorten one side.
|
||||||
|
*/
|
||||||
|
struct FaceCount newFace = { 0, NULL, &RenderStrip };
|
||||||
|
long headSize = 0, tailSize = 0;
|
||||||
|
GLUface *trail = NULL;
|
||||||
|
GLUhalfEdge *e, *eTail, *eHead;
|
||||||
|
|
||||||
|
for (e = eOrig; !Marked( e->Lface ); ++tailSize, e = e->Onext) {
|
||||||
|
AddToTrail( e->Lface, trail);
|
||||||
|
++tailSize;
|
||||||
|
e = e->Dprev;
|
||||||
|
if (Marked( e->Lface ))
|
||||||
|
break;
|
||||||
|
AddToTrail( e->Lface, trail);
|
||||||
|
}
|
||||||
|
eTail = e;
|
||||||
|
|
||||||
|
for (e = eOrig; !Marked( e->Rface ); ++headSize, e = e->Dnext) {
|
||||||
|
AddToTrail( e->Rface, trail);
|
||||||
|
++headSize;
|
||||||
|
e = e->Oprev;
|
||||||
|
if (Marked( e->Rface ))
|
||||||
|
break;
|
||||||
|
AddToTrail( e->Rface, trail);
|
||||||
|
}
|
||||||
|
eHead = e;
|
||||||
|
|
||||||
|
newFace.size = tailSize + headSize;
|
||||||
|
if (IsEven( tailSize )) {
|
||||||
|
newFace.eStart = eTail->Sym;
|
||||||
|
}
|
||||||
|
else if (IsEven( headSize )) {
|
||||||
|
newFace.eStart = eHead;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* Both sides have odd length, we must shorten one of them. In fact,
|
||||||
|
* we must start from eHead to guarantee inclusion of eOrig->Lface.
|
||||||
|
*/
|
||||||
|
--newFace.size;
|
||||||
|
newFace.eStart = eHead->Onext;
|
||||||
|
}
|
||||||
|
/*LINTED*/
|
||||||
|
FreeTrail( trail);
|
||||||
|
return newFace;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RenderTriangle(GLUtesselator *tess, GLUhalfEdge *e, long size)
|
||||||
|
{
|
||||||
|
/* Just add the triangle to a triangle list, so we can render all
|
||||||
|
* the separate triangles at once.
|
||||||
|
*/
|
||||||
|
assert( size == 1);
|
||||||
|
AddToTrail( e->Lface, tess->lonelyTriList);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RenderLonelyTriangles(GLUtesselator *tess, GLUface *f)
|
||||||
|
{
|
||||||
|
/* Now we render all the separate triangles which could not be
|
||||||
|
* grouped into a triangle fan or strip.
|
||||||
|
*/
|
||||||
|
GLUhalfEdge *e;
|
||||||
|
int newState;
|
||||||
|
int edgeState = -1; /* force edge state output for first vertex */
|
||||||
|
|
||||||
|
CALL_BEGIN_OR_BEGIN_DATA( GL_TRIANGLES);
|
||||||
|
|
||||||
|
for (; f != NULL; f = f->trail) {
|
||||||
|
/* Loop once for each edge (there will always be 3 edges) */
|
||||||
|
|
||||||
|
e = f->anEdge;
|
||||||
|
do {
|
||||||
|
if (tess->flagBoundary) {
|
||||||
|
/* Set the "edge state" to TRUE just before we output the
|
||||||
|
* first vertex of each edge on the polygon boundary.
|
||||||
|
*/
|
||||||
|
newState = !e->Rface->inside;
|
||||||
|
if (edgeState != newState) {
|
||||||
|
edgeState = newState;
|
||||||
|
CALL_EDGE_FLAG_OR_EDGE_FLAG_DATA( edgeState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Org->data);
|
||||||
|
|
||||||
|
e = e->Lnext;
|
||||||
|
} while (e != f->anEdge);
|
||||||
|
}
|
||||||
|
CALL_END_OR_END_DATA();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RenderFan(GLUtesselator *tess, GLUhalfEdge *e, long size)
|
||||||
|
{
|
||||||
|
/* Render as many CCW triangles as possible in a fan starting from
|
||||||
|
* edge "e". The fan *should* contain exactly "size" triangles
|
||||||
|
* (otherwise we've goofed up somewhere).
|
||||||
|
*/
|
||||||
|
CALL_BEGIN_OR_BEGIN_DATA( GL_TRIANGLE_FAN);
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Org->data);
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Dst->data);
|
||||||
|
|
||||||
|
while (!Marked( e->Lface )) {
|
||||||
|
e->Lface->marked = TRUE;
|
||||||
|
--size;
|
||||||
|
e = e->Onext;
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Dst->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert( size == 0);
|
||||||
|
CALL_END_OR_END_DATA();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void RenderStrip(GLUtesselator *tess, GLUhalfEdge *e, long size)
|
||||||
|
{
|
||||||
|
/* Render as many CCW triangles as possible in a strip starting from
|
||||||
|
* edge "e". The strip *should* contain exactly "size" triangles
|
||||||
|
* (otherwise we've goofed up somewhere).
|
||||||
|
*/
|
||||||
|
CALL_BEGIN_OR_BEGIN_DATA( GL_TRIANGLE_STRIP);
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Org->data);
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Dst->data);
|
||||||
|
|
||||||
|
while (!Marked( e->Lface )) {
|
||||||
|
e->Lface->marked = TRUE;
|
||||||
|
--size;
|
||||||
|
e = e->Dprev;
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Org->data);
|
||||||
|
if (Marked( e->Lface ))
|
||||||
|
break;
|
||||||
|
|
||||||
|
e->Lface->marked = TRUE;
|
||||||
|
--size;
|
||||||
|
e = e->Onext;
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Dst->data);
|
||||||
|
}
|
||||||
|
|
||||||
|
assert( size == 0);
|
||||||
|
CALL_END_OR_END_DATA();
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ Boundary contour decomposition ******************/
|
||||||
|
|
||||||
|
/* __gl_renderBoundary( tess, mesh ) takes a mesh, and outputs one
|
||||||
|
* contour for each face marked "inside". The rendering output is
|
||||||
|
* provided as callbacks (see the api).
|
||||||
|
*/
|
||||||
|
void __gl_renderBoundary(GLUtesselator *tess, GLUmesh *mesh)
|
||||||
|
{
|
||||||
|
GLUface *f;
|
||||||
|
GLUhalfEdge *e;
|
||||||
|
|
||||||
|
for (f = mesh->fHead.next; f != &mesh->fHead; f = f->next) {
|
||||||
|
if (f->inside) {
|
||||||
|
CALL_BEGIN_OR_BEGIN_DATA( GL_LINE_LOOP);
|
||||||
|
e = f->anEdge;
|
||||||
|
do {
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( e->Org->data);
|
||||||
|
e = e->Lnext;
|
||||||
|
} while (e != f->anEdge);
|
||||||
|
CALL_END_OR_END_DATA();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ Quick-and-dirty decomposition ******************/
|
||||||
|
|
||||||
|
#define SIGN_INCONSISTENT 2
|
||||||
|
|
||||||
|
static int ComputeNormal(GLUtesselator *tess, GLdouble norm[3], int check)
|
||||||
|
/*
|
||||||
|
* If check==FALSE, we compute the polygon normal and place it in norm[].
|
||||||
|
* If check==TRUE, we check that each triangle in the fan from v0 has a
|
||||||
|
* consistent orientation with respect to norm[]. If triangles are
|
||||||
|
* consistently oriented CCW, return 1; if CW, return -1; if all triangles
|
||||||
|
* are degenerate return 0; otherwise (no consistent orientation) return
|
||||||
|
* SIGN_INCONSISTENT.
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
CachedVertex *v0 = tess->cache;
|
||||||
|
CachedVertex *vn = v0 + tess->cacheCount;
|
||||||
|
CachedVertex *vc;
|
||||||
|
GLdouble dot, xc, yc, zc, xp, yp, zp, n[3];
|
||||||
|
int sign = 0;
|
||||||
|
|
||||||
|
/* Find the polygon normal. It is important to get a reasonable
|
||||||
|
* normal even when the polygon is self-intersecting (eg. a bowtie).
|
||||||
|
* Otherwise, the computed normal could be very tiny, but perpendicular
|
||||||
|
* to the true plane of the polygon due to numerical noise. Then all
|
||||||
|
* the triangles would appear to be degenerate and we would incorrectly
|
||||||
|
* decompose the polygon as a fan (or simply not render it at all).
|
||||||
|
*
|
||||||
|
* We use a sum-of-triangles normal algorithm rather than the more
|
||||||
|
* efficient sum-of-trapezoids method (used in CheckOrientation()
|
||||||
|
* in normal.c). This lets us explicitly reverse the signed area
|
||||||
|
* of some triangles to get a reasonable normal in the self-intersecting
|
||||||
|
* case.
|
||||||
|
*/
|
||||||
|
if (!check) {
|
||||||
|
norm[0] = norm[1] = norm[2] = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
vc = v0 + 1;
|
||||||
|
xc = vc->coords[0] - v0->coords[0];
|
||||||
|
yc = vc->coords[1] - v0->coords[1];
|
||||||
|
zc = vc->coords[2] - v0->coords[2];
|
||||||
|
while (++vc < vn) {
|
||||||
|
xp = xc;
|
||||||
|
yp = yc;
|
||||||
|
zp = zc;
|
||||||
|
xc = vc->coords[0] - v0->coords[0];
|
||||||
|
yc = vc->coords[1] - v0->coords[1];
|
||||||
|
zc = vc->coords[2] - v0->coords[2];
|
||||||
|
|
||||||
|
/* Compute (vp - v0) cross (vc - v0) */
|
||||||
|
n[0] = yp * zc - zp * yc;
|
||||||
|
n[1] = zp * xc - xp * zc;
|
||||||
|
n[2] = xp * yc - yp * xc;
|
||||||
|
|
||||||
|
dot = n[0] * norm[0] + n[1] * norm[1] + n[2] * norm[2];
|
||||||
|
if (!check) {
|
||||||
|
/* Reverse the contribution of back-facing triangles to get
|
||||||
|
* a reasonable normal for self-intersecting polygons (see above)
|
||||||
|
*/
|
||||||
|
if (dot >= 0) {
|
||||||
|
norm[0] += n[0];
|
||||||
|
norm[1] += n[1];
|
||||||
|
norm[2] += n[2];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
norm[0] -= n[0];
|
||||||
|
norm[1] -= n[1];
|
||||||
|
norm[2] -= n[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (dot != 0) {
|
||||||
|
/* Check the new orientation for consistency with previous triangles */
|
||||||
|
if (dot > 0) {
|
||||||
|
if (sign < 0)
|
||||||
|
return SIGN_INCONSISTENT;
|
||||||
|
sign = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (sign > 0)
|
||||||
|
return SIGN_INCONSISTENT;
|
||||||
|
sign = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//printf("%f, %f, %f -- %d\n", norm[0], norm[1], norm[2], sign);
|
||||||
|
|
||||||
|
return sign;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* __gl_renderCache( tess ) takes a single contour and tries to render it
|
||||||
|
* as a triangle fan. This handles convex polygons, as well as some
|
||||||
|
* non-convex polygons if we get lucky.
|
||||||
|
*
|
||||||
|
* Returns TRUE if the polygon was successfully rendered. The rendering
|
||||||
|
* output is provided as callbacks (see the api).
|
||||||
|
*/
|
||||||
|
GLboolean __gl_renderCache(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
CachedVertex *v0 = tess->cache;
|
||||||
|
CachedVertex *vn = v0 + tess->cacheCount;
|
||||||
|
CachedVertex *vc;
|
||||||
|
GLdouble norm[3];
|
||||||
|
int sign;
|
||||||
|
|
||||||
|
if (tess->cacheCount < 3) {
|
||||||
|
/* Degenerate contour -- no output */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
norm[0] = tess->normal[0];
|
||||||
|
norm[1] = tess->normal[1];
|
||||||
|
norm[2] = tess->normal[2];
|
||||||
|
if (norm[0] == 0 && norm[1] == 0 && norm[2] == 0) {
|
||||||
|
ComputeNormal(tess, norm, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
sign = ComputeNormal(tess, norm, TRUE);
|
||||||
|
if (sign == SIGN_INCONSISTENT) {
|
||||||
|
/* Fan triangles did not have a consistent orientation */
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (sign == 0) {
|
||||||
|
/* All triangles were degenerate */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make sure we do the right thing for each winding rule */
|
||||||
|
switch (tess->windingRule) {
|
||||||
|
case GLU_TESS_WINDING_ODD:
|
||||||
|
case GLU_TESS_WINDING_NONZERO:
|
||||||
|
break;
|
||||||
|
case GLU_TESS_WINDING_POSITIVE:
|
||||||
|
if (sign < 0)
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case GLU_TESS_WINDING_NEGATIVE:
|
||||||
|
if (sign > 0)
|
||||||
|
return TRUE;
|
||||||
|
break;
|
||||||
|
case GLU_TESS_WINDING_ABS_GEQ_TWO:
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
CALL_BEGIN_OR_BEGIN_DATA( tess->boundaryOnly ? GL_LINE_LOOP
|
||||||
|
: (tess->cacheCount > 3) ? GL_TRIANGLE_FAN
|
||||||
|
: GL_TRIANGLES);
|
||||||
|
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( v0->data);
|
||||||
|
if (sign > 0) {
|
||||||
|
for (vc = v0 + 1; vc < vn; ++vc) {
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( vc->data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (vc = vn - 1; vc > v0; --vc) {
|
||||||
|
CALL_VERTEX_OR_VERTEX_DATA( vc->data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CALL_END_OR_END_DATA();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
650
jni/tessellate/tess.c
Normal file
650
jni/tessellate/tess.c
Normal file
@@ -0,0 +1,650 @@
|
|||||||
|
/*
|
||||||
|
* SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
|
||||||
|
* Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
* copy of this software and associated documentation files (the "Software"),
|
||||||
|
* to deal in the Software without restriction, including without limitation
|
||||||
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||||
|
* and/or sell copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice including the dates of first publication and
|
||||||
|
* either this permission notice or a reference to
|
||||||
|
* http://oss.sgi.com/projects/FreeB/
|
||||||
|
* shall be included in all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||||
|
* SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* Except as contained in this notice, the name of Silicon Graphics, Inc.
|
||||||
|
* shall not be used in advertising or otherwise to promote the sale, use or
|
||||||
|
* other dealings in this Software without prior written authorization from
|
||||||
|
* Silicon Graphics, Inc.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
** Author: Eric Veach, July 1994.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "gluos.h"
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <assert.h>
|
||||||
|
#include <setjmp.h>
|
||||||
|
#include "memalloc.h"
|
||||||
|
#include "tess.h"
|
||||||
|
#include "mesh.h"
|
||||||
|
#include "normal.h"
|
||||||
|
#include "sweep.h"
|
||||||
|
#include "tessmono.h"
|
||||||
|
#include "render.h"
|
||||||
|
|
||||||
|
#define GLU_TESS_DEFAULT_TOLERANCE 0.0
|
||||||
|
#define GLU_TESS_MESH 100112 /* void (*)(GLUmesh *mesh) */
|
||||||
|
|
||||||
|
#ifndef TRUE
|
||||||
|
#define TRUE 1
|
||||||
|
#endif
|
||||||
|
#ifndef FALSE
|
||||||
|
#define FALSE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*ARGSUSED*/static void GLAPIENTRY noBegin(GLenum type) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/static void GLAPIENTRY noEdgeFlag(GLboolean boundaryEdge) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/static void GLAPIENTRY noVertex(void *data) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/static void GLAPIENTRY noEnd(void) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/static void GLAPIENTRY noError(GLenum errnum) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/static void GLAPIENTRY noCombine(GLdouble coords[3], void *data[4],
|
||||||
|
GLfloat weight[4], void **dataOut) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/static void GLAPIENTRY noMesh(GLUmesh *mesh) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*ARGSUSED*/void GLAPIENTRY __gl_noBeginData(GLenum type,
|
||||||
|
void *polygonData) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/void GLAPIENTRY __gl_noEdgeFlagData(GLboolean boundaryEdge,
|
||||||
|
void *polygonData) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/void GLAPIENTRY __gl_noVertexData(void *data,
|
||||||
|
void *polygonData) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/void GLAPIENTRY __gl_noEndData(void *polygonData) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/void GLAPIENTRY __gl_noErrorData(GLenum errnum,
|
||||||
|
void *polygonData) {
|
||||||
|
}
|
||||||
|
/*ARGSUSED*/void GLAPIENTRY __gl_noCombineData(GLdouble coords[3],
|
||||||
|
void *data[4],
|
||||||
|
GLfloat weight[4],
|
||||||
|
void **outData,
|
||||||
|
void *polygonData) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Half-edges are allocated in pairs (see mesh.c) */
|
||||||
|
typedef struct {
|
||||||
|
GLUhalfEdge e, eSym;
|
||||||
|
} EdgePair;
|
||||||
|
|
||||||
|
#undef MAX
|
||||||
|
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
#define MAX_FAST_ALLOC (MAX(sizeof(EdgePair), \
|
||||||
|
MAX(sizeof(GLUvertex),sizeof(GLUface))))
|
||||||
|
|
||||||
|
GLUtesselator * GLAPIENTRY
|
||||||
|
gluNewTess(void)
|
||||||
|
{
|
||||||
|
GLUtesselator *tess;
|
||||||
|
|
||||||
|
/* Only initialize fields which can be changed by the api. Other fields
|
||||||
|
* are initialized where they are used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (memInit(MAX_FAST_ALLOC) == 0) {
|
||||||
|
return 0; /* out of memory */
|
||||||
|
}
|
||||||
|
tess = (GLUtesselator *) memAlloc(sizeof(GLUtesselator));
|
||||||
|
if (tess == NULL) {
|
||||||
|
return 0; /* out of memory */
|
||||||
|
}
|
||||||
|
|
||||||
|
tess->state = T_DORMANT;
|
||||||
|
|
||||||
|
tess->normal[0] = 0;
|
||||||
|
tess->normal[1] = 0;
|
||||||
|
tess->normal[2] = 0;
|
||||||
|
|
||||||
|
tess->relTolerance = GLU_TESS_DEFAULT_TOLERANCE;
|
||||||
|
tess->windingRule = GLU_TESS_WINDING_ODD;
|
||||||
|
tess->flagBoundary = FALSE;
|
||||||
|
tess->boundaryOnly = FALSE;
|
||||||
|
|
||||||
|
tess->callBegin = &noBegin;
|
||||||
|
tess->callEdgeFlag = &noEdgeFlag;
|
||||||
|
tess->callVertex = &noVertex;
|
||||||
|
tess->callEnd = &noEnd;
|
||||||
|
|
||||||
|
tess->callError = &noError;
|
||||||
|
tess->callCombine = &noCombine;
|
||||||
|
tess->callMesh = &noMesh;
|
||||||
|
|
||||||
|
tess->callBeginData = &__gl_noBeginData;
|
||||||
|
tess->callEdgeFlagData = &__gl_noEdgeFlagData;
|
||||||
|
tess->callVertexData = &__gl_noVertexData;
|
||||||
|
tess->callEndData = &__gl_noEndData;
|
||||||
|
tess->callErrorData = &__gl_noErrorData;
|
||||||
|
tess->callCombineData = &__gl_noCombineData;
|
||||||
|
|
||||||
|
tess->polygonData = NULL;
|
||||||
|
|
||||||
|
return tess;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void MakeDormant(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
/* Return the tessellator to its original dormant state. */
|
||||||
|
|
||||||
|
if (tess->mesh != NULL) {
|
||||||
|
__gl_meshDeleteMesh(tess->mesh);
|
||||||
|
}
|
||||||
|
tess->state = T_DORMANT;
|
||||||
|
tess->lastEdge = NULL;
|
||||||
|
tess->mesh = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define RequireState( tess, s ) if( tess->state != s ) GotoState(tess,s)
|
||||||
|
|
||||||
|
static void GotoState(GLUtesselator *tess, enum TessState newState)
|
||||||
|
{
|
||||||
|
while (tess->state != newState) {
|
||||||
|
/* We change the current state one level at a time, to get to
|
||||||
|
* the desired state.
|
||||||
|
*/
|
||||||
|
if (tess->state < newState) {
|
||||||
|
switch (tess->state) {
|
||||||
|
case T_DORMANT:
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_TESS_MISSING_BEGIN_POLYGON);
|
||||||
|
gluTessBeginPolygon(tess, NULL);
|
||||||
|
break;
|
||||||
|
case T_IN_POLYGON:
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_TESS_MISSING_BEGIN_CONTOUR);
|
||||||
|
gluTessBeginContour(tess);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
switch (tess->state) {
|
||||||
|
case T_IN_CONTOUR:
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_TESS_MISSING_END_CONTOUR);
|
||||||
|
gluTessEndContour(tess);
|
||||||
|
break;
|
||||||
|
case T_IN_POLYGON:
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_TESS_MISSING_END_POLYGON);
|
||||||
|
/* gluTessEndPolygon( tess ) is too much work! */
|
||||||
|
MakeDormant(tess);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluDeleteTess(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
RequireState( tess, T_DORMANT);
|
||||||
|
memFree(tess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessProperty(GLUtesselator *tess, GLenum which, GLdouble value)
|
||||||
|
{
|
||||||
|
GLenum windingRule;
|
||||||
|
|
||||||
|
switch (which) {
|
||||||
|
case GLU_TESS_TOLERANCE:
|
||||||
|
if (value < 0.0 || value > 1.0)
|
||||||
|
break;
|
||||||
|
tess->relTolerance = value;
|
||||||
|
return;
|
||||||
|
|
||||||
|
case GLU_TESS_WINDING_RULE:
|
||||||
|
windingRule = (GLenum) value;
|
||||||
|
if (windingRule != value)
|
||||||
|
break; /* not an integer */
|
||||||
|
|
||||||
|
switch (windingRule) {
|
||||||
|
case GLU_TESS_WINDING_ODD:
|
||||||
|
case GLU_TESS_WINDING_NONZERO:
|
||||||
|
case GLU_TESS_WINDING_POSITIVE:
|
||||||
|
case GLU_TESS_WINDING_NEGATIVE:
|
||||||
|
case GLU_TESS_WINDING_ABS_GEQ_TWO:
|
||||||
|
tess->windingRule = windingRule;
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case GLU_TESS_BOUNDARY_ONLY:
|
||||||
|
tess->boundaryOnly = (value != 0);
|
||||||
|
return;
|
||||||
|
|
||||||
|
default:
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_INVALID_ENUM);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_INVALID_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Returns tessellator property */
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluGetTessProperty(GLUtesselator *tess, GLenum which, GLdouble *value)
|
||||||
|
{
|
||||||
|
switch (which) {
|
||||||
|
case GLU_TESS_TOLERANCE:
|
||||||
|
/* tolerance should be in range [0..1] */
|
||||||
|
assert(0.0 <= tess->relTolerance && tess->relTolerance <= 1.0);
|
||||||
|
*value = tess->relTolerance;
|
||||||
|
break;
|
||||||
|
case GLU_TESS_WINDING_RULE:
|
||||||
|
assert(tess->windingRule == GLU_TESS_WINDING_ODD ||
|
||||||
|
tess->windingRule == GLU_TESS_WINDING_NONZERO ||
|
||||||
|
tess->windingRule == GLU_TESS_WINDING_POSITIVE ||
|
||||||
|
tess->windingRule == GLU_TESS_WINDING_NEGATIVE ||
|
||||||
|
tess->windingRule == GLU_TESS_WINDING_ABS_GEQ_TWO);
|
||||||
|
*value = tess->windingRule;
|
||||||
|
break;
|
||||||
|
case GLU_TESS_BOUNDARY_ONLY:
|
||||||
|
assert(tess->boundaryOnly == TRUE || tess->boundaryOnly == FALSE);
|
||||||
|
*value = tess->boundaryOnly;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*value = 0.0;
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_INVALID_ENUM);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} /* gluGetTessProperty() */
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessNormal(GLUtesselator *tess, GLdouble x, GLdouble y, GLdouble z)
|
||||||
|
{
|
||||||
|
tess->normal[0] = x;
|
||||||
|
tess->normal[1] = y;
|
||||||
|
tess->normal[2] = z;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessCallback(GLUtesselator *tess, GLenum which, _GLUfuncptr fn)
|
||||||
|
{
|
||||||
|
switch (which) {
|
||||||
|
case GLU_TESS_BEGIN:
|
||||||
|
tess->callBegin = (fn == NULL) ? &noBegin : (void (GLAPIENTRY *)(GLenum)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_BEGIN_DATA:
|
||||||
|
tess->callBeginData = (fn == NULL) ?
|
||||||
|
&__gl_noBeginData :
|
||||||
|
(void (GLAPIENTRY *)(GLenum, void *)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_EDGE_FLAG:
|
||||||
|
tess->callEdgeFlag = (fn == NULL) ? &noEdgeFlag :
|
||||||
|
(void (GLAPIENTRY *)(GLboolean)) fn;
|
||||||
|
/* If the client wants boundary edges to be flagged,
|
||||||
|
* we render everything as separate triangles (no strips or fans).
|
||||||
|
*/
|
||||||
|
tess->flagBoundary = (fn != NULL);
|
||||||
|
return;
|
||||||
|
case GLU_TESS_EDGE_FLAG_DATA:
|
||||||
|
tess->callEdgeFlagData = (fn == NULL) ?
|
||||||
|
&__gl_noEdgeFlagData :
|
||||||
|
(void (GLAPIENTRY *)(GLboolean, void *)) fn;
|
||||||
|
/* If the client wants boundary edges to be flagged,
|
||||||
|
* we render everything as separate triangles (no strips or fans).
|
||||||
|
*/
|
||||||
|
tess->flagBoundary = (fn != NULL);
|
||||||
|
return;
|
||||||
|
case GLU_TESS_VERTEX:
|
||||||
|
tess->callVertex = (fn == NULL) ? &noVertex :
|
||||||
|
(void (GLAPIENTRY *)(void *)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_VERTEX_DATA:
|
||||||
|
tess->callVertexData = (fn == NULL) ?
|
||||||
|
&__gl_noVertexData :
|
||||||
|
(void (GLAPIENTRY *)(void *, void *)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_END:
|
||||||
|
tess->callEnd = (fn == NULL) ? &noEnd : (void (GLAPIENTRY *)(void)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_END_DATA:
|
||||||
|
tess->callEndData = (fn == NULL) ? &__gl_noEndData :
|
||||||
|
(void (GLAPIENTRY *)(void *)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_ERROR:
|
||||||
|
tess->callError = (fn == NULL) ? &noError : (void (GLAPIENTRY *)(GLenum)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_ERROR_DATA:
|
||||||
|
tess->callErrorData = (fn == NULL) ?
|
||||||
|
&__gl_noErrorData :
|
||||||
|
(void (GLAPIENTRY *)(GLenum, void *)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_COMBINE:
|
||||||
|
tess->callCombine =
|
||||||
|
(fn == NULL) ? &noCombine :
|
||||||
|
(void (GLAPIENTRY *)(GLdouble[3], void *[4], GLfloat[4], void **)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_COMBINE_DATA:
|
||||||
|
tess->callCombineData = (fn == NULL) ? &__gl_noCombineData :
|
||||||
|
(void (GLAPIENTRY *)(GLdouble[3],
|
||||||
|
void *[4],
|
||||||
|
GLfloat[4],
|
||||||
|
void **,
|
||||||
|
void *)) fn;
|
||||||
|
return;
|
||||||
|
case GLU_TESS_MESH:
|
||||||
|
tess->callMesh = (fn == NULL) ? &noMesh : (void (GLAPIENTRY *)(GLUmesh *)) fn;
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_INVALID_ENUM);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int AddVertex(GLUtesselator *tess, GLdouble coords[3], void *data)
|
||||||
|
{
|
||||||
|
GLUhalfEdge *e;
|
||||||
|
|
||||||
|
e = tess->lastEdge;
|
||||||
|
if (e == NULL) {
|
||||||
|
/* Make a self-loop (one vertex, one edge). */
|
||||||
|
|
||||||
|
e = __gl_meshMakeEdge(tess->mesh);
|
||||||
|
if (e == NULL)
|
||||||
|
return 0;
|
||||||
|
if (!__gl_meshSplice(e, e->Sym))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* Create a new vertex and edge which immediately follow e
|
||||||
|
* in the ordering around the left face.
|
||||||
|
*/
|
||||||
|
if (__gl_meshSplitEdge(e) == NULL)
|
||||||
|
return 0;
|
||||||
|
e = e->Lnext;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The new vertex is now e->Org. */
|
||||||
|
e->Org->data = data;
|
||||||
|
e->Org->coords[0] = coords[0];
|
||||||
|
e->Org->coords[1] = coords[1];
|
||||||
|
e->Org->coords[2] = coords[2];
|
||||||
|
|
||||||
|
/* The winding of an edge says how the winding number changes as we
|
||||||
|
* cross from the edge''s right face to its left face. We add the
|
||||||
|
* vertices in such an order that a CCW contour will add +1 to
|
||||||
|
* the winding number of the region inside the contour.
|
||||||
|
*/
|
||||||
|
e->winding = 1;
|
||||||
|
e->Sym->winding = -1;
|
||||||
|
|
||||||
|
tess->lastEdge = e;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CacheVertex(GLUtesselator *tess, GLdouble coords[3], void *data)
|
||||||
|
{
|
||||||
|
CachedVertex *v = &tess->cache[tess->cacheCount];
|
||||||
|
|
||||||
|
v->data = data;
|
||||||
|
v->coords[0] = coords[0];
|
||||||
|
v->coords[1] = coords[1];
|
||||||
|
v->coords[2] = coords[2];
|
||||||
|
++tess->cacheCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int EmptyCache(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
CachedVertex *v = tess->cache;
|
||||||
|
CachedVertex *vLast;
|
||||||
|
|
||||||
|
tess->mesh = __gl_meshNewMesh();
|
||||||
|
if (tess->mesh == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (vLast = v + tess->cacheCount; v < vLast; ++v) {
|
||||||
|
if (!AddVertex(tess, v->coords, v->data))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
tess->cacheCount = 0;
|
||||||
|
tess->emptyCache = FALSE;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessVertex(GLUtesselator *tess, GLdouble coords[3], void *data)
|
||||||
|
{
|
||||||
|
int i, tooLarge = FALSE;
|
||||||
|
GLdouble x, clamped[3];
|
||||||
|
|
||||||
|
RequireState( tess, T_IN_CONTOUR);
|
||||||
|
|
||||||
|
if (tess->emptyCache) {
|
||||||
|
if (!EmptyCache(tess)) {
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_OUT_OF_MEMORY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tess->lastEdge = NULL;
|
||||||
|
}
|
||||||
|
for (i = 0; i < 3; ++i) {
|
||||||
|
x = coords[i];
|
||||||
|
if (x < -GLU_TESS_MAX_COORD) {
|
||||||
|
x = -GLU_TESS_MAX_COORD;
|
||||||
|
tooLarge = TRUE;
|
||||||
|
}
|
||||||
|
if (x > GLU_TESS_MAX_COORD) {
|
||||||
|
x = GLU_TESS_MAX_COORD;
|
||||||
|
tooLarge = TRUE;
|
||||||
|
}
|
||||||
|
clamped[i] = x;
|
||||||
|
}
|
||||||
|
if (tooLarge) {
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_TESS_COORD_TOO_LARGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tess->mesh == NULL) {
|
||||||
|
if (tess->cacheCount < TESS_MAX_CACHE) {
|
||||||
|
CacheVertex(tess, clamped, data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!EmptyCache(tess)) {
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_OUT_OF_MEMORY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!AddVertex(tess, clamped, data)) {
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_OUT_OF_MEMORY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessBeginPolygon(GLUtesselator *tess, void *data)
|
||||||
|
{
|
||||||
|
RequireState( tess, T_DORMANT);
|
||||||
|
|
||||||
|
tess->state = T_IN_POLYGON;
|
||||||
|
tess->cacheCount = 0;
|
||||||
|
tess->emptyCache = FALSE;
|
||||||
|
tess->mesh = NULL;
|
||||||
|
|
||||||
|
tess->polygonData = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessBeginContour(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
RequireState( tess, T_IN_POLYGON);
|
||||||
|
|
||||||
|
tess->state = T_IN_CONTOUR;
|
||||||
|
tess->lastEdge = NULL;
|
||||||
|
if (tess->cacheCount > 0) {
|
||||||
|
/* Just set a flag so we don't get confused by empty contours
|
||||||
|
* -- these can be generated accidentally with the obsolete
|
||||||
|
* NextContour() interface.
|
||||||
|
*/
|
||||||
|
tess->emptyCache = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessEndContour(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
RequireState( tess, T_IN_CONTOUR);
|
||||||
|
tess->state = T_IN_POLYGON;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluTessEndPolygon(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
GLUmesh *mesh;
|
||||||
|
|
||||||
|
if (setjmp(tess->env) != 0) {
|
||||||
|
/* come back here if out of memory */
|
||||||
|
CALL_ERROR_OR_ERROR_DATA( GLU_OUT_OF_MEMORY);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RequireState( tess, T_IN_POLYGON);
|
||||||
|
tess->state = T_DORMANT;
|
||||||
|
|
||||||
|
if (tess->mesh == NULL) {
|
||||||
|
if (!tess->flagBoundary && tess->callMesh == &noMesh) {
|
||||||
|
|
||||||
|
/* Try some special code to make the easy cases go quickly
|
||||||
|
* (eg. convex polygons). This code does NOT handle multiple contours,
|
||||||
|
* intersections, edge flags, and of course it does not generate
|
||||||
|
* an explicit mesh either.
|
||||||
|
*/
|
||||||
|
if (__gl_renderCache(tess)) {
|
||||||
|
tess->polygonData = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!EmptyCache(tess))
|
||||||
|
longjmp(tess->env, 1); /* could've used a label*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Determine the polygon normal and project vertices onto the plane
|
||||||
|
* of the polygon.
|
||||||
|
*/
|
||||||
|
__gl_projectPolygon(tess);
|
||||||
|
|
||||||
|
/* __gl_computeInterior( tess ) computes the planar arrangement specified
|
||||||
|
* by the given contours, and further subdivides this arrangement
|
||||||
|
* into regions. Each region is marked "inside" if it belongs
|
||||||
|
* to the polygon, according to the rule given by tess->windingRule.
|
||||||
|
* Each interior region is guaranteed be monotone.
|
||||||
|
*/
|
||||||
|
if (!__gl_computeInterior(tess)) {
|
||||||
|
longjmp(tess->env, 1); /* could've used a label */
|
||||||
|
}
|
||||||
|
|
||||||
|
mesh = tess->mesh;
|
||||||
|
if (!tess->fatalError) {
|
||||||
|
int rc = 1;
|
||||||
|
|
||||||
|
/* If the user wants only the boundary contours, we throw away all edges
|
||||||
|
* except those which separate the interior from the exterior.
|
||||||
|
* Otherwise we tessellate all the regions marked "inside".
|
||||||
|
*/
|
||||||
|
if (tess->boundaryOnly) {
|
||||||
|
rc = __gl_meshSetWindingNumber(mesh, 1, TRUE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
rc = __gl_meshTessellateInterior(mesh);
|
||||||
|
}
|
||||||
|
if (rc == 0)
|
||||||
|
longjmp(tess->env, 1); /* could've used a label */
|
||||||
|
|
||||||
|
__gl_meshCheckMesh(mesh);
|
||||||
|
|
||||||
|
if (tess->callBegin != &noBegin || tess->callEnd != &noEnd
|
||||||
|
|| tess->callVertex != &noVertex || tess->callEdgeFlag != &noEdgeFlag
|
||||||
|
|| tess->callBeginData != &__gl_noBeginData
|
||||||
|
|| tess->callEndData != &__gl_noEndData
|
||||||
|
|| tess->callVertexData != &__gl_noVertexData
|
||||||
|
|| tess->callEdgeFlagData != &__gl_noEdgeFlagData)
|
||||||
|
{
|
||||||
|
if (tess->boundaryOnly) {
|
||||||
|
__gl_renderBoundary(tess, mesh); /* output boundary contours */
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
__gl_renderMesh(tess, mesh); /* output strips and fans */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (tess->callMesh != &noMesh) {
|
||||||
|
|
||||||
|
/* Throw away the exterior faces, so that all faces are interior.
|
||||||
|
* This way the user doesn't have to check the "inside" flag,
|
||||||
|
* and we don't need to even reveal its existence. It also leaves
|
||||||
|
* the freedom for an implementation to not generate the exterior
|
||||||
|
* faces in the first place.
|
||||||
|
*/
|
||||||
|
__gl_meshDiscardExterior(mesh);
|
||||||
|
(*tess->callMesh)(mesh); /* user wants the mesh itself */
|
||||||
|
tess->mesh = NULL;
|
||||||
|
tess->polygonData = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
__gl_meshDeleteMesh(mesh);
|
||||||
|
tess->polygonData = NULL;
|
||||||
|
tess->mesh = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*XXXblythe unused function*/
|
||||||
|
#if 0
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluDeleteMesh( GLUmesh *mesh )
|
||||||
|
{
|
||||||
|
__gl_meshDeleteMesh( mesh );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************/
|
||||||
|
|
||||||
|
/* Obsolete calls -- for backward compatibility */
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluBeginPolygon(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
gluTessBeginPolygon(tess, NULL);
|
||||||
|
gluTessBeginContour(tess);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*ARGSUSED*/
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluNextContour(GLUtesselator *tess, GLenum type)
|
||||||
|
{
|
||||||
|
gluTessEndContour(tess);
|
||||||
|
gluTessBeginContour(tess);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLAPIENTRY
|
||||||
|
gluEndPolygon(GLUtesselator *tess)
|
||||||
|
{
|
||||||
|
gluTessEndContour(tess);
|
||||||
|
gluTessEndPolygon(tess);
|
||||||
|
}
|
||||||
@@ -1,42 +1,12 @@
|
|||||||
#include <jni.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "glu.h"
|
#include "glu.h"
|
||||||
#include "tess.h"
|
#include "tess.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
#ifdef __ANDROID__
|
#include "tessellate.h"
|
||||||
#include <android/log.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef uintptr_t
|
|
||||||
typedef unsigned long uintptr_t;
|
|
||||||
#endif
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
typedef struct Triangle {
|
|
||||||
int v[3];
|
|
||||||
struct Triangle *prev;
|
|
||||||
} Triangle;
|
|
||||||
|
|
||||||
typedef struct Vertex {
|
|
||||||
double pt[3];
|
|
||||||
int index;
|
|
||||||
struct Vertex *prev;
|
|
||||||
} Vertex;
|
|
||||||
|
|
||||||
typedef struct TessContext {
|
|
||||||
Triangle *latest_t;
|
|
||||||
int n_tris;
|
|
||||||
|
|
||||||
Vertex *v_prev;
|
|
||||||
Vertex *v_prevprev;
|
|
||||||
Vertex *latest_v;
|
|
||||||
GLenum current_mode;
|
|
||||||
int odd_even_strip;
|
|
||||||
|
|
||||||
void (*vertex_cb)(Vertex *, struct TessContext *);
|
|
||||||
} TessContext;
|
|
||||||
|
|
||||||
void skip_vertex(Vertex *v, TessContext *ctx);
|
void skip_vertex(Vertex *v, TessContext *ctx);
|
||||||
|
|
||||||
@@ -54,6 +24,7 @@ TessContext *new_tess_context()
|
|||||||
result->v_prev = NULL;
|
result->v_prev = NULL;
|
||||||
result->vertex_cb = &skip_vertex;
|
result->vertex_cb = &skip_vertex;
|
||||||
result->odd_even_strip = 0;
|
result->odd_even_strip = 0;
|
||||||
|
result->reversed = 0;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,7 +138,7 @@ void begin(GLenum which, void *poly_data)
|
|||||||
ctx->vertex_cb = &fan_vertex;
|
ctx->vertex_cb = &fan_vertex;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf(stderr, "ERROR, can't handle %d\n", (int) which);
|
//printf(stderr, "ERROR, can't handle %d\n", (int) which);
|
||||||
ctx->vertex_cb = &skip_vertex;
|
ctx->vertex_cb = &skip_vertex;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -210,8 +181,37 @@ void write_output(TessContext *ctx, float **coordinates_out, int **tris_out, int
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void write_outputD(TessContext *ctx, double **coordinates_out, int **tris_out, int *vc, int *tc)
|
||||||
|
{
|
||||||
|
int n_verts = 1 + ctx->latest_v->index;
|
||||||
|
*vc = n_verts;
|
||||||
|
int n_tris_copy = ctx->n_tris;
|
||||||
|
*tc = ctx->n_tris;
|
||||||
|
*coordinates_out = malloc(n_verts * sizeof(double) * 2);
|
||||||
|
*tris_out = (ctx->n_tris ? malloc(ctx->n_tris * sizeof(int) * 3) : NULL);
|
||||||
|
|
||||||
|
while (ctx->latest_v) {
|
||||||
|
(*coordinates_out)[2 * ctx->latest_v->index] = ctx->latest_v->pt[0];
|
||||||
|
(*coordinates_out)[2 * ctx->latest_v->index + 1] = ctx->latest_v->pt[1];
|
||||||
|
Vertex *prev = ctx->latest_v->prev;
|
||||||
|
free(ctx->latest_v);
|
||||||
|
ctx->latest_v = prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (ctx->latest_t) {
|
||||||
|
(*tris_out)[3 * (n_tris_copy - 1)] = ctx->latest_t->v[0];
|
||||||
|
(*tris_out)[3 * (n_tris_copy - 1) + 1] = ctx->latest_t->v[1];
|
||||||
|
(*tris_out)[3 * (n_tris_copy - 1) + 2] = ctx->latest_t->v[2];
|
||||||
|
Triangle *prev = ctx->latest_t->prev;
|
||||||
|
free(ctx->latest_t);
|
||||||
|
ctx->latest_t = prev;
|
||||||
|
n_tris_copy--;
|
||||||
|
}
|
||||||
|
}
|
||||||
TessContext *tessellate(
|
TessContext *tessellate(
|
||||||
|
float **verts,
|
||||||
int *nverts,
|
int *nverts,
|
||||||
|
int **tris,
|
||||||
int *ntris,
|
int *ntris,
|
||||||
const float **contoursbegin,
|
const float **contoursbegin,
|
||||||
const float **contoursend)
|
const float **contoursend)
|
||||||
@@ -229,6 +229,7 @@ TessContext *tessellate(
|
|||||||
gluTessCallback(tess, GLU_TESS_COMBINE_DATA, (GLvoid (*)()) &combine);
|
gluTessCallback(tess, GLU_TESS_COMBINE_DATA, (GLvoid (*)()) &combine);
|
||||||
|
|
||||||
gluTessBeginPolygon(tess, ctx);
|
gluTessBeginPolygon(tess, ctx);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
contourbegin = *contoursbegin++;
|
contourbegin = *contoursbegin++;
|
||||||
contourend = *contoursbegin;
|
contourend = *contoursbegin;
|
||||||
@@ -242,141 +243,66 @@ TessContext *tessellate(
|
|||||||
} while (contoursbegin != (contoursend - 1));
|
} while (contoursbegin != (contoursend - 1));
|
||||||
gluTessEndPolygon(tess);
|
gluTessEndPolygon(tess);
|
||||||
|
|
||||||
//write_output(ctx, verts, tris, nverts, ntris);
|
#ifdef TEST
|
||||||
//destroy_tess_context(ctx);
|
write_output(ctx, verts, tris, nverts, ntris);
|
||||||
|
destroy_tess_context(ctx);
|
||||||
|
#else
|
||||||
gluDeleteTess(tess);
|
gluDeleteTess(tess);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
#ifdef __ANDROID__
|
|
||||||
#define printf(...) __android_log_print(ANDROID_LOG_DEBUG, "Tesselate", __VA_ARGS__)
|
TessContext *tessellateD(
|
||||||
|
double **verts,
|
||||||
|
int *nverts,
|
||||||
|
int **tris,
|
||||||
|
int *ntris,
|
||||||
|
const double **contoursbegin,
|
||||||
|
const double **contoursend)
|
||||||
|
{
|
||||||
|
const double *contourbegin, *contourend;
|
||||||
|
Vertex *current_vertex;
|
||||||
|
GLUtesselator *tess;
|
||||||
|
TessContext *ctx;
|
||||||
|
|
||||||
|
tess = gluNewTess();
|
||||||
|
ctx = new_tess_context();
|
||||||
|
|
||||||
|
|
||||||
|
//tess->normal[2] = -1;
|
||||||
|
|
||||||
|
gluTessCallback(tess, GLU_TESS_VERTEX_DATA, (GLvoid (*)()) &vertex);
|
||||||
|
gluTessCallback(tess, GLU_TESS_BEGIN_DATA, (GLvoid (*)()) &begin);
|
||||||
|
gluTessCallback(tess, GLU_TESS_COMBINE_DATA, (GLvoid (*)()) &combine);
|
||||||
|
|
||||||
|
gluTessBeginPolygon(tess, ctx);
|
||||||
|
|
||||||
|
do {
|
||||||
|
//printf("begin contour\n");
|
||||||
|
contourbegin = *contoursbegin++;
|
||||||
|
contourend = *contoursbegin;
|
||||||
|
|
||||||
|
gluTessBeginContour(tess);
|
||||||
|
|
||||||
|
while (contourbegin != contourend) {
|
||||||
|
//printf("add point %f %f \n", contourbegin[0], contourbegin[1]);
|
||||||
|
current_vertex = new_vertex(ctx, contourbegin[0], contourbegin[1]);
|
||||||
|
contourbegin += 2;
|
||||||
|
gluTessVertex(tess, current_vertex->pt, current_vertex);
|
||||||
|
}
|
||||||
|
gluTessEndContour(tess);
|
||||||
|
} while (contoursbegin != (contoursend - 1));
|
||||||
|
|
||||||
|
gluTessEndPolygon(tess);
|
||||||
|
|
||||||
|
#ifdef TEST
|
||||||
|
write_outputD(ctx, verts, tris, nverts, ntris);
|
||||||
|
destroy_tess_context(ctx);
|
||||||
|
#else
|
||||||
|
gluDeleteTess(tess);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CAST_CTX(x) (TessContext *)(uintptr_t) x
|
return ctx;
|
||||||
|
|
||||||
void Java_org_oscim_renderer_sublayers_MeshLayer_tessFinish(JNIEnv *env, jclass c,
|
|
||||||
jlong ptr_context) {
|
|
||||||
|
|
||||||
TessContext *ctx = CAST_CTX(ptr_context);
|
|
||||||
|
|
||||||
while (ctx->latest_v) {
|
|
||||||
Vertex *prev = ctx->latest_v->prev;
|
|
||||||
free(ctx->latest_v);
|
|
||||||
ctx->latest_v = prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (ctx->latest_t) {
|
|
||||||
Triangle *prev = ctx->latest_t->prev;
|
|
||||||
free(ctx->latest_t);
|
|
||||||
ctx->latest_t = prev;
|
|
||||||
}
|
|
||||||
|
|
||||||
destroy_tess_context(ctx);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
jint Java_org_oscim_renderer_sublayers_MeshLayer_tessGetCoordinates(JNIEnv *env, jclass c,
|
|
||||||
jlong ptr_context, jshortArray obj_coords, jfloat scale) {
|
|
||||||
|
|
||||||
TessContext *ctx = CAST_CTX(ptr_context);
|
|
||||||
|
|
||||||
int length = (*env)->GetArrayLength(env, obj_coords);
|
|
||||||
|
|
||||||
jshort* coords = (jshort*) (*env)->GetPrimitiveArrayCritical(env, obj_coords, 0);
|
|
||||||
if (coords == NULL) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int n_verts = 1 + ctx->latest_v->index;
|
|
||||||
int n_tris_copy = ctx->n_tris;
|
|
||||||
|
|
||||||
int cnt = 0;
|
|
||||||
for (; ctx->latest_v && cnt < length; cnt += 2) {
|
|
||||||
coords[cnt + 0] = (ctx->latest_v->pt[0] * scale) + 0.5f;
|
|
||||||
coords[cnt + 1] = (ctx->latest_v->pt[1] * scale) + 0.5f;
|
|
||||||
Vertex *prev = ctx->latest_v->prev;
|
|
||||||
free(ctx->latest_v);
|
|
||||||
ctx->latest_v = prev;
|
|
||||||
}
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, obj_coords, coords, JNI_ABORT);
|
|
||||||
|
|
||||||
return cnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
jint Java_org_oscim_renderer_sublayers_MeshLayer_tessGetIndices(JNIEnv *env, jclass c,
|
|
||||||
jlong ptr_context, jshortArray obj_indices) {
|
|
||||||
|
|
||||||
TessContext *ctx = CAST_CTX(ptr_context);
|
|
||||||
|
|
||||||
int length = (*env)->GetArrayLength(env, obj_indices);
|
|
||||||
|
|
||||||
jshort* tris = (jshort*) (*env)->GetPrimitiveArrayCritical(env, obj_indices, 0);
|
|
||||||
if (tris == NULL) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int n_tris_copy = ctx->n_tris;
|
|
||||||
|
|
||||||
int cnt = 0;
|
|
||||||
|
|
||||||
for (; ctx->latest_t && cnt < length; cnt += 3) {
|
|
||||||
tris[cnt + 0] = ctx->latest_t->v[0];
|
|
||||||
tris[cnt + 1] = ctx->latest_t->v[1];
|
|
||||||
tris[cnt + 2] = ctx->latest_t->v[2];
|
|
||||||
Triangle *prev = ctx->latest_t->prev;
|
|
||||||
|
|
||||||
free(ctx->latest_t);
|
|
||||||
ctx->latest_t = prev;
|
|
||||||
n_tris_copy--;
|
|
||||||
}
|
|
||||||
|
|
||||||
ctx->n_tris = n_tris_copy;
|
|
||||||
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, obj_indices, tris, JNI_ABORT);
|
|
||||||
|
|
||||||
return cnt;
|
|
||||||
}
|
|
||||||
|
|
||||||
jlong Java_org_oscim_renderer_sublayers_MeshLayer_tessellate(JNIEnv *env, jclass c,
|
|
||||||
jfloatArray obj_points, jint pos,
|
|
||||||
jshortArray obj_index, jint ipos,
|
|
||||||
jint num_rings) { //, jintArray obj_out) {
|
|
||||||
|
|
||||||
jboolean isCopy;
|
|
||||||
|
|
||||||
printf("add %d %d %d\n", pos, ipos, num_rings);
|
|
||||||
|
|
||||||
float* orig_points = (float*) (*env)->GetPrimitiveArrayCritical(env, obj_points, &isCopy);
|
|
||||||
if (orig_points == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
const float *points = orig_points + pos;
|
|
||||||
|
|
||||||
jshort* orig_indices = (jshort*) (*env)->GetPrimitiveArrayCritical(env, obj_index, &isCopy);
|
|
||||||
if (orig_indices == NULL) {
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
jshort* indices = orig_indices + ipos;
|
|
||||||
|
|
||||||
const float **rings = malloc(sizeof(float*) * (num_rings + 1));
|
|
||||||
int offset = 0;
|
|
||||||
for (int i = 0; i < num_rings; i++) {
|
|
||||||
rings[i] = points + offset;
|
|
||||||
offset += indices[i];
|
|
||||||
}
|
|
||||||
rings[num_rings] = points + offset;
|
|
||||||
|
|
||||||
int nverts, ntris;
|
|
||||||
|
|
||||||
TessContext *ctx = tessellate(&nverts, &ntris,
|
|
||||||
rings, rings + (num_rings + 1));
|
|
||||||
|
|
||||||
free(rings);
|
|
||||||
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, obj_index, orig_indices, JNI_ABORT);
|
|
||||||
(*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT);
|
|
||||||
|
|
||||||
return (long) ctx;
|
|
||||||
}
|
|
||||||
42
jni/tessellate/tessellate.h
Normal file
42
jni/tessellate/tessellate.h
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
#include "glu.h"
|
||||||
|
|
||||||
|
typedef struct Triangle {
|
||||||
|
int v[3];
|
||||||
|
struct Triangle *prev;
|
||||||
|
} Triangle;
|
||||||
|
|
||||||
|
typedef struct Vertex {
|
||||||
|
double pt[3];
|
||||||
|
int index;
|
||||||
|
struct Vertex *prev;
|
||||||
|
} Vertex;
|
||||||
|
|
||||||
|
typedef struct TessContext {
|
||||||
|
Triangle *latest_t;
|
||||||
|
int n_tris;
|
||||||
|
int reversed;
|
||||||
|
|
||||||
|
Vertex *v_prev;
|
||||||
|
Vertex *v_prevprev;
|
||||||
|
Vertex *latest_v;
|
||||||
|
GLenum current_mode;
|
||||||
|
int odd_even_strip;
|
||||||
|
|
||||||
|
void (*vertex_cb)(Vertex *, struct TessContext *);
|
||||||
|
} TessContext;
|
||||||
|
|
||||||
|
TessContext *tessellateD
|
||||||
|
(double **verts,
|
||||||
|
int *nverts,
|
||||||
|
int **tris,
|
||||||
|
int *ntris,
|
||||||
|
const double **contoursbegin,
|
||||||
|
const double **contoursend);
|
||||||
|
|
||||||
|
TessContext *tessellate
|
||||||
|
(float **verts,
|
||||||
|
int *nverts,
|
||||||
|
int **tris,
|
||||||
|
int *ntris,
|
||||||
|
const float **contoursbegin,
|
||||||
|
const float **contoursend);
|
||||||
345
resources/rendertheme.xsd
Normal file
345
resources/rendertheme.xsd
Normal file
@@ -0,0 +1,345 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<xs:schema xmlns:tns="http://opensciencemap.org/rendertheme"
|
||||||
|
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
|
||||||
|
targetNamespace="http://opensciencemap.org/rendertheme" xml:lang="en">
|
||||||
|
|
||||||
|
<!-- attribute types -->
|
||||||
|
<xs:simpleType name="cap">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="butt" />
|
||||||
|
<xs:enumeration value="round" />
|
||||||
|
<xs:enumeration value="square" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="closed">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="yes" />
|
||||||
|
<xs:enumeration value="no" />
|
||||||
|
<xs:enumeration value="any" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="color">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="elementList">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="node" />
|
||||||
|
<xs:enumeration value="way" />
|
||||||
|
<xs:enumeration value="any" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="selectorList">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="first" />
|
||||||
|
<xs:enumeration value="any" />
|
||||||
|
<xs:enumeration value="when-matched" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="fontFamily">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="default" />
|
||||||
|
<xs:enumeration value="default_bold" />
|
||||||
|
<xs:enumeration value="monospace" />
|
||||||
|
<xs:enumeration value="sans_serif" />
|
||||||
|
<xs:enumeration value="serif" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="fontStyle">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="bold" />
|
||||||
|
<xs:enumeration value="bold_italic" />
|
||||||
|
<xs:enumeration value="italic" />
|
||||||
|
<xs:enumeration value="normal" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="nonNegativeFloat">
|
||||||
|
<xs:restriction base="xs:float">
|
||||||
|
<xs:minInclusive value="0" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="src">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern value="((file|assets):)?.+" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="strokeDasharray">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:pattern
|
||||||
|
value="([0-9]+(\.[0-9]+)? *, *[0-9]+(\.[0-9]+)? *, *)*[0-9]+(\.[0-9]+)? *, *[0-9]+(\.[0-9]+)?" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<xs:simpleType name="textKey">
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:enumeration value="ele" />
|
||||||
|
<xs:enumeration value="addr:housenumber" />
|
||||||
|
<xs:enumeration value="name" />
|
||||||
|
<xs:enumeration value="ref" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
|
||||||
|
<!-- style menu cat element -->
|
||||||
|
<xs:complexType name="cat">
|
||||||
|
<xs:attribute name="id" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- style menu name element -->
|
||||||
|
<xs:complexType name="name">
|
||||||
|
<xs:attribute name="lang" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="value" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- style menu overlay element -->
|
||||||
|
<xs:complexType name="overlay">
|
||||||
|
<xs:attribute name="id" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- style menu layer element -->
|
||||||
|
<xs:complexType name="layer">
|
||||||
|
<xs:sequence maxOccurs="1" minOccurs="0">
|
||||||
|
<xs:element name="name" maxOccurs="unbounded" minOccurs="0" type="tns:name" />
|
||||||
|
<xs:element name="cat" maxOccurs="unbounded" minOccurs="0" type="tns:cat" />
|
||||||
|
<xs:element name="overlay" maxOccurs="unbounded" minOccurs="0" type="tns:overlay" />
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="id" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="parent" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="visible" default="false" type="xs:boolean" use="optional" />
|
||||||
|
<xs:attribute name="enabled" default="false" type="xs:boolean" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- rendering instructions -->
|
||||||
|
<xs:complexType name="area">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="id" default="0" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="src" type="tns:src" use="optional" />
|
||||||
|
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke" default="#00000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
<xs:attribute name="fade" default="-1" type="xs:integer" use="optional" />
|
||||||
|
<xs:attribute name="blend" default="-1" type="xs:integer" use="optional" />
|
||||||
|
<xs:attribute name="blend-fill" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="mesh" default="false" type="xs:boolean" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="caption">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="k" type="tns:textKey" use="required" />
|
||||||
|
<xs:attribute name="dy" default="0" type="xs:float" use="optional" />
|
||||||
|
<xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" />
|
||||||
|
<xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" />
|
||||||
|
<xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
<!-- polygon area expressed as a ratio to tile area, e.g. 0.1 for 10% of tile area -->
|
||||||
|
<xs:attribute name="area-size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
<!-- priority for label placement, 0 = highest priority -->
|
||||||
|
<xs:attribute name="priority" default="0" type="xs:integer" use="optional" />
|
||||||
|
<!-- symbol src name -->
|
||||||
|
<xs:attribute name="symbol" type="tns:src" use="optional" />
|
||||||
|
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="circle">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="radius" type="tns:nonNegativeFloat" use="required" />
|
||||||
|
<xs:attribute name="scale-radius" default="false" type="xs:boolean" use="optional" />
|
||||||
|
<xs:attribute name="fill" default="#00000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke" default="#00000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="line">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
|
||||||
|
<!-- style: TODO only in style-line-->
|
||||||
|
<xs:attribute name="id" default="0" type="xs:string" use="optional" />
|
||||||
|
|
||||||
|
<!-- inherited style -->
|
||||||
|
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
|
||||||
|
|
||||||
|
<xs:attribute name="src" type="tns:src" use="optional" />
|
||||||
|
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="width" default="0" type="xs:float" use="optional" />
|
||||||
|
<!-- minimum scaled width to draw outline -->
|
||||||
|
<xs:attribute name="min" default="0" type="xs:float" use="optional" />
|
||||||
|
<xs:attribute name="dasharray" type="tns:strokeDasharray" use="optional" />
|
||||||
|
<xs:attribute name="cap" default="round" type="tns:cap" use="optional" />
|
||||||
|
<xs:attribute name="outline" default="" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="fade" default="-1" type="xs:integer" use="optional" />
|
||||||
|
<xs:attribute name="blur" default="-1" type="xs:float" use="optional" />
|
||||||
|
<xs:attribute name="fix" default="false" type="xs:boolean" use="optional" />
|
||||||
|
|
||||||
|
<!-- stipple repeat in 'pixel' -->
|
||||||
|
<xs:attribute name="stipple" default="0" type="xs:integer" use="optional" />
|
||||||
|
<!-- stipple color -->
|
||||||
|
<xs:attribute name="stipple-stroke" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<!-- stipple width relative to line width, i.e 0.0-1.0 -->
|
||||||
|
<xs:attribute name="stipple-width" default="0" type="xs:float" use="optional" />
|
||||||
|
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!--<xs:complexType name="outline">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="name" default="0" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="src" type="tns:src" use="optional" />
|
||||||
|
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
</xs:complexType>-->
|
||||||
|
|
||||||
|
<xs:complexType name="lineSymbol">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="src" type="tns:src" use="required" />
|
||||||
|
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="align-center" default="false" type="xs:boolean" use="optional" />
|
||||||
|
<xs:attribute name="repeat" default="false" type="xs:boolean" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="text">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
|
||||||
|
<xs:attribute name="id" default="0" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="use" default="0" type="xs:string" use="optional" />
|
||||||
|
|
||||||
|
<xs:attribute name="k" default="name" type="tns:textKey" use="optional" />
|
||||||
|
<xs:attribute name="dy" default="0" type="xs:float" use="optional" />
|
||||||
|
<xs:attribute name="font-family" default="default" type="tns:fontFamily" use="optional" />
|
||||||
|
<xs:attribute name="style" default="normal" type="tns:fontStyle" use="optional" />
|
||||||
|
<xs:attribute name="size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
<xs:attribute name="fill" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke" default="#000000" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="stroke-width" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
<xs:attribute name="caption" default="false" type="xs:boolean" use="optional" />
|
||||||
|
<!-- polygon area expressed as a ratio to tile area, e.g. 0.1 for 10% of tile area -->
|
||||||
|
<xs:attribute name="area-size" default="0" type="tns:nonNegativeFloat" use="optional" />
|
||||||
|
<!-- priority for label placement, 0 = highest priority -->
|
||||||
|
<xs:attribute name="priority" default="0" type="xs:integer" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="symbol">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="src" type="tns:src" use="required" />
|
||||||
|
<xs:attribute name="symbol-width" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-height" type="xs:positiveInteger" use="optional" />
|
||||||
|
<xs:attribute name="symbol-percent" type="xs:positiveInteger" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="extrusion">
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="line-color" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="side-color" type="tns:color" use="required" />
|
||||||
|
<xs:attribute name="top-color" type="tns:color" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- match elements -->
|
||||||
|
<xs:complexType name="m">
|
||||||
|
<xs:choice maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<!-- recursion to allow for nested m -->
|
||||||
|
<xs:element name="m" type="tns:m" />
|
||||||
|
|
||||||
|
<xs:element name="area" type="tns:area" />
|
||||||
|
<xs:element name="caption" type="tns:caption" />
|
||||||
|
<xs:element name="circle" type="tns:circle" />
|
||||||
|
<xs:element name="line" type="tns:line" />
|
||||||
|
<xs:element name="outline" type="tns:line" />
|
||||||
|
<xs:element name="lineSymbol" type="tns:lineSymbol" />
|
||||||
|
<xs:element name="text" type="tns:text" />
|
||||||
|
<xs:element name="extrusion" type="tns:extrusion" />
|
||||||
|
<xs:element name="symbol" type="tns:symbol" />
|
||||||
|
|
||||||
|
<!-- outline is defined within rules to match layering -->
|
||||||
|
<xs:element name="outline-layer" type="tns:line" />
|
||||||
|
</xs:choice>
|
||||||
|
|
||||||
|
<xs:attribute name="select" default="any" type="tns:selectorList" use="optional" />
|
||||||
|
<xs:attribute name="e" type="tns:elementList" use="optional" />
|
||||||
|
<xs:attribute name="k" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="v" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="cat" type="xs:string" use="optional" />
|
||||||
|
<xs:attribute name="closed" default="any" type="tns:closed" use="optional" />
|
||||||
|
<xs:attribute name="zoom-min" default="0" type="xs:unsignedByte" use="optional" />
|
||||||
|
<xs:attribute name="zoom-max" default="127" type="xs:unsignedByte" use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="atlasRect">
|
||||||
|
<xs:attribute name="id" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="pos" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:complexType name="atlas">
|
||||||
|
<xs:choice maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<xs:element name="rect" type="tns:atlasRect" />
|
||||||
|
</xs:choice>
|
||||||
|
<xs:attribute name="img" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- stylemenu element -->
|
||||||
|
<xs:complexType name="stylemenu">
|
||||||
|
<xs:sequence maxOccurs="1" minOccurs="0">
|
||||||
|
<xs:element name="layer" maxOccurs="unbounded" minOccurs="0" type="tns:layer" />
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="defaultvalue" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="defaultlang" type="xs:string" use="required" />
|
||||||
|
<xs:attribute name="id" type="xs:string" use="required" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- rendertheme element -->
|
||||||
|
<xs:complexType name="rendertheme">
|
||||||
|
<xs:sequence maxOccurs="1" minOccurs="0">
|
||||||
|
<xs:element name="stylemenu" maxOccurs="1" minOccurs="0" type="tns:stylemenu" />
|
||||||
|
|
||||||
|
<!-- style definitions -->
|
||||||
|
<xs:sequence maxOccurs="256" minOccurs="0">
|
||||||
|
<xs:choice maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<xs:element name="style-text" type="tns:text" />
|
||||||
|
<xs:element name="style-area" type="tns:area" />
|
||||||
|
<xs:element name="style-line" type="tns:line" />
|
||||||
|
<!-- <xs:element name="style-outline" type="tns:line" /> -->
|
||||||
|
</xs:choice>
|
||||||
|
</xs:sequence>
|
||||||
|
|
||||||
|
<xs:choice maxOccurs="1" minOccurs="0">
|
||||||
|
<xs:element name="atlas" type="tns:atlas" />
|
||||||
|
</xs:choice>
|
||||||
|
|
||||||
|
<!-- matching rules -->
|
||||||
|
<xs:sequence maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<xs:element name="m" type="tns:m" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute name="version" type="xs:positiveInteger" use="required" />
|
||||||
|
<xs:attribute name="map-background" default="#ffffff" type="tns:color" use="optional" />
|
||||||
|
<xs:attribute name="base-stroke-width" default="1" type="tns:nonNegativeFloat"
|
||||||
|
use="optional" />
|
||||||
|
<xs:attribute name="base-text-scale" default="1" type="tns:nonNegativeFloat"
|
||||||
|
use="optional" />
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<!-- root element -->
|
||||||
|
<xs:element name="rendertheme" type="tns:rendertheme" />
|
||||||
|
</xs:schema>
|
||||||
19
settings.gradle
Normal file
19
settings.gradle
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
rootProject.name = 'vtm-parent'
|
||||||
|
include ':vtm'
|
||||||
|
include ':vtm-http'
|
||||||
|
include ':vtm-jts'
|
||||||
|
include ':vtm-tests'
|
||||||
|
include ':vtm-extras'
|
||||||
|
include ':vtm-android'
|
||||||
|
include ':vtm-android-example'
|
||||||
|
include ':vtm-themes'
|
||||||
|
include ':vtm-gdx'
|
||||||
|
include ':vtm-desktop'
|
||||||
|
include ':vtm-android-gdx'
|
||||||
|
include ':vtm-web'
|
||||||
|
include ':vtm-web-app'
|
||||||
|
//include ':vtm-web-js'
|
||||||
|
include ':vtm-jeo'
|
||||||
|
include ':vtm-playground'
|
||||||
|
include ':vtm-ios'
|
||||||
|
include ':vtm-app'
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="assets"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/vtm-android"/>
|
|
||||||
<classpathentry combineaccessrules="false" exported="true" kind="src" path="/vtm"/>
|
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
||||||
2
vtm-android-example/.gitignore
vendored
2
vtm-android-example/.gitignore
vendored
@@ -1,2 +0,0 @@
|
|||||||
bin/*
|
|
||||||
gen/*
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>vtm-android-example</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
<linkedResources>
|
|
||||||
<link>
|
|
||||||
<name>assets</name>
|
|
||||||
<type>2</type>
|
|
||||||
<location>/home/src/vtm/OpenScienceMap/vtm/assets</location>
|
|
||||||
</link>
|
|
||||||
</linkedResources>
|
|
||||||
</projectDescription>
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
activeContentFilterList=*.makefile,makefile,*.Makefile,Makefile,Makefile.*,*.mk,MANIFEST.MF
|
|
||||||
addNewLine=true
|
|
||||||
convertActionOnSaave=AnyEdit.CnvrtTabToSpaces
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
ignoreBlankLinesWhenTrimming=false
|
|
||||||
inActiveContentFilterList=
|
|
||||||
javaTabWidthForJava=true
|
|
||||||
org.eclipse.jdt.ui.editor.tab.width=2
|
|
||||||
projectPropsEnabled=true
|
|
||||||
removeTrailingSpaces=true
|
|
||||||
replaceAllSpaces=false
|
|
||||||
replaceAllTabs=false
|
|
||||||
saveAndAddLine=false
|
|
||||||
saveAndConvert=false
|
|
||||||
saveAndTrim=true
|
|
||||||
useModulo4Tabs=false
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#Sat Dec 17 10:00:00 CET 2011
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
encoding/<project>=UTF-8
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
#Sat Dec 17 10:00:00 CET 2011
|
|
||||||
eclipse.preferences.version=1
|
|
||||||
line.separator=\n
|
|
||||||
@@ -1,376 +0,0 @@
|
|||||||
eclipse.preferences.version=1
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
|
|
||||||
org.eclipse.jdt.core.compiler.compliance=1.6
|
|
||||||
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
|
|
||||||
org.eclipse.jdt.core.compiler.debug.localVariable=generate
|
|
||||||
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
|
|
||||||
org.eclipse.jdt.core.compiler.doc.comment.support=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.autoboxing=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.deadCode=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.deprecation=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.fieldHiding=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
|
|
||||||
org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.invalidJavadoc=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTags=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility=private
|
|
||||||
org.eclipse.jdt.core.compiler.problem.localVariableHiding=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility=protected
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagDescription=all_standard_tags
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocTags=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsMethodTypeParameters=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=private
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.nullReference=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.redundantNullCheck=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.suppressWarnings=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unnecessaryElse=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedImport=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedParameter=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
|
|
||||||
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
|
|
||||||
org.eclipse.jdt.core.compiler.source=1.6
|
|
||||||
org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_assignment=0
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16
|
|
||||||
org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_after_imports=1
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_after_package=1
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_before_field=0
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_before_imports=1
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_before_method=1
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_before_package=0
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1
|
|
||||||
org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line
|
|
||||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.format_block_comments=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.format_header=false
|
|
||||||
org.eclipse.jdt.core.formatter.comment.format_html=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.format_line_comments=false
|
|
||||||
org.eclipse.jdt.core.formatter.comment.format_source_code=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.indent_root_tags=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.comment.line_length=80
|
|
||||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=false
|
|
||||||
org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true
|
|
||||||
org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=true
|
|
||||||
org.eclipse.jdt.core.formatter.compact_else_if=true
|
|
||||||
org.eclipse.jdt.core.formatter.continuation_indentation=2
|
|
||||||
org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2
|
|
||||||
org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off
|
|
||||||
org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on
|
|
||||||
org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false
|
|
||||||
org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=false
|
|
||||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_empty_lines=false
|
|
||||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true
|
|
||||||
org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false
|
|
||||||
org.eclipse.jdt.core.formatter.indentation.size=4
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert
|
|
||||||
org.eclipse.jdt.core.formatter.join_lines_in_comments=false
|
|
||||||
org.eclipse.jdt.core.formatter.join_wrapped_lines=false
|
|
||||||
org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false
|
|
||||||
org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false
|
|
||||||
org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false
|
|
||||||
org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false
|
|
||||||
org.eclipse.jdt.core.formatter.lineSplit=100
|
|
||||||
org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false
|
|
||||||
org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false
|
|
||||||
org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0
|
|
||||||
org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1
|
|
||||||
org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=false
|
|
||||||
org.eclipse.jdt.core.formatter.tabulation.char=tab
|
|
||||||
org.eclipse.jdt.core.formatter.tabulation.size=4
|
|
||||||
org.eclipse.jdt.core.formatter.use_on_off_tags=false
|
|
||||||
org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
|
|
||||||
org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
|
|
||||||
org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
|
|
||||||
org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user