Compare commits
1942 commits
transformp
...
2015.03
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6f68c9fc9b | ||
|
|
e243246298 | ||
|
|
fb8b0509b9 | ||
|
|
d73ddc3161 | ||
|
|
9d8e9b5679 | ||
|
|
e316bec7dc | ||
|
|
7dd4c02e6d | ||
|
|
00af9cc12f | ||
|
|
dc710c110f | ||
|
|
cfdc3c71c2 | ||
|
|
57ab1796b2 | ||
|
|
5edef7ef86 | ||
|
|
14cf51b9d1 | ||
|
|
1d56186111 | ||
|
|
f22e688424 | ||
|
|
614f82f270 | ||
|
|
375eba5a1f | ||
|
|
b4f765f8a4 | ||
|
|
406a4906c5 | ||
|
|
a7ee1f2bcd | ||
|
|
9511a12eb4 | ||
|
|
e36d59bdbf | ||
|
|
461388402f | ||
|
|
3791cb8b6a | ||
|
|
888e81b3b1 | ||
|
|
5fe95c9793 | ||
|
|
4ced104ef5 | ||
|
|
71ab915a5f | ||
|
|
1a534f2589 | ||
|
|
cc92ba5a80 | ||
|
|
a3af70309c | ||
|
|
e7434abe40 | ||
|
|
b0f42558fc | ||
|
|
a7aaec1376 | ||
|
|
74f4818837 | ||
|
|
c5f65e9146 | ||
|
|
d69065792f | ||
|
|
9faf28b6a0 | ||
|
|
c6b49151cb | ||
|
|
f47866ac2e | ||
|
|
48177ff27c | ||
|
|
7c62ecc49c | ||
|
|
9ce966edb8 | ||
|
|
80cf0574e1 | ||
|
|
829b53fb72 | ||
|
|
fba8130303 | ||
|
|
34c83f8ffa | ||
|
|
6f8bb211ff | ||
|
|
38436c36e4 | ||
|
|
d380ba4b85 | ||
|
|
c8e8f7299c | ||
|
|
686d66f0f9 | ||
|
|
38d80566b3 | ||
|
|
fafd3e853f | ||
|
|
fae761e9d2 | ||
|
|
5d12761c68 | ||
|
|
0edd05760e | ||
|
|
53492199b0 | ||
|
|
c2ebb73f4d | ||
|
|
2c42445a7e | ||
|
|
62984ec5dd | ||
|
|
8cd5fecfa1 | ||
|
|
2e34c8bdd1 | ||
|
|
9768a0adc9 | ||
|
|
85aa71bb4b | ||
|
|
553fd90bd4 | ||
|
|
4abb4706c4 | ||
|
|
f2e67e985b | ||
|
|
660c0ac736 | ||
|
|
5ba29f07b7 | ||
|
|
9a6c229fc2 | ||
|
|
e2b0b81be6 | ||
|
|
95be0ebfe7 | ||
|
|
3421ca117e | ||
|
|
3b4ec9173a | ||
|
|
a69b31a5d9 | ||
|
|
41f6b85c4a | ||
|
|
a1b5d3ec0b | ||
|
|
be7acf4ab2 | ||
|
|
2b9949fefd | ||
|
|
e6989526ca | ||
|
|
172f1bfd3e | ||
|
|
4d0745d337 | ||
|
|
a209035a83 | ||
|
|
167b8825f7 | ||
|
|
728a114594 | ||
|
|
b718a23972 | ||
|
|
2e31b3e43a | ||
|
|
b7a011d0f1 | ||
|
|
c3736b0f30 | ||
|
|
25f927799d | ||
|
|
90a86be54b | ||
|
|
b2b4695f21 | ||
|
|
8b452f65f7 | ||
|
|
5ad4b13036 | ||
|
|
5042d064b2 | ||
|
|
21cce232bc | ||
|
|
2ab649c226 | ||
|
|
363b27a614 | ||
|
|
99eae18713 | ||
|
|
9ef1717459 | ||
|
|
064cf23887 | ||
|
|
4a9d2d321a | ||
|
|
f3e28ca8b4 | ||
|
|
c2cb2377f5 | ||
|
|
72ca3c849d | ||
|
|
d2666c80ef | ||
|
|
0eb91e0549 | ||
|
|
541352acad | ||
|
|
c10bc224e5 | ||
|
|
ff829babab | ||
|
|
6d9bcad1e7 | ||
|
|
f7df0edd85 | ||
|
|
5e46cb2ff8 | ||
|
|
26e5684d08 | ||
|
|
3a3eb3b8b9 | ||
|
|
ca72a5ab5d | ||
|
|
a7bf4fe69b | ||
|
|
71cc091c26 | ||
|
|
6a0658df22 | ||
|
|
15a7d74b69 | ||
|
|
b23bebe434 | ||
|
|
653e3cb116 | ||
|
|
891b484bdc | ||
|
|
4db81672ca | ||
|
|
e7971b6a60 | ||
|
|
08b97429a9 | ||
|
|
2091e6532b | ||
|
|
c4f42011fc | ||
|
|
061401ccfc | ||
|
|
424f37e17b | ||
|
|
3cda1c6f5a | ||
|
|
df9a05e46c | ||
|
|
f52061535e | ||
|
|
7d1962b95a | ||
|
|
cc1f9e1353 | ||
|
|
28b347065d | ||
|
|
30f5343834 | ||
|
|
485edd57be | ||
|
|
66835e1ef4 | ||
|
|
78f3c283b0 | ||
|
|
393772d1f8 | ||
|
|
d98f892913 | ||
|
|
30d2440598 | ||
|
|
788293f68f | ||
|
|
f67c116c9d | ||
|
|
2c2b9b15ac | ||
|
|
2dd29906ef | ||
|
|
7cf1f3a7dd | ||
|
|
56723afa50 | ||
|
|
e4b55e2eed | ||
|
|
ade90b2275 | ||
|
|
e95f432781 | ||
|
|
f7303223c0 | ||
|
|
7392f7b159 | ||
|
|
51346343d1 | ||
|
|
b9463833ff | ||
|
|
91c6c3aa58 | ||
|
|
5916197860 | ||
|
|
759e761b11 | ||
|
|
4ca4677265 | ||
|
|
8ba56e9e8d | ||
|
|
6339e7b655 | ||
|
|
3e5846d969 | ||
|
|
d5e50a188a | ||
|
|
09a10152ad | ||
|
|
f3eaa2a6c0 | ||
|
|
ca0fc467a6 | ||
|
|
caf8954b19 | ||
|
|
778752a8dc | ||
|
|
6ca6d14b5c | ||
|
|
a48551dffb | ||
|
|
7b1e305be8 | ||
|
|
4e0ee77e24 | ||
|
|
9bdac9db09 | ||
|
|
0599ece998 | ||
|
|
ab428bee47 | ||
|
|
671f7dc58b | ||
|
|
4bda97761f | ||
|
|
f8e732e25a | ||
|
|
928180f313 | ||
|
|
a8efc1200b | ||
|
|
a2d0985737 | ||
|
|
9a223a5df0 | ||
|
|
57a3b7c9aa | ||
|
|
08e3722bcb | ||
|
|
8a735b1452 | ||
|
|
e7aeb2490c | ||
|
|
94798345ff | ||
|
|
a05c40de9d | ||
|
|
010208e22b | ||
|
|
bf60d0571c | ||
|
|
a46c43b444 | ||
|
|
a4bbf2063b | ||
|
|
66230e2680 | ||
|
|
82e560aed4 | ||
|
|
12abe07da4 | ||
|
|
1152e9a167 | ||
|
|
981aad9966 | ||
|
|
8761d340be | ||
|
|
66134448ac | ||
|
|
4b9c56bcc5 | ||
|
|
8a8926db3d | ||
|
|
039d0806e6 | ||
|
|
252a870059 | ||
|
|
c7fb84685a | ||
|
|
a40d9c9150 | ||
|
|
4b45893575 | ||
|
|
e24fb72092 | ||
|
|
0d2c1f5466 | ||
|
|
1cb880401d | ||
|
|
e8ad157619 | ||
|
|
83228e3ef2 | ||
|
|
ffb0129d03 | ||
|
|
c830906a3f | ||
|
|
78f83e17d2 | ||
|
|
dc160d410d | ||
|
|
5c7ebc0fda | ||
|
|
928a3f5da7 | ||
|
|
4d0b59abfa | ||
|
|
8fed5b2aa3 | ||
|
|
c255dba121 | ||
|
|
6eaf6e9500 | ||
|
|
ce1e0d9b80 | ||
|
|
333d402f77 | ||
|
|
4a0071c1ba | ||
|
|
6e44f62472 | ||
|
|
9fd3aa5f17 | ||
|
|
fc436f6f9f | ||
|
|
dfc516c5e1 | ||
|
|
43c500f0b8 | ||
|
|
4c6cc6aa78 | ||
|
|
70ae4acdd0 | ||
|
|
697399d4a2 | ||
|
|
f54a968391 | ||
|
|
70b1fc5c09 | ||
|
|
2b87482a70 | ||
|
|
0bbe4ea43e | ||
|
|
94d609addb | ||
|
|
b4d00a3da2 | ||
|
|
3c3ac52576 | ||
|
|
b9e1b6603e | ||
|
|
7b8c98cfbd | ||
|
|
994872359e | ||
|
|
c6bac0be69 | ||
|
|
01df14d388 | ||
|
|
1dbeff48bd | ||
|
|
fb2e2fa08d | ||
|
|
dd69750d48 | ||
|
|
de595c0f9e | ||
|
|
656735f694 | ||
|
|
b13075d2a5 | ||
|
|
56f3552404 | ||
|
|
0dd3f004dd | ||
|
|
878cd0a8d8 | ||
|
|
aaed62060c | ||
|
|
40ecf515af | ||
|
|
29e52ef4e0 | ||
|
|
8302aa830f | ||
|
|
c5b0a61911 | ||
|
|
d84d1e0250 | ||
|
|
54ffa54fa3 | ||
|
|
bdc52fa6e6 | ||
|
|
54ad8c2039 | ||
|
|
e7e8b30379 | ||
|
|
5878da1c7d | ||
|
|
2cf9de36e2 | ||
|
|
577f8129ae | ||
|
|
ef9b06040f | ||
|
|
979cb37381 | ||
|
|
38280a10ae | ||
|
|
944ad096fc | ||
|
|
0c74474c49 | ||
|
|
5c2c96a4f2 | ||
|
|
e23c79fd25 | ||
|
|
2b01887b7f | ||
|
|
bf3df9a81a | ||
|
|
b7617fd82f | ||
|
|
e4aae1cc62 | ||
|
|
7073e3a2f5 | ||
|
|
da6fb17207 | ||
|
|
47d4954f8b | ||
|
|
c9694935e1 | ||
|
|
98fcfa43be | ||
|
|
9dc76d2012 | ||
|
|
307afc53e0 | ||
|
|
33d7023752 | ||
|
|
d5d22158dd | ||
|
|
a3337c7af8 | ||
|
|
946eb0efdf | ||
|
|
e067bead92 | ||
|
|
c023b1eb30 | ||
|
|
c8e12ad949 | ||
|
|
6893d3efe2 | ||
|
|
abd79418f1 | ||
|
|
09b3ab45d4 | ||
|
|
faabc49266 | ||
|
|
8dd0102d4e | ||
|
|
7e64335450 | ||
|
|
b6558889b4 | ||
|
|
4b4f4386bb | ||
|
|
2cbbf66586 | ||
|
|
0fefd42250 | ||
|
|
571d2140c1 | ||
|
|
c2bd5c3537 | ||
|
|
c50d927216 | ||
|
|
b2f2323f6b | ||
|
|
fe4997b38c | ||
|
|
47f5815b49 | ||
|
|
e6557822f6 | ||
|
|
6cecbc2a52 | ||
|
|
a4508e3fb5 | ||
|
|
37421bbbfa | ||
|
|
a203b55205 | ||
|
|
2631b40915 | ||
|
|
448b38fe9e | ||
|
|
d7d980675d | ||
|
|
4f49b35ba4 | ||
|
|
b578ff5c75 | ||
|
|
ec0f42d648 | ||
|
|
4deb7b2d64 | ||
|
|
d244807be8 | ||
|
|
fd9553b510 | ||
|
|
df51c85717 | ||
|
|
707afb2f4c | ||
|
|
d3e9d2659e | ||
|
|
e7c684d5c7 | ||
|
|
18d7237293 | ||
|
|
4ce1a8d92f | ||
|
|
0fcc1fbf83 | ||
|
|
8cb5adf0ca | ||
|
|
00a3a1777e | ||
|
|
707103b606 | ||
|
|
384c6af273 | ||
|
|
32024588b5 | ||
|
|
c0bcb36843 | ||
|
|
9cade2487e | ||
|
|
f669f4d84a | ||
|
|
111197f694 | ||
|
|
3aa0b63a05 | ||
|
|
c5f7f66809 | ||
|
|
bd53d58061 | ||
|
|
c5ec54362e | ||
|
|
af8c938c8c | ||
|
|
fa233049c7 | ||
|
|
ef8cdc42d3 | ||
|
|
ea165eeb58 | ||
|
|
5b216a5bd4 | ||
|
|
f01826b28b | ||
|
|
1d66d2154b | ||
|
|
e4d7de133b | ||
|
|
0ca04759bb | ||
|
|
2b727e8ea2 | ||
|
|
07e1894f6e | ||
|
|
b5c60a22e5 | ||
|
|
81ef1b896b | ||
|
|
c68533d3c6 | ||
|
|
3fa3317233 | ||
|
|
41642f2cb5 | ||
|
|
79b45e62b6 | ||
|
|
5f496b2554 | ||
|
|
597d07f357 | ||
|
|
2d721de753 | ||
|
|
ab2fa92eb5 | ||
|
|
f2c263a1f4 | ||
|
|
c110962405 | ||
|
|
d347b72e49 | ||
|
|
99f69e92cd | ||
|
|
44d846f16e | ||
|
|
0e90e3b5f7 | ||
|
|
b5ee931d13 | ||
|
|
a87401031b | ||
|
|
c755854251 | ||
|
|
d6f0b7dc50 | ||
|
|
3722ce5d81 | ||
|
|
4c26959cf2 | ||
|
|
13a4e43de9 | ||
|
|
4a3245056b | ||
|
|
4ba92ece61 | ||
|
|
181ee4823a | ||
|
|
5a0c4b0ba8 | ||
|
|
25da58afb3 | ||
|
|
60ae33f796 | ||
|
|
0a1c74c2ef | ||
|
|
c80bb8a624 | ||
|
|
f5c667333e | ||
|
|
6167269377 | ||
|
|
0a0275b502 | ||
|
|
ce2e3ec965 | ||
|
|
7f7369e064 | ||
|
|
b14e698697 | ||
|
|
577e23c15a | ||
|
|
6fc671c961 | ||
|
|
630cb483d7 | ||
|
|
0ce207b950 | ||
|
|
a70c49d20a | ||
|
|
8e75fecacc | ||
|
|
9808b2c14f | ||
|
|
ff02f14308 | ||
|
|
eef129324f | ||
|
|
125fb788e1 | ||
|
|
dc9769e6ad | ||
|
|
ce5a367b8f | ||
|
|
1a4599f213 | ||
|
|
83e3c5a7e1 | ||
|
|
b64ef905a0 | ||
|
|
c7a3e206d8 | ||
|
|
083bf4313f | ||
|
|
3cb7731192 | ||
|
|
ceb01a3ef2 | ||
|
|
b217b08394 | ||
|
|
a26870754e | ||
|
|
26156ea755 | ||
|
|
a3c32e5f87 | ||
|
|
7a8574aee2 | ||
|
|
65e50b2be6 | ||
|
|
e479ffba90 | ||
|
|
f8a9af0e54 | ||
|
|
11dec75290 | ||
|
|
0860021a52 | ||
|
|
d246814a2c | ||
|
|
29d9d4e614 | ||
|
|
4fa3b71422 | ||
|
|
7283d06294 | ||
|
|
a038d693c7 | ||
|
|
24f15e5738 | ||
|
|
b23ca0407f | ||
|
|
3f4e6705e8 | ||
|
|
1822865b58 | ||
|
|
ebc1404e05 | ||
|
|
fb55e1485b | ||
|
|
c54a2e8f0c | ||
|
|
d8d8ee3ab5 | ||
|
|
39e7442b92 | ||
|
|
f7a5c1c78e | ||
|
|
0e23303cbc | ||
|
|
9087369863 | ||
|
|
1c52fad1d3 | ||
|
|
90b647ec48 | ||
|
|
d7175c7d01 | ||
|
|
c0760e9904 | ||
|
|
33425115c5 | ||
|
|
dcda8faa3d | ||
|
|
b6d76e370c | ||
|
|
903ecfcfe7 | ||
|
|
80da2525b4 | ||
|
|
d8b67df3a2 | ||
|
|
9a8ba2c5d0 | ||
|
|
9fb0f14f67 | ||
|
|
1e14e63947 | ||
|
|
6260bbea62 | ||
|
|
4af38828d2 | ||
|
|
b2692d9a98 | ||
|
|
cce80c5a96 | ||
|
|
c30eeecfa2 | ||
|
|
2e79055edc | ||
|
|
fc68e3571e | ||
|
|
39d6823872 | ||
|
|
e03c0cebda | ||
|
|
7b16891cc5 | ||
|
|
f32eb7e84d | ||
|
|
cd8607d87d | ||
|
|
e3103c69c2 | ||
|
|
da8f4d9933 | ||
|
|
b0c822988b | ||
|
|
0b1925a417 | ||
|
|
e1c62ea152 | ||
|
|
0e15b4bf54 | ||
|
|
4b60231d3b | ||
|
|
df2dae4e59 | ||
|
|
366663610f | ||
|
|
303217d0b9 | ||
|
|
47254dd021 | ||
|
|
7b33e9eb67 | ||
|
|
e84f7976a6 | ||
|
|
3bb9cd79c6 | ||
|
|
01a0299890 | ||
|
|
ce5b38d96e | ||
|
|
668a5211ff | ||
|
|
094bc92090 | ||
|
|
197dd5ef3b | ||
|
|
ddd1228a51 | ||
|
|
1ae9ed5ada | ||
|
|
670d9a0833 | ||
|
|
4fc31db780 | ||
|
|
9f6b7b170d | ||
|
|
cd5ecb5eeb | ||
|
|
bb7adc83cb | ||
|
|
ceae9d57d0 | ||
|
|
5943704194 | ||
|
|
166e3df850 | ||
|
|
13ba427bb4 | ||
|
|
76dc38008c | ||
|
|
6e85c54fc4 | ||
|
|
10bee498e6 | ||
|
|
e3441b50a1 | ||
|
|
35d25f394c | ||
|
|
aeab04233b | ||
|
|
6e0d94ec44 | ||
|
|
e44c103b72 | ||
|
|
b893834c86 | ||
|
|
93a9db4917 | ||
|
|
c8097c411e | ||
|
|
6a39812160 | ||
|
|
b519718b64 | ||
|
|
156d7ccefb | ||
|
|
4538134990 | ||
|
|
c915ecfde0 | ||
|
|
da657d7543 | ||
|
|
47fcde8d5c | ||
|
|
0bd0129f8f | ||
|
|
8c53981cfa | ||
|
|
55b5d26965 | ||
|
|
cfc879cd1c | ||
|
|
74a93a3be8 | ||
|
|
1941a7fc0d | ||
|
|
5537e82274 | ||
|
|
2eda0b60a0 | ||
|
|
b302cb172b | ||
|
|
dda527dabd | ||
|
|
7b2d01ff51 | ||
|
|
08fd033293 | ||
|
|
61cf460a4f | ||
|
|
02a2727983 | ||
|
|
499a9717d7 | ||
|
|
31f42ee81d | ||
|
|
1a6a7392e7 | ||
|
|
61c17092e1 | ||
|
|
82dbabac92 | ||
|
|
073b2e7740 | ||
|
|
a300cddfb5 | ||
|
|
57fd4a20bc | ||
|
|
4b41ccaa29 | ||
|
|
02d591556c | ||
|
|
abf9a96881 | ||
|
|
87e483095b | ||
|
|
ac6a302608 | ||
|
|
966add80a8 | ||
|
|
4d454367f9 | ||
|
|
27f8370c7b | ||
|
|
d5600b855c | ||
|
|
f3f343e101 | ||
|
|
10e3676a01 | ||
|
|
32b2d2ec97 | ||
|
|
2fb01e5f83 | ||
|
|
26f8742023 | ||
|
|
adbd458aab | ||
|
|
5a2b89981c | ||
|
|
bd5cdf9e34 | ||
|
|
8f6c8a2a03 | ||
|
|
90172fa5c3 | ||
|
|
179ad1ea7c | ||
|
|
1e894bb152 | ||
|
|
fe0b7dd334 | ||
|
|
1ad4af8b0b | ||
|
|
f79414a208 | ||
|
|
fe1e300756 | ||
|
|
1896c3f09a | ||
|
|
5786ba89ff | ||
|
|
1a1f36035d | ||
|
|
d0cee28898 | ||
|
|
0cf6de75a4 | ||
|
|
32229dc34b | ||
|
|
3c337449e9 | ||
|
|
578b70c40d | ||
|
|
4ebc9ce4d0 | ||
|
|
edae1b6980 | ||
|
|
5b865293a6 | ||
|
|
4b5ff845f7 | ||
|
|
2fd06f4b78 | ||
|
|
378c125b47 | ||
|
|
acb206dd18 | ||
|
|
d920a29a3e | ||
|
|
8d401d3534 | ||
|
|
712049795f | ||
|
|
0e20a7cb17 | ||
|
|
86daffdfd7 | ||
|
|
d997226f3c | ||
|
|
7cefaa7300 | ||
|
|
358ba86fc8 | ||
|
|
09e7bfc96d | ||
|
|
b68ac5e6f2 | ||
|
|
f10d0c5d5f | ||
|
|
743732d874 | ||
|
|
6fc720d1b7 | ||
|
|
f139c4b424 | ||
|
|
648b7acc22 | ||
|
|
15d1dbce28 | ||
|
|
4eaf8797c2 | ||
|
|
bebe08483f | ||
|
|
8d4d83f168 | ||
|
|
bc30dca513 | ||
|
|
e69513fa2e | ||
|
|
7a71e59f2d | ||
|
|
9bcb38df48 | ||
|
|
1826aa98f7 | ||
|
|
4823f26706 | ||
|
|
2c89f562a3 | ||
|
|
6f9c4f7f09 | ||
|
|
03f63c1c40 | ||
|
|
89419f50a1 | ||
|
|
06e2fc7d9b | ||
|
|
3f6a590a2f | ||
|
|
3e2ff23c00 | ||
|
|
b6dcea12d0 | ||
|
|
1068f61dc6 | ||
|
|
27b6f5e3e7 | ||
|
|
6c25d5ccb6 | ||
|
|
0cb6b3267a | ||
|
|
dde4575c88 | ||
|
|
3a5ee3a4c6 | ||
|
|
cce016b97b | ||
|
|
7ccdb778fc | ||
|
|
3f0b16dd75 | ||
|
|
641ac4a506 | ||
|
|
1ba2216108 | ||
|
|
295f257bf8 | ||
|
|
0bf2d4e286 | ||
|
|
2654bf9575 | ||
|
|
040aac5e8f | ||
|
|
3bfa28c83d | ||
|
|
ec3f735d5c | ||
|
|
82c8c7405d | ||
|
|
4cb7b42fb8 | ||
|
|
ed500abd39 | ||
|
|
d2af825640 | ||
|
|
fd4fe0816a | ||
|
|
40602c99bc | ||
|
|
c2643d82ea | ||
|
|
32c3e0d322 | ||
|
|
ef83c5c911 | ||
|
|
d296d93ddc | ||
|
|
0801fc432d | ||
|
|
481665f8a3 | ||
|
|
c9a234a079 | ||
|
|
49ce79a633 | ||
|
|
9445d1297a | ||
|
|
bc98089aca | ||
|
|
3812acf146 | ||
|
|
a68560707f | ||
|
|
cb290bfcaa | ||
|
|
328cd7f362 | ||
|
|
b48089e694 | ||
|
|
9b00f69311 | ||
|
|
22ed0780fa | ||
|
|
c5e4715575 | ||
|
|
5dc88d0eed | ||
|
|
3d9b66cf0f | ||
|
|
0007684c5b | ||
|
|
4c11d6b62f | ||
|
|
a10426acc3 | ||
|
|
756d3e2a97 | ||
|
|
b37b49f407 | ||
|
|
5ad36c82b6 | ||
|
|
c4e895a813 | ||
|
|
77a568cda0 | ||
|
|
d071ba16cb | ||
|
|
0eb2c45f12 | ||
|
|
aeba95aa01 | ||
|
|
b2227c7191 | ||
|
|
b5f5ffd142 | ||
|
|
f945ce3ad8 | ||
|
|
781ec4d7bf | ||
|
|
5fe30c66eb | ||
|
|
0c88f63e00 | ||
|
|
594f548b20 | ||
|
|
b79954237c | ||
|
|
dea8dd9bd0 | ||
|
|
b697003b0a | ||
|
|
c278963a85 | ||
|
|
8214cabe50 | ||
|
|
fa3cba12cc | ||
|
|
310ca16c1b | ||
|
|
98a9ea7e12 | ||
|
|
5a0ea7abe2 | ||
|
|
abdf80c494 | ||
|
|
7d863d2bf2 | ||
|
|
4a75c57209 | ||
|
|
33a8c2baaa | ||
|
|
ba2f150f33 | ||
|
|
b488242548 | ||
|
|
a603afb767 | ||
|
|
128498a678 | ||
|
|
90b7dd82c2 | ||
|
|
b1871c6309 | ||
|
|
ad51cadfbd | ||
|
|
d72c121fa6 | ||
|
|
0aa215b90c | ||
|
|
f42dbea817 | ||
|
|
69b644fcc2 | ||
|
|
832fca9672 | ||
|
|
e34530f752 | ||
|
|
f0c7ee6d61 | ||
|
|
450dd836fa | ||
|
|
ca11624f52 | ||
|
|
6492d25265 | ||
|
|
1aef9f2758 | ||
|
|
3d0749b619 | ||
|
|
0448b0f1db | ||
|
|
a40b2848e9 | ||
|
|
1126a0ef17 | ||
|
|
93b6113edc | ||
|
|
fe3cae8120 | ||
|
|
0f2806ab8a | ||
|
|
4be9a43b40 | ||
|
|
7bea0bef37 | ||
|
|
77c865d1be | ||
|
|
061fa9604a | ||
|
|
db4e609dbd | ||
|
|
2c4c19d2d5 | ||
|
|
999e27d0da | ||
|
|
01ce545e1a | ||
|
|
6f68330ce0 | ||
|
|
14870d69de | ||
|
|
f1b1faad44 | ||
|
|
023d22e5fe | ||
|
|
ad69698f97 | ||
|
|
1f032d0d7d | ||
|
|
723556b803 | ||
|
|
1bbbfad575 | ||
|
|
9fe80a3a66 | ||
|
|
255fc1d58d | ||
|
|
9da865604c | ||
|
|
0a10aca8aa | ||
|
|
c9aea8a6b6 | ||
|
|
9863aa9ab2 | ||
|
|
dd274b744a | ||
|
|
df53d05bba | ||
|
|
39612397fa | ||
|
|
73b6700b69 | ||
|
|
7e728fac6a | ||
|
|
845bd5706e | ||
|
|
f32e03dffb | ||
|
|
6d9329966a | ||
|
|
ba8446e8bf | ||
|
|
f7816e02cd | ||
|
|
f4a6da7fb0 | ||
|
|
3a90fa12fa | ||
|
|
2462799655 | ||
|
|
7d8203fc52 | ||
|
|
c03350e3cb | ||
|
|
0a049f7ab2 | ||
|
|
342af594ad | ||
|
|
94aabb05b5 | ||
|
|
ccea6fdde9 | ||
|
|
6c6882fb2e | ||
|
|
5695d7f445 | ||
|
|
a606fe39b6 | ||
|
|
82b599e8ba | ||
|
|
399895bbfe | ||
|
|
771526b5ae | ||
|
|
04c194f6d6 | ||
|
|
dcd0f23277 | ||
|
|
49d265a750 | ||
|
|
2f4171f506 | ||
|
|
50e79a6817 | ||
|
|
092b9eeddc | ||
|
|
80f1a31143 | ||
|
|
2316a42759 | ||
|
|
9285222e29 | ||
|
|
a466638433 | ||
|
|
b6167b0b60 | ||
|
|
8bd04b1417 | ||
|
|
407da2ea8c | ||
|
|
8b9559a27c | ||
|
|
87f532493e | ||
|
|
88713b01cf | ||
|
|
b894166dea | ||
|
|
3e0ef9dd68 | ||
|
|
6898b49a08 | ||
|
|
0067aafbb0 | ||
|
|
be595efd31 | ||
|
|
a59e7d658e | ||
|
|
582d5dde8c | ||
|
|
1e2b28ac2f | ||
|
|
57974baa13 | ||
|
|
d6d814586c | ||
|
|
415349e873 | ||
|
|
96cde0a265 | ||
|
|
80050e94db | ||
|
|
5743064d56 | ||
|
|
bb9e7f5277 | ||
|
|
a05fe72c6b | ||
|
|
ef9f2f3289 | ||
|
|
471ff7718e | ||
|
|
6263bfd269 | ||
|
|
fcbd9fc024 | ||
|
|
3992cc547b | ||
|
|
cf418188b9 | ||
|
|
f36646730d | ||
|
|
75b57cd9b5 | ||
|
|
fac2340989 | ||
|
|
c2775d4541 | ||
|
|
91139402ea | ||
|
|
defb486a64 | ||
|
|
1cca6c088a | ||
|
|
77887bc2f8 | ||
|
|
9c628225aa | ||
|
|
096ba7026d | ||
|
|
23f1c4ac3f | ||
|
|
1b9d62c907 | ||
|
|
4d6db2caa7 | ||
|
|
a820487032 | ||
|
|
819f5d085f | ||
|
|
0b58b7d2b3 | ||
|
|
ecbaec0849 | ||
|
|
b621287610 | ||
|
|
2e8d93d5be | ||
|
|
74475395f4 | ||
|
|
b03345ec18 | ||
|
|
d99dea1db2 | ||
|
|
8ca812ac1a | ||
|
|
32bc6ae516 | ||
|
|
2644b19ce7 | ||
|
|
259d1b6435 | ||
|
|
09d85c79ac | ||
|
|
247b8db57f | ||
|
|
5680dfc0e4 | ||
|
|
0fa6154bbb | ||
|
|
df49d9e1a8 | ||
|
|
07284b86ff | ||
|
|
d73565f59f | ||
|
|
be9b0ee925 | ||
|
|
4cd712d24d | ||
|
|
945be0020f | ||
|
|
23c9dee265 | ||
|
|
d195d05008 | ||
|
|
5072f0752a | ||
|
|
697944c4ef | ||
|
|
6b61e9b1a7 | ||
|
|
3612db6a2f | ||
|
|
f1b29e1db9 | ||
|
|
15835271c2 | ||
|
|
d8010a0659 | ||
|
|
e0fbeb8d95 | ||
|
|
aa586136ae | ||
|
|
c206fab087 | ||
|
|
241723dd8f | ||
|
|
5debac7de0 | ||
|
|
edc64bdbe9 | ||
|
|
dc8f559b85 | ||
|
|
756f8079d8 | ||
|
|
ba4c50c631 | ||
|
|
ab96a82629 | ||
|
|
54a111472f | ||
|
|
6ed14dafb0 | ||
|
|
69451af578 | ||
|
|
609f665406 | ||
|
|
1f73807097 | ||
|
|
406e6e1bac | ||
|
|
d381ec8bcf | ||
|
|
6a1bc270fd | ||
|
|
b2c205ba4c | ||
|
|
1afb706461 | ||
|
|
b83bf31ac4 | ||
|
|
ea1d561c46 | ||
|
|
ef262f62a2 | ||
|
|
8cf85e0987 | ||
|
|
1263042fc9 | ||
|
|
6e5edb5beb | ||
|
|
61819efd4b | ||
|
|
66b22b24a5 | ||
|
|
e1db572688 | ||
|
|
2d6ac803be | ||
|
|
7761c0887b | ||
|
|
635bf29308 | ||
|
|
ce16eb5ce0 | ||
|
|
650a0d2d21 | ||
|
|
109c566e44 | ||
|
|
6e58efd370 | ||
|
|
441160d8e8 | ||
|
|
c16284abca | ||
|
|
85a91d62a5 | ||
|
|
99c617562c | ||
|
|
ca3672b19c | ||
|
|
59c4dec623 | ||
|
|
1d9b664e85 | ||
|
|
43221a78e1 | ||
|
|
e6b8f83859 | ||
|
|
40aae17c0e | ||
|
|
e518cb9089 | ||
|
|
31b90d1acb | ||
|
|
4ef9f3e817 | ||
|
|
03ac045802 | ||
|
|
877c010269 | ||
|
|
be9853cd20 | ||
|
|
aba7ba7665 | ||
|
|
28d7d54502 | ||
|
|
92389b8589 | ||
|
|
90f58ced7d | ||
|
|
a3a6b66061 | ||
|
|
4bc3d98509 | ||
|
|
d74450eaad | ||
|
|
56866bc3d8 | ||
|
|
01b845397a | ||
|
|
7086f5fc37 | ||
|
|
1342db57cf | ||
|
|
162b453981 | ||
|
|
44af2b86ce | ||
|
|
26da9ca983 | ||
|
|
9e882be319 | ||
|
|
3470e7ff3c | ||
|
|
3fd7d9da3c | ||
|
|
9205a378c4 | ||
|
|
728f1337a2 | ||
|
|
a9cbabdbc2 | ||
|
|
46bffd3f4c | ||
|
|
4306586adf | ||
|
|
7c677c968f | ||
|
|
34981284fc | ||
|
|
073c6fe2b3 | ||
|
|
7c3077b0f2 | ||
|
|
42fab36a05 | ||
|
|
e59a2f035e | ||
|
|
2ee58893f5 | ||
|
|
df119fec75 | ||
|
|
0886944fcd | ||
|
|
23275dc927 | ||
|
|
395795949e | ||
|
|
63201e25fd | ||
|
|
5078f401e9 | ||
|
|
a68b39ead7 | ||
|
|
cf979b3900 | ||
|
|
6c703ab3ef | ||
|
|
a93196eb7e | ||
|
|
ccfc0c2401 | ||
|
|
4dfc70f439 | ||
|
|
fd5c9b8e4f | ||
|
|
f66d274c6e | ||
|
|
7ad0a86b02 | ||
|
|
346fc3622b | ||
|
|
a23d463020 | ||
|
|
1974cf863b | ||
|
|
5d28e86e95 | ||
|
|
0e88cfdacb | ||
|
|
ea39c70471 | ||
|
|
ebb7dde012 | ||
|
|
5669f0d95f | ||
|
|
f0ce0e663e | ||
|
|
d6989488da | ||
|
|
27594848db | ||
|
|
df0597c8bf | ||
|
|
6cd441e0f1 | ||
|
|
e4071472ad | ||
|
|
baf49d107f | ||
|
|
9e52f2fc1b | ||
|
|
989675324b | ||
|
|
05c3c3e76c | ||
|
|
c8a24971b6 | ||
|
|
929d909947 | ||
|
|
4d17d80947 | ||
|
|
2a635f6797 | ||
|
|
54a6f2addb | ||
|
|
e07d1d0320 | ||
|
|
8f2491cd0a | ||
|
|
cfe14254d4 | ||
|
|
afd52b3075 | ||
|
|
a512a6442e | ||
|
|
ee4b2ffef5 | ||
|
|
d620c8f40b | ||
|
|
ae2d19241e | ||
|
|
a7e3c8639c | ||
|
|
753f7160f9 | ||
|
|
17244af2f9 | ||
|
|
21abad2dbd | ||
|
|
f12ff0597d | ||
|
|
c559be20e1 | ||
|
|
b66fb597fa | ||
|
|
32874b6d92 | ||
|
|
8d7d854e35 | ||
|
|
aefafd2ec5 | ||
|
|
f7b15e92a5 | ||
|
|
d20e1efbbd | ||
|
|
1bd15b45a6 | ||
|
|
a7eab14c29 | ||
|
|
1ab34dc9d0 | ||
|
|
c577c7e501 | ||
|
|
1cc4f6be53 | ||
|
|
d064b9238f | ||
|
|
3dca2873e0 | ||
|
|
a4b999e0d4 | ||
|
|
428cf27a03 | ||
|
|
0993d5c9c2 | ||
|
|
253b57f747 | ||
|
|
8eff7ed37b | ||
|
|
1121c96a11 | ||
|
|
3b307fba93 | ||
|
|
6d81c37e6c | ||
|
|
7343290ffc | ||
|
|
a8e9f63928 | ||
|
|
bc86312997 | ||
|
|
7a1737c09f | ||
|
|
e00292b445 | ||
|
|
6ed2acf791 | ||
|
|
f98d565714 | ||
|
|
4eb53d3355 | ||
|
|
8d067fe3cb | ||
|
|
1776bcd460 | ||
|
|
cdb4120dcb | ||
|
|
ec696b8240 | ||
|
|
e533d2a71a | ||
|
|
ecc5622e7f | ||
|
|
17fe75ea4a | ||
|
|
42507526b6 | ||
|
|
8d3d2fe9f4 | ||
|
|
b62079a632 | ||
|
|
2e1f24b4dc | ||
|
|
d039729878 | ||
|
|
97424f0447 | ||
|
|
e1fd9c83b8 | ||
|
|
cf8844c19d | ||
|
|
ff73aaaac7 | ||
|
|
72e09b6891 | ||
|
|
e68fc74c87 | ||
|
|
988333abb8 | ||
|
|
d5235f2b2c | ||
|
|
41348f2166 | ||
|
|
d9ae0dab10 | ||
|
|
c19df82b72 | ||
|
|
52797177b2 | ||
|
|
f8336029f1 | ||
|
|
131119fd28 | ||
|
|
cbddc6313e | ||
|
|
5ff8bbfe11 | ||
|
|
adbe4c9d86 | ||
|
|
f9b0a7e9a9 | ||
|
|
c251683c20 | ||
|
|
56ebdd92f1 | ||
|
|
3fd08be98e | ||
|
|
642407c241 | ||
|
|
8e3b3e1919 | ||
|
|
3f37cf8c50 | ||
|
|
efb23fc9bd | ||
|
|
7345de27b1 | ||
|
|
d67b01c7f2 | ||
|
|
78e341cd4c | ||
|
|
aec33dd75f | ||
|
|
8c892907c2 | ||
|
|
e7d3025753 | ||
|
|
5252bae1f9 | ||
|
|
d08e7bbe82 | ||
|
|
155c275180 | ||
|
|
af69e95bbe | ||
|
|
771f764533 | ||
|
|
51c54f2e5b | ||
|
|
cfb15466e4 | ||
|
|
f15a177132 | ||
|
|
efc552b0bf | ||
|
|
2c11e397d1 | ||
|
|
fc26d25011 | ||
|
|
15d596099c | ||
|
|
0d304f7e43 | ||
|
|
c4485cfdeb | ||
|
|
dab35ffa40 | ||
|
|
45a649d6ab | ||
|
|
9ef3349e4e | ||
|
|
845df0cce1 | ||
|
|
de2e1090ca | ||
|
|
c7f8d283e2 | ||
|
|
546c8dd1d7 | ||
|
|
98fb23f6b3 | ||
|
|
af9843d91b | ||
|
|
3d2290c203 | ||
|
|
64e66bb397 | ||
|
|
2959cd0f30 | ||
|
|
fde1b89cd9 | ||
|
|
a95b14da42 | ||
|
|
89201c91c8 | ||
|
|
2170e0ad2d | ||
|
|
fdd5464835 | ||
|
|
e00287c8a4 | ||
|
|
5dd4823936 | ||
|
|
f1f4e4c778 | ||
|
|
fb1270ea66 | ||
|
|
2edfed69b3 | ||
|
|
44fa788a34 | ||
|
|
97b47c8ee3 | ||
|
|
db14aa2bba | ||
|
|
9ee42012fc | ||
|
|
0f9450137f | ||
|
|
efbfa064f0 | ||
|
|
abd14b6296 | ||
|
|
67f0275618 | ||
|
|
28dd3c6ec4 | ||
|
|
c90e8f24e1 | ||
|
|
bc643b3cf5 | ||
|
|
09dd11c7c4 | ||
|
|
f415ee239f | ||
|
|
90b8ac026c | ||
|
|
d4ac26d693 | ||
|
|
4bdc4c4247 | ||
|
|
f7ea9f415b | ||
|
|
edded0f69d | ||
|
|
28ded1166e | ||
|
|
c4d3f22145 | ||
|
|
4cf5d76196 | ||
|
|
95ed3141fd | ||
|
|
c5c5a02163 | ||
|
|
b05a8eb0ca | ||
|
|
99bc04c9ab | ||
|
|
844edc9b78 | ||
|
|
50853052a8 | ||
|
|
dd230a0e76 | ||
|
|
07e620e611 | ||
|
|
0b5dc26511 | ||
|
|
257af85259 | ||
|
|
03e5e43269 | ||
|
|
f6e02ffb0c | ||
|
|
ee89658df3 | ||
|
|
e3960304bd | ||
|
|
6ecf72a976 | ||
|
|
8ab3f843c7 | ||
|
|
c9b0a16843 | ||
|
|
3c45262ea8 | ||
|
|
759e926b9a | ||
|
|
10f4a52985 | ||
|
|
f6b74eb6e0 | ||
|
|
bd19da5d6e | ||
|
|
fe0f24602d | ||
|
|
cea96185aa | ||
|
|
79f44ae7fa | ||
|
|
c59d3aef79 | ||
|
|
138d5bc57e | ||
|
|
574fbf97c5 | ||
|
|
8a9e0daa01 | ||
|
|
acb7fe8e96 | ||
|
|
724fbbab5f | ||
|
|
51c43af4f4 | ||
|
|
39fc1faee5 | ||
|
|
8359c4ad6f | ||
|
|
54b9c90aef | ||
|
|
3e5df1a965 | ||
|
|
04ac48f21c | ||
|
|
de6bcb1786 | ||
|
|
4f4bf2b0b8 | ||
|
|
b8bbd6f842 | ||
|
|
377811123b | ||
|
|
426d5b9de0 | ||
|
|
4a1962cb84 | ||
|
|
ce3b403c9b | ||
|
|
c7ea10575a | ||
|
|
b54710404a | ||
|
|
e975ac3808 | ||
|
|
ac22552b84 | ||
|
|
9d79d90104 | ||
|
|
11952c4c0c | ||
|
|
2631cf6430 | ||
|
|
9a1074ebbc | ||
|
|
207b56d0a4 | ||
|
|
e8407afc6d | ||
|
|
b073521aa8 | ||
|
|
be845d6444 | ||
|
|
c01ea899f1 | ||
|
|
97512818cf | ||
|
|
99fb4ecb34 | ||
|
|
6405456c8a | ||
|
|
49749da7dd | ||
|
|
99e41df4db | ||
|
|
134a1b9706 | ||
|
|
91ed8723c3 | ||
|
|
6a69510b13 | ||
|
|
717ff3b1ef | ||
|
|
5133984202 | ||
|
|
e70bc04197 | ||
|
|
c5050b03b7 | ||
|
|
5c3cfa4e98 | ||
|
|
a25f02780e | ||
|
|
cfb2f350c8 | ||
|
|
53a8841603 | ||
|
|
84b11c29d9 | ||
|
|
72c6982f85 | ||
|
|
fbc13a7456 | ||
|
|
7ef1e9b59e | ||
|
|
1ef69bb940 | ||
|
|
eabd27dd92 | ||
|
|
0760103ac7 | ||
|
|
e9edb69603 | ||
|
|
50bf202df1 | ||
|
|
2bb08b41a7 | ||
|
|
ab62050727 | ||
|
|
080c9ea193 | ||
|
|
d4f240e272 | ||
|
|
46a948d302 | ||
|
|
7da7c07918 | ||
|
|
fbceb0bdd8 | ||
|
|
fde73a4b27 | ||
|
|
c0c4fdf527 | ||
|
|
a4b9bb554d | ||
|
|
b920352f98 | ||
|
|
a70c4eb8e2 | ||
|
|
1c4603cef1 | ||
|
|
164b50b1b7 | ||
|
|
9925639a45 | ||
|
|
63be176c11 | ||
|
|
475bf8a90f | ||
|
|
9e4cf7f326 | ||
|
|
a23f54a416 | ||
|
|
958e6c89da | ||
|
|
24efe77962 | ||
|
|
1ff309a9d2 | ||
|
|
b18631873e | ||
|
|
755c23391e | ||
|
|
4ae7746b95 | ||
|
|
e637a75617 | ||
|
|
4697a8268f | ||
|
|
ad11bd8cd2 | ||
|
|
428790c771 | ||
|
|
c5ce5a400c | ||
|
|
9c1bb00885 | ||
|
|
20e97ac482 | ||
|
|
40b5028955 | ||
|
|
a8f1ec7319 | ||
|
|
ff3e65ad16 | ||
|
|
7de599324b | ||
|
|
12f28fd194 | ||
|
|
1c690dfe5d | ||
|
|
d4f769c15c | ||
|
|
858afffff8 | ||
|
|
fbe08862ca | ||
|
|
c90cb30e50 | ||
|
|
3b5893144d | ||
|
|
3bd56036a5 | ||
|
|
d819ab6d32 | ||
|
|
ac27854c8f | ||
|
|
07da269643 | ||
|
|
dec1abd827 | ||
|
|
92ef136967 | ||
|
|
cc6a0978cb | ||
|
|
02f91a7413 | ||
|
|
3c71753332 | ||
|
|
e5bb9d178d | ||
|
|
07ad12f154 | ||
|
|
4d619a7e38 | ||
|
|
94d11adeb2 | ||
|
|
901caedd01 | ||
|
|
a44f844882 | ||
|
|
6f0bd738e7 | ||
|
|
b3737d96c2 | ||
|
|
af8c3ee9d1 | ||
|
|
b3d094a604 | ||
|
|
d2338e9e87 | ||
|
|
d21dea3fd1 | ||
|
|
209feff810 | ||
|
|
f3a0d5dc64 | ||
|
|
28864037ee | ||
|
|
50ac9c262c | ||
|
|
fef8e6a9a8 | ||
|
|
7358e1108f | ||
|
|
ba81166a2b | ||
|
|
0852e707a6 | ||
|
|
2790b4987f | ||
|
|
f87ee92755 | ||
|
|
d4ef0823d3 | ||
|
|
2e63a3ac86 | ||
|
|
68962e1c01 | ||
|
|
6b95307ae1 | ||
|
|
74ec208581 | ||
|
|
514a34a85f | ||
|
|
66ec59eaae | ||
|
|
597cdbe7b3 | ||
|
|
6270441341 | ||
|
|
e84e6bb09c | ||
|
|
aadb85d86e | ||
|
|
c7aa75c558 | ||
|
|
bfc182c290 | ||
|
|
37686582d9 | ||
|
|
1269ef49c3 | ||
|
|
94fd976bad | ||
|
|
247479ca67 | ||
|
|
f47edd1bfe | ||
|
|
ca51057485 | ||
|
|
d0ba2903b3 | ||
|
|
2b37c39861 | ||
|
|
f01afd7252 | ||
|
|
d86e9d43ee | ||
|
|
91d4929af7 | ||
|
|
8ab18596ad | ||
|
|
7847fd0dad | ||
|
|
6cb5e9218f | ||
|
|
3709fc30b2 | ||
|
|
ae1adbe785 | ||
|
|
d8c325846d | ||
|
|
444ae5d705 | ||
|
|
8a2734da40 | ||
|
|
e8fac2ef97 | ||
|
|
0a5acbde25 | ||
|
|
d413e4695b | ||
|
|
f29d10a49f | ||
|
|
c47ba7c8ba | ||
|
|
b9f20780a8 | ||
|
|
90ef6c95a3 | ||
|
|
b257891391 | ||
|
|
ea21e0fbd5 | ||
|
|
f820727fe8 | ||
|
|
29b22c49fe | ||
|
|
ffeae16728 | ||
|
|
cac3de5461 | ||
|
|
57c52e9351 | ||
|
|
f9ac5053a1 | ||
|
|
9fdc44b00f | ||
|
|
bc17acf8fe | ||
|
|
328fbb9000 | ||
|
|
4bed4902e9 | ||
|
|
7e5ad73c66 | ||
|
|
0a566b3d83 | ||
|
|
1085d3507a | ||
|
|
f108798c00 | ||
|
|
705b913c18 | ||
|
|
8733b875f2 | ||
|
|
446c569703 | ||
|
|
d9fda460cc | ||
|
|
c8b4d82d96 | ||
|
|
b81ab0530d | ||
|
|
ccb9495354 | ||
|
|
544de72c80 | ||
|
|
581928a8fd | ||
|
|
bbdfe9b706 | ||
|
|
d46b8a8465 | ||
|
|
1a2fcc0559 | ||
|
|
62aebbbb37 | ||
|
|
86e87e45f9 | ||
|
|
681f03a2a7 | ||
|
|
38c7a24240 | ||
|
|
0dd3ac272b | ||
|
|
d066648390 | ||
|
|
4097aa887d | ||
|
|
1ed3e4c4ad | ||
|
|
01e70046fb | ||
|
|
de3dc8461c | ||
|
|
49ff368c78 | ||
|
|
e097508472 | ||
|
|
81d92f2254 | ||
|
|
96d17bd6e2 | ||
|
|
b88564b9b2 | ||
|
|
fafcf1dbfa | ||
|
|
6a67c0b6bb | ||
|
|
458d60faa6 | ||
|
|
c6e21a6027 | ||
|
|
0b6814f253 | ||
|
|
25bf6dd20b | ||
|
|
5936bc2243 | ||
|
|
9d35c792ed | ||
|
|
48e1d6a5a9 | ||
|
|
4ef994ac3e | ||
|
|
e344f7e478 | ||
|
|
d77db77825 | ||
|
|
b93a6203fe | ||
|
|
9d09e6475e | ||
|
|
9ae42c355a | ||
|
|
0d9e627a8c | ||
|
|
cf2009f180 | ||
|
|
11ca82dbb5 | ||
|
|
f20ad99be9 | ||
|
|
6ff02a9ada | ||
|
|
6b8acb0d3a | ||
|
|
9f276a5788 | ||
|
|
a297a1b0aa | ||
|
|
fe8ce9335e | ||
|
|
05e2a1edf1 | ||
|
|
8793fed7db | ||
|
|
c1701654fc | ||
|
|
a7b4f2e5b7 | ||
|
|
a5a3d8f4cf | ||
|
|
27a2be8411 | ||
|
|
3ccce0d7ee | ||
|
|
7b6153fed8 | ||
|
|
832725d957 | ||
|
|
aac577635a | ||
|
|
6b8118c3fe | ||
|
|
e8bdf04d48 | ||
|
|
8e16e2fecb | ||
|
|
331df90e4a | ||
|
|
6df806c60c | ||
|
|
db22a0191a | ||
|
|
7346c3136d | ||
|
|
c6a4332025 | ||
|
|
9a712c0c26 | ||
|
|
950ffe9722 | ||
|
|
22e884d08f | ||
|
|
59a71b7e6e | ||
|
|
5a0df4e6d9 | ||
|
|
36e007472b | ||
|
|
acd6cb1a4e | ||
|
|
32e3daf767 | ||
|
|
d90945db6a | ||
|
|
026efa317f | ||
|
|
0b4e4ee946 | ||
|
|
c3da736f4d | ||
|
|
4aa5ea04d8 | ||
|
|
cb2c5029c0 | ||
|
|
8c977a45e5 | ||
|
|
78803bfe10 | ||
|
|
1ee5f18794 | ||
|
|
958345a0a5 | ||
|
|
19d3ba0d96 | ||
|
|
eb45f9bc36 | ||
|
|
1999898508 | ||
|
|
ca3ff7cf66 | ||
|
|
380af79b25 | ||
|
|
1d5ff65e04 | ||
|
|
c73dfa6e8e | ||
|
|
ef1c92ca2f | ||
|
|
4ccda0f794 | ||
|
|
a633c9c650 | ||
|
|
22e46762f8 | ||
|
|
ce24e2e29b | ||
|
|
f4278926f8 | ||
|
|
f18becefec | ||
|
|
a6cc43f1f6 | ||
|
|
38c24fe006 | ||
|
|
0ae6ea9c8a | ||
|
|
89ade7c568 | ||
|
|
bba4f0e821 | ||
|
|
04e0de5fe9 | ||
|
|
686fe11fc2 | ||
|
|
88ab6d6038 | ||
|
|
6661f9de1c | ||
|
|
90b815a4be | ||
|
|
778eac0e22 | ||
|
|
e2950f6ea7 | ||
|
|
6ef026bbad | ||
|
|
d4a221606f | ||
|
|
e536e1ba19 | ||
|
|
8f85f2ded9 | ||
|
|
481d3754b3 | ||
|
|
447c260438 | ||
|
|
65edc63166 | ||
|
|
944e898280 | ||
|
|
97149a8991 | ||
|
|
eae4d6c7fa | ||
|
|
206f2cacb1 | ||
|
|
c9bbb3b9bf | ||
|
|
147685d2c8 | ||
|
|
357e0beccd | ||
|
|
8ac0209db5 | ||
|
|
0fa0a84a22 | ||
|
|
3c9d9a705a | ||
|
|
db19afcf80 | ||
|
|
6ed870b53a | ||
|
|
694dad5a8b | ||
|
|
dd4e229a46 | ||
|
|
0a610baf5b | ||
|
|
c67ef30b75 | ||
|
|
02cb1f0ca8 | ||
|
|
35c2a5e5ca | ||
|
|
943e98ae80 | ||
|
|
2838795d63 | ||
|
|
c64360d372 | ||
|
|
e64734f8fd | ||
|
|
55fb525da9 | ||
|
|
e4dd4da818 | ||
|
|
c601060f82 | ||
|
|
9b72d45199 | ||
|
|
ee3f52354a | ||
|
|
34ebcb1a43 | ||
|
|
ee0328df39 | ||
|
|
84eada804b | ||
|
|
f74228a029 | ||
|
|
13d46e994e | ||
|
|
ba4d0b0e38 | ||
|
|
2b744f9512 | ||
|
|
dfec3b59fc | ||
|
|
b9f75759b7 | ||
|
|
acab1dda1c | ||
|
|
985d9a2f61 | ||
|
|
f002fed152 | ||
|
|
7a709b5e8b | ||
|
|
6a0d70033d | ||
|
|
e931c8ab83 | ||
|
|
76e152f300 | ||
|
|
5058086837 | ||
|
|
dfa1748c81 | ||
|
|
a886d001ba | ||
|
|
298680ff1b | ||
|
|
619d44800e | ||
|
|
0e3b2d0f2f | ||
|
|
e14df37c0e | ||
|
|
44a86c2566 | ||
|
|
7952d24915 | ||
|
|
5da1861534 | ||
|
|
cb5904d685 | ||
|
|
7f84eb0a23 | ||
|
|
c976f0725b | ||
|
|
4fbbc09895 | ||
|
|
9ac41c6b21 | ||
|
|
71f8e62a15 | ||
|
|
f560288ab1 | ||
|
|
1cb754603b | ||
|
|
c4e81baf65 | ||
|
|
eb98e55477 | ||
|
|
758edd0ecc | ||
|
|
5707bc6eaf | ||
|
|
ca765dd688 | ||
|
|
5e8996918a | ||
|
|
5648573d24 | ||
|
|
27e889d818 | ||
|
|
bef0efb18e | ||
|
|
afd8d4025b | ||
|
|
9ccde53749 | ||
|
|
6ec9934365 | ||
|
|
6e04d33898 | ||
|
|
d4afb53fee | ||
|
|
6a3a88e3b5 | ||
|
|
533e7c1035 | ||
|
|
d8ab4715e8 | ||
|
|
e182b41c88 | ||
|
|
d4b7f85b6a | ||
|
|
fc90a385a7 | ||
|
|
89570cb6fe | ||
|
|
2b14befb6f | ||
|
|
de7cea8a17 | ||
|
|
b1976cf3ff | ||
|
|
75e66a531b | ||
|
|
180bd906b7 | ||
|
|
76389d83cc | ||
|
|
b611ed5eac | ||
|
|
ed3041c551 | ||
|
|
ebb075315f | ||
|
|
b984297e28 | ||
|
|
3d21e84b44 | ||
|
|
b5337ad338 | ||
|
|
ff466c2189 | ||
|
|
065789e0d7 | ||
|
|
63f0ac2c8c | ||
|
|
0e2e8d9f94 | ||
|
|
11ef366601 | ||
|
|
9be9d1513d | ||
|
|
319737daff | ||
|
|
2f4617ddef | ||
|
|
f80865c950 | ||
|
|
464e3fc76d | ||
|
|
146f977422 | ||
|
|
eda854d54c | ||
|
|
d32956a942 | ||
|
|
f9b3d357ff | ||
|
|
2cba2a1b55 | ||
|
|
7a05fb40d8 | ||
|
|
02137273ff | ||
|
|
32425c6963 | ||
|
|
05e1dd7df4 | ||
|
|
a9f9fb342a | ||
|
|
f862e9bd87 | ||
|
|
7a5035f14e | ||
|
|
75dc6b16d1 | ||
|
|
9613e992da | ||
|
|
863303f601 | ||
|
|
b9f8c6b77d | ||
|
|
b5974b5da0 | ||
|
|
90b394015b | ||
|
|
91074eba48 | ||
|
|
23ac323c88 | ||
|
|
0a851b0892 | ||
|
|
e9981048fa | ||
|
|
f32a7bbb91 | ||
|
|
d2240efca8 | ||
|
|
296d2824d5 | ||
|
|
355aac26e3 | ||
|
|
ff555d760b | ||
|
|
9535627657 | ||
|
|
0a20e32dc5 | ||
|
|
e30a40f432 | ||
|
|
f0f2a68899 | ||
|
|
2a16aa1a4f | ||
|
|
0e69decc0e | ||
|
|
8d6fb11f32 | ||
|
|
a85e103ba2 | ||
|
|
7fcfe6bb8d | ||
|
|
f81ae9b4fd | ||
|
|
90e8f70da2 | ||
|
|
ea4a10c027 | ||
|
|
1d9fa45715 | ||
|
|
4ff4744d8d | ||
|
|
0d950338e1 | ||
|
|
b25f744b25 | ||
|
|
57668f0e03 | ||
|
|
f1f7b1a665 | ||
|
|
1ecf715476 | ||
|
|
e8cb468999 | ||
|
|
49d545285c | ||
|
|
5bb2ab0c76 | ||
|
|
70dbe2eef7 | ||
|
|
58017aeb08 | ||
|
|
f3cd66a416 | ||
|
|
61483f53e2 | ||
|
|
d0b5e193b8 | ||
|
|
5b1cb69f59 | ||
|
|
24e029c76f | ||
|
|
214870062b | ||
|
|
ff55dc026e | ||
|
|
53aaa044d7 | ||
|
|
cba064e739 | ||
|
|
a0760b7266 | ||
|
|
e04ab86803 | ||
|
|
1931cdacde | ||
|
|
b7f7487727 | ||
|
|
1ffda82db0 | ||
|
|
6ce1809828 | ||
|
|
10c1c7954c | ||
|
|
36d8f895b4 | ||
|
|
34358c8725 | ||
|
|
e240220c11 | ||
|
|
cf81703751 | ||
|
|
b1f0fb55cd | ||
|
|
cfccc6ac83 | ||
|
|
71f6abda24 | ||
|
|
5d8507f725 | ||
|
|
f72e4047d2 | ||
|
|
49dc984bef | ||
|
|
14aeaba3b7 | ||
|
|
12bfcd30d4 | ||
|
|
66b752f95a | ||
|
|
ae307df8f3 | ||
|
|
4e9275f6f0 | ||
|
|
9f76288c74 | ||
|
|
cdab3e9ab8 | ||
|
|
7809a9e916 | ||
|
|
98957526c8 | ||
|
|
5bd8cf540d | ||
|
|
ebfdec303a | ||
|
|
2b1ab8e1ed | ||
|
|
8fb483c0ea | ||
|
|
c3a3710cb4 | ||
|
|
753bb285f5 | ||
|
|
37eb4d91eb | ||
|
|
97ebae9f78 | ||
|
|
5667ae14d4 | ||
|
|
d8a1b5f7eb | ||
|
|
d253d66000 | ||
|
|
0e9d06669e | ||
|
|
2a59fa7bfb | ||
|
|
278d5f18e3 | ||
|
|
0507d3864f | ||
|
|
6d892a4742 | ||
|
|
90c549ad0a | ||
|
|
4f0fd23810 | ||
|
|
80f8b850be | ||
|
|
93eb89c00b | ||
|
|
53a0f9c4cf | ||
|
|
80b226bbe4 | ||
|
|
563583ef4b | ||
|
|
590711aa26 | ||
|
|
265c3abcae | ||
|
|
37b0ad1ec9 | ||
|
|
e6a33b3b2b | ||
|
|
0d9b20dc14 | ||
|
|
41c7e72ca8 | ||
|
|
49d32100df | ||
|
|
45ef0c9a6e | ||
|
|
819c74d8ab | ||
|
|
a040be29e6 | ||
|
|
f80fc6c78b | ||
|
|
74b0cb5127 | ||
|
|
46c0a8520d | ||
|
|
fc665d0b3a | ||
|
|
d23a4664b1 | ||
|
|
c950358b86 | ||
|
|
7a871202f3 | ||
|
|
3e22f8aa4d | ||
|
|
424dc86cc6 | ||
|
|
fc78dedfe8 | ||
|
|
6b1079b7b7 | ||
|
|
1473cf41ac | ||
|
|
d3d1fc72da | ||
|
|
8176b4ce27 | ||
|
|
03d62f8242 | ||
|
|
de0201ad93 | ||
|
|
36eb6758b0 | ||
|
|
3d35e5ec74 | ||
|
|
237dee86fb | ||
|
|
3bdd28ec2b | ||
|
|
fcf7b27257 | ||
|
|
7922c3dbc9 | ||
|
|
6d7db87b8e | ||
|
|
87d553d134 | ||
|
|
6fdd4e2041 | ||
|
|
6cb5f11f2e | ||
|
|
e32a3ff053 | ||
|
|
d9220a25b3 | ||
|
|
0d8c9359b5 | ||
|
|
3022a83148 | ||
|
|
33c81d96c9 | ||
|
|
d2eecc4e06 | ||
|
|
0dd7daf68d | ||
|
|
8955a66153 | ||
|
|
19de4c9d15 | ||
|
|
b8dd47eae4 | ||
|
|
3ac2b95c0a | ||
|
|
21c8d2fc98 | ||
|
|
3e880cfb10 | ||
|
|
8d77775387 | ||
|
|
2cce1e71fa | ||
|
|
7cad89beb7 | ||
|
|
ad452c5322 | ||
|
|
26089372d6 | ||
|
|
cd5b751d92 | ||
|
|
c5de27102b | ||
|
|
9907e5d7bb | ||
|
|
8a5bd6996a | ||
|
|
e57a34731c | ||
|
|
74c13d6ce3 | ||
|
|
b3eab459f0 | ||
|
|
5d9f9fe16f | ||
|
|
32f3fe3b84 | ||
|
|
d6d55c32e5 | ||
|
|
261109b036 | ||
|
|
1d78844d4d | ||
|
|
537a03eb18 | ||
|
|
9b0592f4ab | ||
|
|
9d63d2d4c8 | ||
|
|
86b8823420 | ||
|
|
04a40c0063 | ||
|
|
95efeeaa9d | ||
|
|
3b965b1b72 | ||
|
|
fa78aaabc4 | ||
|
|
8ac6039ea9 | ||
|
|
da94adca1a | ||
|
|
875cbcceaf | ||
|
|
0c2f2b0749 | ||
|
|
c1ed1146cf | ||
|
|
f4efa5e358 | ||
|
|
aeeeb967e7 | ||
|
|
a6f2b9fa6c | ||
|
|
e54d0cca6e | ||
|
|
8635e94166 | ||
|
|
ab6192e465 | ||
|
|
fbfc9b0879 | ||
|
|
f3d97f3751 | ||
|
|
fd938e4423 | ||
|
|
f6129ffdb8 | ||
|
|
f84c5acada | ||
|
|
3de6986d8f | ||
|
|
780d897ff2 | ||
|
|
c6520e22fc | ||
|
|
bbfddcdd85 | ||
|
|
52ceb71444 | ||
|
|
43088239e0 | ||
|
|
1d211498c6 | ||
|
|
b2fbad4005 | ||
|
|
484802d685 | ||
|
|
36af7cd972 | ||
|
|
4fe662a90a | ||
|
|
fb49c77f25 | ||
|
|
ec40bae6e9 | ||
|
|
e2d6afecf5 | ||
|
|
bc86c4936d | ||
|
|
14771c90be | ||
|
|
afcf7239ab | ||
|
|
ced162977f | ||
|
|
59cd328b9b | ||
|
|
36e0d73e69 | ||
|
|
341571ce52 | ||
|
|
020d65eff0 | ||
|
|
776df9fc0e | ||
|
|
2db7597541 | ||
|
|
e1623ab3e0 | ||
|
|
bab951b344 | ||
|
|
3ac8895d7a | ||
|
|
2712465a1d | ||
|
|
e9ace30cca | ||
|
|
6867c50003 | ||
|
|
00b584177d | ||
|
|
5024821991 | ||
|
|
bd14e4bab3 | ||
|
|
0b8929cf1c | ||
|
|
3e6f659990 | ||
|
|
0575b9209c | ||
|
|
c9df4c0d26 | ||
|
|
ff83978cf3 | ||
|
|
d4b0a3ae50 | ||
|
|
ccc782e39c | ||
|
|
ed2ea087fb | ||
|
|
22ac006f33 | ||
|
|
a4bbcda45e | ||
|
|
14dc012e2c | ||
|
|
1aed4cfa47 | ||
|
|
7b7a76a364 | ||
|
|
3a77956bdd | ||
|
|
464bdf4fc0 | ||
|
|
36cd62db80 | ||
|
|
09e2f1116f | ||
|
|
3682c45263 | ||
|
|
702ad5c6f9 | ||
|
|
7bb18bae69 | ||
|
|
6326aab677 | ||
|
|
838e80ae34 | ||
|
|
d2024c12bb | ||
|
|
8a23013af2 | ||
|
|
12b115e4b0 | ||
|
|
990e2a472b | ||
|
|
e5d703bee3 | ||
|
|
6839e613bf | ||
|
|
e66e1691a9 | ||
|
|
78baae599b | ||
|
|
ada0609b9c | ||
|
|
dbaf1776d8 | ||
|
|
57ac24013e | ||
|
|
ec52c4e713 | ||
|
|
8d8518d128 | ||
|
|
64eee477c7 | ||
|
|
214fb779ac | ||
|
|
157bf75a9b | ||
|
|
dcb0b53d11 | ||
|
|
d64a0609fa | ||
|
|
6f4cf3ebec | ||
|
|
e4daa42cf6 | ||
|
|
3ce44e92a4 | ||
|
|
603ce02420 | ||
|
|
65aeb0ad19 | ||
|
|
93cdb34d8b | ||
|
|
b4163c6dea | ||
|
|
f8f3ca45e7 | ||
|
|
47b20e3bb1 | ||
|
|
716d8a7ab3 | ||
|
|
6a1d91dc76 | ||
|
|
86d25f04b7 | ||
|
|
b124c4efd8 | ||
|
|
197e8955a4 | ||
|
|
f04378c129 | ||
|
|
4f5882566c | ||
|
|
55192e46a4 | ||
|
|
3787049f5a | ||
|
|
92017ded7a | ||
|
|
daf5a169dc | ||
|
|
ca510bdb1a | ||
|
|
2e6196761a | ||
|
|
b7d9abd4f7 | ||
|
|
4a0896d349 | ||
|
|
013d2722da | ||
|
|
34333941d3 | ||
|
|
57e2ecd7b5 | ||
|
|
2315524505 | ||
|
|
0f3de6ca8a | ||
|
|
cf1fa4b57b | ||
|
|
8cece20ced | ||
|
|
6c84515275 | ||
|
|
00d20bb5ac | ||
|
|
b80c6c7bf4 | ||
|
|
c7530012be | ||
|
|
17dc062904 | ||
|
|
360622109a | ||
|
|
528ef22104 | ||
|
|
23023bfaf4 | ||
|
|
c4e41d76e1 | ||
|
|
887754e2ff | ||
|
|
a6b3b21c3a | ||
|
|
5e45feafca | ||
|
|
256a52d9c6 | ||
|
|
b92e5aac92 | ||
|
|
8e7902867d | ||
|
|
042f8c4d65 | ||
|
|
84c6d23d87 | ||
|
|
1c64a95020 | ||
|
|
85fae69ca6 | ||
|
|
3f42b8c6cb | ||
|
|
b5b0fe2674 | ||
|
|
5dc7fd2a2b | ||
|
|
9c484f2091 | ||
|
|
1fab3524f2 | ||
|
|
63fa26301f | ||
|
|
395a87047b | ||
|
|
a00d4787ab | ||
|
|
6c9d11248a | ||
|
|
284a93972a | ||
|
|
b5755b6aa0 | ||
|
|
c6d0ad9bf5 | ||
|
|
22e91235d4 | ||
|
|
0b6da3dc1e | ||
|
|
1c2cb2dde9 | ||
|
|
dc16918beb | ||
|
|
39a2136e3d | ||
|
|
afca09729a | ||
|
|
a994d4b750 | ||
|
|
695c2cbdbf | ||
|
|
067c7bd08f | ||
|
|
9713a1fefb | ||
|
|
1101d671a1 | ||
|
|
8bb32da1c4 | ||
|
|
5741b64036 | ||
|
|
84caf4fa3d | ||
|
|
bb45e7e52a | ||
|
|
9c9915a6f9 | ||
|
|
5b7572e927 | ||
|
|
bc197049b9 | ||
|
|
85bdca5c81 | ||
|
|
9639e1c043 | ||
|
|
b5a6443b36 | ||
|
|
74c5094cb0 | ||
|
|
1280ab8c4e | ||
|
|
cf7c24232e | ||
|
|
c59fa49693 | ||
|
|
d3f736d873 | ||
|
|
56a2d0fff6 | ||
|
|
072c3a3059 | ||
|
|
b23b653290 | ||
|
|
b33ab943ff | ||
|
|
1942205585 | ||
|
|
fa398e1501 | ||
|
|
90b9667103 | ||
|
|
d076c73a4d | ||
|
|
f97aa9c0e0 | ||
|
|
cd1d5cf2f3 | ||
|
|
9b83ed6029 | ||
|
|
a948936740 | ||
|
|
9c3de2229e | ||
|
|
db20a3afac | ||
|
|
c8e28c0896 | ||
|
|
cdd23c5d63 | ||
|
|
fa829a137e | ||
|
|
7d6deea4e5 | ||
|
|
aaae223e40 | ||
|
|
e483339580 | ||
|
|
9750866aa8 | ||
|
|
b10e9bc5c5 | ||
|
|
37aa801c46 | ||
|
|
9a66954003 | ||
|
|
143a7102c6 | ||
|
|
0d1e978baa | ||
|
|
0b801fe6e0 | ||
|
|
11c24e3120 | ||
|
|
54742747ad | ||
|
|
88ff8ee6d4 | ||
|
|
9fa66e37c0 | ||
|
|
1b77d945be | ||
|
|
43b4b072dc | ||
|
|
a51e3e2e90 | ||
|
|
6269872397 | ||
|
|
36d5bde12b | ||
|
|
5ab6794c4e | ||
|
|
a655d63987 | ||
|
|
0308a2c896 | ||
|
|
4da5657705 | ||
|
|
111a935540 | ||
|
|
2e3729ab22 | ||
|
|
588eb7a985 | ||
|
|
fbcb807463 | ||
|
|
0600d80046 | ||
|
|
41f457584d | ||
|
|
94b1299cde | ||
|
|
c25ead11ff | ||
|
|
b05eb736a0 | ||
|
|
b3a946bd92 | ||
|
|
93bd4af052 |
1848 changed files with 106953 additions and 9535 deletions
51
.gitignore
vendored
51
.gitignore
vendored
|
|
@ -1,22 +1,51 @@
|
|||
/*.scad
|
||||
*.dmg
|
||||
*~
|
||||
*.tar*
|
||||
*.new
|
||||
out.*
|
||||
Makefile
|
||||
objects
|
||||
.gdbinit
|
||||
/*.stl
|
||||
/*.dxf
|
||||
/lexer_lex.cpp
|
||||
/parser_yacc.cpp
|
||||
.qmake.stash
|
||||
parser_yacc.h
|
||||
/tmp
|
||||
/OpenSCAD.app
|
||||
*/#*#
|
||||
/nbproject
|
||||
/openscad
|
||||
/tests/openscad_nogui
|
||||
**/#*#
|
||||
testdata/scad/features/import_dxf-tests.scad
|
||||
testdata/scad/features/import_stl-tests.scad
|
||||
testdata/scad/misc/include-tests.scad
|
||||
testdata/scad/misc/use-tests.scad
|
||||
**/project.xcworkspace
|
||||
**/xcuserdata
|
||||
/*.scad
|
||||
/*.stl
|
||||
/*.dxf
|
||||
/*.off
|
||||
/*.amf
|
||||
/*.png
|
||||
/*.csg
|
||||
/*.nef3
|
||||
/*.blend
|
||||
/*.obj
|
||||
/*.rcad
|
||||
/*.xml
|
||||
/*.dat
|
||||
/*.gcode
|
||||
/*.py
|
||||
/*.svg
|
||||
/*.h
|
||||
/*.dump
|
||||
/*.pl
|
||||
/lexer_lex.cpp
|
||||
/parser_yacc.cpp
|
||||
/OpenSCAD.app
|
||||
/openscad.pro.user
|
||||
/openscad
|
||||
/locale/*/*/*.mo
|
||||
/locale/*.mo
|
||||
/locale/POTFILES
|
||||
/tmp
|
||||
/nbproject
|
||||
/mingw32
|
||||
/mingw64
|
||||
src/*.org
|
||||
src/*.old
|
||||
src/*.debug
|
||||
|
|
|
|||
80
.travis.yml
80
.travis.yml
|
|
@ -2,16 +2,88 @@ language: cpp
|
|||
cache: apt
|
||||
compiler: gcc
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "chat.freenode.net#openscad"
|
||||
on_success: change
|
||||
use_notice: true
|
||||
skip_join: true
|
||||
|
||||
before_install:
|
||||
- echo 'yes' | sudo add-apt-repository ppa:chrysn/openscad
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq build-essential libqt4-dev libqt4-opengl-dev libxmu-dev cmake bison flex git-core libboost-all-dev libXi-dev libmpfr-dev libboost-dev libglew-dev libeigen2-dev libeigen3-dev libcgal-dev libgmp3-dev libgmp-dev python-paramiko curl imagemagick
|
||||
- sudo apt-get install -qq build-essential libqt4-dev libqt4-opengl-dev libxmu-dev cmake bison flex git-core libboost-all-dev libXi-dev libmpfr-dev libboost-dev libglew-dev libeigen3-dev libcgal-dev libgmp3-dev libgmp-dev curl imagemagick libfontconfig-dev
|
||||
- sudo apt-get install -qq libopencsg-dev
|
||||
|
||||
env: OPENSCAD_UPLOAD_TESTS=yes
|
||||
- echo 'yes' | sudo add-apt-repository ppa:mapnik/nightly-trunk
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq libharfbuzz-dev
|
||||
- echo 'yes' | sudo add-apt-repository ppa:oibaf/graphics-drivers
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install --install-recommends libgl1-mesa-dev-lts-quantal
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
||||
script: ./scripts/travis-ci.sh
|
||||
before_script:
|
||||
- echo -e "Host files.openscad.org\n\tStrictHostKeyChecking no\n" >> ~/.ssh/config
|
||||
- echo -n $openscad_rsa_{00..40} >> ~/.ssh/openscad_rsa_base64
|
||||
- base64 --decode --ignore-garbage ~/.ssh/openscad_rsa_base64 > ~/.ssh/id_rsa
|
||||
- chmod 600 ~/.ssh/id_rsa
|
||||
|
||||
script: if [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then ./scripts/travis-ci.sh ; fi
|
||||
|
||||
env:
|
||||
global:
|
||||
- OPENSCAD_UPLOAD_TESTS=yes
|
||||
- secure: "mBWdnkXe8BL1SqYRBnOOpXn60xtHGfpeVOh+HrK8xZPflLyJLdgAz3jsrgPaaMibfuygOEfn86jm8dFZPDJSeGh+gGbcjbtOywvYtr0d/KJPk2ccCavlGEBsTSdfWVBMH2hqZ+OXrSn4amx12fmcF/rnpRZu0jHxRWrL4SbouXM="
|
||||
- secure: "gYPUvQekTxYW4bNIDvL6MFdPihd0HFGIq2saEbcOVyGYuZTdyBIzoh3tLIdG6jJNLWb/Nn2iWEsbsSsSIVk9UowW2qmuKVmzOyezKiu7wO2bdk08zeNtZLdFU4f8NsPz/ODXGQBCbjrBr8csnczQ9DKcxQeG2Lr9z1PjpJE43zY="
|
||||
- secure: "N4tu1zJPq4tDrfArXawiQZ/oAb3jZ1xEonxH2WWMnUXj6CGMSrRbkUD7h7Yx5WcIgxkDE87Q+mMgKDNDhDQuK4RiTngwokXKSCHYn0odo10o1SWiNE42czLpbCTWJeM/5m+nyPhE1Hn8StTwiwqiA2YkBUICh/z+s6cmqV5JaEU="
|
||||
- secure: "hfkGLUH90vkYIIQlBjAlYRxl/KJE/d5Z8cGnXGN77+RuvmGN2vMspSTXdvIe7KXesLs3ly96iA/mx3LLzW4YQu1qlwaAtffXiX2GBUFgRAHQV4Ty6PJzwRjzTxqZTh2jE+lZukB/6oh0ZlF4lpFYRFIMwLQMP64gGN0aqdQwc0I="
|
||||
- secure: "UBH3ATAhykSH4su70oG6vmnOfV62ghNDLO/Y5dZwZvZVkKdERdddtpP8tPmJrkeqZp6nZs2DPA1ufgifaShZgv5eo5U1pdg4zFRA8UuOlK51QWdPYdk4/kTbifqeKhiQlNpvMXGnRPfk0a2HdAiaAHk0FKIPBRPAgwJlE03zKf4="
|
||||
- secure: "YAMu566rDdaAHflMlvBdwkb7F4DNoDa6nJ1/d0bbaPDDk2onxzt5Nos9P3LMMya9XDo/+/8XZWUhdU2t8fwKfKiAanaIPiDYFaS7gZDohu7TI41rqJnnHFF1KNtG624PbABIgKBu8AEHsF1op7EG31SD8ZFyYTBdFOlgVruNWEA="
|
||||
- secure: "cLVNa1aAtGyO7nHumphZRcNmMnFp+Ts4Bqh6WlclZ3RljEp5rKqHP3knHVgE6T0jC6zMTdNDwKHkyW2jlETRa0l7SGblZI1iuAATnNMwH14FPJgfHP2g30dYu714J6ik6UWUyFNex6o5ZlrVnTnrTuQpTQmF/Ehb4xBcFh780S8="
|
||||
- secure: "VXa5G1ow1YND0Ap7jTH6oewSlgE3bQz0ZRKPz/bMEQhmImitAW24LG+kLi1RWfvtwJdHBOExlwh/yGpe508WXLF5F/Hv9LKTeAFixUSpFXt1Llsx1/LuApy7i4bq9nmx30Of5GiFvUARTr0wa1a3BbH5E0Sj963vVLwy+FZDiS8="
|
||||
- secure: "K9pzYAsFc9rvFVz12Y80uFpruH7R5tJpurtGxQJpgSRCr4kRlJO+ODt4/Voq7lzFCiMuhbBiE0G4f8SzylyyiyJaZshAxqRBteEdDEMEnx1ND4FbqDnB9apWnWRoY1AbqBx1ckEy3jCvw1Tn9bRvvvcnOI6qXFxLpTJMP3eY6R4="
|
||||
- secure: "Oa/blQENesTANzJbqzdQPQ1Hg99DaUVCekms1xkymLBUCSzqPL44KVdz3cxVGYBl/Om7mBwENEQ9BOUI6vGq+CZ7aaTYrYfEUokgvhGUgku0iLjxpHrIH04TH4XwpDXRg/iLwdQZO3d+xq7Q4XTBLOEyHVdzn5uDGP+cNoW9NbM="
|
||||
- secure: "L3vKi+0gahSm8DF2GGp98FPhuWtUlqRRpCXjAUsSVNCPtru01tI4i6Kls7yqq2L+31FtkyWqBIlm1S1OZw8uiPyis3eUDqMRgASs4tOx/q2Xj2TEK8p+TKK+d3A8mct/y0e806GwdH5JIIppGSPOknPtxT92jZMrv0PnGnPAJSQ="
|
||||
- secure: "fZzEs4GUtK494s63as9K72kmw0taicfouk2NDym58wHqS88UeRVjvrAkwoIGLJS6rCrh/4NkKhxPkd6JNVRVHy3KH8j2FYoIwtLStEC7YZfT25gi8EiN+O6MrTVre1WA9RT52v5gQ+a2v2YPUU6fBJAy6Xgy372PzoQrXF4iYOA="
|
||||
- secure: "fNSoCKmJQUJJn4rFxsX0YXHIEtF3JCIixBkM8sCmuzOxjUPFLEjD/5D4x/t+FJfGwb1PR4194L3Tys7AK4IrpIDDXBO8vF3PYK1/evoPLPgj4IkPOReoX2zDUhxsvnEVlF3pGMK6erB6QZoDFCYD6OvqeQUxDDDuEvG8UEvNUgc="
|
||||
- secure: "apJEmAnp5Ome0UJk+UEsdlVNBOX4bXE9FjBp6yYVrSeAEASFZTZbnIQXP9N8XwFc+TBa5aBlV9s7GZaieVW1/uNZg9njGUsbxPLtqpyHqJTDBgw3edcs7V12jGl+quRJoYVOtbyMQyr5VwCPzV6MmaLOoEtJM75yoSUoerkyNiI="
|
||||
- secure: "AnXGOWlfhnxEuwqfnir411x/Z2Kvd/R37F8Jcv60+3dugCTLsOL/9i7rY5mwwm2ZFx4uwbCDXEC+UlW/vUhLhvdh8sCYocpghxY+WQye1cib+voqkP6Tgi1AtZL2CxBTJ2Kvyr+kNGTl0TvQC/uv3qI/D+ePijn89KFt9Z2NQEk="
|
||||
- secure: "KPpkgyXr1mpbNOtxn0NAH2iS0NSy/LC6/DBoR9PBmK80LmHqhQkcB+OAwHy5q4RvRpeNIm2zg49OvV7RgzXQD3NXIy7Eik3uM6IzrcHXlDO6zPye/EAMYt/C0tJylR6ESDfp1+pEI0VyFz6pjFFs7FAX5m9UinaEJns7vucb8SA="
|
||||
- secure: "Hf1TNzMMPw7msFCttHoF0V2wOFQERbGwYsZSMUac8njBXDjbsP+S/iYNkqoqJIfBjknXbn1U0RDfiDwvs/71lhV0FEoF2zPbOWitO7+ZeqpNcP2oMqnPBLCuCldKWxbsjKLwE5Qgd9KflPh49ZlnHe/cZZdzeDCIpAmHk+Ey/4U="
|
||||
- secure: "cG7qndC1YAHa05QSLD8CzAZJOyJsHj4+I8OKvv+nfKFO/pQVZzKfF84v0ZVxpqdFNRRUwdH4n7zYCNAaMSoeSQmk++jyf+w8cu+x1MZ9HcnfqduuyirZR5iehmlIy1v/c1CsxAQeovDMulnFJOXGf7q7tUqB3rw/WlZZHn6Fpfc="
|
||||
- secure: "NHym8MhLToBE5dlldCKTBn8NuLQg9jhjdB/9Gnn0h5j0G3x3O9yx3XbBtVSKNdvtqfGog6NG6XT2UhCYGtv59lTcWVR5tPulYkJV1vqeHfY21QeDYIESr/JOZaAIZ0RQaT/jWnoIghQNe38VMozWdwZ3ulKQ2HnzFagTbftfF5A="
|
||||
- secure: "mClAXQOm9gc7UXuXpyqfNWp7JJU4n6n3pd792VK8K8ioXKVSySZLbJOFul5KY8ZLePCvdliZ0yfKqyBR7XqbzPFwH/0R3pppaI+T/0mZRi5SqcJ9KnJdf7jkTLsQI73wU25YC/T6ZHodEfANYTaP06Ex7QnY/djWsTvAH3Ga2dA="
|
||||
- secure: "BdYq/BztHLp4TGExfjAxRW9Qtnpi7aizY6fyQNqOBorF6aYKNLOaaN8i7bURL7I5B+WT2vR/NFDv8Ehz096HFjnDZ8vVFn4tQQgGlxf+BcYrBOeA+AIxA9XR/yp9v6ljONasD7PQ8uDJoyUy9FOimet6T5GAOTy8LO8SRQDvxoY="
|
||||
- secure: "iHb3IwbyrCKW884oVvckz7BR8F9YhLQXkEUvufc/5oKtsn/zMflHQ1+OV04q4j7B5hdu9/ur8T0q80YysJL8btHT0vnR7kx/uDx/S8tqXlMMb0Tr1JUGLFIHBZWRPUCayXTcBk06BrYRA1wB8cLQnLxqI4OfgMAN+rOv60CGR8k="
|
||||
- secure: "XzK4KXCtcu5B1Flyiq9jl7hxnsUXXTYcmSq7bmIM4g8dsRz6EdDWrSBJUIstKCLckmoeQcfyCyXYjy2dvGgv7FX+Hu1nNGCZGy/rOIaciiinHf9mQZVTTwUZv1gGPZo2jdue15NvvCLwJt/N6SSZYor8fRyPyuVnK8/PBj4jcao="
|
||||
- secure: "YFEbESe4qlFKXsgYgST3Z9NRMyNEj2oVYEzgcB+dWsVnfDufhtjUhQ+AGw+vsbYg2g2TIQzyVSWMG+mQo41SX4bLFH0Rwgial4ZnpWP7NHrkCgjIeeZRP/f81KIdGnCyabatOkJPQQ5qS0cZVRpQaXq8Zsxk+aDmYc2kZwWA3xc="
|
||||
- secure: "Tv1OUgeQDBPwnL5GsEBiKjr1HdMrvsedk5I6ckbpBa6S1dKCzirOJRRHr9ZP4/TiZYEBd84nQZ5fKTIrCxU18CQzrs/gsS2hHyN+Nr8cpWpa6IovKOpMKxCYryLJFpX69cihcOVzp1xQq+a7sZq/yhZJmKaUBFlZchyPtJ1ysmg="
|
||||
- secure: "iYz1GPvgcYpue6CKaW/O8iEolwC0UFztsZWzJZyrpZGrsw0fZbqpcn9ACEc+LQKYmvTo3hdBj9ewZB4+Bj4VMVIjgTlYsP0rYESsPd7njgpll+WfslRd5WNJLioUiPeb29yC4woiGa+/YHy2ACJI+ix7F6NyHk+2ri0MCOa4BnQ="
|
||||
- secure: "Xwco3s7JM7hsAuDrAKuaYBjMccNTKWCXsoE48kQsKGlBM/iQ849nGTmImIKvdh0tZG5LDXgc04rbldhnpvMfWmty0hrQZuwjPaHBqHQ7zWXeNl3/CpAIGTBsefO7hTRoT2+xw1I6f4n8a5U7FICaGmWkR/MvykPOJyR+ms/hOQM="
|
||||
- secure: "lNW2JDlel5MC9kwRu9lvNPWdlkbhAmkLo/YovVsrKyXPZfETWZO6IU2dDfKQvetIB2zQQnplbozdyiRBMywBnAk27FqLRAjbBqlKTC1jPlU4W29SBCMf+kJlVcQHvh0feeJChBZrVb2GQIAiHEkloDFX03E7RhOPAE5GqzvYow0="
|
||||
- secure: "ZCfE5sS+70M4MVDOxVMlYcge7LewYbHIm0DE7QFfkwJ9sobaVr+uQMWe+9bA3DhxhdvQQ9p6lGE36ST+WYWopO7SHW6Ly+WvH1kM1nOZfY4w5R+BlAJ9QPcudnPUuFMOBXM0Wm8XccPuld2D5Jg7SalmS1F6mdArXsuL55CXxco="
|
||||
- secure: "G4MDFYa3BbzqUGMfrABOjEjIa/pXHR8/jgOIQxY3FK2/0bYr//2YU/bw1gJBPQc8Ef243LzhTKvfFhntTecSfH2pS0Ezm2HWwtaF+lBg/A5bYCJX5Tek6HAOv1+aajTRZAjjj4X28T0NCqJI6u1WvbHwYFmW8wsfZtYZKB8JFuo="
|
||||
- secure: "Py01+IBxGWKG7lyV10bZPYnqvLxNNBE+L6i1hvvvQmx078LfKtVr3tdDSZJVjf3H+gMXW0qnEhBYWJlzKPO5zCMhX314s43yxW3a5N+QZ74ucCO0Yvc4JXA8y7+g4lgsihJmzLSGQZziT+xnn0Q4iNpB8G0kXcl7zVT/ZsLFooQ="
|
||||
- secure: "lkkLCzuHhR1Z3zzV/8me/PbzMConA8kdxUQ6mQb4VZE8h3wsRDh9P8yKciluV/ZVgqZtLG8VbVnLHgVzzu2zDTqf1t/Gsb5u8Rq5w/sTZyqMpB9qpRjHmq+uPds+ScvAplyoPH4oskXS8xQ8G1ykJwPBbRETyZzAU2/JoOgWiOs="
|
||||
- secure: "KQlczojVt3jfMtsnl1GFiKsCxkPOaIr95MxopGYqqOVxzRDeNvtJcA/xQU1ouibJlx9B/EHZx0K+/DIk6dyr+irAVzgPGdT5pRxmjSREONPDaGEj9f4D6GWS3AtUJW2AqTMdtI3+d6o7oaYFGGXTCeW+qFMcsxEpn3eT1HMJs1A="
|
||||
- secure: "XeqXuqqHPAW6/5WukY8y3n1PmaP7ASuNvMTd/Xv3sXzcci11ZKWNEOQDxZeRUwuEot4v2WG+m4HuvIqGWbz6mi8+4OaWUynLRitlGWj7JBu1igN9awmOw+HOcM32v2UcxUdsUSB5AdEOs7hafjodbshxrWQbo05ruk6Au4+jrd4="
|
||||
- secure: "Ej8RRGUT95llMPDUtbx/lF7D9bKGxTCGdKZbTKFdIPjUzTJgE0pm89vIxKvq7y//oMCposX5DjcVolF+dS2Ya2031MTUto3mUwFq+sx3t2knWt812mQ6p2Ow/l6/uOlr2FHxUJKOxPeWqLRB6NYd9YnUiC3OJNlERr8nyHkCx4c="
|
||||
- secure: "JsOTX5JsRAY3zyKa/5yYkd48Nejt9CAEraXVpN1NDW25jJmsOynyW5d2WYazJ1H0x1oR6Fhc4gstNxaj1MNh/gVM9O3UM2tyFnSxDY6fZnEGWaf17ln4dqi3KHXWU7h2Gdg1ah19NS0nWytooW6VcEXmk+cYSheTqyfc5gK7Sdo="
|
||||
- secure: "mMc9MyopIjvzpDg3eN6owSmr2PI58JiPnlLhMNvOWW9axUzup5tthfqM+tvR/AqdLQSSMUC9JXwwQK0d543Q4YyoQ0jwVY2RT56VdEywxD5+yWRfXD+ANlJhdQWmlPVc3KsavKYmfQPBLbwe0nyhtQTWGeAgKTYvYT+k1/PD4rg="
|
||||
- secure: "X7KDSiSOR3XcePJgTXNzwE1wU285yFsxB7crMLskD08wU8xdRqS8NL+1++/Lju6pypOkospI2AYH1JAJ7JK3Sx5QYM4MxgRJcrMHiTMirN3cm3KzkWUuv3iEZNJ7q6ANi5oFfHh3k0D4JhCEnA1ICTDPdq+r9+mOvgkrly8V0Dw="
|
||||
# scan.coverity token
|
||||
- secure: "CGHkiv3Aki3HF2xiNPbPEqB66Xcz8HrdhSpFYjQFqHsrseIXOmZGLaIdnkwCqoIHUMFVtqGVGSxRhhrSOrAq+uOgc6Wyst8u6ThN3HhRbvQgF2v7XvtGsTiAObxLvj5V91gqQwHxWPHf948Cm12QQgmEd+dbhyjPWsmVMDb4gNk="
|
||||
|
||||
addons:
|
||||
coverity_scan:
|
||||
project:
|
||||
name: "openscad/openscad"
|
||||
description: "The Programmers Solid 3D CAD Modeller"
|
||||
notification_email: dev@openscad.org
|
||||
build_command_prepend: qmake
|
||||
build_command: make
|
||||
branch_pattern: coverity_scan
|
||||
|
|
|
|||
15
Info.plist
15
Info.plist
|
|
@ -18,6 +18,11 @@
|
|||
<string>@SHORT_VERSION@</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>@SHORT_VERSION@</string>
|
||||
<key>LSEnvironment</key>
|
||||
<dict>
|
||||
<key>GUI_LAUNCHED</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
|
@ -77,5 +82,15 @@
|
|||
<string>OpenSCAD.sdef</string>
|
||||
<key>SUPublicDSAKeyFile</key>
|
||||
<string>dsa_pub.pem</string>
|
||||
<key>SUFeedURL</key>
|
||||
<string>http://files.openscad.org/appcast.xml</string>
|
||||
<key>NSExceptionDomains</key>
|
||||
<dict>
|
||||
<key>files.openscad.org</key>
|
||||
<dict>
|
||||
<key>NSExceptionAllowsInsecureHTTPLoads</key><true/>
|
||||
<key>NSExceptionRequiresForwardSecrecy</key><false/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
95
README.md
95
README.md
|
|
@ -1,4 +1,6 @@
|
|||

|
||||
[](https://travis-ci.org/openscad/openscad)
|
||||
[](https://scan.coverity.com/projects/2510)
|
||||
[](https://bitdeli.com/free "Bitdeli Badge")
|
||||
|
||||
# What is OpenSCAD?
|
||||
[](https://flattr.com/submit/auto?user_id=openscad&url=http://openscad.org&title=OpenSCAD&language=&tags=github&category=software)
|
||||
|
|
@ -86,20 +88,23 @@ libraries from aptitude. If you're using Mac, or an older Linux/BSD, there
|
|||
are build scripts that download and compile the libraries from source.
|
||||
Follow the instructions for the platform you're compiling on below.
|
||||
|
||||
* [Qt4 (4.4 - 4.8)](http://www.qt.nokia.com/)
|
||||
* [CGAL (3.6 - 4.1)](http://www.cgal.org/)
|
||||
* [Qt4 (4.4 - 5.4)](http://www.qt.nokia.com/)
|
||||
* [QScintilla2 (2.7 - 2.8)](http://www.riverbankcomputing.co.uk/software/qscintilla/)
|
||||
* [CGAL (3.6 - 4.5)](http://www.cgal.org/)
|
||||
* [GMP (5.x)](http://www.gmplib.org/)
|
||||
* [cmake (2.8, required by CGAL and the test framework)](http://www.cmake.org/)
|
||||
* [MPFR (3.x)](http://www.mpfr.org/)
|
||||
* [boost (1.35 - 1.53)](http://www.boost.org/)
|
||||
* [OpenCSG (1.3.2)](http://www.opencsg.org/)
|
||||
* [cmake (2.8 - 3.0, required by CGAL and the test framework)](http://www.cmake.org/)
|
||||
* [boost (1.35 - 1.57)](http://www.boost.org/)
|
||||
* [OpenCSG (1.3.2 ->)](http://www.opencsg.org/)
|
||||
* [GLEW (1.5.4 ->)](http://glew.sourceforge.net/)
|
||||
* [Eigen (3.0 - 3.2)](http://eigen.tuxfamily.org/)
|
||||
* [glib2 (2.2.0)](https://developer.gnome.org/glib/)
|
||||
* [GCC C++ Compiler (4.2 ->)](http://gcc.gnu.org/)
|
||||
* [Bison (2.4)](http://www.gnu.org/software/bison/)
|
||||
* [Flex (2.5.35)](http://flex.sourceforge.net/)
|
||||
* [pkg-config (0.26)](http://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
* [Eigen (3.x)](http://eigen.tuxfamily.org/)
|
||||
* [glib2 (2.x)](https://developer.gnome.org/glib/)
|
||||
* [fontconfig (2.10 -> )](http://fontconfig.org/)
|
||||
* [freetype2 (2.4 -> )](http://freetype.org/)
|
||||
* [harfbuzz (0.9.19 -> )](http://harfbuzz.org/)
|
||||
* [Bison (2.4 -> )](http://www.gnu.org/software/bison/)
|
||||
* [Flex (2.5.35 -> )](http://flex.sourceforge.net/)
|
||||
* [pkg-config (0.26 -> )](http://www.freedesktop.org/wiki/Software/pkg-config/)
|
||||
|
||||
### Getting the source code
|
||||
|
||||
|
|
@ -117,26 +122,41 @@ To pull the MCAD library (http://reprap.org/wiki/MCAD), do the following:
|
|||
### Building for Mac OS X
|
||||
|
||||
Prerequisites:
|
||||
* XCode, including XCode command-line tools (install from XCode Preferences).
|
||||
* [CMake](http://cmake.org) and [pkg-config](http://www.freedesktop.org/wiki/Software/pkg-config/),
|
||||
both can be installed manually or through MacPorts/homebrew.
|
||||
|
||||
Then after you've cloned this git repository, run the script that sets up the
|
||||
environment variables.
|
||||
* XCode, including XCode command-line tools.
|
||||
|
||||
source setenv_mac-gcc.sh
|
||||
Install Dependencies:
|
||||
|
||||
(or setenv_mac-clang.sh if you want to use the clang compiler instead of gcc).
|
||||
Then run the script to compile all the prerequisite libraries above:
|
||||
Run the script that sets up the environment variables:
|
||||
```source setenv_mac-qt5.sh```
|
||||
|
||||
./scripts/macosx-build-dependencies.sh
|
||||
Then run the script to compile all the dependencies:
|
||||
```./scripts/macosx-build-dependencies.sh```
|
||||
|
||||
You can also install the prerequisites using
|
||||
[MacPorts](http://www.macports.org). Unfortunately,
|
||||
[brew](http://mxcl.github.com/homebrew/) doesn't yet support CGAL and
|
||||
OpenCSG.
|
||||
|
||||
After that, follow the Compilation instructions below.
|
||||
After building dependencies, follow the instructions in the *Compilation* section.
|
||||
|
||||
For the adventurous, it might be possible to build OpenSCAD using _MacPorts_ or _Homebrew_. The main challenge is that both these systems have partially broken libraries, but that tends to change from time to time.
|
||||
|
||||
1. **MacPorts** (assumes [MacPorts](http://macports.org) is already installed)
|
||||
|
||||
NB! MacPorts currently doesn't support Qt5 very well, so using Qt4
|
||||
is the only working option at the moment. However, MacPorts' Qt4
|
||||
has a broken ```moc``` command, causing OpenSCAD compilation to
|
||||
break. This may be fixed in MacPorts by the time you read this.
|
||||
|
||||
```sudo port install opencsg qscintilla boost cgal pkgconfig eigen3 harfbuzz fontconfig```
|
||||
|
||||
1. **Homebrew** (assumes [Homebrew](http://brew.sh)) is already installed)
|
||||
|
||||
NB! Homebrew's ```qscintilla2``` component doesn't support Qt5, so using Qt4 is currently necessary.
|
||||
However, Homebrew's Qt4 has a broken ```moc``` command, causing OpenSCAD compilation to
|
||||
break. This may be fixed in Homebrew by the time you read this.
|
||||
NB! Homebrew's ```harfbuzz``` package requires X11, so you may have to install an X11 server.
|
||||
NB! Homebrew doesnt have an OpenCSG package
|
||||
|
||||
```brew install cgal qscintilla2 eigen harfbuzz```
|
||||
|
||||
|
||||
### Building for Linux/BSD
|
||||
|
||||
|
|
@ -146,7 +166,7 @@ the dependency packages listed above using your system's package
|
|||
manager. A convenience script is provided that can help with this
|
||||
process on some systems:
|
||||
|
||||
./scripts/uni-get-dependencies.sh
|
||||
sudo ./scripts/uni-get-dependencies.sh
|
||||
|
||||
After installing dependencies, check their versions. You can run this
|
||||
script to help you:
|
||||
|
|
@ -170,17 +190,9 @@ Then run the script to compile all the prerequisite libraries above:
|
|||
|
||||
./scripts/uni-build-dependencies.sh
|
||||
|
||||
This may take an hour or more, depending on your network and system. It
|
||||
is recommended to have at least 1 gigabyte of free disk space. As a
|
||||
special timesaver if you are only missing CGAL and OpenCSG, you can do
|
||||
this instead:
|
||||
|
||||
./scripts/uni-build-dependencies.sh opencsg
|
||||
./scripts/uni-build-dependencies.sh cgal
|
||||
|
||||
Note that huge dependencies like gcc or qt are not included here, only
|
||||
the smaller ones (boost, CGAL, opencsg, etc). After the build, again
|
||||
check dependencies.
|
||||
Note that huge dependencies like gcc, qt, or glib2 are not included
|
||||
here, only the smaller ones (boost, CGAL, opencsg, etc). After the
|
||||
build, again check dependencies.
|
||||
|
||||
./scripts/check-dependencies.sh
|
||||
|
||||
|
|
@ -212,15 +224,16 @@ complete, build OpenSCAD and package it to an installer:
|
|||
If you wish you can only build the openscad.exe binary:
|
||||
|
||||
cd mingw32
|
||||
qmake .. CONFIG+=mingw-cross-env
|
||||
qmake ../openscad.pro CONFIG+=mingw-cross-env
|
||||
make
|
||||
|
||||
For a 64-bit Windows cross-build, replace 32 with 64 in the above instructions.
|
||||
|
||||
### Compilation
|
||||
|
||||
First, run 'qmake' from Qt4 to generate a Makefile. On some systems you need to
|
||||
run 'qmake4', 'qmake-qt4' or something alike to run the qt4 version of the tool.
|
||||
First, run 'qmake openscad.pro' from Qt4 to generate a Makefile.
|
||||
|
||||
On some systems, depending on which version(s) of Qt you have installed, you may need to specify which version you want to use, e.g. by running 'qmake4', 'qmake-qt4' or something alike.
|
||||
|
||||
Then run make. Finally you might run 'make install' as root or simply copy the
|
||||
'openscad' binary (OpenSCAD.app on Mac OS X) to the bin directory of your choice.
|
||||
|
|
|
|||
484
RELEASE_NOTES
484
RELEASE_NOTES
|
|
@ -1,247 +1,325 @@
|
|||
OpenSCAD YYYY.MM
|
||||
================
|
||||
|
||||
Language Features:
|
||||
o Added diameter argument: circle(d), cylinder(d, d1, d2) and sphere(d)
|
||||
o Added parent_module() and $parent_modules
|
||||
o Added children() as a replacement for child()
|
||||
o FIXME: Unicode support
|
||||
o FIXME: Ranges with negative steps
|
||||
o FIXME: Experimental concat()
|
||||
# OpenSCAD 2015.03
|
||||
|
||||
Program Features:
|
||||
o Added --info parameter to the cmd-line for system/library info
|
||||
o Added --enable parameter to enable experimental features
|
||||
o Added Reset View in GUI
|
||||
o Added Feature tab in Preferences
|
||||
## 2015.03-3
|
||||
|
||||
Bugfixes:
|
||||
o polyhedron() is now much more robust handling almost planar polygons
|
||||
o Automatic reloads of large designs are more robust
|
||||
o Boolean logic in if() statements are now correctly short-circuited
|
||||
o rands() with zero range caused an infinite loop
|
||||
o resize(, auto=true) didn't work when shrinking objects
|
||||
o The $children variable sometimes misbehaved due to dynamic scoping
|
||||
o The --camera cmd-line option behaved differently then the corresponding GUI function
|
||||
o PNG export now doesn't leak transparency settings into the target image
|
||||
o Improved performance of OpenCSG (F5) compilation in some cases
|
||||
o Some editor misbehaviors were fixed
|
||||
o Stability fixes of CGAL-related crashes
|
||||
**OS X only: Auto-update vulnerability fix**
|
||||
|
||||
Deprecations:
|
||||
o child() is no longer supported. Use children() instead.
|
||||
o polyhedron(triangles=[...]): Use polyhedron(faces=[...]) instead.
|
||||
## 2015.03-2
|
||||
|
||||
Misc:
|
||||
o We now use CGAL's EPEC kernel
|
||||
o Additional output formats: .ast, .term, null (these are most useful for testing)
|
||||
o Test framework now shares more code with the GUI app
|
||||
o Test report can now be automatically uploaded to dinkypage.com
|
||||
o Better compatibility with BSD systems
|
||||
**Bugfixes**
|
||||
* \#1483 - Fix Z-fighting in Ortho view
|
||||
* \#1479 - No check for infinite $fn
|
||||
* \#1472 - "nan" in list comprehension causes crash
|
||||
* \#452 - rands() fails when the seed is a floating point number
|
||||
* \#1407 - Recursive module crash
|
||||
* \#1425 - Animate Filename Generation - Duplicate/Missing Filenames
|
||||
* \#1420 - expression-evaluation-tests fails on arm64
|
||||
* \#1410 - Crash when a polygon contains NaN
|
||||
* \#1378 - Linear extrude plus infinite twist causes crash instead of just an error
|
||||
* \#1358 - Add more detailed installer information including version number
|
||||
* \#1356 - Crash when multiplying matrices with undefined elements
|
||||
* \#1350 - Saving file when HD is full ends up in data loss
|
||||
* \#1342 - Syntax Highlighting Does Not Work on Linux Mint 17.1
|
||||
* \#1337 - Simple detection of script and direction based on given text
|
||||
* \#1325 - Crash when polygons with > 3 indices turn out to be degenerate
|
||||
* \#1329 - version() returned ```[0,0,0]```
|
||||
|
||||
OpenSCAD 2013.06
|
||||
================
|
||||
## 2015.03-1
|
||||
|
||||
Language Features:
|
||||
o linear_extrude now takes a scale parameter:
|
||||
**Bugfixes**
|
||||
* \#1203 - Linux: Missing icons on Xfce
|
||||
* \#1258 - Occasional crash when exporting STL
|
||||
* \#1260 - Minimal window width too large
|
||||
* \#1264 - Replace All sometimes caused a hang
|
||||
* \#1274 - Fixed some preview bugs on Intel GPUs (OpenCSG 1.4.0)
|
||||
* \#1276 - Module recursion sometimes caused a crash
|
||||
* \#1277 - Automatic reload sometimes messed up camera position
|
||||
* \#1284 - Animation flicker eliminated
|
||||
* \#1294 - Support reproducible builds
|
||||
* \#1317 - Normals vectors in STL were sometimes 0 0 0
|
||||
|
||||
## 2015.03
|
||||
|
||||
**Language Features:**
|
||||
* Added text() module for 2D text
|
||||
* Added offset() module for 2D offsets
|
||||
* Added list comprehensions and let()
|
||||
* Added concat() function
|
||||
* Added chr() function
|
||||
* surface() can now take PNG images as input
|
||||
* min() and max() can now take a vector argument
|
||||
* 2D minkowski can now handle polygons with holes
|
||||
* Variables can now be assigned in local blocks without using assign()
|
||||
|
||||
**Program Features:**
|
||||
* Added Toolbar icons
|
||||
* New code editor based on QScintilla
|
||||
* Added Splash screen
|
||||
* Added SVG export
|
||||
* Added AMF export
|
||||
* Added --viewall and --autocenter cmd-line parameters
|
||||
* GUI is now translated into German, Czech, Spanish, French and Russian
|
||||
* MDI (Multiple Document Interface) is now available on all platforms
|
||||
* Color schemes for viewer and editor can be user-edited using JSON files
|
||||
* GUI components are now dockable
|
||||
* Added Tickmarks on axes
|
||||
|
||||
**Bugfixes/improvements:**
|
||||
* Performance improvement: 2D (clipper), preview, hull, minkowski, surface
|
||||
* Performance improvement: Reduce duplicate evaluation of identical expressions
|
||||
* Better recursion behavior
|
||||
* STL export and import is now more robust
|
||||
* Internal cavities are better supported
|
||||
* New examples
|
||||
* Windows cmd-line behaves better
|
||||
* Better mirror() and scale() behavior when using negative factors
|
||||
|
||||
**Deprecations:**
|
||||
* polyhedron() now takes a faces= argument rather than triangles=
|
||||
* assign() is no longer needed. Local variables can be created in any scope
|
||||
# OpenSCAD 2014.03
|
||||
|
||||
**Language Features:**
|
||||
* Added diameter argument: circle(d), cylinder(d, d1, d2) and sphere(d)
|
||||
* Added parent_module() and $parent_modules
|
||||
* Added children() as a replacement for child()
|
||||
* Unicode strings (using UTF-8) are now correctly handled
|
||||
* Ranges can have a negative step value
|
||||
* Added norm() and cross() functions
|
||||
|
||||
**Program Features:**
|
||||
* Cmd-line: --info parameter prints system/library info
|
||||
* Cmd-line: --csglimit parameter to change CSG rendering limit
|
||||
* Cmd-line: Better handling of cmd-line arguments under Windows
|
||||
* GUI: Added Reset View
|
||||
* GUI: Added Search&Replace in editor
|
||||
* GUI: Syntax highlighting now has a dark background theme
|
||||
* GUI: We now create a backup file before rendering to allow for recovery if OpenSCAD crashes/freezes
|
||||
* GUI: Accessibility features enabled (e.g. screenreading)
|
||||
|
||||
**Bugfixes/improvements:**
|
||||
* Reading empty STL files sometimes caused a crash
|
||||
* OPENSCADPATH now uses semicolon as path separator under Windows
|
||||
* polyhedron() is now much more robust handling almost planar polygons
|
||||
* Automatic reloads of large designs are more robust
|
||||
* Boolean logic in if() statements are now correctly short-circuited
|
||||
* rands() with zero range caused an infinite loop
|
||||
* resize(, auto=true) didn't work when shrinking objects
|
||||
* The $children variable sometimes misbehaved due to dynamic scoping
|
||||
* The --camera cmd-line option behaved differently then the corresponding GUI function
|
||||
* PNG export now doesn't leak transparency settings into the target image
|
||||
* Improved performance of 3D hull() operations
|
||||
* Some editor misbehaviors were fixed
|
||||
* Stability fixes of CGAL-related crashes
|
||||
* Windows cmd-line can now handle spaces in filenames
|
||||
* Default CSG rendering limit is now 100K elements
|
||||
* Fixed a crash reading DXF files using comma as decimal separator
|
||||
* Fixed a crash running the cmd-line without a HOME env. variable
|
||||
* Intersecting something with nothing now correctly results in an empty object
|
||||
|
||||
**Deprecations:**
|
||||
* child() is no longer supported. Use children() instead.
|
||||
* polyhedron(triangles=[...]): Use polyhedron(faces=[...]) instead.
|
||||
|
||||
**Misc:**
|
||||
* Test framework now shares more code with the GUI app
|
||||
* Test report can now be automatically uploaded to dinkypage.com
|
||||
* Better compatibility with BSD systems
|
||||
* Qt5 support
|
||||
|
||||
# OpenSCAD 2013.06
|
||||
|
||||
**Language Features:**
|
||||
* linear_extrude now takes a scale parameter:
|
||||
linear_extrude(height=a, slices=b, twist=c, scale=[x,y])
|
||||
o Recursive use of modules is now supported (including cascading child() operations):
|
||||
* Recursive use of modules is now supported (including cascading child() operations):
|
||||
https://github.com/openscad/openscad/blob/master/examples/example024.scad
|
||||
o Parameter list values can now depend on earlier values, e.g. for (i=[0:2], j=[0:i]) ..
|
||||
o value assignments in parameters can now depend on already declared parameters
|
||||
o Added resize() module:
|
||||
* Parameter list values can now depend on earlier values, e.g. for (i=[0:2], j=[0:i]) ..
|
||||
* value assignments in parameters can now depend on already declared parameters
|
||||
* Added resize() module:
|
||||
http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Transformations#resize
|
||||
|
||||
Program Features:
|
||||
o Added basic syntax highlighting in the editor
|
||||
o There is now a built-in library path in user-space:
|
||||
**Program Features:**
|
||||
* Added basic syntax highlighting in the editor
|
||||
* There is now a built-in library path in user-space:
|
||||
http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries#Library_Locations
|
||||
o Commandline output to PNG, with various camera and rendering settings.
|
||||
* Commandline output to PNG, with various camera and rendering settings.
|
||||
Run openscad -h to see usage info or see the OpenSCAD wiki user manual.
|
||||
o Attempting to open dxf, off or stl files in the GUI will now create an import statement.
|
||||
o The preview operator (%) will now preserve any manually set color
|
||||
o The highlight operator (#) will now color the object in transparent red
|
||||
o Mac: Added document icon
|
||||
o Mac: Added auto-update check
|
||||
o Windows: Better cmd-line support using the openscad.com executable
|
||||
* Attempting to open dxf, off or stl files in the GUI will now create an import statement.
|
||||
* The preview operator (%) will now preserve any manually set color
|
||||
* The highlight operator (#) will now color the object in transparent red
|
||||
* Mac: Added document icon
|
||||
* Mac: Added auto-update check
|
||||
* Windows: Better cmd-line support using the openscad.com executable
|
||||
|
||||
Bugfixes:
|
||||
o Importing files is now always relative to the importing script, also for libraries
|
||||
o We didn't always print a warning when CSG normalization created too many elements
|
||||
o Binary STLs can now be read on big endian architectures
|
||||
o Some binary STLs couldn't be read
|
||||
o Fixed some issues related to ARM builds
|
||||
o CGAL triangulation more lenient- enables partial rendering of 'bad' DXF data
|
||||
o The Automatic Reload feature is now more robust
|
||||
o If a file couldn't be saved it no longer fails silently
|
||||
o Fixed a number of crashes related to CGAL and OpenCSG rendering or complex models
|
||||
o The lookup() function had bad boundary condition behavior
|
||||
o The surface() module failed when the .dat file lacked a trailing newline
|
||||
o The hull() module could crash if any of the children were empty objects
|
||||
o Some problems using unicode filenames have been fixed
|
||||
**Bugfixes:**
|
||||
* Importing files is now always relative to the importing script, also for libraries
|
||||
* We didn't always print a warning when CSG normalization created too many elements
|
||||
* Binary STLs can now be read on big endian architectures
|
||||
* Some binary STLs couldn't be read
|
||||
* Fixed some issues related to ARM builds
|
||||
* CGAL triangulation more lenient- enables partial rendering of 'bad' DXF data
|
||||
* The Automatic Reload feature is now more robust
|
||||
* If a file couldn't be saved it no longer fails silently
|
||||
* Fixed a number of crashes related to CGAL and OpenCSG rendering or complex models
|
||||
* The lookup() function had bad boundary condition behavior
|
||||
* The surface() module failed when the .dat file lacked a trailing newline
|
||||
* The hull() module could crash if any of the children were empty objects
|
||||
* Some problems using unicode filenames have been fixed
|
||||
|
||||
Misc:
|
||||
o Build scripts have been further improved
|
||||
o Regression test now creates single monolithic .html file for easier uploading
|
||||
o Regression test auto-starts & stops Xvfb / Xvnc if on headless unix machine
|
||||
o The backend is finally independent of Qt
|
||||
o Windows: We now have a 64-bit version
|
||||
**Misc:**
|
||||
* Build scripts have been further improved
|
||||
* Regression test now creates single monolithic .html file for easier uploading
|
||||
* Regression test auto-starts & stops Xvfb / Xvnc if on headless unix machine
|
||||
* The backend is finally independent of Qt
|
||||
* Windows: We now have a 64-bit version
|
||||
|
||||
Known Bugs:
|
||||
o Linux: command-line png rendering on Gallium is flaky.
|
||||
**Known Bugs:**
|
||||
* Linux: command-line png rendering on Gallium is flaky.
|
||||
Workaround: use CGAL --render or hardware rendering.
|
||||
|
||||
OpenSCAD 2013.01
|
||||
================
|
||||
# OpenSCAD 2013.01
|
||||
|
||||
Features:
|
||||
o Snappier GUI while performing CGAL computations (computations running in separate thread)
|
||||
o The size of the misc. caches can now be adjusted from Preferences
|
||||
o The limit for when to disable OpenCSG can now be adjusted from Preferences
|
||||
o Added Dot product operator: vec * vec
|
||||
o Added Matrix multiplication operator: vec * mat, mat * mat
|
||||
o Added search() function
|
||||
o Dependencies are now tracked - any changes in uses/included files will be detected and cause a recompile
|
||||
o The OPENSCADPATH environment variable is now implemented will have precedence when searching for libraries
|
||||
o .csg files can now be opened from the GUI
|
||||
o linear_extrude() will now assume that the first parameter means 'height' if it's a number
|
||||
**Features:**
|
||||
* Snappier GUI while performing CGAL computations (computations running in separate thread)
|
||||
* The size of the misc. caches can now be adjusted from Preferences
|
||||
* The limit for when to disable OpenCSG can now be adjusted from Preferences
|
||||
* Added Dot product operator: vec * vec
|
||||
* Added Matrix multiplication operator: vec * mat, mat * mat
|
||||
* Added search() function
|
||||
* Dependencies are now tracked - any changes in uses/included files will be detected and cause a recompile
|
||||
* The OPENSCADPATH environment variable is now implemented will have precedence when searching for libraries
|
||||
* .csg files can now be opened from the GUI
|
||||
* linear_extrude() will now assume that the first parameter means 'height' if it's a number
|
||||
|
||||
Bugfixes:
|
||||
o use'ing an non-existing file sometimes crashed under Windows
|
||||
o Better font handling: Ensure a monospace font is chosen as default
|
||||
o Division by zero caused hang in some cases (e.g. sin(1/0))
|
||||
o Larger minkowski operations sometimes caused a crash after a CGAL assert was thrown
|
||||
o Fixed crashes in shared_ptr.hpp (or similar places) due bugs in cache management and CSG normalization
|
||||
o scale() with a scale factor of zero could cause a crash
|
||||
o Fixed a number of issues related to use/include
|
||||
o Providing an unknown parameter on the cmd-line caused a crash
|
||||
o cmd-line overrides using -D now also work for USEd modules
|
||||
o Modifier characters can now be used in front of if statements
|
||||
o rotate() with a vector argument with less that 3 elements used uninitialized variables, ending up being non-deterministic.
|
||||
o .csg files will now have relative filenames whenever possible
|
||||
o Don't just ignore geometric nodes having zero volume/area - when doing difference/intersection, they tend to turn negative objects into positive ones.
|
||||
o Always use utf-8 file encoding, also under Windows
|
||||
o A lot of build script fixes
|
||||
o Some other crash bugs fixes
|
||||
**Bugfixes:**
|
||||
* use'ing an non-existing file sometimes crashed under Windows
|
||||
* Better font handling: Ensure a monospace font is chosen as default
|
||||
* Division by zero caused hang in some cases (e.g. sin(1/0))
|
||||
* Larger minkowski operations sometimes caused a crash after a CGAL assert was thrown
|
||||
* Fixed crashes in shared_ptr.hpp (or similar places) due bugs in cache management and CSG normalization
|
||||
* scale() with a scale factor of zero could cause a crash
|
||||
* Fixed a number of issues related to use/include
|
||||
* Providing an unknown parameter on the cmd-line caused a crash
|
||||
* cmd-line overrides using -D now also work for USEd modules
|
||||
* Modifier characters can now be used in front of if statements
|
||||
* rotate() with a vector argument with less that 3 elements used uninitialized variables, ending up being non-deterministic.
|
||||
* .csg files will now have relative filenames whenever possible
|
||||
* Don't just ignore geometric nodes having zero volume/area - when doing difference/intersection, they tend to turn negative objects into positive ones.
|
||||
* Always use utf-8 file encoding, also under Windows
|
||||
* A lot of build script fixes
|
||||
* Some other crash bugs fixes
|
||||
|
||||
Deprecations:
|
||||
o The old include syntax "<filename.scad>" without the include keyword is no
|
||||
**Deprecations:**
|
||||
* The old include syntax "<filename.scad>" without the include keyword is no
|
||||
longer supported and will cause a syntax error.
|
||||
|
||||
OpenSCAD 2011.12
|
||||
================
|
||||
# OpenSCAD 2011.12
|
||||
|
||||
Features:
|
||||
o The MCAD library is now bundled with OpenSCAD
|
||||
o Added len() function. Takes one vector or string parameter and returns its length.
|
||||
o The index operator [] now works on strings
|
||||
o The version() function will return the OpenSCAD version as a vector, e.g. [2011, 09]
|
||||
o The version_num() function will return the OpenSCAD version as a number, e.g. 20110923
|
||||
o hull() Now supports 3D objects
|
||||
o hull() with 2D object can now use for loops and boolean operations as children
|
||||
o New import() statement reads the correct file format based on the filename extension
|
||||
**Features:**
|
||||
* The MCAD library is now bundled with OpenSCAD
|
||||
* Added len() function. Takes one vector or string parameter and returns its length.
|
||||
* The index operator [] now works on strings
|
||||
* The version() function will return the OpenSCAD version as a vector, e.g. [2011, 09]
|
||||
* The version_num() function will return the OpenSCAD version as a number, e.g. 20110923
|
||||
* hull() Now supports 3D objects
|
||||
* hull() with 2D object can now use for loops and boolean operations as children
|
||||
* New import() statement reads the correct file format based on the filename extension
|
||||
(.stl, .dxf and .off is supported)
|
||||
o The color() statement now supports an alpha parameter, e.g. color(c=[1,0,0], alpha=0.4)
|
||||
o The color() statement now supports specifying colors as strings, e.g. color("Red")
|
||||
o The color() statement now overrides colors specified further down in the tree
|
||||
o if()/else() and the ternary operator can now take any value type as parameter. false, 0, empty string and empty vector or illegal value type will evaluate as false, everything else as true.
|
||||
o Strings can now be lexographically compared using the <, <=, >, >= operators
|
||||
o Added PI constant.
|
||||
o Number literals in scientific notation are now accepted by the parser
|
||||
o Added import and export of the OFF file format
|
||||
o Now uses standard shortcuts for save, reload and quit on Linux and Windows. F2/F3 will still work but is deprecated.
|
||||
* The color() statement now supports an alpha parameter, e.g. color(c=[1,0,0], alpha=0.4)
|
||||
* The color() statement now supports specifying colors as strings, e.g. color("Red")
|
||||
* The color() statement now overrides colors specified further down in the tree
|
||||
* if()/else() and the ternary operator can now take any value type as parameter. false, 0, empty string and empty vector or illegal value type will evaluate as false, everything else as true.
|
||||
* Strings can now be lexographically compared using the <, <=, >, >= operators
|
||||
* Added PI constant.
|
||||
* Number literals in scientific notation are now accepted by the parser
|
||||
* Added import and export of the OFF file format
|
||||
* Now uses standard shortcuts for save, reload and quit on Linux and Windows. F2/F3 will still work but is deprecated.
|
||||
|
||||
Bugfixes:
|
||||
o Complex CSG models sometimes took extremely long time to normalize before OpenCSG preview
|
||||
o square() crashed if any of the dimensions were zero
|
||||
o Flush Caches didn't flush cached USE'd modules
|
||||
o STL export should be a bit more robust
|
||||
o Dropping a file into the editor under Windows didn't work (double C:/C:/ problem)
|
||||
o On some platforms it was possible to insertion rich text in the editor, causing confusion.
|
||||
o Less crashes due to CGAL assertions
|
||||
o OpenCSG should now work on systems with OpenGL 1.x, given that the right extensions are available
|
||||
o include now searches librarydir
|
||||
o The $fs parameter yielded only half the number of segments it should have
|
||||
o surface(center=true) is now correctly centered in the XY plane
|
||||
**Bugfixes:**
|
||||
* Complex CSG models sometimes took extremely long time to normalize before OpenCSG preview
|
||||
* square() crashed if any of the dimensions were zero
|
||||
* Flush Caches didn't flush cached USE'd modules
|
||||
* STL export should be a bit more robust
|
||||
* Dropping a file into the editor under Windows didn't work (double C:/C:/ problem)
|
||||
* On some platforms it was possible to insertion rich text in the editor, causing confusion.
|
||||
* Less crashes due to CGAL assertions
|
||||
* OpenCSG should now work on systems with OpenGL 1.x, given that the right extensions are available
|
||||
* include now searches librarydir
|
||||
* The $fs parameter yielded only half the number of segments it should have
|
||||
* surface(center=true) is now correctly centered in the XY plane
|
||||
|
||||
Deprecations:
|
||||
o dxf_linear_extrude() and dxf_rotate_extrude() are now deprecated.
|
||||
**Deprecations:**
|
||||
* dxf_linear_extrude() and dxf_rotate_extrude() are now deprecated.
|
||||
Use linear_extrude() and rotate_extrude() instead.
|
||||
o The file, layer, origin and scale parameters to linear_extrude() and rotate_extrude()
|
||||
* The file, layer, origin and scale parameters to linear_extrude() and rotate_extrude()
|
||||
are now deprecated. Use an import() child instead.
|
||||
o import_dxf(), import_stl() and import_off() are now deprecated. Use import() instead.
|
||||
o When exporting geometry from the cmd-line, use the universal -o option. It will export to the correct file format based on the given suffix (dxf, stl, off). The -x and -s parameters are still working but deprecated.
|
||||
o F2 and F3 for Save and Reload is now deprecated
|
||||
* import_dxf(), import_stl() and import_off() are now deprecated. Use import() instead.
|
||||
* When exporting geometry from the cmd-line, use the universal -o option. It will export to the correct file format based on the given suffix (dxf, stl, off). The -x and -s parameters are still working but deprecated.
|
||||
* F2 and F3 for Save and Reload is now deprecated
|
||||
|
||||
OpenSCAD 2011.06
|
||||
================
|
||||
# OpenSCAD 2011.06
|
||||
|
||||
o Added "Export as Image" menu.
|
||||
* Added "Export as Image" menu.
|
||||
|
||||
Bugfixes:
|
||||
o Cylinder tesselation broke existing models which are using cylinders
|
||||
**Bugfixes:**
|
||||
* Cylinder tesselation broke existing models which are using cylinders
|
||||
for e.g. captured nut slots and are dependent on the orientation not
|
||||
changing.
|
||||
o DXF output couldn't be imported into e.g. AutoCAD and Solidworks after updating
|
||||
* DXF output couldn't be imported into e.g. AutoCAD and Solidworks after updating
|
||||
to using the AutoCAD 2000 (AC1015) format. Reverted to the old entity-only output,
|
||||
causing LWPOLYLINES to not exported allowed anymore.
|
||||
|
||||
# OpenSCAD 2011.04
|
||||
|
||||
* Added hull() for convex hulls (2D object only)
|
||||
* minkowski() now supports 2D objects
|
||||
* Added functions: rands(), sign()
|
||||
* Now supports escaping of the following characters in strings: \n, \t, \r, \\, \"
|
||||
* Support nested includes
|
||||
* Improved parsing of numbers
|
||||
* DXF: output LWPOLYLINE instead of just LINE entities
|
||||
* Bugfixes: More robust DXF export, setting $fs/$fa to 0 caused a crash
|
||||
* Some bugs fixed, maybe some new bugs added
|
||||
|
||||
OpenSCAD 2011.04
|
||||
================
|
||||
# OpenSCAD 2010.05
|
||||
|
||||
o Added hull() for convex hulls (2D object only)
|
||||
o minkowski() now supports 2D objects
|
||||
o Added functions: rands(), sign()
|
||||
o Now supports escaping of the following characters in strings: \n, \t, \r, \\, \"
|
||||
o Support nested includes
|
||||
o Improved parsing of numbers
|
||||
o DXF: output LWPOLYLINE instead of just LINE entities
|
||||
o Bugfixes: More robust DXF export, setting $fs/$fa to 0 caused a crash
|
||||
o Some bugs fixed, maybe some new bugs added
|
||||
* Added functions and statements
|
||||
* Added abs() function
|
||||
* Added exp(x), log(b, x), log(x) and ln(x) functions
|
||||
* Added minkowski() statement for 3d minkowski sums
|
||||
* Added 'include <filename>' and 'use <filename>' statements
|
||||
* Old implicit '<filename>' include statement is now obsolete
|
||||
* Some bugs fixed, maybe some new bugs added
|
||||
|
||||
OpenSCAD 2010.05
|
||||
================
|
||||
# OpenSCAD 2010.02
|
||||
|
||||
o Added functions and statements
|
||||
- Added abs() function
|
||||
- Added exp(x), log(b, x), log(x) and ln(x) functions
|
||||
- Added minkowski() statement for 3d minkowski sums
|
||||
o Added 'include <filename>' and 'use <filename>' statements
|
||||
- Old implicit '<filename>' include statement is now obsolete
|
||||
o Some bugs fixed, maybe some new bugs added
|
||||
* Added functions and statements
|
||||
* Added sqrt() function
|
||||
* Added round(), ceil() and floor() functions
|
||||
* Added lookup() function for linear interpolation in value list
|
||||
* Added projection(cut = true/false) statement
|
||||
* Added child() statement for accessing child nodes of module instances
|
||||
* Added mirror() statement
|
||||
* Improved DXF import code (more entities and some bugs fixed)
|
||||
* Added feature for dumping animation as PNG files
|
||||
* Added a preferences dialog
|
||||
* Now using CGAL's delaunay tesselator
|
||||
* Now using eigen2 for linear algebra
|
||||
* Reorganisation of the source tree
|
||||
* Some bugs fixed, maybe some new bugs added
|
||||
|
||||
OpenSCAD 2010.02
|
||||
================
|
||||
|
||||
o Added functions and statements
|
||||
- Added sqrt() function
|
||||
- Added round(), ceil() and floor() functions
|
||||
- Added lookup() function for linear interpolation in value list
|
||||
- Added projection(cut = true/false) statement
|
||||
- Added child() statement for accessing child nodes of module instances
|
||||
- Added mirror() statement
|
||||
o Improved DXF import code (more entities and some bugs fixed)
|
||||
o Added feature for dumping animation as PNG files
|
||||
o Added a preferences dialog
|
||||
o Now using CGAL's delaunay tesselator
|
||||
o Now using eigen2 for linear algebra
|
||||
o Reorganisation of the source tree
|
||||
o Some bugs fixed, maybe some new bugs added
|
||||
|
||||
OpenSCAD 2010.01
|
||||
================
|
||||
|
||||
o Added functions and statements
|
||||
- Added intersection_for()
|
||||
- Added str function
|
||||
- Added min and max function
|
||||
- Added color() statement
|
||||
o Added 2D Subsystem
|
||||
- New primitives: circle(), square() and polygon()
|
||||
- 2D->3D path: linear_extrude() and rotate_extrude()
|
||||
- Import of DXF to 2d subsystem: import_dxf()
|
||||
- Export of 2D data as DXF files
|
||||
o Some bugs fixed, maybe some new bugs added
|
||||
# OpenSCAD 2010.01
|
||||
|
||||
* Added functions and statements
|
||||
* Added intersection_for()
|
||||
* Added str function
|
||||
* Added min and max function
|
||||
* Added color() statement
|
||||
* Added 2D Subsystem
|
||||
* New primitives: circle(), square() and polygon()
|
||||
* 2D->3D path: linear_extrude() and rotate_extrude()
|
||||
* Import of DXF to 2d subsystem: import_dxf()
|
||||
* Export of 2D data as DXF files
|
||||
* Some bugs fixed, maybe some new bugs added
|
||||
|
|
|
|||
|
|
@ -7,8 +7,9 @@
|
|||
<item>
|
||||
<title>OpenSCAD @VERSION@</title>
|
||||
<pubDate>@VERSIONDATE@</pubDate>
|
||||
<sparkle:releaseNotesLink>https://raw.github.com/openscad/openscad/master/RELEASE_NOTES</sparkle:releaseNotesLink>
|
||||
<enclosure url="http://files.openscad.org/OpenSCAD-@VERSION@.dmg"
|
||||
<sparkle:releaseNotesLink>https://raw.githubusercontent.com/openscad/openscad/master/releases/2015.XX.md</sparkle:releaseNotesLink>
|
||||
<sparkle:minimumSystemVersion>10.7.0</sparkle:minimumSystemVersion>
|
||||
<enclosure url="http://files.openscad.org/snapshots/OpenSCAD-@VERSION@.dmg"
|
||||
sparkle:version="@VERSIONDATE@"
|
||||
sparkle:shortVersionString="@VERSION@"
|
||||
sparkle:dsaSignature="@DSASIGNATURE@"
|
||||
|
|
|
|||
|
|
@ -7,7 +7,8 @@
|
|||
<item>
|
||||
<title>OpenSCAD @VERSION@</title>
|
||||
<pubDate>@VERSIONDATE@</pubDate>
|
||||
<sparkle:releaseNotesLink>https://raw.github.com/openscad/openscad/openscad-@VERSION@/RELEASE_NOTES</sparkle:releaseNotesLink>
|
||||
<sparkle:releaseNotesLink>https://raw.githubusercontent.com/openscad/openscad/openscad-@VERSION@/releases/@SHORTVERSION@.md</sparkle:releaseNotesLink>
|
||||
<sparkle:minimumSystemVersion>10.7.0</sparkle:minimumSystemVersion>
|
||||
<enclosure url="http://files.openscad.org/OpenSCAD-@VERSION@.dmg"
|
||||
sparkle:version="@VERSIONDATE@"
|
||||
sparkle:shortVersionString="@VERSION@"
|
||||
|
|
|
|||
18
boost.pri
18
boost.pri
|
|
@ -9,15 +9,23 @@ boost {
|
|||
win*: QMAKE_LIBDIR += -L$$BOOST_DIR/lib
|
||||
}
|
||||
|
||||
# See https://svn.boost.org/trac/boost/ticket/6219
|
||||
macx: DEFINES += __ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORES=0
|
||||
|
||||
# MXE cross build
|
||||
CONFIG(mingw-cross-env) {
|
||||
DEFINES += BOOST_STATIC
|
||||
DEFINES += BOOST_THREAD_USE_LIB
|
||||
DEFINES += Boost_USE_STATIC_LIBS
|
||||
BOOST_LINK_FLAGS = -lboost_thread_win32-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt -lboost_chrono-mt
|
||||
}
|
||||
}
|
||||
|
||||
isEmpty(BOOST_LINK_FLAGS):win* {
|
||||
BOOST_LINK_FLAGS = -llibboost_thread-vc90-mt-s-1_46_1 -llibboost_program_options-vc90-mt-s-1_46_1 -llibboost_filesystem-vc90-mt-s-1_46_1 -llibboost_system-vc90-mt-s-1_46_1 -llibboost_regex-vc90-mt-s-1_46_1
|
||||
# MSYS2
|
||||
isEmpty(BOOST_LINK_FLAGS):win32-g++ {
|
||||
DEFINES += BOOST_STATIC
|
||||
DEFINES += BOOST_THREAD_USE_LIB
|
||||
DEFINES += Boost_USE_STATIC_LIBS
|
||||
BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt
|
||||
}
|
||||
|
||||
# check for OPENSCAD_LIBDIR + multithread
|
||||
|
|
@ -53,7 +61,9 @@ boost {
|
|||
BMT_TEST1 = /usr/lib64/libboost*thread-mt*
|
||||
BMT_TEST2 = /usr/lib/libboost*thread-mt*
|
||||
BMT_TEST3 = /usr/pkg/lib/libboost*thread-mt* # netbsd
|
||||
exists($$BMT_TEST1)|exists($$BMT_TEST2)|exists($$BMT_TEST3) {
|
||||
BMT_TEST4 = /usr/local/lib/libboost*thread-mt* # homebrew
|
||||
BMT_TEST5 = /opt/local/lib/libboost*thread-mt* # macports
|
||||
exists($$BMT_TEST1)|exists($$BMT_TEST2)|exists($$BMT_TEST3)|exists($$BMT_TEST4)|exists($$BMT_TEST5) {
|
||||
BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_regex-mt
|
||||
}
|
||||
}
|
||||
|
|
|
|||
10
cgal.pri
10
cgal.pri
|
|
@ -6,7 +6,6 @@ cgal {
|
|||
CGAL_DIR = $$(CGALDIR)
|
||||
!isEmpty(CGAL_DIR) {
|
||||
QMAKE_INCDIR += $$CGAL_DIR/include
|
||||
win*: QMAKE_INCDIR += $$CGAL_DIR/auxiliary/gmp/include
|
||||
QMAKE_LIBDIR += $$CGAL_DIR/lib
|
||||
message("CGAL location: $$CGAL_DIR")
|
||||
}
|
||||
|
|
@ -19,14 +18,13 @@ cgal {
|
|||
*-g++* {
|
||||
QMAKE_CXXFLAGS += -frounding-math
|
||||
}
|
||||
LIBS += $$CGAL_DIR/auxiliary/gmp/lib/libmpfr-4.lib -lCGAL-vc110-mt-gd
|
||||
} else {
|
||||
LIBS += -lgmp -lmpfr -lCGAL
|
||||
QMAKE_CXXFLAGS += -frounding-math
|
||||
}
|
||||
LIBS += -lCGAL -lmpfr -lgmp
|
||||
}
|
||||
|
||||
*clang* {
|
||||
QMAKE_CXXFLAGS -= -frounding-math
|
||||
}
|
||||
*clang* {
|
||||
QMAKE_CXXFLAGS -= -frounding-math
|
||||
}
|
||||
}
|
||||
|
|
|
|||
8
cgal/.gitignore
vendored
Normal file
8
cgal/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
/*.stl
|
||||
/*.scad
|
||||
/*.polygon
|
||||
polyhole-tessellator
|
||||
polyhole-tessellator-libtess2
|
||||
minkowski
|
||||
decompose
|
||||
export_nef
|
||||
6
cgal/README.md
Normal file
6
cgal/README.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
This folder contains some CGAL test programs to easier develop and debug CGAL-based components.
|
||||
|
||||
## polyhole-tessellator
|
||||
|
||||
Tessellate an almost planar 3D polygon with holes into a vector of double precision 3D triangles.
|
||||
|
||||
4
cgal/data/collinear-axis-aligned.polygon
Normal file
4
cgal/data/collinear-axis-aligned.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
-76.547562539078825239,38.705110299157155396,5.353092412611622386
|
||||
-76.547562541749158527,38.705110304107662955,5.3530924135499766692
|
||||
-76.5475616455078125,38.705108642578125,0
|
||||
-76.5475616455078125,38.705108642578125,0.020000000000000000416
|
||||
198
cgal/data/cubes.stl
Normal file
198
cgal/data/cubes.stl
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
solid OpenSCAD_Model
|
||||
facet normal -1 0 0
|
||||
outer loop
|
||||
vertex 0 10 0
|
||||
vertex 0 0 0
|
||||
vertex 0 0 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 -0 -0
|
||||
outer loop
|
||||
vertex 0 10 10
|
||||
vertex 0 10 0
|
||||
vertex 0 0 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -1 0
|
||||
outer loop
|
||||
vertex 0 0 10
|
||||
vertex 0 0 0
|
||||
vertex 10 0 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0 -1 -0
|
||||
outer loop
|
||||
vertex 10 0 10
|
||||
vertex 0 0 10
|
||||
vertex 10 0 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0 0 -1
|
||||
outer loop
|
||||
vertex 5 10 0
|
||||
vertex 0 0 0
|
||||
vertex 0 10 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 -1
|
||||
outer loop
|
||||
vertex 5 15 0
|
||||
vertex 15 15 0
|
||||
vertex 5 10 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -0 -1
|
||||
outer loop
|
||||
vertex 5 10 0
|
||||
vertex 10 5 0
|
||||
vertex 0 0 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -0 -1
|
||||
outer loop
|
||||
vertex 15 15 0
|
||||
vertex 15 5 0
|
||||
vertex 10 5 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -0 -1
|
||||
outer loop
|
||||
vertex 10 5 0
|
||||
vertex 10 0 0
|
||||
vertex 0 0 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 -1
|
||||
outer loop
|
||||
vertex 15 15 0
|
||||
vertex 10 5 0
|
||||
vertex 5 10 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 5 10 0
|
||||
vertex 0 10 0
|
||||
vertex 0 10 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 5 10 10
|
||||
vertex 5 10 0
|
||||
vertex 0 10 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 10 5 10
|
||||
vertex 0 0 10
|
||||
vertex 10 0 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -0 1
|
||||
outer loop
|
||||
vertex 15 5 10
|
||||
vertex 15 15 10
|
||||
vertex 10 5 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 10 5 10
|
||||
vertex 5 10 10
|
||||
vertex 0 0 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 15 15 10
|
||||
vertex 5 15 10
|
||||
vertex 5 10 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 5 10 10
|
||||
vertex 0 10 10
|
||||
vertex 0 0 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 0 1
|
||||
outer loop
|
||||
vertex 15 15 10
|
||||
vertex 5 10 10
|
||||
vertex 10 5 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 10 0 10
|
||||
vertex 10 0 0
|
||||
vertex 10 5 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 10 5 10
|
||||
vertex 10 0 10
|
||||
vertex 10 5 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 0 0
|
||||
outer loop
|
||||
vertex 5 15 0
|
||||
vertex 5 10 0
|
||||
vertex 5 10 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -1 -0 -0
|
||||
outer loop
|
||||
vertex 5 15 10
|
||||
vertex 5 15 0
|
||||
vertex 5 10 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 -1 0
|
||||
outer loop
|
||||
vertex 10 5 10
|
||||
vertex 10 5 0
|
||||
vertex 15 5 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal -0 -1 -0
|
||||
outer loop
|
||||
vertex 15 5 10
|
||||
vertex 10 5 10
|
||||
vertex 15 5 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 15 15 0
|
||||
vertex 5 15 0
|
||||
vertex 5 15 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 0 1 0
|
||||
outer loop
|
||||
vertex 15 15 10
|
||||
vertex 15 15 0
|
||||
vertex 5 15 10
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 15 5 10
|
||||
vertex 15 5 0
|
||||
vertex 15 15 0
|
||||
endloop
|
||||
endfacet
|
||||
facet normal 1 0 0
|
||||
outer loop
|
||||
vertex 15 15 10
|
||||
vertex 15 5 10
|
||||
vertex 15 15 0
|
||||
endloop
|
||||
endfacet
|
||||
endsolid OpenSCAD_Model
|
||||
4
cgal/data/degenerate-L.polygon
Normal file
4
cgal/data/degenerate-L.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
0,0,0
|
||||
0,1,0
|
||||
1,1,1
|
||||
0,1,0
|
||||
4
cgal/data/degenerate-L2.polygon
Normal file
4
cgal/data/degenerate-L2.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
0,1,0
|
||||
0,0,0
|
||||
0,1,0
|
||||
1,1,0
|
||||
4
cgal/data/duplicate-vertex.polygon
Normal file
4
cgal/data/duplicate-vertex.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
0 0 0
|
||||
1 0 0
|
||||
1 1 0
|
||||
1 1 0
|
||||
4
cgal/data/hourglass.polygon
Normal file
4
cgal/data/hourglass.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
0 0 0
|
||||
1 0 0
|
||||
0 1 0
|
||||
1 1 0
|
||||
4
cgal/data/issue1105.polygon
Normal file
4
cgal/data/issue1105.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
6, -25, 29.285714285714285
|
||||
6, -26.732050855686023, 29.020513307787397
|
||||
6, -26.732050855686026, 29.020513307787397
|
||||
6, -26, 29.132600433972414
|
||||
8
cgal/data/issue1105c.polygon
Normal file
8
cgal/data/issue1105c.polygon
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
11.8244953852727654464160877978,-33.4423534623057960857295256574,28
|
||||
11.8244953852727654464160877978,-34,28
|
||||
11.8244953852727654464160877978,-36.5576465376941897034157591406,28
|
||||
7.99999999999999911182158029987,-35.6847304231704427479598962236,23.516743531220182461538570351
|
||||
8,-35,23.516743531220182461538570351
|
||||
5.99999999999999911182158029987,-35,21.1722478437400596362749638502
|
||||
6,-35,21.1722478437400596362749638502
|
||||
5.8577590289166048265201425238,-34.8042220990505484223831444979,21.0055061720960587479112291476
|
||||
4
cgal/data/issue1210.polygon
Normal file
4
cgal/data/issue1210.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
9.5,7.5,-0.5
|
||||
9.5,2,-0.5
|
||||
9.5,2,-0.4999999701976776123
|
||||
9.5,7.5,-0.4999999701976776123
|
||||
5
cgal/data/out-of-range.polygon
Normal file
5
cgal/data/out-of-range.polygon
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
50.9504,53.0377,9.35305
|
||||
50.2251,53.0492,9.4122
|
||||
50.9537,53.0376,9.35278
|
||||
55.2851,53.5142,9.35278
|
||||
50.9537,53.0376,9.35278
|
||||
5
cgal/data/out-of-range2.polygon
Normal file
5
cgal/data/out-of-range2.polygon
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
50.95040130615234375,53.037654876708984375,9.35305023193359375
|
||||
50.225086212158203125,53.049152374267578125,9.4121952056884765625
|
||||
50.953746795654296875,53.037601470947265625,9.3527774810791015625
|
||||
55.285125732421875,53.514209747314453125,9.3527774810791015625
|
||||
50.953746795654296875,53.037601470947265625,9.3527774810791015625
|
||||
10
cgal/data/quads.polygon
Normal file
10
cgal/data/quads.polygon
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
0,0,0
|
||||
2,0,0
|
||||
2,2,0
|
||||
0,2,0
|
||||
|
||||
0.5,0.5,0
|
||||
1.5,0.5,0
|
||||
1.5,1.5,0
|
||||
0.5,1.5,0
|
||||
|
||||
4
cgal/data/self-intersecting.polygon
Normal file
4
cgal/data/self-intersecting.polygon
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
10,10,0
|
||||
0,10,0
|
||||
0,0,0
|
||||
-1,0,0
|
||||
3
cgal/data/tri.polygon
Normal file
3
cgal/data/tri.polygon
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
0,0,0
|
||||
2,0,0
|
||||
2,2,0
|
||||
667
cgal/decompose.cpp
Normal file
667
cgal/decompose.cpp
Normal file
|
|
@ -0,0 +1,667 @@
|
|||
#include <boost/foreach.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <locale.h>
|
||||
|
||||
#include "cgalutils.h"
|
||||
#include "export.h"
|
||||
#include "polyset.h"
|
||||
#include "CGAL_Nef_polyhedron.h"
|
||||
|
||||
using namespace CGALUtils;
|
||||
|
||||
// Nef polyhedron are using CGAL_Kernel3 (Cartesian<Gmpq>)
|
||||
// Triangulation will use Epick
|
||||
typedef CGAL::Epick K;
|
||||
typedef CGAL::Polyhedron_3<K> PolyhedronK;
|
||||
|
||||
#include <boost/assign/std/vector.hpp>
|
||||
#include <boost/assign/list_of.hpp>
|
||||
using namespace boost::assign; // bring 'operator+=()' into scope
|
||||
std::vector<Color4f> colors = boost::assign::list_of
|
||||
(Color4f(240, 248, 255))
|
||||
(Color4f(250, 235, 215))
|
||||
(Color4f(0, 255, 255))
|
||||
(Color4f(127, 255, 212))
|
||||
(Color4f(240, 255, 255))
|
||||
(Color4f(245, 245, 220))
|
||||
(Color4f(255, 228, 196))
|
||||
(Color4f(0, 0, 0))
|
||||
(Color4f(255, 235, 205))
|
||||
(Color4f(0, 0, 255))
|
||||
(Color4f(138, 43, 226))
|
||||
(Color4f(165, 42, 42))
|
||||
(Color4f(222, 184, 135))
|
||||
(Color4f(95, 158, 160))
|
||||
(Color4f(127, 255, 0))
|
||||
(Color4f(210, 105, 30))
|
||||
(Color4f(255, 127, 80))
|
||||
(Color4f(100, 149, 237))
|
||||
(Color4f(255, 248, 220))
|
||||
(Color4f(220, 20, 60))
|
||||
(Color4f(0, 255, 255))
|
||||
(Color4f(0, 0, 139))
|
||||
(Color4f(0, 139, 139))
|
||||
(Color4f(184, 134, 11))
|
||||
(Color4f(169, 169, 169))
|
||||
(Color4f(0, 100, 0))
|
||||
(Color4f(169, 169, 169))
|
||||
(Color4f(189, 183, 107))
|
||||
(Color4f(139, 0, 139))
|
||||
(Color4f(85, 107, 47))
|
||||
(Color4f(255, 140, 0))
|
||||
(Color4f(153, 50, 204))
|
||||
(Color4f(139, 0, 0))
|
||||
(Color4f(233, 150, 122))
|
||||
(Color4f(143, 188, 143))
|
||||
(Color4f(72, 61, 139))
|
||||
(Color4f(47, 79, 79))
|
||||
(Color4f(47, 79, 79))
|
||||
(Color4f(0, 206, 209))
|
||||
(Color4f(148, 0, 211))
|
||||
(Color4f(255, 20, 147))
|
||||
(Color4f(0, 191, 255))
|
||||
(Color4f(105, 105, 105))
|
||||
(Color4f(105, 105, 105))
|
||||
(Color4f(30, 144, 255))
|
||||
(Color4f(178, 34, 34))
|
||||
(Color4f(255, 250, 240))
|
||||
(Color4f(34, 139, 34))
|
||||
(Color4f(255, 0, 255))
|
||||
(Color4f(220, 220, 220))
|
||||
(Color4f(248, 248, 255))
|
||||
(Color4f(255, 215, 0))
|
||||
(Color4f(218, 165, 32))
|
||||
(Color4f(128, 128, 128))
|
||||
(Color4f(0, 128, 0))
|
||||
(Color4f(173, 255, 47))
|
||||
(Color4f(128, 128, 128))
|
||||
(Color4f(240, 255, 240))
|
||||
(Color4f(255, 105, 180))
|
||||
(Color4f(205, 92, 92))
|
||||
(Color4f(75, 0, 130))
|
||||
(Color4f(255, 255, 240))
|
||||
(Color4f(240, 230, 140))
|
||||
(Color4f(230, 230, 250))
|
||||
(Color4f(255, 240, 245))
|
||||
(Color4f(124, 252, 0))
|
||||
(Color4f(255, 250, 205))
|
||||
(Color4f(173, 216, 230))
|
||||
(Color4f(240, 128, 128))
|
||||
(Color4f(224, 255, 255))
|
||||
(Color4f(250, 250, 210))
|
||||
(Color4f(211, 211, 211))
|
||||
(Color4f(144, 238, 144))
|
||||
(Color4f(211, 211, 211))
|
||||
(Color4f(255, 182, 193))
|
||||
(Color4f(255, 160, 122))
|
||||
(Color4f(32, 178, 170))
|
||||
(Color4f(135, 206, 250))
|
||||
(Color4f(119, 136, 153))
|
||||
(Color4f(119, 136, 153))
|
||||
(Color4f(176, 196, 222))
|
||||
(Color4f(255, 255, 224))
|
||||
(Color4f(0, 255, 0))
|
||||
(Color4f(50, 205, 50))
|
||||
(Color4f(250, 240, 230))
|
||||
(Color4f(255, 0, 255))
|
||||
(Color4f(128, 0, 0))
|
||||
(Color4f(102, 205, 170))
|
||||
(Color4f(0, 0, 205))
|
||||
(Color4f(186, 85, 211))
|
||||
(Color4f(147, 112, 219))
|
||||
(Color4f(60, 179, 113))
|
||||
(Color4f(123, 104, 238))
|
||||
(Color4f(0, 250, 154))
|
||||
(Color4f(72, 209, 204))
|
||||
(Color4f(199, 21, 133))
|
||||
(Color4f(25, 25, 112))
|
||||
(Color4f(245, 255, 250))
|
||||
(Color4f(255, 228, 225))
|
||||
(Color4f(255, 228, 181))
|
||||
(Color4f(255, 222, 173))
|
||||
(Color4f(0, 0, 128))
|
||||
(Color4f(253, 245, 230))
|
||||
(Color4f(128, 128, 0))
|
||||
(Color4f(107, 142, 35))
|
||||
(Color4f(255, 165, 0))
|
||||
(Color4f(255, 69, 0))
|
||||
(Color4f(218, 112, 214))
|
||||
(Color4f(238, 232, 170))
|
||||
(Color4f(152, 251, 152))
|
||||
(Color4f(175, 238, 238))
|
||||
(Color4f(219, 112, 147))
|
||||
(Color4f(255, 239, 213))
|
||||
(Color4f(255, 218, 185))
|
||||
(Color4f(205, 133, 63))
|
||||
(Color4f(255, 192, 203))
|
||||
(Color4f(221, 160, 221))
|
||||
(Color4f(176, 224, 230))
|
||||
(Color4f(128, 0, 128))
|
||||
(Color4f(255, 0, 0))
|
||||
(Color4f(188, 143, 143))
|
||||
(Color4f(65, 105, 225))
|
||||
(Color4f(139, 69, 19))
|
||||
(Color4f(250, 128, 114))
|
||||
(Color4f(244, 164, 96))
|
||||
(Color4f(46, 139, 87))
|
||||
(Color4f(255, 245, 238))
|
||||
(Color4f(160, 82, 45))
|
||||
(Color4f(192, 192, 192))
|
||||
(Color4f(135, 206, 235))
|
||||
(Color4f(106, 90, 205))
|
||||
(Color4f(112, 128, 144))
|
||||
(Color4f(112, 128, 144))
|
||||
(Color4f(255, 250, 250))
|
||||
(Color4f(0, 255, 127))
|
||||
(Color4f(70, 130, 180))
|
||||
(Color4f(210, 180, 140))
|
||||
(Color4f(0, 128, 128))
|
||||
(Color4f(216, 191, 216))
|
||||
(Color4f(255, 99, 71))
|
||||
(Color4f(0, 0, 0, 0))
|
||||
(Color4f(64, 224, 208))
|
||||
(Color4f(238, 130, 238))
|
||||
(Color4f(245, 222, 179))
|
||||
(Color4f(255, 255, 255))
|
||||
(Color4f(245, 245, 245))
|
||||
(Color4f(255, 255, 0))
|
||||
(Color4f(154, 205, 50));
|
||||
|
||||
#include <boost/unordered_set.hpp>
|
||||
#include <CGAL/convex_hull_3.h>
|
||||
template<typename Polyhedron>
|
||||
bool is_weakly_convex(Polyhedron const& p) {
|
||||
for (typename Polyhedron::Edge_const_iterator i = p.edges_begin(); i != p.edges_end(); ++i) {
|
||||
typename Polyhedron::Plane_3 p(i->opposite()->vertex()->point(), i->vertex()->point(), i->next()->vertex()->point());
|
||||
if (p.has_on_positive_side(i->opposite()->next()->vertex()->point()) &&
|
||||
CGAL::squared_distance(p, i->opposite()->next()->vertex()->point()) > 1e-8) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Also make sure that there is only one shell:
|
||||
boost::unordered_set<typename Polyhedron::Facet_const_handle, typename CGAL::Handle_hash_function> visited;
|
||||
// c++11
|
||||
// visited.reserve(p.size_of_facets());
|
||||
|
||||
std::queue<typename Polyhedron::Facet_const_handle> to_explore;
|
||||
to_explore.push(p.facets_begin()); // One arbitrary facet
|
||||
visited.insert(to_explore.front());
|
||||
|
||||
while (!to_explore.empty()) {
|
||||
typename Polyhedron::Facet_const_handle f = to_explore.front();
|
||||
to_explore.pop();
|
||||
typename Polyhedron::Facet::Halfedge_around_facet_const_circulator he, end;
|
||||
end = he = f->facet_begin();
|
||||
CGAL_For_all(he,end) {
|
||||
typename Polyhedron::Facet_const_handle o = he->opposite()->facet();
|
||||
|
||||
if (!visited.count(o)) {
|
||||
visited.insert(o);
|
||||
to_explore.push(o);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return visited.size() == p.size_of_facets();
|
||||
}
|
||||
|
||||
class Shell_explorer
|
||||
{
|
||||
public:
|
||||
std::vector<K::Point_3> vertices;
|
||||
|
||||
Shell_explorer() {}
|
||||
void visit(CGAL_Nef_polyhedron3::Vertex_const_handle v) {
|
||||
vertices.push_back(K::Point_3(to_double(v->point()[0]),
|
||||
to_double(v->point()[1]),
|
||||
to_double(v->point()[2])));
|
||||
}
|
||||
void visit(CGAL_Nef_polyhedron3::Halfedge_const_handle ) {}
|
||||
void visit(CGAL_Nef_polyhedron3::Halffacet_const_handle ) {}
|
||||
void visit(CGAL_Nef_polyhedron3::SHalfedge_const_handle ) {}
|
||||
void visit(CGAL_Nef_polyhedron3::SHalfloop_const_handle ) {}
|
||||
void visit(CGAL_Nef_polyhedron3::SFace_const_handle ) {}
|
||||
};
|
||||
|
||||
template<class Output>
|
||||
void decompose(const CGAL_Nef_polyhedron3 *N, Output out_iter)
|
||||
{
|
||||
int parts = 0;
|
||||
assert(N);
|
||||
CGAL_Polyhedron poly;
|
||||
if (N->is_simple()) {
|
||||
nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>(*N, poly);
|
||||
}
|
||||
if (is_weakly_convex(poly)) {
|
||||
PRINTD("Minkowski: Object is convex and Nef");
|
||||
PolyhedronK poly2;
|
||||
CGALUtils::copyPolyhedron(poly, poly2);
|
||||
*out_iter++ = poly2;
|
||||
return;
|
||||
}
|
||||
else {
|
||||
PRINTD("Minkowski: Object is nonconvex Nef, decomposing...");
|
||||
CGAL_Nef_polyhedron3 decomposed_nef = *N;
|
||||
CGAL::convex_decomposition_3(decomposed_nef);
|
||||
|
||||
// the first volume is the outer volume, which ignored in the decomposition
|
||||
CGAL_Nef_polyhedron3::Volume_const_iterator ci = ++decomposed_nef.volumes_begin();
|
||||
// Convert each convex volume to a Polyhedron
|
||||
for(; ci != decomposed_nef.volumes_end(); ++ci) {
|
||||
if(ci->mark()) {
|
||||
// CGAL_Polyhedron poly;
|
||||
// decomposed_nef.convert_inner_shell_to_polyhedron(ci->shells_begin(), poly);
|
||||
// P.push_back(poly);
|
||||
|
||||
|
||||
auto s = CGAL_Nef_polyhedron3::SFace_const_handle(ci->shells_begin());
|
||||
|
||||
CGAL_Nef_polyhedron3::SFace_const_iterator sf = ci->shells_begin();
|
||||
Shell_explorer SE;
|
||||
decomposed_nef.visit_shell_objects(CGAL_Nef_polyhedron3::SFace_const_handle(sf),SE);
|
||||
|
||||
PolyhedronK poly;
|
||||
CGAL::convex_hull_3(SE.vertices.begin(), SE.vertices.end(), poly);
|
||||
*out_iter++ = poly;
|
||||
parts++;
|
||||
}
|
||||
}
|
||||
|
||||
PRINTDB("Minkowski: decomposed into %d convex parts", parts);
|
||||
}
|
||||
}
|
||||
|
||||
Geometry const * minkowskitest(const Geometry::ChildList &children)
|
||||
{
|
||||
CGAL::Timer t,t_tot;
|
||||
assert(children.size() >= 2);
|
||||
// Iterate over children, perform pairwise minkowski on children:
|
||||
// operands = [ch, ch+1]
|
||||
Geometry::ChildList::const_iterator minkowski_ch_it = children.begin();
|
||||
t_tot.start();
|
||||
Geometry const *operands[2] = {minkowski_ch_it->second.get(), NULL};
|
||||
try {
|
||||
while (++minkowski_ch_it != children.end()) {
|
||||
operands[1] = minkowski_ch_it->second.get();
|
||||
|
||||
std::vector<PolyhedronK> convexP[2]; // Stores decomposed operands
|
||||
std::list<PolyhedronK> result_parts;
|
||||
|
||||
for (int i = 0; i < 2; i++) {
|
||||
shared_ptr<const CGAL_Nef_polyhedron> N;
|
||||
if (const PolySet *ps = dynamic_cast<const PolySet *>(operands[i])) {
|
||||
if (ps->is_convex()) {
|
||||
PRINTDB("Minkowski: child %d is convex and PolySet", i);
|
||||
PolyhedronK poly;
|
||||
CGALUtils::createPolyhedronFromPolySet(*ps, poly);
|
||||
convexP[i].push_back(poly);
|
||||
}
|
||||
else {
|
||||
PRINTDB("Minkowski: child %d is nonconvex PolySet, transforming to Nef", i);
|
||||
N.reset(createNefPolyhedronFromGeometry(*ps));
|
||||
}
|
||||
}
|
||||
else if (const CGAL_Nef_polyhedron *n = dynamic_cast<const CGAL_Nef_polyhedron *>(operands[i])) {
|
||||
CGAL_Polyhedron poly;
|
||||
if (n->p3->is_simple()) {
|
||||
nefworkaround::convert_to_Polyhedron<CGAL_Kernel3>(*n->p3, poly);
|
||||
// FIXME: Can we calculate weakly_convex on a PolyhedronK instead?
|
||||
if (is_weakly_convex(poly)) {
|
||||
PRINTDB("Minkowski: child %d is convex and Nef", i);
|
||||
PolyhedronK poly2;
|
||||
CGALUtils::copyPolyhedron(poly, poly2);
|
||||
convexP[i].push_back(poly2);
|
||||
}
|
||||
else {
|
||||
PRINTDB("Minkowski: child %d is nonconvex Nef",i);
|
||||
N.reset(n);
|
||||
}
|
||||
}
|
||||
else throw 0; // We cannot handle this, fall back to CGAL's minkowski
|
||||
}
|
||||
|
||||
// If not convex...
|
||||
if (N && N->p3) {
|
||||
PRINTD("Decomposing...");
|
||||
decompose(N->p3.get(), std::back_inserter(convexP[i]));
|
||||
}
|
||||
|
||||
PRINTD("Hulling convex parts...");
|
||||
std::vector<K::Point_3> points[2];
|
||||
std::vector<K::Point_3> minkowski_points;
|
||||
|
||||
// For each permutation of convex operands..
|
||||
BOOST_FOREACH(const PolyhedronK &p0, convexP[0]) {
|
||||
BOOST_FOREACH(const PolyhedronK &p1, convexP[1]) {
|
||||
t.start();
|
||||
|
||||
// Create minkowski pointcloud
|
||||
minkowski_points.clear();
|
||||
minkowski_points.reserve(p0.size_of_vertices() * p0.size_of_vertices());
|
||||
BOOST_FOREACH(const K::Point_3 &p0p, std::make_pair(p0.points_begin(), p0.points_end())) {
|
||||
BOOST_FOREACH(const K::Point_3 &p1p, std::make_pair(p1.points_begin(), p1.points_end())) {
|
||||
minkowski_points.push_back(p0p+(p1p-CGAL::ORIGIN));
|
||||
}
|
||||
}
|
||||
|
||||
t.stop();
|
||||
|
||||
// Ignore empty volumes
|
||||
if (minkowski_points.size() <= 3) continue;
|
||||
|
||||
// Hull point cloud
|
||||
PolyhedronK result;
|
||||
PRINTDB("Minkowski: Point cloud creation (%d ⨉ %d -> %d) took %f ms",
|
||||
points[0].size() % points[1].size() % minkowski_points.size() % (t.time()*1000));
|
||||
t.reset();
|
||||
t.start();
|
||||
CGAL::convex_hull_3(minkowski_points.begin(), minkowski_points.end(), result);
|
||||
|
||||
std::vector<K::Point_3> strict_points;
|
||||
strict_points.reserve(minkowski_points.size());
|
||||
|
||||
for (PolyhedronK::Vertex_iterator i = result.vertices_begin(); i != result.vertices_end(); ++i) {
|
||||
K::Point_3 const &p = i->point();
|
||||
|
||||
PolyhedronK::Vertex::Halfedge_handle h,e;
|
||||
h = i->halfedge();
|
||||
e = h;
|
||||
bool collinear = false;
|
||||
bool coplanar = true;
|
||||
|
||||
do {
|
||||
K::Point_3 const& q = h->opposite()->vertex()->point();
|
||||
if (coplanar && !CGAL::coplanar(p,q,
|
||||
h->next_on_vertex()->opposite()->vertex()->point(),
|
||||
h->next_on_vertex()->next_on_vertex()->opposite()->vertex()->point())) {
|
||||
coplanar = false;
|
||||
}
|
||||
|
||||
|
||||
for (PolyhedronK::Vertex::Halfedge_handle j = h->next_on_vertex();
|
||||
j != h && !collinear && ! coplanar;
|
||||
j = j->next_on_vertex()) {
|
||||
|
||||
K::Point_3 const& r = j->opposite()->vertex()->point();
|
||||
if (CGAL::collinear(p,q,r)) {
|
||||
collinear = true;
|
||||
}
|
||||
}
|
||||
|
||||
h = h->next_on_vertex();
|
||||
} while (h != e && !collinear);
|
||||
|
||||
if (!collinear && !coplanar) strict_points.push_back(p);
|
||||
}
|
||||
|
||||
result.clear();
|
||||
CGAL::convex_hull_3(strict_points.begin(), strict_points.end(), result);
|
||||
|
||||
t.stop();
|
||||
PRINTDB("Minkowski: Computing convex hull took %f s", t.time());
|
||||
t.reset();
|
||||
|
||||
result_parts.push_back(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (minkowski_ch_it != boost::next(children.begin())) delete operands[0];
|
||||
|
||||
if (result_parts.size() == 1) {
|
||||
PolySet *ps = new PolySet(3,true);
|
||||
createPolySetFromPolyhedron(*result_parts.begin(), *ps);
|
||||
operands[0] = ps;
|
||||
} else if (!result_parts.empty()) {
|
||||
t.start();
|
||||
PRINTDB("Minkowski: Computing union of %d parts",result_parts.size());
|
||||
Geometry::ChildList fake_children;
|
||||
for (std::list<PolyhedronK>::iterator i = result_parts.begin(); i != result_parts.end(); ++i) {
|
||||
PolySet ps(3,true);
|
||||
createPolySetFromPolyhedron(*i, ps);
|
||||
fake_children.push_back(std::make_pair((const AbstractNode*)NULL,
|
||||
shared_ptr<const Geometry>(createNefPolyhedronFromGeometry(ps))));
|
||||
}
|
||||
CGAL_Nef_polyhedron *N = CGALUtils::applyOperator(fake_children, OPENSCAD_UNION);
|
||||
t.stop();
|
||||
if (N) PRINTDB("Minkowski: Union done: %f s",t.time());
|
||||
else PRINTDB("Minkowski: Union failed: %f s",t.time());
|
||||
t.reset();
|
||||
operands[0] = N;
|
||||
} else {
|
||||
operands[0] = new CGAL_Nef_polyhedron();
|
||||
}
|
||||
}
|
||||
|
||||
t_tot.stop();
|
||||
PRINTDB("Minkowski: Total execution time %f s", t_tot.time());
|
||||
t_tot.reset();
|
||||
return operands[0];
|
||||
}
|
||||
catch (...) {
|
||||
// If anything throws we simply fall back to Nef Minkowski
|
||||
PRINTD("Minkowski: Falling back to Nef Minkowski");
|
||||
|
||||
CGAL_Nef_polyhedron *N = applyOperator(children, OPENSCAD_MINKOWSKI);
|
||||
return N;
|
||||
}
|
||||
}
|
||||
|
||||
#define STL_FACET_NUMBYTES 4*3*4+2
|
||||
// as there is no 'float32_t' standard, we assume the systems 'float'
|
||||
// is a 'binary32' aka 'single' standard IEEE 32-bit floating point type
|
||||
union stl_facet {
|
||||
uint8_t data8[ STL_FACET_NUMBYTES ];
|
||||
uint32_t data32[4*3];
|
||||
struct facet_data {
|
||||
float i, j, k;
|
||||
float x1, y1, z1;
|
||||
float x2, y2, z2;
|
||||
float x3, y3, z3;
|
||||
uint16_t attribute_byte_count;
|
||||
} data;
|
||||
};
|
||||
|
||||
void uint32_byte_swap( uint32_t &x )
|
||||
{
|
||||
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 3
|
||||
x = __builtin_bswap32( x );
|
||||
#elif defined(__clang__)
|
||||
x = __builtin_bswap32( x );
|
||||
#elif defined(_MSC_VER)
|
||||
x = _byteswap_ulong( x );
|
||||
#else
|
||||
uint32_t b1 = ( 0x000000FF & x ) << 24;
|
||||
uint32_t b2 = ( 0x0000FF00 & x ) << 8;
|
||||
uint32_t b3 = ( 0x00FF0000 & x ) >> 8;
|
||||
uint32_t b4 = ( 0xFF000000 & x ) >> 24;
|
||||
x = b1 | b2 | b3 | b4;
|
||||
#endif
|
||||
}
|
||||
|
||||
void read_stl_facet( std::ifstream &f, stl_facet &facet )
|
||||
{
|
||||
f.read( (char*)facet.data8, STL_FACET_NUMBYTES );
|
||||
#ifdef BOOST_BIG_ENDIAN
|
||||
for ( int i = 0; i < 12; i++ ) {
|
||||
uint32_byte_swap( facet.data32[ i ] );
|
||||
}
|
||||
// we ignore attribute byte count
|
||||
#endif
|
||||
}
|
||||
|
||||
PolySet *import_stl(const std::string &filename)
|
||||
{
|
||||
PolySet *p = new PolySet(3);
|
||||
|
||||
// Open file and position at the end
|
||||
std::ifstream f(filename.c_str(), std::ios::in | std::ios::binary | std::ios::ate);
|
||||
if (!f.good()) {
|
||||
PRINTB("WARNING: Can't open import file '%s'.", filename);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
boost::regex ex_sfe("solid|facet|endloop");
|
||||
boost::regex ex_outer("outer loop");
|
||||
boost::regex ex_vertex("vertex");
|
||||
boost::regex ex_vertices("\\s*vertex\\s+([^\\s]+)\\s+([^\\s]+)\\s+([^\\s]+)");
|
||||
|
||||
bool binary = false;
|
||||
std::streampos file_size = f.tellg();
|
||||
f.seekg(80);
|
||||
if (f.good() && !f.eof()) {
|
||||
uint32_t facenum = 0;
|
||||
f.read((char *)&facenum, sizeof(uint32_t));
|
||||
#ifdef BOOST_BIG_ENDIAN
|
||||
uint32_byte_swap( facenum );
|
||||
#endif
|
||||
if (file_size == static_cast<std::streamoff>(80 + 4 + 50*facenum)) {
|
||||
binary = true;
|
||||
}
|
||||
}
|
||||
f.seekg(0);
|
||||
|
||||
char data[5];
|
||||
f.read(data, 5);
|
||||
if (!binary && !f.eof() && f.good() && !memcmp(data, "solid", 5)) {
|
||||
int i = 0;
|
||||
double vdata[3][3];
|
||||
std::string line;
|
||||
std::getline(f, line);
|
||||
while (!f.eof()) {
|
||||
std::getline(f, line);
|
||||
boost::trim(line);
|
||||
if (boost::regex_search(line, ex_sfe)) {
|
||||
continue;
|
||||
}
|
||||
if (boost::regex_search(line, ex_outer)) {
|
||||
i = 0;
|
||||
continue;
|
||||
}
|
||||
boost::smatch results;
|
||||
if (boost::regex_search(line, results, ex_vertices)) {
|
||||
try {
|
||||
for (int v=0;v<3;v++) {
|
||||
vdata[i][v] = boost::lexical_cast<double>(results[v+1]);
|
||||
}
|
||||
}
|
||||
catch (const boost::bad_lexical_cast &blc) {
|
||||
PRINTB("WARNING: Can't parse vertex line '%s'.", line);
|
||||
i = 10;
|
||||
continue;
|
||||
}
|
||||
if (++i == 3) {
|
||||
p->append_poly();
|
||||
p->append_vertex(vdata[0][0], vdata[0][1], vdata[0][2]);
|
||||
p->append_vertex(vdata[1][0], vdata[1][1], vdata[1][2]);
|
||||
p->append_vertex(vdata[2][0], vdata[2][1], vdata[2][2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (binary && !f.eof() && f.good())
|
||||
{
|
||||
f.ignore(80-5+4);
|
||||
while (1) {
|
||||
stl_facet facet;
|
||||
read_stl_facet( f, facet );
|
||||
if (f.eof()) break;
|
||||
p->append_poly();
|
||||
p->append_vertex(facet.data.x1, facet.data.y1, facet.data.z1);
|
||||
p->append_vertex(facet.data.x2, facet.data.y2, facet.data.z2);
|
||||
p->append_vertex(facet.data.x3, facet.data.y3, facet.data.z3);
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
/*!
|
||||
file format:
|
||||
1. polygon coordinates (x,y,z) are comma separated (+/- spaces) and
|
||||
each coordinate is on a separate line
|
||||
2. each polygon is separated by one or more blank lines
|
||||
*/
|
||||
bool import_polygon(PolyholeK &polyhole, const std::string &filename)
|
||||
{
|
||||
std::ifstream ifs(filename.c_str());
|
||||
if (!ifs) return false;
|
||||
|
||||
std::string line;
|
||||
PolygonK polygon;
|
||||
while (std::getline(ifs, line)) {
|
||||
std::stringstream ss(line);
|
||||
double X = 0.0, Y = 0.0, Z = 0.0;
|
||||
if (!(ss >> X)) {
|
||||
//ie blank lines => flag start of next polygon
|
||||
if (polygon.size() > 0) polyhole.push_back(polygon);
|
||||
polygon.clear();
|
||||
continue;
|
||||
}
|
||||
char c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Y)) {
|
||||
std::cerr << "Y error\n";
|
||||
return false;
|
||||
}
|
||||
c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Z)) {
|
||||
std::cerr << "Z error\n";
|
||||
return false;
|
||||
}
|
||||
polygon.push_back(Vertex3K(X, Y, Z));
|
||||
}
|
||||
if (polygon.size() > 0) polyhole.push_back(polygon);
|
||||
ifs.close();
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
OpenSCAD::debug = "decompose";
|
||||
|
||||
PolySet *ps = NULL;
|
||||
if (argc == 2) {
|
||||
if (!(ps = import_stl(argv[1]))) {
|
||||
std::cerr << "Error importing STL " << argv[1] << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
std::cerr << "Imported " << ps->numPolygons() << " polygons" << std::endl;
|
||||
}
|
||||
else {
|
||||
std::cerr << "Usage: " << argv[0] << " <file.stl> <file.stl>" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Geometry::ChildList children;
|
||||
|
||||
CGAL_Nef_polyhedron *N = createNefPolyhedronFromGeometry(*ps);
|
||||
|
||||
std::vector<PolyhedronK> result;
|
||||
decompose(N->p3.get(), std::back_inserter(result));
|
||||
|
||||
std::cerr << "Decomposed into " << result.size() << " convex parts" << std::endl;
|
||||
|
||||
int idx = 0;
|
||||
BOOST_FOREACH(const PolyhedronK &P, result) {
|
||||
PolySet result_ps(3);
|
||||
if (CGALUtils::createPolySetFromPolyhedron(P, result_ps)) {
|
||||
std::cerr << "Error converting to PolySet\n";
|
||||
}
|
||||
else {
|
||||
std::stringstream ss;
|
||||
ss << "out" << idx++ << ".stl";
|
||||
exportFileByName(&result_ps, OPENSCAD_STL, ss.str().c_str(), ss.str().c_str());
|
||||
std::cout << "color([" << colors[idx%147][0] << "," << colors[idx%147][1] << "," << colors[idx%147][2] << "]) " << "import(\"" << ss.str() << "\");\n";
|
||||
}
|
||||
}
|
||||
std::cerr << "Done." << std::endl;
|
||||
}
|
||||
108
cgal/decompose.pro
Normal file
108
cgal/decompose.pro
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
CONFIG += debug
|
||||
CONFIG -= qt
|
||||
debug: DEFINES += DEBUG
|
||||
|
||||
TEMPLATE = app
|
||||
|
||||
INCLUDEPATH += ../src
|
||||
DEPENDPATH += ../src
|
||||
|
||||
# Handle custom library location.
|
||||
# Used when manually installing 3rd party libraries
|
||||
isEmpty(OPENSCAD_LIBDIR) OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES)
|
||||
macx:isEmpty(OPENSCAD_LIBDIR) {
|
||||
exists(/opt/local):exists(/usr/local/Cellar) {
|
||||
error("It seems you might have libraries in both /opt/local and /usr/local. Please specify which one to use with qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
} else {
|
||||
exists(/opt/local) {
|
||||
#Default to MacPorts on Mac OS X
|
||||
message("Automatically searching for libraries in /opt/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /opt/local
|
||||
} else:exists(/usr/local/Cellar) {
|
||||
message("Automatically searching for libraries in /usr/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /usr/local
|
||||
}
|
||||
}
|
||||
}
|
||||
!isEmpty(OPENSCAD_LIBDIR) {
|
||||
QMAKE_INCDIR = $$OPENSCAD_LIBDIR/include
|
||||
QMAKE_LIBDIR = $$OPENSCAD_LIBDIR/lib
|
||||
}
|
||||
|
||||
TARGET = decompose
|
||||
mac {
|
||||
CONFIG -= app_bundle
|
||||
}
|
||||
|
||||
macx {
|
||||
# Mac needs special care to link against the correct C++ library
|
||||
# We attempt to auto-detect it by inspecting Boost
|
||||
dirs = $${BOOSTDIR} $${QMAKE_LIBDIR}
|
||||
for(dir, dirs) {
|
||||
system(grep -q __112basic_string $${dir}/libboost_thread* >& /dev/null) {
|
||||
message("Detected libc++-linked boost in $${dir}")
|
||||
CONFIG += libc++
|
||||
}
|
||||
}
|
||||
|
||||
libc++ {
|
||||
QMAKE_CXXFLAGS += -stdlib=libc++
|
||||
QMAKE_LFLAGS += -stdlib=libc++
|
||||
QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++
|
||||
# libc++ on requires Mac OS X 10.7+
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
|
||||
}
|
||||
}
|
||||
|
||||
# See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs.
|
||||
*g++* {
|
||||
QMAKE_CXXFLAGS *= -fno-strict-aliasing
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-local-typedefs # ignored before 4.8
|
||||
}
|
||||
|
||||
*clang* {
|
||||
# http://llvm.org/bugs/show_bug.cgi?id=9182
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual
|
||||
# disable enormous amount of warnings about CGAL / boost / etc
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-variable
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-c++11-extensions
|
||||
# might want to actually turn this on once in a while
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-sign-compare
|
||||
}
|
||||
|
||||
# Application configuration
|
||||
CONFIG += cgal
|
||||
CONFIG += boost
|
||||
CONFIG += eigen
|
||||
CONFIG += gettext
|
||||
|
||||
mac: {
|
||||
LIBS += -framework OpenGL
|
||||
}
|
||||
|
||||
include(../common.pri)
|
||||
|
||||
HEADERS += ../src/cgal.h \
|
||||
../src/cgalutils.h \
|
||||
../src/linalg.h \
|
||||
../src/polyset.h \
|
||||
../src/polyset-utils.h \
|
||||
../src/printutils.h
|
||||
|
||||
SOURCES += decompose.cpp \
|
||||
../src/polygon2d.cc \
|
||||
../src/polygon2d-CGAL.cc \
|
||||
../src/CGAL_Nef_polyhedron.cc \
|
||||
../src/CGAL_Nef_polyhedron_DxfData.cc \
|
||||
../src/cgalutils.cc \
|
||||
../src/cgalutils-tess.cc \
|
||||
../src/cgalutils-polyhedron.cc \
|
||||
../src/polyset.cc \
|
||||
../src/svg.cc \
|
||||
../src/node.cc \
|
||||
../src/export.cc \
|
||||
../src/polyset-utils.cc \
|
||||
../src/progress.cc \
|
||||
../src/printutils.cc
|
||||
180
cgal/export_nef.cpp
Normal file
180
cgal/export_nef.cpp
Normal file
|
|
@ -0,0 +1,180 @@
|
|||
#include <boost/foreach.hpp>
|
||||
#include <boost/regex.hpp>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <locale.h>
|
||||
|
||||
#include "cgalutils.h"
|
||||
#include "export.h"
|
||||
#include "polyset.h"
|
||||
#include "CGAL_Nef_polyhedron.h"
|
||||
#include "boosty.h"
|
||||
|
||||
#include <CGAL/IO/Nef_polyhedron_iostream_3.h>
|
||||
|
||||
using namespace CGALUtils;
|
||||
|
||||
#define STL_FACET_NUMBYTES 4*3*4+2
|
||||
// as there is no 'float32_t' standard, we assume the systems 'float'
|
||||
// is a 'binary32' aka 'single' standard IEEE 32-bit floating point type
|
||||
union stl_facet {
|
||||
uint8_t data8[ STL_FACET_NUMBYTES ];
|
||||
uint32_t data32[4*3];
|
||||
struct facet_data {
|
||||
float i, j, k;
|
||||
float x1, y1, z1;
|
||||
float x2, y2, z2;
|
||||
float x3, y3, z3;
|
||||
uint16_t attribute_byte_count;
|
||||
} data;
|
||||
};
|
||||
|
||||
void uint32_byte_swap( uint32_t &x )
|
||||
{
|
||||
#if __GNUC__ >= 4 && __GNUC_MINOR__ >= 3
|
||||
x = __builtin_bswap32( x );
|
||||
#elif defined(__clang__)
|
||||
x = __builtin_bswap32( x );
|
||||
#elif defined(_MSC_VER)
|
||||
x = _byteswap_ulong( x );
|
||||
#else
|
||||
uint32_t b1 = ( 0x000000FF & x ) << 24;
|
||||
uint32_t b2 = ( 0x0000FF00 & x ) << 8;
|
||||
uint32_t b3 = ( 0x00FF0000 & x ) >> 8;
|
||||
uint32_t b4 = ( 0xFF000000 & x ) >> 24;
|
||||
x = b1 | b2 | b3 | b4;
|
||||
#endif
|
||||
}
|
||||
|
||||
void read_stl_facet( std::ifstream &f, stl_facet &facet )
|
||||
{
|
||||
f.read( (char*)facet.data8, STL_FACET_NUMBYTES );
|
||||
#ifdef BOOST_BIG_ENDIAN
|
||||
for ( int i = 0; i < 12; i++ ) {
|
||||
uint32_byte_swap( facet.data32[ i ] );
|
||||
}
|
||||
// we ignore attribute byte count
|
||||
#endif
|
||||
}
|
||||
|
||||
PolySet *import_stl(const std::string &filename)
|
||||
{
|
||||
PolySet *p = new PolySet(3);
|
||||
|
||||
// Open file and position at the end
|
||||
std::ifstream f(filename.c_str(), std::ios::in | std::ios::binary | std::ios::ate);
|
||||
if (!f.good()) {
|
||||
PRINTB("WARNING: Can't open import file '%s'.", filename);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
boost::regex ex_sfe("solid|facet|endloop");
|
||||
boost::regex ex_outer("outer loop");
|
||||
boost::regex ex_vertex("vertex");
|
||||
boost::regex ex_vertices("\\s*vertex\\s+([^\\s]+)\\s+([^\\s]+)\\s+([^\\s]+)");
|
||||
|
||||
bool binary = false;
|
||||
std::streampos file_size = f.tellg();
|
||||
f.seekg(80);
|
||||
if (f.good() && !f.eof()) {
|
||||
uint32_t facenum = 0;
|
||||
f.read((char *)&facenum, sizeof(uint32_t));
|
||||
#ifdef BOOST_BIG_ENDIAN
|
||||
uint32_byte_swap( facenum );
|
||||
#endif
|
||||
if (file_size == static_cast<std::streamoff>(80 + 4 + 50*facenum)) {
|
||||
binary = true;
|
||||
}
|
||||
}
|
||||
f.seekg(0);
|
||||
|
||||
char data[5];
|
||||
f.read(data, 5);
|
||||
if (!binary && !f.eof() && f.good() && !memcmp(data, "solid", 5)) {
|
||||
int i = 0;
|
||||
double vdata[3][3];
|
||||
std::string line;
|
||||
std::getline(f, line);
|
||||
while (!f.eof()) {
|
||||
std::getline(f, line);
|
||||
boost::trim(line);
|
||||
if (boost::regex_search(line, ex_sfe)) {
|
||||
continue;
|
||||
}
|
||||
if (boost::regex_search(line, ex_outer)) {
|
||||
i = 0;
|
||||
continue;
|
||||
}
|
||||
boost::smatch results;
|
||||
if (boost::regex_search(line, results, ex_vertices)) {
|
||||
try {
|
||||
for (int v=0;v<3;v++) {
|
||||
vdata[i][v] = boost::lexical_cast<double>(results[v+1]);
|
||||
}
|
||||
}
|
||||
catch (const boost::bad_lexical_cast &blc) {
|
||||
PRINTB("WARNING: Can't parse vertex line '%s'.", line);
|
||||
i = 10;
|
||||
continue;
|
||||
}
|
||||
if (++i == 3) {
|
||||
p->append_poly();
|
||||
p->append_vertex(vdata[0][0], vdata[0][1], vdata[0][2]);
|
||||
p->append_vertex(vdata[1][0], vdata[1][1], vdata[1][2]);
|
||||
p->append_vertex(vdata[2][0], vdata[2][1], vdata[2][2]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (binary && !f.eof() && f.good())
|
||||
{
|
||||
f.ignore(80-5+4);
|
||||
while (1) {
|
||||
stl_facet facet;
|
||||
read_stl_facet( f, facet );
|
||||
if (f.eof()) break;
|
||||
p->append_poly();
|
||||
p->append_vertex(facet.data.x1, facet.data.y1, facet.data.z1);
|
||||
p->append_vertex(facet.data.x2, facet.data.y2, facet.data.z2);
|
||||
p->append_vertex(facet.data.x3, facet.data.y3, facet.data.z3);
|
||||
}
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
OpenSCAD::debug = "export_nef";
|
||||
CGAL_Nef_polyhedron *N = NULL;
|
||||
|
||||
PolySet *ps = NULL;
|
||||
if (argc == 2) {
|
||||
std::string filename(argv[1]);
|
||||
std::string suffix = boosty::extension_str(filename);
|
||||
boost::algorithm::to_lower(suffix);
|
||||
if (suffix == ".stl") {
|
||||
if (!(ps = import_stl(filename))) {
|
||||
std::cerr << "Error importing STL " << argv[1] << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
std::cerr << "Imported " << ps->numPolygons() << " polygons" << std::endl;
|
||||
}
|
||||
else if (suffix == ".nef3") {
|
||||
N = new CGAL_Nef_polyhedron(new CGAL_Nef_polyhedron3);
|
||||
std::ifstream stream(filename.c_str());
|
||||
stream >> *N->p3;
|
||||
std::cerr << "Imported Nef polyhedron" << std::endl;
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::cerr << "Usage: " << argv[0] << " <file.stl>" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (ps && !N) N = createNefPolyhedronFromGeometry(*ps);
|
||||
|
||||
export_stl(N, std::cout);
|
||||
std::cerr << "Done." << std::endl;
|
||||
}
|
||||
109
cgal/export_nef.pro
Normal file
109
cgal/export_nef.pro
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
CONFIG += debug
|
||||
CONFIG -= qt
|
||||
debug: DEFINES += DEBUG
|
||||
|
||||
TEMPLATE = app
|
||||
|
||||
INCLUDEPATH += ../src
|
||||
DEPENDPATH += ../src
|
||||
|
||||
# Handle custom library location.
|
||||
# Used when manually installing 3rd party libraries
|
||||
isEmpty(OPENSCAD_LIBDIR) OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES)
|
||||
macx:isEmpty(OPENSCAD_LIBDIR) {
|
||||
exists(/opt/local):exists(/usr/local/Cellar) {
|
||||
error("It seems you might have libraries in both /opt/local and /usr/local. Please specify which one to use with qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
} else {
|
||||
exists(/opt/local) {
|
||||
#Default to MacPorts on Mac OS X
|
||||
message("Automatically searching for libraries in /opt/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /opt/local
|
||||
} else:exists(/usr/local/Cellar) {
|
||||
message("Automatically searching for libraries in /usr/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /usr/local
|
||||
}
|
||||
}
|
||||
}
|
||||
!isEmpty(OPENSCAD_LIBDIR) {
|
||||
QMAKE_INCDIR = $$OPENSCAD_LIBDIR/include
|
||||
QMAKE_LIBDIR = $$OPENSCAD_LIBDIR/lib
|
||||
}
|
||||
|
||||
TARGET = export_nef
|
||||
mac {
|
||||
CONFIG -= app_bundle
|
||||
}
|
||||
|
||||
macx {
|
||||
# Mac needs special care to link against the correct C++ library
|
||||
# We attempt to auto-detect it by inspecting Boost
|
||||
dirs = $${BOOSTDIR} $${QMAKE_LIBDIR}
|
||||
for(dir, dirs) {
|
||||
system(grep -q __112basic_string $${dir}/libboost_thread* >& /dev/null) {
|
||||
message("Detected libc++-linked boost in $${dir}")
|
||||
CONFIG += libc++
|
||||
}
|
||||
}
|
||||
|
||||
libc++ {
|
||||
QMAKE_CXXFLAGS += -stdlib=libc++
|
||||
QMAKE_LFLAGS += -stdlib=libc++
|
||||
QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++
|
||||
# libc++ on requires Mac OS X 10.7+
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
|
||||
}
|
||||
}
|
||||
|
||||
# See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs.
|
||||
*g++* {
|
||||
QMAKE_CXXFLAGS *= -fno-strict-aliasing
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-local-typedefs # ignored before 4.8
|
||||
}
|
||||
|
||||
*clang* {
|
||||
# http://llvm.org/bugs/show_bug.cgi?id=9182
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual
|
||||
# disable enormous amount of warnings about CGAL / boost / etc
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-variable
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-c++11-extensions
|
||||
# might want to actually turn this on once in a while
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-sign-compare
|
||||
}
|
||||
|
||||
# Application configuration
|
||||
CONFIG += cgal
|
||||
CONFIG += boost
|
||||
CONFIG += eigen
|
||||
CONFIG += gettext
|
||||
|
||||
mac: {
|
||||
LIBS += -framework OpenGL
|
||||
}
|
||||
|
||||
include(../common.pri)
|
||||
|
||||
HEADERS += ../src/cgal.h \
|
||||
../src/cgalutils.h \
|
||||
../src/linalg.h \
|
||||
../src/polyset.h \
|
||||
../src/polyset-utils.h \
|
||||
../src/printutils.h
|
||||
|
||||
SOURCES += export_nef.cpp \
|
||||
../src/polygon2d.cc \
|
||||
../src/polygon2d-CGAL.cc \
|
||||
../src/CGAL_Nef_polyhedron.cc \
|
||||
../src/CGAL_Nef_polyhedron_DxfData.cc \
|
||||
../src/cgalutils.cc \
|
||||
../src/cgalutils-tess.cc \
|
||||
../src/cgalutils-polyhedron.cc \
|
||||
../src/polyset.cc \
|
||||
../src/svg.cc \
|
||||
../src/node.cc \
|
||||
../src/export.cc \
|
||||
../src/polyset-utils.cc \
|
||||
../src/progress.cc \
|
||||
../src/printutils.cc \
|
||||
../src/grid.cc
|
||||
159
cgal/polyhole-tessellator-libtess2.cpp
Normal file
159
cgal/polyhole-tessellator-libtess2.cpp
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
#include <boost/foreach.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <locale.h>
|
||||
|
||||
#include "GeometryUtils.h"
|
||||
#include "Reindexer.h"
|
||||
#include "linalg.h"
|
||||
#include "grid.h"
|
||||
#include "printutils.h"
|
||||
|
||||
static void export_stl(const IndexedTriangleMesh &trimesh, std::ostream &output)
|
||||
{
|
||||
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
|
||||
output << "solid OpenSCAD_Model\n";
|
||||
const Vector3f *verts = &trimesh.vertices.front();
|
||||
BOOST_FOREACH(const IndexedTriangle &t, trimesh.triangles) {
|
||||
assert(t[0] < trimesh.vertices.size());
|
||||
assert(t[1] < trimesh.vertices.size());
|
||||
assert(t[2] < trimesh.vertices.size());
|
||||
|
||||
Vector3f p[3];
|
||||
p[0] = verts[t[0]];
|
||||
p[1] = verts[t[1]];
|
||||
p[2] = verts[t[2]];
|
||||
std::stringstream stream;
|
||||
stream << p[0][0] << " " << p[0][1] << " " << p[0][2];
|
||||
std::string vs1 = stream.str();
|
||||
stream.str("");
|
||||
stream << p[1][0] << " " << p[1][1] << " " << p[1][2];
|
||||
std::string vs2 = stream.str();
|
||||
stream.str("");
|
||||
stream << p[2][0] << " " << p[2][1] << " " << p[2][2];
|
||||
std::string vs3 = stream.str();
|
||||
// if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
|
||||
// The above condition ensures that there are 3 distinct vertices, but
|
||||
// they may be collinear. If they are, the unit normal is meaningless
|
||||
// so the default value of "1 0 0" can be used. If the vertices are not
|
||||
// collinear then the unit normal must be calculated from the
|
||||
// components.
|
||||
Vector3f normal = (p[1] - p[0]).cross(p[2] - p[0]);
|
||||
normal.normalize();
|
||||
output << " facet normal " << normal[0] << " " << normal[1] << " " << normal[2] << "\n";
|
||||
output << " outer loop\n";
|
||||
|
||||
for (int i=0;i<3;i++) {
|
||||
output << " vertex " << p[i][0] << " " << p[i][1] << " " << p[i][2] << "\n";
|
||||
}
|
||||
output << " endloop\n";
|
||||
output << " endfacet\n";
|
||||
// }
|
||||
}
|
||||
output << "endsolid OpenSCAD_Model\n";
|
||||
setlocale(LC_NUMERIC, ""); // Set default locale
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
file format:
|
||||
1. polygon coordinates (x,y,z) are comma separated (+/- spaces) and
|
||||
each coordinate is on a separate line
|
||||
2. each polygon is separated by one or more blank lines
|
||||
*/
|
||||
bool import_polygon(IndexedPolygons &polyhole, const std::string &filename)
|
||||
{
|
||||
Reindexer<Vector3f> uniqueVertices;
|
||||
std::ifstream ifs(filename.c_str());
|
||||
if (!ifs) return false;
|
||||
|
||||
std::string line;
|
||||
IndexedFace polygon;
|
||||
while (std::getline(ifs, line)) {
|
||||
std::stringstream ss(line);
|
||||
double X = 0.0, Y = 0.0, Z = 0.0;
|
||||
if (!(ss >> X)) {
|
||||
//ie blank lines => flag start of next polygon
|
||||
if (polygon.size() > 0) polyhole.faces.push_back(polygon);
|
||||
polygon.clear();
|
||||
continue;
|
||||
}
|
||||
char c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Y)) {
|
||||
std::cerr << "Y error\n";
|
||||
return false;
|
||||
}
|
||||
c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Z)) {
|
||||
std::cerr << "Z error\n";
|
||||
return false;
|
||||
}
|
||||
polygon.push_back(uniqueVertices.lookup(Vector3f(X, Y, Z)));
|
||||
}
|
||||
if (polygon.size() > 0) polyhole.faces.push_back(polygon);
|
||||
ifs.close();
|
||||
uniqueVertices.copy(std::back_inserter(polyhole.vertices));
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
OpenSCAD::debug = "GeometryUtils";
|
||||
|
||||
IndexedPolygons polyhole;
|
||||
Vector3f *normal = NULL;
|
||||
if (argc >= 2) {
|
||||
if (!import_polygon(polyhole, argv[1])) {
|
||||
std::cerr << "Error importing polygon" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
std::cerr << "Imported " << polyhole.faces.size() << " polygons" << std::endl;
|
||||
|
||||
if (argc == 3) {
|
||||
std::vector<std::string> strs;
|
||||
std::vector<double> normalvec;
|
||||
std::string arg(argv[2]);
|
||||
boost::split(strs, arg, boost::is_any_of(","));
|
||||
assert(strs.size() == 3);
|
||||
BOOST_FOREACH(const std::string &s, strs) normalvec.push_back(boost::lexical_cast<double>(s));
|
||||
normal = new Vector3f(normalvec[0], normalvec[1], normalvec[2]);
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
//construct two non-intersecting nested polygons
|
||||
Reindexer<Vector3f> uniqueVertices;
|
||||
IndexedFace polygon1;
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(0,0,0)));
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(2,0,0)));
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(2,2,0)));
|
||||
polygon1.push_back(uniqueVertices.lookup(Vector3f(0,2,0)));
|
||||
IndexedFace polygon2;
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(0.5,0.5,0)));
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(1.5,0.5,0)));
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(1.5,1.5,0)));
|
||||
polygon2.push_back(uniqueVertices.lookup(Vector3f(0.5,1.5,0)));
|
||||
polyhole.faces.push_back(polygon1);
|
||||
polyhole.faces.push_back(polygon2);
|
||||
uniqueVertices.copy(std::back_inserter(polyhole.vertices));
|
||||
}
|
||||
|
||||
std::vector<IndexedTriangle> triangles;
|
||||
bool ok = GeometryUtils::tessellatePolygonWithHoles(&polyhole.vertices.front(), polyhole.faces, triangles, normal);
|
||||
std::cerr << "Tessellated into " << triangles.size() << " triangles" << std::endl;
|
||||
|
||||
IndexedTriangleMesh trimesh;
|
||||
trimesh.vertices = polyhole.vertices;
|
||||
trimesh.triangles = triangles;
|
||||
|
||||
export_stl(trimesh, std::cout);
|
||||
}
|
||||
107
cgal/polyhole-tessellator-libtess2.pro
Normal file
107
cgal/polyhole-tessellator-libtess2.pro
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
debug: DEFINES += DEBUG
|
||||
|
||||
TEMPLATE = app
|
||||
|
||||
INCLUDEPATH += ../src ../src/libtess2/Include
|
||||
DEPENDPATH += ../src
|
||||
|
||||
# Handle custom library location.
|
||||
# Used when manually installing 3rd party libraries
|
||||
isEmpty(OPENSCAD_LIBDIR) OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES)
|
||||
macx:isEmpty(OPENSCAD_LIBDIR) {
|
||||
exists(/opt/local):exists(/usr/local/Cellar) {
|
||||
error("It seems you might have libraries in both /opt/local and /usr/local. Please specify which one to use with qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
} else {
|
||||
exists(/opt/local) {
|
||||
#Default to MacPorts on Mac OS X
|
||||
message("Automatically searching for libraries in /opt/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /opt/local
|
||||
} else:exists(/usr/local/Cellar) {
|
||||
message("Automatically searching for libraries in /usr/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /usr/local
|
||||
}
|
||||
}
|
||||
}
|
||||
!isEmpty(OPENSCAD_LIBDIR) {
|
||||
QMAKE_INCDIR = $$OPENSCAD_LIBDIR/include
|
||||
QMAKE_LIBDIR = $$OPENSCAD_LIBDIR/lib
|
||||
}
|
||||
|
||||
TARGET = polyhole-tessellator-libtess2
|
||||
CONFIG -= qt
|
||||
mac {
|
||||
CONFIG -= app_bundle
|
||||
}
|
||||
|
||||
macx {
|
||||
# Mac needs special care to link against the correct C++ library
|
||||
# We attempt to auto-detect it by inspecting Boost
|
||||
dirs = $${BOOSTDIR} $${QMAKE_LIBDIR}
|
||||
for(dir, dirs) {
|
||||
system(grep -q __112basic_string $${dir}/libboost_thread* >& /dev/null) {
|
||||
message("Detected libc++-linked boost in $${dir}")
|
||||
CONFIG += libc++
|
||||
}
|
||||
}
|
||||
|
||||
libc++ {
|
||||
QMAKE_CXXFLAGS += -stdlib=libc++
|
||||
QMAKE_LFLAGS += -stdlib=libc++
|
||||
QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++
|
||||
# libc++ on requires Mac OS X 10.7+
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
|
||||
}
|
||||
}
|
||||
|
||||
# See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs.
|
||||
*g++* {
|
||||
QMAKE_CXXFLAGS *= -fno-strict-aliasing
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-local-typedefs # ignored before 4.8
|
||||
}
|
||||
|
||||
*clang* {
|
||||
# http://llvm.org/bugs/show_bug.cgi?id=9182
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual
|
||||
# disable enormous amount of warnings about CGAL / boost / etc
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-variable
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-c++11-extensions
|
||||
# might want to actually turn this on once in a while
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-format-security
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Application configuration
|
||||
CONFIG += cgal
|
||||
CONFIG += boost
|
||||
CONFIG += eigen
|
||||
CONFIG += gettext
|
||||
|
||||
include(../common.pri)
|
||||
|
||||
HEADERS += ../src/GeometryUtils.cc \
|
||||
../src/linalg.h \
|
||||
../src/printutils.h \
|
||||
../src/grid.h \
|
||||
../src/libtess2/Include/tesselator.h \
|
||||
../src/libtess2/Source/bucketalloc.h \
|
||||
../src/libtess2/Source/dict.h \
|
||||
../src/libtess2/Source/geom.h \
|
||||
../src/libtess2/Source/mesh.h \
|
||||
../src/libtess2/Source/priorityq.h \
|
||||
../src/libtess2/Source/sweep.h \
|
||||
../src/libtess2/Source/tess.h
|
||||
|
||||
SOURCES += polyhole-tessellator-libtess2.cpp \
|
||||
../src/GeometryUtils.cc \
|
||||
../src/printutils.cc \
|
||||
../src/grid.cc \
|
||||
../src/libtess2/Source/bucketalloc.c \
|
||||
../src/libtess2/Source/dict.c \
|
||||
../src/libtess2/Source/geom.c \
|
||||
../src/libtess2/Source/mesh.c \
|
||||
../src/libtess2/Source/priorityq.c \
|
||||
../src/libtess2/Source/sweep.c \
|
||||
../src/libtess2/Source/tess.c
|
||||
140
cgal/polyhole-tessellator.cpp
Normal file
140
cgal/polyhole-tessellator.cpp
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
#include <boost/foreach.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include <sstream>
|
||||
#include <iostream>
|
||||
#include <locale.h>
|
||||
|
||||
#include "cgalutils.h"
|
||||
|
||||
|
||||
|
||||
// Nef polyhedron are using CGAL_Kernel3 (Cartesian<Gmpq>)
|
||||
// Triangulation will use Epick
|
||||
|
||||
static void export_stl(const Polygons &triangles, std::ostream &output)
|
||||
{
|
||||
setlocale(LC_NUMERIC, "C"); // Ensure radix is . (not ,) in output
|
||||
output << "solid OpenSCAD_Model\n";
|
||||
BOOST_FOREACH(const Polygon &p, triangles) {
|
||||
assert(p.size() == 3); // STL only allows triangles
|
||||
std::stringstream stream;
|
||||
stream << p[0][0] << " " << p[0][1] << " " << p[0][2];
|
||||
std::string vs1 = stream.str();
|
||||
stream.str("");
|
||||
stream << p[1][0] << " " << p[1][1] << " " << p[1][2];
|
||||
std::string vs2 = stream.str();
|
||||
stream.str("");
|
||||
stream << p[2][0] << " " << p[2][1] << " " << p[2][2];
|
||||
std::string vs3 = stream.str();
|
||||
if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) {
|
||||
// The above condition ensures that there are 3 distinct vertices, but
|
||||
// they may be collinear. If they are, the unit normal is meaningless
|
||||
// so the default value of "1 0 0" can be used. If the vertices are not
|
||||
// collinear then the unit normal must be calculated from the
|
||||
// components.
|
||||
Vector3d normal = (p[1] - p[0]).cross(p[2] - p[0]);
|
||||
normal.normalize();
|
||||
output << " facet normal " << normal[0] << " " << normal[1] << " " << normal[2] << "\n";
|
||||
output << " outer loop\n";
|
||||
|
||||
BOOST_FOREACH(const Vector3d &v, p) {
|
||||
output << " vertex " << v[0] << " " << v[1] << " " << v[2] << "\n";
|
||||
}
|
||||
output << " endloop\n";
|
||||
output << " endfacet\n";
|
||||
}
|
||||
}
|
||||
output << "endsolid OpenSCAD_Model\n";
|
||||
setlocale(LC_NUMERIC, ""); // Set default locale
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
file format:
|
||||
1. polygon coordinates (x,y,z) are comma separated (+/- spaces) and
|
||||
each coordinate is on a separate line
|
||||
2. each polygon is separated by one or more blank lines
|
||||
*/
|
||||
bool import_polygon(PolyholeK &polyhole, const std::string &filename)
|
||||
{
|
||||
std::ifstream ifs(filename.c_str());
|
||||
if (!ifs) return false;
|
||||
|
||||
std::string line;
|
||||
PolygonK polygon;
|
||||
while (std::getline(ifs, line)) {
|
||||
std::stringstream ss(line);
|
||||
double X = 0.0, Y = 0.0, Z = 0.0;
|
||||
if (!(ss >> X)) {
|
||||
//ie blank lines => flag start of next polygon
|
||||
if (polygon.size() > 0) polyhole.push_back(polygon);
|
||||
polygon.clear();
|
||||
continue;
|
||||
}
|
||||
char c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Y)) {
|
||||
std::cerr << "Y error\n";
|
||||
return false;
|
||||
}
|
||||
c = ss.peek();
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces before comma
|
||||
if (c == ',') {ss.read(&c, 1); c = ss.peek();} //gobble comma
|
||||
while (c == ' ') {ss.read(&c, 1); c = ss.peek();} //gobble spaces after comma
|
||||
if (!(ss >> Z)) {
|
||||
std::cerr << "Z error\n";
|
||||
return false;
|
||||
}
|
||||
polygon.push_back(Vertex3K(X, Y, Z));
|
||||
}
|
||||
if (polygon.size() > 0) polyhole.push_back(polygon);
|
||||
ifs.close();
|
||||
return true;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
PolyholeK polyhole;
|
||||
K::Vector_3 *normal = NULL;
|
||||
if (argc >= 2) {
|
||||
if (!import_polygon(polyhole, argv[1])) {
|
||||
std::cerr << "Error importing polygon" << std::endl;
|
||||
exit(1);
|
||||
}
|
||||
std::cerr << "Imported " << polyhole.size() << " polygons" << std::endl;
|
||||
|
||||
if (argc == 3) {
|
||||
std::vector<std::string> strs;
|
||||
std::vector<double> normalvec;
|
||||
std::string arg(argv[2]);
|
||||
boost::split(strs, arg, boost::is_any_of(","));
|
||||
assert(strs.size() == 3);
|
||||
BOOST_FOREACH(const std::string &s, strs) normalvec.push_back(boost::lexical_cast<double>(s));
|
||||
normal = new K::Vector_3(normalvec[0], normalvec[1], normalvec[2]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
//construct two non-intersecting nested polygons
|
||||
PolygonK polygon1;
|
||||
polygon1.push_back(Vertex3K(0,0,0));
|
||||
polygon1.push_back(Vertex3K(2,0,0));
|
||||
polygon1.push_back(Vertex3K(2,2,0));
|
||||
polygon1.push_back(Vertex3K(0,2,0));
|
||||
PolygonK polygon2;
|
||||
polygon2.push_back(Vertex3K(0.5,0.5,0));
|
||||
polygon2.push_back(Vertex3K(1.5,0.5,0));
|
||||
polygon2.push_back(Vertex3K(1.5,1.5,0));
|
||||
polygon2.push_back(Vertex3K(0.5,1.5,0));
|
||||
polyhole.push_back(polygon1);
|
||||
polyhole.push_back(polygon2);
|
||||
}
|
||||
|
||||
Polygons triangles;
|
||||
bool ok = CGALUtils::tessellatePolygonWithHoles(polyhole, triangles, normal);
|
||||
std::cerr << "Tessellated into " << triangles.size() << " triangles" << std::endl;
|
||||
|
||||
export_stl(triangles, std::cout);
|
||||
}
|
||||
90
cgal/polyhole-tessellator.pro
Normal file
90
cgal/polyhole-tessellator.pro
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
debug: DEFINES += DEBUG
|
||||
|
||||
TEMPLATE = app
|
||||
|
||||
INCLUDEPATH += ../src
|
||||
DEPENDPATH += ../src
|
||||
|
||||
# Handle custom library location.
|
||||
# Used when manually installing 3rd party libraries
|
||||
isEmpty(OPENSCAD_LIBDIR) OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES)
|
||||
macx:isEmpty(OPENSCAD_LIBDIR) {
|
||||
exists(/opt/local):exists(/usr/local/Cellar) {
|
||||
error("It seems you might have libraries in both /opt/local and /usr/local. Please specify which one to use with qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
} else {
|
||||
exists(/opt/local) {
|
||||
#Default to MacPorts on Mac OS X
|
||||
message("Automatically searching for libraries in /opt/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /opt/local
|
||||
} else:exists(/usr/local/Cellar) {
|
||||
message("Automatically searching for libraries in /usr/local. To override, use qmake OPENSCAD_LIBDIR=<prefix>")
|
||||
OPENSCAD_LIBDIR = /usr/local
|
||||
}
|
||||
}
|
||||
}
|
||||
!isEmpty(OPENSCAD_LIBDIR) {
|
||||
QMAKE_INCDIR = $$OPENSCAD_LIBDIR/include
|
||||
QMAKE_LIBDIR = $$OPENSCAD_LIBDIR/lib
|
||||
}
|
||||
|
||||
TARGET = polyhole-tessellator
|
||||
mac {
|
||||
CONFIG -= app_bundle
|
||||
}
|
||||
|
||||
macx {
|
||||
# Mac needs special care to link against the correct C++ library
|
||||
# We attempt to auto-detect it by inspecting Boost
|
||||
dirs = $${BOOSTDIR} $${QMAKE_LIBDIR}
|
||||
for(dir, dirs) {
|
||||
system(grep -q __112basic_string $${dir}/libboost_thread* >& /dev/null) {
|
||||
message("Detected libc++-linked boost in $${dir}")
|
||||
CONFIG += libc++
|
||||
}
|
||||
}
|
||||
|
||||
libc++ {
|
||||
QMAKE_CXXFLAGS += -stdlib=libc++
|
||||
QMAKE_LFLAGS += -stdlib=libc++
|
||||
QMAKE_OBJECTIVE_CFLAGS += -stdlib=libc++
|
||||
# libc++ on requires Mac OS X 10.7+
|
||||
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.7
|
||||
}
|
||||
}
|
||||
|
||||
# See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs.
|
||||
*g++* {
|
||||
QMAKE_CXXFLAGS *= -fno-strict-aliasing
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-local-typedefs # ignored before 4.8
|
||||
}
|
||||
|
||||
*clang* {
|
||||
# http://llvm.org/bugs/show_bug.cgi?id=9182
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-overloaded-virtual
|
||||
# disable enormous amount of warnings about CGAL / boost / etc
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-parameter
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-variable
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-function
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-c++11-extensions
|
||||
# might want to actually turn this on once in a while
|
||||
QMAKE_CXXFLAGS_WARN_ON += -Wno-format-security
|
||||
}
|
||||
|
||||
|
||||
|
||||
# Application configuration
|
||||
CONFIG += cgal
|
||||
CONFIG += boost
|
||||
CONFIG += eigen
|
||||
CONFIG += gettext
|
||||
|
||||
include(../common.pri)
|
||||
|
||||
HEADERS += ../src/cgal.h \
|
||||
../src/cgalutils.h \
|
||||
../src/linalg.h \
|
||||
../src/printutils.h
|
||||
|
||||
SOURCES += polyhole-tessellator.cpp \
|
||||
../src/cgalutils-tess.cc \
|
||||
../src/printutils.cc
|
||||
36
color-schemes/editor/dark-background.json
Normal file
36
color-schemes/editor/dark-background.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name" : "For Dark Background",
|
||||
"index" : 1100,
|
||||
"paper" : "#222222",
|
||||
"text" : "#e0e0e0",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#ffff00",
|
||||
"line-background" : "#303030"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "#90ee90",
|
||||
"keyword2" : "#56dbf0",
|
||||
"keyword3" : "#add8e6",
|
||||
"comment" : "#808080",
|
||||
"commentline" : "#808080",
|
||||
"commentdoc" : "#808080",
|
||||
"commentdockeyword" : "#808080",
|
||||
"number" : "#ff0000",
|
||||
"string" : "#e6db74",
|
||||
"operator" : "#e8b609",
|
||||
"whitespace-foreground" : "#e0e0e0",
|
||||
"selection-foreground" : "#ffffff",
|
||||
"selection-background" : "#4a90d9",
|
||||
"margin-background" : "#272822",
|
||||
"margin-foreground" : "Gray",
|
||||
"matched-brace-background" : "#505050",
|
||||
"matched-brace-foreground" : "#ffffff",
|
||||
"unmatched-brace-background" : "#dc322f",
|
||||
"unmatched-brace-foreground" : "#fdf6e3",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#60ff0000",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#ffffff"
|
||||
}
|
||||
}
|
||||
36
color-schemes/editor/light-background.json
Normal file
36
color-schemes/editor/light-background.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name" : "For Light Background",
|
||||
"index" : 1000,
|
||||
"paper" : "#ffffff",
|
||||
"text" : "#272822",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#000000",
|
||||
"line-background" : "#f8f8f8"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "Green",
|
||||
"keyword2" : "Green",
|
||||
"keyword3" : "DarkBlue",
|
||||
"comment" : "DarkCyan",
|
||||
"commentline" : "DarkCyan",
|
||||
"commentdoc" : "DarkCyan",
|
||||
"commentdockeyword" : "DarkCyan",
|
||||
"number" : "DarkRed",
|
||||
"string" : "DarkMagenta",
|
||||
"operator" : "Blue",
|
||||
"whitespace-foreground" : "#272822",
|
||||
"selection-foreground" : "#ffffff",
|
||||
"selection-background" : "#4a90d9",
|
||||
"margin-background" : "#f8f8f8",
|
||||
"margin-foreground" : "Gray",
|
||||
"matched-brace-background" : "#c7f6cb",
|
||||
"matched-brace-foreground" : "Blue",
|
||||
"unmatched-brace-background" : "#ffcdcc",
|
||||
"unmatched-brace-foreground" : "Blue",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#60ff0000",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#ffffff"
|
||||
}
|
||||
}
|
||||
36
color-schemes/editor/monokai.json
Normal file
36
color-schemes/editor/monokai.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name" : "Monokai",
|
||||
"index" : 1200,
|
||||
"paper" : "#272822",
|
||||
"text" : "#f8f8f2",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#f8f8f2",
|
||||
"line-background" : "#49483e"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "#f92672",
|
||||
"keyword2" : "#a6e22e",
|
||||
"keyword3" : "#66d9ef",
|
||||
"comment" : "#75715e",
|
||||
"commentline" : "#75715e",
|
||||
"commentdoc" : "#75715e",
|
||||
"commentdockeyword" : "#7b9a3c",
|
||||
"number" : "#ae81ff",
|
||||
"string" : "#e6db74",
|
||||
"operator" : "#f8f8f2",
|
||||
"whitespace-foreground" : "#f8f8f2",
|
||||
"selection-foreground" : "#272822",
|
||||
"selection-background" : "#f8f8f2",
|
||||
"margin-background" : "#3e3d32",
|
||||
"margin-foreground" : "DarkGray",
|
||||
"matched-brace-background" : "#606060",
|
||||
"matched-brace-foreground" : "#ffff00",
|
||||
"unmatched-brace-background" : "#b06060",
|
||||
"unmatched-brace-foreground" : "#ffff00",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#80ffe0e0",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#ffffff"
|
||||
}
|
||||
}
|
||||
36
color-schemes/editor/solarized-dark.json
Normal file
36
color-schemes/editor/solarized-dark.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name" : "Solarized (dark)",
|
||||
"index" : 1310,
|
||||
"paper" : "#002b36",
|
||||
"text" : "#839496",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#fff070",
|
||||
"line-background" : "#073642"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "#268ad1",
|
||||
"keyword2" : "#2aa198",
|
||||
"keyword3" : "#859900",
|
||||
"comment" : "#657b83",
|
||||
"commentline" : "#657b83",
|
||||
"commentdoc" : "#657b83",
|
||||
"commentdockeyword" : "#6c71c4",
|
||||
"number" : "#d33682",
|
||||
"string" : "#b58900",
|
||||
"operator" : "#cb4b16",
|
||||
"whitespace-foreground" : "#839496",
|
||||
"selection-foreground" : "#fdf6e3",
|
||||
"selection-background" : "#657b83",
|
||||
"margin-background" : "#002b36",
|
||||
"margin-foreground" : "#839496",
|
||||
"matched-brace-background" : "#0c4e22",
|
||||
"matched-brace-foreground" : "#fff070",
|
||||
"unmatched-brace-background" : "#92211f",
|
||||
"unmatched-brace-foreground" : "#fff070",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#90ff8080",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#d33682"
|
||||
}
|
||||
}
|
||||
36
color-schemes/editor/solarized-light.json
Normal file
36
color-schemes/editor/solarized-light.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name" : "Solarized (light)",
|
||||
"index" : 1300,
|
||||
"paper" : "#fdf6e3",
|
||||
"text" : "#657b83",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#000000",
|
||||
"line-background" : "#eee8d5"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "#268ad1",
|
||||
"keyword2" : "#2aa198",
|
||||
"keyword3" : "#859900",
|
||||
"comment" : "#93a1a1",
|
||||
"commentline" : "#93a1a1",
|
||||
"commentdoc" : "#93a1a1",
|
||||
"commentdockeyword" : "#6c71c4",
|
||||
"number" : "#d33682",
|
||||
"string" : "#b58900",
|
||||
"operator" : "#cb4b16",
|
||||
"whitespace-foreground" : "#657b83",
|
||||
"selection-foreground" : "#fdf6e3",
|
||||
"selection-background" : "#657b83",
|
||||
"margin-background" : "#eee8d5",
|
||||
"margin-foreground" : "#657b83",
|
||||
"matched-brace-background" : "#c7f6cb",
|
||||
"matched-brace-foreground" : "#cb4b16",
|
||||
"unmatched-brace-background" : "#ffcdcc",
|
||||
"unmatched-brace-foreground" : "#cb4b16",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#80ff0000",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#d33682"
|
||||
}
|
||||
}
|
||||
36
color-schemes/editor/tomorrow-night.json
Normal file
36
color-schemes/editor/tomorrow-night.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name" : "Tomorrow Night",
|
||||
"index" : 1600,
|
||||
"paper" : "#1d1f21",
|
||||
"text" : "#c5c8c6",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#ffffff",
|
||||
"line-background" : "#282a2e"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "#de935f",
|
||||
"keyword2" : "#b294bb",
|
||||
"keyword3" : "#81a2be",
|
||||
"comment" : "#969896",
|
||||
"commentline" : "#969896",
|
||||
"commentdoc" : "#969896",
|
||||
"commentdockeyword" : "#f0c674",
|
||||
"number" : "#cc6666",
|
||||
"string" : "#b5bd68",
|
||||
"operator" : "#8abeb7",
|
||||
"whitespace-foreground" : "#c5c8c6",
|
||||
"selection-foreground" : "#373b41",
|
||||
"selection-background" : "#c5c8c6",
|
||||
"margin-background" : "#1d1f21",
|
||||
"margin-foreground" : "#969896",
|
||||
"matched-brace-background" : "#50545c",
|
||||
"matched-brace-foreground" : "#e2e6e3",
|
||||
"unmatched-brace-background" : "#8a1111",
|
||||
"unmatched-brace-foreground" : "#e2e6e3",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#80ff0000",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#d33682"
|
||||
}
|
||||
}
|
||||
36
color-schemes/editor/tomorrow.json
Normal file
36
color-schemes/editor/tomorrow.json
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
{
|
||||
"name" : "Tomorrow",
|
||||
"index" : 1500,
|
||||
"paper" : "#f8f8f8",
|
||||
"text" : "#4d4d4c",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#000000",
|
||||
"line-background" : "#efefef"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "#f5871f",
|
||||
"keyword2" : "#8959a8",
|
||||
"keyword3" : "#4271ae",
|
||||
"comment" : "#8e908c",
|
||||
"commentline" : "#8e908c",
|
||||
"commentdoc" : "#8e908c",
|
||||
"commentdockeyword" : "#eab700",
|
||||
"number" : "#c82829",
|
||||
"string" : "#718c00",
|
||||
"operator" : "#3e999f",
|
||||
"whitespace-foreground" : "#4d4d4c",
|
||||
"selection-foreground" : "#4d4d4c",
|
||||
"selection-background" : "#d6d6d6",
|
||||
"margin-background" : "#f8f8f8",
|
||||
"margin-foreground" : "#4d4d4c",
|
||||
"matched-brace-background" : "#c7f6cb",
|
||||
"matched-brace-foreground" : "#4d4d4c",
|
||||
"unmatched-brace-background" : "#ffcdcc",
|
||||
"unmatched-brace-foreground" : "#4d4d4c",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#80ff0000",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#d33682"
|
||||
}
|
||||
}
|
||||
41
color-schemes/editor/visualstudio.json
Normal file
41
color-schemes/editor/visualstudio.json
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"name" : "Visual Studio",
|
||||
"index" : 1400,
|
||||
"paper" : "#ffffff",
|
||||
"text" : "#101010",
|
||||
"caret" : {
|
||||
"width" : 2,
|
||||
"foreground" : "#000000",
|
||||
"line-background" : "#eeeeee"
|
||||
},
|
||||
"colors" : {
|
||||
"keyword1" : "blue",
|
||||
"keyword2" : "blue",
|
||||
"keyword3" : "#2B91AF",
|
||||
"comment" : "DarkGreen",
|
||||
"commentline" : "DarkGreen",
|
||||
"commentdoc" : "#DarkGreen",
|
||||
"commentdockeyword" : "#DarkGreen",
|
||||
"number" : "DarkRed",
|
||||
"string" : "#A31515",
|
||||
"operator" : "Blue",
|
||||
"whitespace-foreground" : "#101010",
|
||||
"selection-foreground" : "black",
|
||||
"selection-background" : "lightblue",
|
||||
"margin-background" : "white",
|
||||
"margin-foreground" : "#2B91AF",
|
||||
"matched-brace-background" : "darkgrey",
|
||||
"matched-brace-foreground" : "black",
|
||||
"unmatched-brace-background" : "red",
|
||||
"unmatched-brace-foreground" : "#ffffff",
|
||||
"error-marker" : "#ff0000",
|
||||
"error-indicator" : "#60ff0000",
|
||||
"error-indicator-outline" : "#ff000000",
|
||||
"edge" : "#ffffff"
|
||||
},
|
||||
"keywords" : {
|
||||
"keyword-set1" : "if else let for module function true false undef include use",
|
||||
"keyword-set2" : "abs sign rands min max sin cos asin acos tan atan atan2 round ceil floor pow sqrt exp len log ln str chr concat lookup search version version_num norm cross parent_module dxf_dim dxf_cross",
|
||||
"keyword-set3" : "cube sphere cylinder polyhedron square circle polygon text minkowski hull resize child echo union difference intersection linear_extrude rotate_extrude import group projection render surface scale rotate mirror translate multmatrix color offset"
|
||||
}
|
||||
}
|
||||
44
color-schemes/readme.txt
Normal file
44
color-schemes/readme.txt
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
Color Schemes
|
||||
=============
|
||||
|
||||
Solarized
|
||||
---------
|
||||
|
||||
http://ethanschoonover.com/solarized
|
||||
|
||||
Monokai
|
||||
-------
|
||||
|
||||
http://www.monokai.nl/blog/2006/07/15/textmate-color-theme/
|
||||
|
||||
Tomorrow / Tomorrow Night
|
||||
-------------------------
|
||||
|
||||
https://github.com/chriskempson/tomorrow-theme
|
||||
|
||||
Editor:
|
||||
|
||||
keyword1 Orange
|
||||
keyword2 Purple
|
||||
keyword3 Blue
|
||||
comment Comment
|
||||
commentline Comment
|
||||
commentdoc Comment
|
||||
commentdockeyword Yellow
|
||||
number Red
|
||||
string Green
|
||||
operator Aqua
|
||||
selection-foreground Foreground
|
||||
selection-background Selection
|
||||
|
||||
Render:
|
||||
|
||||
opencsg-face-front Blue
|
||||
opencsg-face-back Orange
|
||||
cgal-face-front Aqua
|
||||
cgal-face-back Yellow
|
||||
cgal-face-2d Green
|
||||
cgal-edge-front Foreground
|
||||
cgal-edge-back Foreground
|
||||
cgal-edge-2d Red
|
||||
crosshair Purple
|
||||
18
color-schemes/render/beforedawn.json
Normal file
18
color-schemes/render/beforedawn.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "BeforeDawn",
|
||||
"index" : 1400,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#333333",
|
||||
"opencsg-face-front" : "#cccccc",
|
||||
"opencsg-face-back" : "#5563dd",
|
||||
"cgal-face-front" : "#cccccc",
|
||||
"cgal-face-back" : "#5563dd",
|
||||
"cgal-face-2d" : "#00bf99",
|
||||
"cgal-edge-front" : "#ff0000",
|
||||
"cgal-edge-back" : "#ff0000",
|
||||
"cgal-edge-2d" : "#ff0000",
|
||||
"crosshair" : "#f0f0f0"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/deepocean.json
Normal file
18
color-schemes/render/deepocean.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "DeepOcean",
|
||||
"index" : 1600,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#333333",
|
||||
"opencsg-face-front" : "#eeeeee",
|
||||
"opencsg-face-back" : "#0babc8",
|
||||
"cgal-face-front" : "#eeeeee",
|
||||
"cgal-face-back" : "#0babc8",
|
||||
"cgal-face-2d" : "#9370db",
|
||||
"cgal-edge-front" : "#0000ff",
|
||||
"cgal-edge-back" : "#0000ff",
|
||||
"cgal-edge-2d" : "#ff00ff",
|
||||
"crosshair" : "#f0f0f0"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/metallic.json
Normal file
18
color-schemes/render/metallic.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "Metallic",
|
||||
"index" : 1100,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#aaaaff",
|
||||
"opencsg-face-front" : "#ddddff",
|
||||
"opencsg-face-back" : "#dd22dd",
|
||||
"cgal-face-front" : "#ddddff",
|
||||
"cgal-face-back" : "#dd22dd",
|
||||
"cgal-face-2d" : "#00bf99",
|
||||
"cgal-edge-front" : "#ff0000",
|
||||
"cgal-edge-back" : "#ff0000",
|
||||
"cgal-edge-2d" : "#ff0000",
|
||||
"crosshair" : "#800000"
|
||||
}
|
||||
}
|
||||
19
color-schemes/render/monotone.json
Normal file
19
color-schemes/render/monotone.json
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"name" : "Monotone",
|
||||
"index" : 9999,
|
||||
"show-in-gui" : false,
|
||||
"description" : "Color scheme with no difference between 'back face' and 'front face'",
|
||||
|
||||
"colors" : {
|
||||
"background" : "#ffffe5",
|
||||
"opencsg-face-front" : "#f9d72c",
|
||||
"opencsg-face-back" : "#f9d72c",
|
||||
"cgal-face-front" : "#f9d72c",
|
||||
"cgal-face-back" : "#f9d72c",
|
||||
"cgal-face-2d" : "#00bf99",
|
||||
"cgal-edge-front" : "#ff0000",
|
||||
"cgal-edge-back" : "#ff0000",
|
||||
"cgal-edge-2d" : "#ff0000",
|
||||
"crosshair" : "#800000"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/nature.json
Normal file
18
color-schemes/render/nature.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "Nature",
|
||||
"index" : 1500,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#fafafa",
|
||||
"opencsg-face-front" : "#16a085",
|
||||
"opencsg-face-back" : "#dbf4da",
|
||||
"cgal-face-front" : "#16a085",
|
||||
"cgal-face-back" : "#dbf4da",
|
||||
"cgal-face-2d" : "#00bf99",
|
||||
"cgal-edge-front" : "#ff0000",
|
||||
"cgal-edge-back" : "#ff0000",
|
||||
"cgal-edge-2d" : "#ff0000",
|
||||
"crosshair" : "#111111"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/solarized.json
Normal file
18
color-schemes/render/solarized.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "Solarized",
|
||||
"index" : 1700,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#fdf6e3",
|
||||
"opencsg-face-front" : "#b58800",
|
||||
"opencsg-face-back" : "#882233",
|
||||
"cgal-face-front" : "#b58800",
|
||||
"cgal-face-back" : "#882233",
|
||||
"cgal-face-2d" : "#6c71c4",
|
||||
"cgal-edge-front" : "#b58800",
|
||||
"cgal-edge-back" : "#b58800",
|
||||
"cgal-edge-2d" : "#b58800",
|
||||
"crosshair" : "#800000"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/starnight.json
Normal file
18
color-schemes/render/starnight.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "Starnight",
|
||||
"index" : 1300,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#000000",
|
||||
"opencsg-face-front" : "#ffffe0",
|
||||
"opencsg-face-back" : "#00ffff",
|
||||
"cgal-face-front" : "#ffffe0",
|
||||
"cgal-face-back" : "#00ffff",
|
||||
"cgal-face-2d" : "#9370db",
|
||||
"cgal-edge-front" : "#0000ff",
|
||||
"cgal-edge-back" : "#0000ff",
|
||||
"cgal-edge-2d" : "#ff00ff",
|
||||
"crosshair" : "#f0f0f0"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/sunset.json
Normal file
18
color-schemes/render/sunset.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "Sunset",
|
||||
"index" : 1200,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#aa4444",
|
||||
"opencsg-face-front" : "#ffaaaa",
|
||||
"opencsg-face-back" : "#882233",
|
||||
"cgal-face-front" : "#ffaaaa",
|
||||
"cgal-face-back" : "#882233",
|
||||
"cgal-face-2d" : "#00bf99",
|
||||
"cgal-edge-front" : "#ff0000",
|
||||
"cgal-edge-back" : "#ff0000",
|
||||
"cgal-edge-2d" : "#ff0000",
|
||||
"crosshair" : "#800000"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/tomorrow-night.json
Normal file
18
color-schemes/render/tomorrow-night.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "Tomorrow Night",
|
||||
"index" : 1900,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#1d1f21",
|
||||
"opencsg-face-front" : "#81a2be",
|
||||
"opencsg-face-back" : "#de935f",
|
||||
"cgal-face-front" : "#8abeb7",
|
||||
"cgal-face-back" : "#f0c674",
|
||||
"cgal-face-2d" : "#b5bd68",
|
||||
"cgal-edge-front" : "#c5c8c6",
|
||||
"cgal-edge-back" : "#c5c8c6",
|
||||
"cgal-edge-2d" : "#cc6666",
|
||||
"crosshair" : "#b294bb"
|
||||
}
|
||||
}
|
||||
18
color-schemes/render/tomorrow.json
Normal file
18
color-schemes/render/tomorrow.json
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{
|
||||
"name" : "Tomorrow",
|
||||
"index" : 1800,
|
||||
"show-in-gui" : true,
|
||||
|
||||
"colors" : {
|
||||
"background" : "#f8f8f8",
|
||||
"opencsg-face-front" : "#4271ae",
|
||||
"opencsg-face-back" : "#f5871f",
|
||||
"cgal-face-front" : "#3e999f",
|
||||
"cgal-face-back" : "#eab700",
|
||||
"cgal-face-2d" : "#718c00",
|
||||
"cgal-edge-front" : "#4d4d4c",
|
||||
"cgal-edge-back" : "#4d4d4c",
|
||||
"cgal-edge-2d" : "#c82829",
|
||||
"crosshair" : "#8959a8"
|
||||
}
|
||||
}
|
||||
|
|
@ -12,4 +12,9 @@ include(glew.pri)
|
|||
include(eigen.pri)
|
||||
include(boost.pri)
|
||||
include(glib-2.0.pri)
|
||||
include(gettext.pri)
|
||||
include(sparkle.pri)
|
||||
include(harfbuzz.pri)
|
||||
include(freetype.pri)
|
||||
include(fontconfig.pri)
|
||||
include(scintilla.pri)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<!--
|
||||
(cc) Michael Thomson <openscad.org@m-thomson.net>
|
||||
|
||||
OpenSCAD syntax highlights in BBEdit/TextWrangler by Michael Thomson
|
||||
is licensed under a Creative Commons Attribution 4.0 International License.
|
||||
http://creativecommons.org/licenses/by/4.0/
|
||||
|
||||
Master copy in OpenSCAD Distribution:
|
||||
https://github.com/openscad/openscad/tree/master/contrib
|
||||
|
||||
Also Published on Thingiverse:
|
||||
http://www.thingiverse.com/thing:15244/
|
||||
|
||||
Based on OpenSCAD 2014.03, documented here:
|
||||
http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language
|
||||
|
||||
Version History
|
||||
2011-12-31 Initial version
|
||||
2014-05-24 Updated for OpenSCAD 2014.03
|
||||
-->
|
||||
|
||||
<dict>
|
||||
<key>BBEditDocumentType</key>
|
||||
<string>CodelessLanguageModule</string>
|
||||
|
|
@ -8,54 +29,158 @@
|
|||
<true/>
|
||||
<key>BBLMColorsSyntax</key>
|
||||
<true/>
|
||||
<key>BBLMCommentLineDefault</key>
|
||||
<string>//</string>
|
||||
<key>BBLMCommentPrefixDefault</key>
|
||||
<string>/*</string>
|
||||
<key>BBLMCommentSuffixDefault</key>
|
||||
<string>*/</string>
|
||||
<key>BBLMIsCaseSensitive</key>
|
||||
<true/>
|
||||
<key>BBLMPredefinedNameList</key>
|
||||
<array>
|
||||
<!-- Special constants -->
|
||||
<string>true</string>
|
||||
<string>false</string>
|
||||
<string>undef</string>
|
||||
<string>PI</string>
|
||||
|
||||
<!-- Parameters -->
|
||||
<string>auto</string>
|
||||
<string>center</string>
|
||||
<string>invert</string>
|
||||
<string>size</string>
|
||||
<string>points</string>
|
||||
<string>faces</string>
|
||||
<string>convexity</string>
|
||||
<string>file</string>
|
||||
<string>layer</string>
|
||||
<string>origin</string>
|
||||
|
||||
<!-- Modifier Characters -->
|
||||
<string>%</string>
|
||||
<string>#</string> <!-- Not highlighted? -->
|
||||
<string>!</string>
|
||||
<string>*</string>
|
||||
|
||||
<!-- Special Variables -->
|
||||
<string>$fa</string>
|
||||
<string>$fs</string>
|
||||
<string>$fn</string>
|
||||
<string>$t</string>
|
||||
<string>$vpr</string>
|
||||
<string>$vpt</string>
|
||||
</array>
|
||||
|
||||
<key>BBLMKeywordList</key>
|
||||
<array>
|
||||
<string>!</string>
|
||||
<string>#</string>
|
||||
<string>$fa</string>
|
||||
<string>$fn</string>
|
||||
<string>$fs</string>
|
||||
<string>$t</string>
|
||||
<string>%</string>
|
||||
<string>*</string>
|
||||
<string>assign</string>
|
||||
<string>center</string>
|
||||
<string>circle</string>
|
||||
<string>color</string>
|
||||
<string>cube</string>
|
||||
<string>cylinder</string>
|
||||
<string>difference</string>
|
||||
<string>echo</string>
|
||||
<string>for</string>
|
||||
<string>function</string>
|
||||
<string>hull</string>
|
||||
<string>if</string>
|
||||
<string>import_dxf</string>
|
||||
<string>import_stl</string>
|
||||
<string>include</string>
|
||||
<string>intersection</string>
|
||||
<string>intersection_for</string>
|
||||
<string>linear_extrude</string>
|
||||
<string>minkowski</string>
|
||||
<string>mirror</string>
|
||||
<string>module</string>
|
||||
<string>multmatrix</string>
|
||||
<string>polygon</string>
|
||||
<string>polyhedron</string>
|
||||
<string>projection</string>
|
||||
<string>render</string>
|
||||
<string>rotate</string>
|
||||
<string>rotate_extrude</string>
|
||||
<string>scale</string>
|
||||
<string>sphere</string>
|
||||
<!--
|
||||
Based on OpenSCAD 2014.3, documented here:
|
||||
http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language
|
||||
-->
|
||||
<!-- 2D Primitives -->
|
||||
<string>square</string>
|
||||
<string>circle</string>
|
||||
<string>polygon</string>
|
||||
|
||||
<!-- Primitive Solids -->
|
||||
<string>cube</string>
|
||||
<string>sphere</string>
|
||||
<string>cylinder</string>
|
||||
<string>polyhedron</string>
|
||||
|
||||
<!-- Conditional and Iterator Functions -->
|
||||
<string>for</string>
|
||||
<string>intersection_for</string>
|
||||
<string>if</string>
|
||||
<string>else</string>
|
||||
<string>assign</string>
|
||||
|
||||
<!-- Mathematical Operators -->
|
||||
<string>?</string> <!-- Not highlighted? -->
|
||||
|
||||
<!-- Trigonometric Functions -->
|
||||
<string>cos</string>
|
||||
<string>sin</string>
|
||||
<string>tan</string>
|
||||
<string>acos</string>
|
||||
<string>asin</string>
|
||||
<string>atan</string>
|
||||
<string>atan2</string>
|
||||
|
||||
<!-- Other Mathematical Functions -->
|
||||
<string>abs</string>
|
||||
<string>ceil</string>
|
||||
<string>cross</string>
|
||||
<string>exp</string>
|
||||
<string>floor</string>
|
||||
<string>ln</string>
|
||||
<string>len</string>
|
||||
<string>log</string>
|
||||
<string>lookup</string>
|
||||
<string>max</string>
|
||||
<string>min</string>
|
||||
<string>norm</string>
|
||||
<string>pow</string>
|
||||
<string>rands</string>
|
||||
<string>round</string>
|
||||
<string>sign</string>
|
||||
<string>sqrt</string>
|
||||
|
||||
<!-- String Functions -->
|
||||
<string>str</string>
|
||||
<string>surface</string>
|
||||
|
||||
<!-- Transformations -->
|
||||
<string>scale</string>
|
||||
<string>rotate</string>
|
||||
<string>translate</string>
|
||||
<string>resize</string>
|
||||
<string>mirror</string>
|
||||
<string>multmatrix</string>
|
||||
<string>color</string>
|
||||
<string>minkowski</string>
|
||||
<string>hull</string>
|
||||
|
||||
<!-- CSG Modelling -->
|
||||
<string>union</string>
|
||||
<string>difference</string>
|
||||
<string>intersection</string>
|
||||
<string>linear_extrude</string>
|
||||
|
||||
<!-- Modules -->
|
||||
<string>module</string>
|
||||
<string>children</string>
|
||||
<string>function</string>
|
||||
|
||||
<!-- Importing Geometry -->
|
||||
<string>import</string>
|
||||
<string>include</string>
|
||||
<string>use</string>
|
||||
<string>dxf_cross</string>
|
||||
|
||||
<!-- Other Language Features -->
|
||||
|
||||
<!-- Echo Statements -->
|
||||
<string>echo</string>
|
||||
|
||||
<!-- Render -->
|
||||
<string>render</string>
|
||||
|
||||
<!-- Offset -->
|
||||
<string>offset</string>
|
||||
|
||||
<!-- Surface -->
|
||||
<string>surface</string>
|
||||
|
||||
<!-- Search -->
|
||||
<string>search</string>
|
||||
|
||||
<!-- OpenSCAD Version -->
|
||||
<string>version</string>
|
||||
<string>version_num</string>
|
||||
<string>parent_module</string>
|
||||
<string>$parent_modules</string>
|
||||
|
||||
</array>
|
||||
<key>BBLMLanguageCode</key>
|
||||
<string>Oscd</string>
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
;;; scad-mode.el --- SCAD mode derived mode
|
||||
;;; scad-mode.el --- Major mode for editing SCAD files
|
||||
|
||||
;; Author: Len Trigg
|
||||
;; Maintainer: Len Trigg <lenbok@gmail.com>
|
||||
;; Created: March 2010
|
||||
;; Modified: 06 July 2012
|
||||
;; Modified: 24 May 2014
|
||||
;; Keywords: languages
|
||||
;; URL: https://raw.github.com/openscad/openscad/master/contrib/scad-mode.el
|
||||
;; Version: 90.0
|
||||
;; Version: 91.0
|
||||
|
||||
;; This program is free software; you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
|
|
@ -143,6 +143,7 @@
|
|||
(defvar scad-font-lock-keywords
|
||||
`(
|
||||
("\\(module\\|function\\)[ \t]+\\(\\sw+\\)" (1 'font-lock-keyword-face nil) (2 'font-lock-function-name-face nil t))
|
||||
("\\(use\\|include\\)[ \t]*<\\([^>]+\\)>" (1 'font-lock-preprocessor-face nil) (2 'font-lock-type-face nil t))
|
||||
("<\\(\\sw+\\)>" (1 'font-lock-builtin-face nil))
|
||||
("$\\(\\sw+\\)" (1 'font-lock-builtin-face nil))
|
||||
(,scad-keywords-regexp . font-lock-keyword-face)
|
||||
|
|
@ -173,14 +174,24 @@
|
|||
)
|
||||
|
||||
|
||||
;; From: http://stackoverflow.com/questions/14520073/add-words-for-dynamic-expansion-to-emacs-mode
|
||||
(defun scad-prime-dabbrev ()
|
||||
"Makes a hidden scad-mode buffer containing all the scad keywords, so dabbrev expansion just works."
|
||||
(unless (get-buffer " *scad words*")
|
||||
(with-current-buffer (get-buffer-create " *scad words*")
|
||||
(scad-mode)
|
||||
(insert "module function use include") ; Explicitly add these -- they're not in the below vars
|
||||
(insert (mapconcat 'identity (append scad-keywords scad-functions scad-modules) " ")))))
|
||||
(add-hook 'scad-mode-hook 'scad-prime-dabbrev)
|
||||
|
||||
|
||||
;;; Indentation, based on http://www.emacswiki.org/emacs/download/actionscript-mode-haas-7.0.el
|
||||
|
||||
(defun scad-indent-line ()
|
||||
"Indent current line of SCAD code."
|
||||
(interactive)
|
||||
(let ((savep (> (current-column) (current-indentation)))
|
||||
(indent (condition-case nil (max (scad-calculate-indentation) 0)
|
||||
(error 0))))
|
||||
(indent (max (scad-calculate-indentation) 0)))
|
||||
(if savep
|
||||
(save-excursion (indent-line-to indent))
|
||||
(indent-line-to indent))))
|
||||
|
|
@ -224,9 +235,9 @@
|
|||
;; Don't count if in string or comment.
|
||||
((scad-face-at-point (- (point) 1)))
|
||||
((looking-back "\\s)")
|
||||
(incf close-count))
|
||||
(setq close-count (+ close-count 1)))
|
||||
((looking-back "\\s(")
|
||||
(incf open-count))
|
||||
(setq open-count (+ open-count 1)))
|
||||
)))
|
||||
(- open-count close-count))))
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
259
doc/Python-LICENSE.txt
Normal file
259
doc/Python-LICENSE.txt
Normal file
|
|
@ -0,0 +1,259 @@
|
|||
Part of OpenSCAD is copied from Python (linalg.cc/hash_floating_point()),
|
||||
so the python license is included below.
|
||||
|
||||
----
|
||||
|
||||
A. HISTORY OF THE SOFTWARE
|
||||
==========================
|
||||
|
||||
Python was created in the early 1990s by Guido van Rossum at Stichting
|
||||
Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
|
||||
as a successor of a language called ABC. Guido remains Python's
|
||||
principal author, although it includes many contributions from others.
|
||||
|
||||
In 1995, Guido continued his work on Python at the Corporation for
|
||||
National Research Initiatives (CNRI, see http://www.cnri.reston.va.us)
|
||||
in Reston, Virginia where he released several versions of the
|
||||
software.
|
||||
|
||||
In May 2000, Guido and the Python core development team moved to
|
||||
BeOpen.com to form the BeOpen PythonLabs team. In October of the same
|
||||
year, the PythonLabs team moved to Digital Creations (now Zope
|
||||
Corporation, see http://www.zope.com). In 2001, the Python Software
|
||||
Foundation (PSF, see http://www.python.org/psf/) was formed, a
|
||||
non-profit organization created specifically to own Python-related
|
||||
Intellectual Property. Zope Corporation is a sponsoring member of
|
||||
the PSF.
|
||||
|
||||
All Python releases are Open Source (see http://www.opensource.org for
|
||||
the Open Source Definition). Historically, most, but not all, Python
|
||||
releases have also been GPL-compatible; the table below summarizes
|
||||
the various releases.
|
||||
|
||||
Release Derived Year Owner GPL-
|
||||
from compatible? (1)
|
||||
|
||||
0.9.0 thru 1.2 1991-1995 CWI yes
|
||||
1.3 thru 1.5.2 1.2 1995-1999 CNRI yes
|
||||
1.6 1.5.2 2000 CNRI no
|
||||
2.0 1.6 2000 BeOpen.com no
|
||||
1.6.1 1.6 2001 CNRI yes (2)
|
||||
2.1 2.0+1.6.1 2001 PSF no
|
||||
2.0.1 2.0+1.6.1 2001 PSF yes
|
||||
2.1.1 2.1+2.0.1 2001 PSF yes
|
||||
2.1.2 2.1.1 2002 PSF yes
|
||||
2.1.3 2.1.2 2002 PSF yes
|
||||
2.2 and above 2.1.1 2001-now PSF yes
|
||||
|
||||
Footnotes:
|
||||
|
||||
(1) GPL-compatible doesn't mean that we're distributing Python under
|
||||
the GPL. All Python licenses, unlike the GPL, let you distribute
|
||||
a modified version without making your changes open source. The
|
||||
GPL-compatible licenses make it possible to combine Python with
|
||||
other software that is released under the GPL; the others don't.
|
||||
|
||||
(2) According to Richard Stallman, 1.6.1 is not GPL-compatible,
|
||||
because its license has a choice of law clause. According to
|
||||
CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1
|
||||
is "not incompatible" with the GPL.
|
||||
|
||||
Thanks to the many outside volunteers who have worked under Guido's
|
||||
direction to make these releases possible.
|
||||
|
||||
|
||||
B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON
|
||||
===============================================================
|
||||
|
||||
PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
|
||||
--------------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Python Software Foundation
|
||||
("PSF"), and the Individual or Organization ("Licensee") accessing and
|
||||
otherwise using this software ("Python") in source or binary form and
|
||||
its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, PSF hereby
|
||||
grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce,
|
||||
analyze, test, perform and/or display publicly, prepare derivative works,
|
||||
distribute, and otherwise use Python alone or in any derivative version,
|
||||
provided, however, that PSF's License Agreement and PSF's notice of copyright,
|
||||
i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
|
||||
2011, 2012, 2013, 2014, 2015 Python Software Foundation; All Rights Reserved"
|
||||
are retained in Python alone or in any derivative version prepared by Licensee.
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python.
|
||||
|
||||
4. PSF is making Python available to Licensee on an "AS IS"
|
||||
basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. Nothing in this License Agreement shall be deemed to create any
|
||||
relationship of agency, partnership, or joint venture between PSF and
|
||||
Licensee. This License Agreement does not grant permission to use PSF
|
||||
trademarks or trade name in a trademark sense to endorse or promote
|
||||
products or services of Licensee, or any third party.
|
||||
|
||||
8. By copying, installing or otherwise using Python, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
|
||||
BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0
|
||||
-------------------------------------------
|
||||
|
||||
BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1
|
||||
|
||||
1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an
|
||||
office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the
|
||||
Individual or Organization ("Licensee") accessing and otherwise using
|
||||
this software in source or binary form and its associated
|
||||
documentation ("the Software").
|
||||
|
||||
2. Subject to the terms and conditions of this BeOpen Python License
|
||||
Agreement, BeOpen hereby grants Licensee a non-exclusive,
|
||||
royalty-free, world-wide license to reproduce, analyze, test, perform
|
||||
and/or display publicly, prepare derivative works, distribute, and
|
||||
otherwise use the Software alone or in any derivative version,
|
||||
provided, however, that the BeOpen Python License is retained in the
|
||||
Software, alone or in any derivative version prepared by Licensee.
|
||||
|
||||
3. BeOpen is making the Software available to Licensee on an "AS IS"
|
||||
basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE
|
||||
SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS
|
||||
AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY
|
||||
DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
5. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
6. This License Agreement shall be governed by and interpreted in all
|
||||
respects by the law of the State of California, excluding conflict of
|
||||
law provisions. Nothing in this License Agreement shall be deemed to
|
||||
create any relationship of agency, partnership, or joint venture
|
||||
between BeOpen and Licensee. This License Agreement does not grant
|
||||
permission to use BeOpen trademarks or trade names in a trademark
|
||||
sense to endorse or promote products or services of Licensee, or any
|
||||
third party. As an exception, the "BeOpen Python" logos available at
|
||||
http://www.pythonlabs.com/logos.html may be used according to the
|
||||
permissions granted on that web page.
|
||||
|
||||
7. By copying, installing or otherwise using the software, Licensee
|
||||
agrees to be bound by the terms and conditions of this License
|
||||
Agreement.
|
||||
|
||||
|
||||
CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1
|
||||
---------------------------------------
|
||||
|
||||
1. This LICENSE AGREEMENT is between the Corporation for National
|
||||
Research Initiatives, having an office at 1895 Preston White Drive,
|
||||
Reston, VA 20191 ("CNRI"), and the Individual or Organization
|
||||
("Licensee") accessing and otherwise using Python 1.6.1 software in
|
||||
source or binary form and its associated documentation.
|
||||
|
||||
2. Subject to the terms and conditions of this License Agreement, CNRI
|
||||
hereby grants Licensee a nonexclusive, royalty-free, world-wide
|
||||
license to reproduce, analyze, test, perform and/or display publicly,
|
||||
prepare derivative works, distribute, and otherwise use Python 1.6.1
|
||||
alone or in any derivative version, provided, however, that CNRI's
|
||||
License Agreement and CNRI's notice of copyright, i.e., "Copyright (c)
|
||||
1995-2001 Corporation for National Research Initiatives; All Rights
|
||||
Reserved" are retained in Python 1.6.1 alone or in any derivative
|
||||
version prepared by Licensee. Alternately, in lieu of CNRI's License
|
||||
Agreement, Licensee may substitute the following text (omitting the
|
||||
quotes): "Python 1.6.1 is made available subject to the terms and
|
||||
conditions in CNRI's License Agreement. This Agreement together with
|
||||
Python 1.6.1 may be located on the Internet using the following
|
||||
unique, persistent identifier (known as a handle): 1895.22/1013. This
|
||||
Agreement may also be obtained from a proxy server on the Internet
|
||||
using the following URL: http://hdl.handle.net/1895.22/1013".
|
||||
|
||||
3. In the event Licensee prepares a derivative work that is based on
|
||||
or incorporates Python 1.6.1 or any part thereof, and wants to make
|
||||
the derivative work available to others as provided herein, then
|
||||
Licensee hereby agrees to include in any such work a brief summary of
|
||||
the changes made to Python 1.6.1.
|
||||
|
||||
4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS"
|
||||
basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR
|
||||
IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND
|
||||
DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS
|
||||
FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT
|
||||
INFRINGE ANY THIRD PARTY RIGHTS.
|
||||
|
||||
5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
|
||||
1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS
|
||||
A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1,
|
||||
OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
|
||||
|
||||
6. This License Agreement will automatically terminate upon a material
|
||||
breach of its terms and conditions.
|
||||
|
||||
7. This License Agreement shall be governed by the federal
|
||||
intellectual property law of the United States, including without
|
||||
limitation the federal copyright law, and, to the extent such
|
||||
U.S. federal law does not apply, by the law of the Commonwealth of
|
||||
Virginia, excluding Virginia's conflict of law provisions.
|
||||
Notwithstanding the foregoing, with regard to derivative works based
|
||||
on Python 1.6.1 that incorporate non-separable material that was
|
||||
previously distributed under the GNU General Public License (GPL), the
|
||||
law of the Commonwealth of Virginia shall govern this License
|
||||
Agreement only as to issues arising under or with respect to
|
||||
Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this
|
||||
License Agreement shall be deemed to create any relationship of
|
||||
agency, partnership, or joint venture between CNRI and Licensee. This
|
||||
License Agreement does not grant permission to use CNRI trademarks or
|
||||
trade name in a trademark sense to endorse or promote products or
|
||||
services of Licensee, or any third party.
|
||||
|
||||
8. By clicking on the "ACCEPT" button where indicated, or by copying,
|
||||
installing or otherwise using Python 1.6.1, Licensee agrees to be
|
||||
bound by the terms and conditions of this License Agreement.
|
||||
|
||||
ACCEPT
|
||||
|
||||
|
||||
CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2
|
||||
--------------------------------------------------
|
||||
|
||||
Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam,
|
||||
The Netherlands. All rights reserved.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software and its
|
||||
documentation for any purpose and without fee is hereby granted,
|
||||
provided that the above copyright notice appear in all copies and that
|
||||
both that copyright notice and this permission notice appear in
|
||||
supporting documentation, and that the name of Stichting Mathematisch
|
||||
Centrum or CWI not be used in advertising or publicity pertaining to
|
||||
distribution of the software without specific, written prior
|
||||
permission.
|
||||
|
||||
STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
|
||||
THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
|
||||
FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
|
@ -226,8 +226,6 @@ o Visitation refactoring
|
|||
DOCUMENTATION
|
||||
-------------
|
||||
o Auto-generate API documentation instead of, in addition to or combined with, the wikibooks docs.
|
||||
o Write checklists for typical extension work (add new module, add new function)
|
||||
-> syntax highlighter, test files, examples, documentation (external editor modes)
|
||||
o Clarify include/use better in the wikibook docs (e.g. that use'd modules have to be self-contained)
|
||||
|
||||
TESTING
|
||||
|
|
|
|||
11
doc/hacking.txt
Normal file
11
doc/hacking.txt
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
# Add new function/module
|
||||
|
||||
* Implement
|
||||
* Add test
|
||||
* Modules: Add example
|
||||
* Document:
|
||||
* wikibooks
|
||||
* cheatsheet
|
||||
* Modules: tooltips (editor.cc)
|
||||
* External editor modes
|
||||
* Add to RELEASE_NOTES
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
.TH OPENSCAD 1 "2013-06-xx"
|
||||
.TH OPENSCAD 1 "2015.03"
|
||||
.\" Please adjust this date whenever revising the manpage.
|
||||
.SH NAME
|
||||
openscad \- script file based graphical CAD environment
|
||||
|
|
@ -19,9 +19,9 @@ the OpenSCAD user manual at http://en.wikibooks.org/wiki/OpenSCAD_User_Manual.
|
|||
|
||||
.TP
|
||||
\fB-o\fP \fIoutputfile\fP
|
||||
Export the given file to \fIoutputfile\fP in STL, OFF, DXF, or PNG format,
|
||||
depending on file extension of \fIoutputfile\fP (which has to be lower case).
|
||||
If this option is given, the GUI will not be started.
|
||||
Export the given file to \fIoutputfile\fP in STL, OFF, AMF, DXF, SVG, or PNG
|
||||
format, depending on file extension of \fIoutputfile\fP. If this
|
||||
option is given, the GUI will not be started.
|
||||
|
||||
Additional formats, which are mainly used for debugging and testing (but can
|
||||
also be used in automation), are AST (the input file as parsed and serialized
|
||||
|
|
@ -46,12 +46,18 @@ read it again.
|
|||
This option can be used to assign constant values to OpenSCAD variables. The
|
||||
variable's value is an expression, so if this mechanism is used to assign
|
||||
strings, care has to be taken that the shell does not consume quotation marks.
|
||||
More than one \fB-D\fP options can be given.
|
||||
More than one \fB-D\fP option can be given.
|
||||
.TP
|
||||
.B \-\-render
|
||||
If exporting an image, use a full CGAL render. (Default is an OpenCSG compile)
|
||||
If exporting an image, render the model fully. (Default is preview)
|
||||
.TP
|
||||
.B \-\-camera=rotx,roty,rotz,transx,transy,transz,distance
|
||||
.B \-\-preview[=throwntogether]
|
||||
If exporting an image, use an OpenCSG preview (optionally in throwntogether mode for quicker rendering).
|
||||
.TP
|
||||
.B \-\-csglimit=limit
|
||||
If exporting an image as an OpenCSG preview, stop rendering after encountering \fIlimit\fP elements to avoid runaway resource usage.
|
||||
.TP
|
||||
.B \-\-camera=transx,transy,transz,rotx,roty,rotz,distance
|
||||
If exporting an image, use a Gimbal camera with the given parameters.
|
||||
Rot is rotation around the x, y, and z axis, trans is the distance to
|
||||
move the object in the x, y, and z directions, and distance is the
|
||||
|
|
@ -63,13 +69,24 @@ The first three are for the Eye position, while the next three are for
|
|||
the Center (or target) that the camera will look at. The 'up' vector is
|
||||
not currently supported.
|
||||
.TP
|
||||
.B \-\-viewall
|
||||
If exporting an image, adjust camera distance to fit the whole design in the frame
|
||||
.TP
|
||||
.B \-\-autocenter
|
||||
If exporting an image, center the design in the frame
|
||||
.TP
|
||||
.B \-\-imgsize=width,height
|
||||
If exporting an image, specify the pixel width and height
|
||||
.TP
|
||||
.B \-\-projection=[o|p]
|
||||
.B \-\-projection=[o|ortho|p|perspective]
|
||||
If exporting an image, specify whether to use orthographic or perspective
|
||||
projection
|
||||
.TP
|
||||
.B \-\-colorscheme=\fIscheme
|
||||
If exporting an image, use the specified color scheme for the rendering.
|
||||
\fIscheme\fP can be any of \fBCornfield\fP, \fBSunset\fP, \fBMetallic\fP,
|
||||
\fBStarnight\fP, \fBBeforeDawn\fP, \fBNature\fP or \fBDeepOcean\fP.
|
||||
.TP
|
||||
.B \-v, \-\-version
|
||||
Show version of program.
|
||||
.TP
|
||||
|
|
|
|||
34
doc/patchlevel-checklist.txt
Normal file
34
doc/patchlevel-checklist.txt
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
Given:
|
||||
VERSION (e.g. 2015.03-1)
|
||||
|
||||
o Make sure we have a $VERSION branch. If not, create one
|
||||
|
||||
o Update releases/$VERSION.md
|
||||
o scripts/makereleasenotes.sh
|
||||
|
||||
o Update VERSION and VERSIONDATE in
|
||||
openscad.pro
|
||||
scripts/publish-macosx.sh
|
||||
scripts/release-common.sh
|
||||
scripts/publish-mingw-x.sh
|
||||
tests/CMakeLists.txt
|
||||
|
||||
o git tag "openscad-$VERSION"
|
||||
o ./scripts/git-archive-all.py --prefix=openscad-$VERSION/ openscad-$VERSION.src.tar.gz
|
||||
o git push --tags
|
||||
o Upload Source package
|
||||
$ scp openscad-$VERSION.src.tar.gz openscad@files.openscad.org:www
|
||||
|
||||
o Revert VERSION and VERSIONDATE in openscad.pro scripts/publish-macosx.sh scripts/release-common.sh scripts/publish-mingw-x.sh tests/CMakeLists.txt
|
||||
|
||||
o Announce:
|
||||
- Write short release email to mailing list
|
||||
- Tweet as OpenSCAD
|
||||
- Notify package managers
|
||||
- Debian/Ubuntu: https://launchpad.net/~chrysn
|
||||
- Ubuntu PPA: https://github.com/hyperair
|
||||
- Fedora: Miro Hrončok <miro@hroncok.cz> or <mhroncok@redhat.com>
|
||||
- OpenSUSE: Pavol Rusnak <prusnak@opensuse.org>
|
||||
- Arch Linux: Kyle Keen <keenerd@gmail.com>
|
||||
- MacPorts: https://svn.macports.org/repository/macports/trunk/dports/science/openscad/Portfile
|
||||
- Homebrew: https://github.com/caskroom/homebrew-cask/blob/master/Casks/openscad.rb
|
||||
|
|
@ -2,6 +2,10 @@ OpenSCAD Release Checklist
|
|||
--------------------------
|
||||
|
||||
o Pre-release preparations
|
||||
- Update translations:
|
||||
- Send emails to translation managers, see .po files:
|
||||
https://github.com/openscad/openscad/tree/master/locale
|
||||
- Update src/AboutDialog.html with new contributors etc.
|
||||
- Merge MCAD
|
||||
o In MCAD clone:
|
||||
$ git fetch upstream
|
||||
|
|
@ -11,44 +15,40 @@ o Pre-release preparations
|
|||
$ cd libraries/MCAD
|
||||
$ git pull
|
||||
$ cd ../..
|
||||
$ git commit -m "Updated MCAD"
|
||||
$ git commit -m "Updated MCAD" libraries/MCAD
|
||||
$ git push
|
||||
|
||||
(See bottom of this file for how to build release binaries)
|
||||
|
||||
o Set VERSION and VERSIONDATE environment variable
|
||||
(VERSIONDATE is new and used to identify releases. VERSION is for humans.
|
||||
For development builds, set VERSION and VERSIONDATE to the same value)
|
||||
o Update manpage: doc/openscad.1
|
||||
o Update releases/$VERSION.md
|
||||
o scripts/makereleasenotes.sh
|
||||
|
||||
export VERSION=2013.01
|
||||
export VERSIONDATE=2013.01.17
|
||||
|
||||
It will be used by the commands below, as well as these files:
|
||||
|
||||
scripts/release-common.sh
|
||||
scripts/publish-macosx.sh
|
||||
scripts/publish-mingw-x.sh
|
||||
|
||||
o Update RELEASE_NOTES
|
||||
o Update version number in doc/openscad.1
|
||||
o Update copyright year in AboutDialog.html and mainwin.cc
|
||||
o Add VERSION and VERSIONDATE in openscad.pro, scripts/publish-macosx.sh, scripts/release-common.sh
|
||||
o Add VERSION in tests/CMakeLists.txt, scripts/publish-mingw-x.sh
|
||||
|
||||
o Tag release
|
||||
git tag "openscad-$VERSION"
|
||||
|
||||
o Revert VERSION and VERSIONDATE in
|
||||
openscad.pro, scripts/publish-macosx.sh, scripts/release-common.sh, scripts/publish-mingw-x.sh
|
||||
|
||||
o build source package
|
||||
scripts/git-archive-all.py --prefix=openscad-$VERSION/ openscad-$VERSION.src.tar.gz
|
||||
|
||||
o Sanity check; build a binary or two and manually run some tests
|
||||
|
||||
o git push --tags
|
||||
o git push --tags master
|
||||
|
||||
o Upload Source package
|
||||
$ ./scripts/googlecode_upload.py -s 'Source Code' -p openscad -l Featured,Type-Source openscad-$VERSION.src.tar.gz
|
||||
$ scp openscad-$VERSION.src.tar.gz openscad@files.openscad.org:www
|
||||
|
||||
o Remove VERSION environment variable
|
||||
$ unset VERSION
|
||||
o Build binaries for all platforms and wait for upload
|
||||
|
||||
o Announce:
|
||||
o ./scripts/github-release.sh $VERSION
|
||||
o Write release email/blog entry
|
||||
o Update web page
|
||||
- news.html
|
||||
|
|
@ -56,18 +56,21 @@ o Update web page
|
|||
o Update external resources:
|
||||
- http://en.wikipedia.org/wiki/OpenSCAD
|
||||
o Write to mailing list
|
||||
o Tweet
|
||||
o Tweet as OpenSCAD
|
||||
o Notify package managers
|
||||
- Ubuntu: https://launchpad.net/~chrysn
|
||||
- Debian/Ubuntu: https://launchpad.net/~chrysn
|
||||
- Ubuntu PPA: https://github.com/hyperair
|
||||
- Fedora: Miro Hrončok <miro@hroncok.cz> or <mhroncok@redhat.com>
|
||||
- OpenSUSE: Pavol Rusnak <prusnak@opensuse.org>
|
||||
- MacPorts: Frank Schima <macports2000@gmail.com>
|
||||
- Arch Linux: Kyle Keen <keenerd@gmail.com>
|
||||
- MacPorts: https://svn.macports.org/repository/macports/trunk/dports/science/openscad/Portfile
|
||||
- Homebrew: https://github.com/caskroom/homebrew-cask/blob/master/Casks/openscad.rb
|
||||
o Update dev version to release version in documentation
|
||||
- https://en.wikibooks.org/wiki/OpenSCAD_User_Manual
|
||||
|
||||
Build and Upload Release Binaries
|
||||
---------------------------------
|
||||
|
||||
$ export VERSIONDATE=<date of release in YYYY.MM.DD format, e.g. 2013.01.17>
|
||||
$ export VERSION=<openscad version, e.g. 2013.01> # If development snapshot, you don't need version is the same as VERSIONDATE
|
||||
$ tar xzf openscad-$VERSION.src.tar.gz
|
||||
$ cd openscad-$VERSION
|
||||
|
||||
|
|
@ -81,7 +84,7 @@ Linux:
|
|||
|
||||
$ ./scripts/release-common.sh -> openscad-$VERSION.x86-ARCH.tar.gz
|
||||
(where ARCH will be detected and set to 32 or 64)
|
||||
$ ./scripts/googlecode_upload.py -s 'Linux Binaries' -p openscad openscad-$VERSION.x86-ARCH.tar.gz -l Featured,OpSys-Linux,Type-Archive openscad-$VERSION.x86-ARCH.tar.gz
|
||||
$ scp openscad-$VERSION.x86-ARCH.tar.gz openscad@files.openscad.org:www
|
||||
o Update web page with download links
|
||||
|
||||
Windows mingw cross-build:
|
||||
|
|
|
|||
143
doc/testing.txt
143
doc/testing.txt
|
|
@ -1,34 +1,50 @@
|
|||
Running regression tests:
|
||||
-------------------------
|
||||
|
||||
Prerequisites: cmake, python, ImageMagick 6.5.9.3 or newer
|
||||
0) Prerequisites
|
||||
|
||||
First, get a working qmake GUI build of the main openscad binary and install MCAD.
|
||||
See the main README.
|
||||
Install the prerequisite helper programs on your system:
|
||||
|
||||
cmake, python2 (not 3), ImageMagick 6.5.9.3 or newer, diff
|
||||
|
||||
There are binary installer packages of these tools available for Mac,
|
||||
Win, Linux, BSD, and other systems. (except maybe diff for Win)
|
||||
|
||||
Next, get a working qmake GUI build of the main openscad binary working.
|
||||
For Windows(TM) this means get a cross-build working from within linux.
|
||||
See README.md for how to do this.
|
||||
|
||||
Then, install MCAD under openscad/libraries.
|
||||
|
||||
$ cd openscad
|
||||
$ git submodule update --init
|
||||
|
||||
A) Building test environment
|
||||
|
||||
Linux, Mac:
|
||||
$ cd tests
|
||||
$ cmake .
|
||||
$ make
|
||||
|
||||
Windows + MSVC:
|
||||
$ cd tests
|
||||
$ cmake .
|
||||
$ make
|
||||
|
||||
From the QT command prompt:
|
||||
Windows(TM):
|
||||
|
||||
> cd tests
|
||||
> cmake . -DCMAKE_BUILD_TYPE=Release
|
||||
> sed -i s/\/MD/\/MT/ CMakeCache.txt
|
||||
> cmake .
|
||||
> nmake -f Makefile
|
||||
Cross-build from within linux:
|
||||
|
||||
Cross compiling Linux->Win32:
|
||||
64-bit:
|
||||
$ source ./scripts/setenv-mingw-xbuild.sh 64
|
||||
$ ./scripts/release-common.sh mingw64 tests
|
||||
$ # result is .zip file under ./mingw64/
|
||||
|
||||
Please see openscad/tests/CMingw-cross-env.cmake for instructions.
|
||||
32-bit:
|
||||
$ source ./scripts/setenv-mingw-xbuild.sh 32
|
||||
$ ./scripts/release-common.sh mingw32 tests
|
||||
$ # result is .zip file under ./mingw32/
|
||||
|
||||
B) Running tests
|
||||
|
||||
Linux, Mac:
|
||||
|
||||
$ ctest Runs tests enabled by default
|
||||
$ ctest -R <regex> Runs only matching tests, e.g. ctest -R dxf
|
||||
$ ctest -C <configs> Adds extended tests belonging to configs.
|
||||
|
|
@ -39,6 +55,22 @@ $ ctest -C <configs> Adds extended tests belonging to configs.
|
|||
Bugs - test known bugs (tests will fail)
|
||||
All - test everything
|
||||
|
||||
Win:
|
||||
|
||||
Unzip the OpenSCAD-Tests-YYYY.MM.DD file onto a Windows(TM) machine.
|
||||
There will be a script called OpenSCAD-Test-Console.py in the parent folder.
|
||||
Double-click it, and it will open a console, from which you can type the ctest
|
||||
commands listed above.
|
||||
|
||||
C) Automatically upload test results (experimental)
|
||||
|
||||
It's possible to automatically upload tests results to an external
|
||||
server. This is good for CI, as well as being able to easily report
|
||||
bugs.
|
||||
|
||||
To enable this feature, add '-DOPENSCAD_UPLOAD_TESTS=1' to the cmake
|
||||
cmd-line, e.g.: cmake -DOPENSCAD_UPLOAD_TESTS=1 .
|
||||
|
||||
Adding a new test:
|
||||
------------------
|
||||
|
||||
|
|
@ -65,23 +97,6 @@ This is almost the same as adding a new regression test:
|
|||
4) run the test normally and verify that it passes:
|
||||
$ ctest -C Examples -R exampleNNN
|
||||
|
||||
Migration away from dedicated regression tests:
|
||||
-----------------------------------------------
|
||||
|
||||
This test still needs an intermediate script that mangles away timestamps and
|
||||
near-zero floating point numbers:
|
||||
|
||||
* cgalstlsanitytest
|
||||
|
||||
Some tests are yet to be converted:
|
||||
|
||||
* csgtexttest -- verify whether this is not redundant with dumptest
|
||||
|
||||
These look like tests, but are not actually in use:
|
||||
|
||||
* modulecachetest
|
||||
* cgalcachetest
|
||||
|
||||
Troubleshooting:
|
||||
------------------------------
|
||||
|
||||
|
|
@ -131,7 +146,7 @@ Imagemagick may have crashed while comparing the expected images to the
|
|||
test-run generated (actual) images. You can try using the alternate
|
||||
ImageMagick comparison method by by erasing CMakeCache, and re-running
|
||||
cmake with -DCOMPARATOR=ncc. This will enable the Normalized Cross
|
||||
Comparison method.
|
||||
Comparison method which is less accurate but won't usually crash.
|
||||
|
||||
4. Testing images fails with 'morphology not found" for ImageMagick in the log
|
||||
|
||||
|
|
@ -143,14 +158,68 @@ cmake. The comparison will be of lowered reliability.
|
|||
"terminate called after throwing an instance of 'std::runtime_error'
|
||||
what(): locale::facet::_S_create_c_locale name not valid"
|
||||
|
||||
Is a boost/libstdc++ bug. Fix like so:
|
||||
Is a boost/libstdc++ bug. Fix like so before running:
|
||||
|
||||
$ export LC_MESSAGES=
|
||||
|
||||
6. Other issues
|
||||
6. I want to build without OpenGL
|
||||
|
||||
The OpenSCAD User Manual has a section on buildling. Please check there
|
||||
for updates:
|
||||
There is an unsupported way to do this, by defining NULLGL to Cmake:
|
||||
|
||||
mkdir nullglbin
|
||||
cd nullglbin && cmake .. -DNULLGL=1 && make
|
||||
|
||||
The resulting openscad_nogui binary will fail most tests, but may be
|
||||
useful for debugging and outputting 3d-formats like STL on systems without GL.
|
||||
This option may break in the future and require tweaking to get working again.
|
||||
|
||||
7. Proprietary GL driver issues
|
||||
|
||||
There are sporadic reports of problems running on remote machines with
|
||||
proprietary GL drivers. Try doing a web search for your exact error
|
||||
message to see solutions and workarounds that others have found.
|
||||
|
||||
8. Windows + MSVC:
|
||||
|
||||
The MSVC build was last tested circa 2012. The last time it worked,
|
||||
these were the necessary commands to run.
|
||||
|
||||
> Start the 'QT command prompt'
|
||||
> cd \where\you\installed\openscad
|
||||
> cd tests
|
||||
> cmake . -DCMAKE_BUILD_TYPE=Release
|
||||
> sed -i s/\/MD/\/MT/ CMakeCache.txt
|
||||
> cmake .
|
||||
> nmake -f Makefile
|
||||
|
||||
9. Other issues
|
||||
|
||||
The OpenSCAD User Manual Wiki has a section on buildling. Please check
|
||||
there for possible updates and workarounds:
|
||||
|
||||
http://en.wikibooks.org/wiki/OpenSCAD_User_Manual
|
||||
|
||||
Please report build errors (after double checking the instructions) in
|
||||
the github issue tracker
|
||||
|
||||
http://github.com/openscad/openscad/issues
|
||||
|
||||
10. Migration away from dedicated regression tests:
|
||||
|
||||
In 2013 the test programs underwent a major change. The following notes
|
||||
are leftover.
|
||||
|
||||
"This test still needs an intermediate script that mangles away timestamps and
|
||||
near-zero floating point numbers:
|
||||
|
||||
* cgalstlsanitytest
|
||||
|
||||
Some tests are yet to be converted:
|
||||
|
||||
* csgtexttest -- verify whether this is not redundant with dumptest
|
||||
|
||||
These look like tests, but are not actually in use:
|
||||
|
||||
* modulecachetest
|
||||
* cgalcachetest
|
||||
"
|
||||
|
|
|
|||
84
doc/translation.txt
Normal file
84
doc/translation.txt
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
OpenSCAD human language translation
|
||||
===================================
|
||||
|
||||
We use the GNU gettext system, both for c++ code as well as QT's .ui files.
|
||||
The latter is accomplished by the '-tr' feature of QT's uic to insert
|
||||
a gettext wrapper into the ui_xxxxx.h files.
|
||||
|
||||
For somewhat similar designs, see the source code of projects like celestia,
|
||||
stellarium, licq, merkaartor, etc (although they typically use cmake).
|
||||
|
||||
Currently the build system does not auto-update anything. The .mo files must
|
||||
be generated by running the gettext tools: xgettext, msgmerge, and msgfmt.
|
||||
There is a script included, translation-update.sh, that automates this process.
|
||||
|
||||
File layout:
|
||||
============
|
||||
|
||||
./locale/*.po - .po files, one per language
|
||||
./locale/openscad.pot - .pot template, generated by xgettext
|
||||
./locale/POTFILES - list of source files with translatable strings (generated)
|
||||
./locale/LINGUAS - list of language codes for which .po files exist
|
||||
./src/qtgettext.h - wrapper code between QT and GNU gettext
|
||||
./scripts/translation-update.sh - simple unix helper script
|
||||
./locale/xx/LC_MESSAGES/openscad.mo - 'binaries' of .po files, built by script
|
||||
|
||||
To translate the strings:
|
||||
=========================
|
||||
|
||||
Use a text editor or special program (poedit or lokalize) to edit the .po file.
|
||||
( See http://en.opensuse.org/SDB:Localization_work_with_po_files )
|
||||
Then submit your new .po file as an OpenSCAD github issue or pull request:
|
||||
|
||||
https://github.com/openscad/openscad/issues/
|
||||
|
||||
In the future there might be a site to allow translations in a browser:
|
||||
|
||||
https://translations.launchpad.net/openscad
|
||||
|
||||
If all else fails, email the OpenSCAD mailing list with your new .po
|
||||
file attached.
|
||||
|
||||
To make source code changes:
|
||||
============================
|
||||
|
||||
In .cc files, #include "printutils.h" and change each "text" into
|
||||
_("text"). In .ui files, #include "qtgettext.h" first in the .h file
|
||||
(see MainWindow.h). Then clean and rebuild to recreate the ui_xxxx.h
|
||||
files.
|
||||
|
||||
$ make clean && qmake && make
|
||||
|
||||
Then run the script to scan the source files, and regenerate .pot & .po files.
|
||||
|
||||
$ ./scripts/translation-update.sh
|
||||
|
||||
This will create new .po files with any new untranslated strings you
|
||||
added to the source code. These .po files can be distributed to
|
||||
translators for translation. After the translated .po file is obtained,
|
||||
overwrite the old .po and run the same script to update the .mo files.
|
||||
|
||||
$ ./scripts/translation-update.sh
|
||||
|
||||
To add a new language:
|
||||
======================
|
||||
|
||||
First add the language code to file ./locale/LINGUAS. Then run msginit,
|
||||
replacing $LANGCODE with the language code you want.
|
||||
|
||||
$ msginit -l $LANGCODE -o ./locale/$LANGCODE.po -i ./locale/openscad.pot
|
||||
|
||||
You will now have a new ./locale/xx.po file to edit and translate
|
||||
|
||||
Testing:
|
||||
========
|
||||
|
||||
On unix, set the locale related environment variables. For example in
|
||||
French, run this:
|
||||
|
||||
$ LANGUAGE=fr ./openscad
|
||||
|
||||
Linux system trace tools can help find errors. To show open()s on .mo files:
|
||||
|
||||
$ LANGUAGE=fr strace -f ./openscad 2>&1 | grep LC_MESSAGES
|
||||
|
||||
35
eigen.pri
35
eigen.pri
|
|
@ -1,18 +1,14 @@
|
|||
# Detect eigen3 + eigen2, then use this priority list to determine
|
||||
# which eigen to use:
|
||||
# Detect eigen3
|
||||
#
|
||||
# Priority
|
||||
# 0. EIGENDIR if set (also EIGEN2DIR for backwards compatability)
|
||||
# 0. EIGENDIR if set
|
||||
# 1. OPENSCAD_LIBRARIES eigen3
|
||||
# 2. OPENSCAD_LIBRARIES eigen2
|
||||
# 3. system's standard include paths for eigen3
|
||||
# 4. system's standard include paths for eigen2
|
||||
|
||||
eigen {
|
||||
|
||||
# read environment variables
|
||||
OPENSCAD_LIBRARIES_DIR = $$(OPENSCAD_LIBRARIES)
|
||||
EIGEN2_DIR = $$(EIGEN2DIR)
|
||||
EIGEN_DIR = $$(EIGENDIR)
|
||||
|
||||
# Optionally specify location of Eigen3 using the
|
||||
|
|
@ -23,41 +19,18 @@ EIGEN_DIR = $$(EIGENDIR)
|
|||
EIGEN_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen3
|
||||
}
|
||||
}
|
||||
isEmpty(EIGEN_INCLUDEPATH) {
|
||||
exists($$OPENSCAD_LIBRARIES_DIR/include/eigen2) {
|
||||
EIGEN_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
# Optionally specify location of Eigen using the
|
||||
# EIGENDIR env. variable (EIGEN2 for backwards compatability)
|
||||
!isEmpty(EIGEN2_DIR) {
|
||||
EIGEN_INCLUDEPATH = $$EIGEN2_DIR
|
||||
message("User set EIGEN location: $$EIGEN_INCLUDEPATH")
|
||||
}
|
||||
!isEmpty(EIGEN_DIR) {
|
||||
EIGEN_INCLUDEPATH = $$EIGEN_DIR
|
||||
message("User set EIGEN location: $$EIGEN_INCLUDEPATH")
|
||||
}
|
||||
|
||||
isEmpty(EIGEN_INCLUDEPATH) {
|
||||
linux*|hurd*|unix: EIGEN_INCLUDEPATH = /usr/include/eigen3
|
||||
freebsd-g++: EIGEN_INCLUDEPATH = /usr/local/include/eigen3
|
||||
netbsd*: EIGEN_INCLUDEPATH = /usr/pkg/include/eigen3
|
||||
linux*|hurd*|unix: EIGEN_INCLUDEPATH = /usr/include/eigen3
|
||||
macx: EIGEN_INCLUDEPATH = /opt/local/include/eigen3
|
||||
!exists($$EIGEN_INCLUDEPATH) {
|
||||
freebsd-g++: EIGEN_INCLUDEPATH = /usr/local/include/eigen2
|
||||
netbsd*: EIGEN_INCLUDEPATH = /usr/pkg/include/eigen2
|
||||
linux*|hurd*|unix*: EIGEN_INCLUDEPATH = /usr/include/eigen2
|
||||
macx: EIGEN_INCLUDEPATH = /opt/local/include/eigen2
|
||||
}
|
||||
}
|
||||
|
||||
!exists($$EIGEN_INCLUDEPATH/Eigen/Core) {
|
||||
EIGEN_CFLAGS = $$system("pkg-config --cflags eigen2")
|
||||
EIGEN_INCLUDEPATH = $$replace(EIGEN_CFLAGS,"-I","")
|
||||
}
|
||||
|
||||
!exists($$EIGEN_INCLUDEPATH/Eigen/Core) {
|
||||
|
|
@ -72,7 +45,7 @@ isEmpty(EIGEN_INCLUDEPATH) {
|
|||
}
|
||||
}
|
||||
|
||||
# EIGEN being under 'include/eigen[2-3]' needs special prepending
|
||||
# EIGEN being under 'include/eigen3' needs special prepending
|
||||
contains(QT_VERSION, ^5\\..*) {
|
||||
QMAKE_INCDIR = $$EIGEN_INCLUDEPATH $$QMAKE_INCDIR
|
||||
} else {
|
||||
|
|
|
|||
61
examples/Advanced/GEB.scad
Normal file
61
examples/Advanced/GEB.scad
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
font = "Liberation Sans";
|
||||
// Nicer, but not generally installed:
|
||||
// font = "Bank Gothic";
|
||||
|
||||
module G() offset(0.3) text("G", size=10, halign="center", valign="center", font = font);
|
||||
module E() offset(0.3) text("E", size=10, halign="center", valign="center", font = font);
|
||||
module B() offset(0.5) text("B", size=10, halign="center", valign="center", font = font);
|
||||
|
||||
$fn=64;
|
||||
|
||||
module GEB() {
|
||||
intersection() {
|
||||
linear_extrude(height = 20, convexity = 3, center=true) B();
|
||||
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = 20, convexity = 3, center=true) E();
|
||||
|
||||
rotate([90, 0, 90])
|
||||
linear_extrude(height = 20, convexity = 3, center=true) G();
|
||||
}
|
||||
}
|
||||
|
||||
color("Ivory") GEB();
|
||||
|
||||
color("MediumOrchid")
|
||||
translate([0,0,-20])
|
||||
linear_extrude(1)
|
||||
difference() {
|
||||
square(40, center=true);
|
||||
projection() GEB();
|
||||
}
|
||||
|
||||
color("DarkMagenta")
|
||||
rotate([90,0,0])
|
||||
translate([0,0,-20])
|
||||
linear_extrude(1)
|
||||
difference() {
|
||||
translate([0,0.5]) square([40,39], center=true);
|
||||
projection() rotate([-90,0,0]) GEB();
|
||||
}
|
||||
|
||||
color("MediumSlateBlue")
|
||||
rotate([90,0,90])
|
||||
translate([0,0,-20])
|
||||
linear_extrude(1)
|
||||
difference() {
|
||||
translate([-0.5,0.5]) square([39,39], center=true);
|
||||
projection() rotate([0,-90,-90]) GEB();
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2015 by Marius Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
89
examples/Advanced/animation.scad
Normal file
89
examples/Advanced/animation.scad
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
// animation.scad - Demo of animation usage
|
||||
|
||||
// The animation funtionality is based simply on a variable $t
|
||||
// that is changed automatically by OpenSCAD while repeatedly
|
||||
// showing the model.
|
||||
// To activate animation, select "View->Animation" from the
|
||||
// menu and enter values into the appearing FPS and Steps input
|
||||
// fields (e.g. 5 FPS and 200 Steps for this animation).
|
||||
// This is not intended to directly produce real-time animations
|
||||
// but the image sequence can be exported to generate videos of
|
||||
// the animation.
|
||||
|
||||
// Length of the 2 arm segments, change to see the effects on
|
||||
// the arm movements.
|
||||
arm1_length = 70;
|
||||
arm2_length = 50;
|
||||
|
||||
r = 2;
|
||||
$fn = 30;
|
||||
|
||||
plate();
|
||||
pos = position($t);
|
||||
arm(pos[0], pos[1], arm1_length, arm2_length);
|
||||
|
||||
// Function describing the X/Y position that should be traced
|
||||
// by the arm over time.
|
||||
// The $t variable will be used as parameter for this function
|
||||
// so the range for t is [0..1].
|
||||
function position(t) = t < 0.5
|
||||
? [ 200 * t - 50, 30 * sin(5 * 360 * t) + 60 ]
|
||||
: [ 50 * cos(360 * (t - 0.5)), 100 * -sin(360 * (t- 0.5)) + 60 ];
|
||||
|
||||
// Inverse kinematics functions for a scara style arm
|
||||
// See http://forums.reprap.org/read.php?185,283327
|
||||
function sq(x, y) = x * x + y * y;
|
||||
function angB(x, y, l1, l2) = 180 - acos((l2 * l2 + l1 * l1 - sq(x, y)) / (2 * l1 * l2));
|
||||
function ang2(x, y, l1, l2) = 90 - acos((l2 * l2 - l1 * l1 + sq(x, y)) / (2 * l2 * sqrt(sq(x, y)))) - atan2(x, y);
|
||||
function ang1(x, y, l1, l2) = ang2(x, y, l1, l2) + angB(x, y, l1, l2);
|
||||
|
||||
// Draw an arm segment with the given color and length.
|
||||
module segment(col, l) {
|
||||
color(col) {
|
||||
hull() {
|
||||
sphere(r);
|
||||
translate([l, 0, 0]) sphere(r);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Draw the whole 2 segmented arm trying to reach position x/y.
|
||||
// Parameters l1 and l2 are the length of the two arm segments.
|
||||
module arm(x, y, l1, l2) {
|
||||
a1 = ang1(x, y, l1, l2);
|
||||
a2 = ang2(x, y, l1, l2);
|
||||
sphere(r = 2 * r);
|
||||
cylinder(r = 2, h = 6 * r, center = true);
|
||||
rotate([0, 0, a1]) segment("red", l1);
|
||||
translate(l1 * [cos(a1), sin(a1), 0]) {
|
||||
sphere(r = 2 * r);
|
||||
rotate([0, 0, a2]) segment("green", l2);
|
||||
}
|
||||
translate([x, y, -r/2])
|
||||
cylinder(r1 = 0, r2 = r, h = 4 * r, center = true);
|
||||
}
|
||||
|
||||
module curve() polygon([for (a = [ 0 : 0.004 : 1]) position(a)]);
|
||||
|
||||
// Draws the plate and the traced function using small black cubes.
|
||||
module plate() {
|
||||
%translate([0, 0, -3*r]) {
|
||||
translate([0,25,0]) cube([150, 150, 0.1], center = true);
|
||||
color("Black") linear_extrude(0.1) difference() {
|
||||
curve();
|
||||
offset(-1) curve();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
54
examples/Advanced/children.scad
Normal file
54
examples/Advanced/children.scad
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
// children.scad - Usage of children()
|
||||
|
||||
// The use of children() allows to write generic modules that
|
||||
// modify child modules regardless of how the child geometry
|
||||
// is created.
|
||||
|
||||
color("red")
|
||||
make_ring_of(radius = 15, count = 6)
|
||||
cube(8, center = true);
|
||||
|
||||
color("green")
|
||||
make_ring_of(radius = 30, count = 12)
|
||||
difference() {
|
||||
sphere(5);
|
||||
cylinder(r = 2, h = 12, center = true);
|
||||
}
|
||||
|
||||
color("cyan")
|
||||
make_ring_of(radius = 50, count = 4)
|
||||
something();
|
||||
|
||||
module make_ring_of(radius, count)
|
||||
{
|
||||
for (a = [0 : count - 1]) {
|
||||
angle = a * 360 / count;
|
||||
translate(radius * [sin(angle), -cos(angle), 0])
|
||||
rotate([0, 0, angle])
|
||||
children();
|
||||
}
|
||||
}
|
||||
|
||||
module something()
|
||||
{
|
||||
cube(10, center = true);
|
||||
cylinder(r = 2, h = 12, $fn = 40);
|
||||
translate([0, 0, 12])
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = 2, center = true)
|
||||
text("SCAD", 8, halign = "center");
|
||||
translate([0, 0, 12])
|
||||
cube([22, 1.6, 0.4], center = true);
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
62
examples/Advanced/children_indexed.scad
Normal file
62
examples/Advanced/children_indexed.scad
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
// children_indexed.scad - Usage of indexed children()
|
||||
|
||||
// children() with a parameter allows access to a specific child
|
||||
// object with children(0) being the first one. In addition the
|
||||
// $children variable is automatically set to the number of child
|
||||
// objects.
|
||||
|
||||
color("red")
|
||||
translate([-100, -20, 0])
|
||||
align_in_grid_and_add_text();
|
||||
|
||||
color("yellow")
|
||||
translate([-50, -20, 0])
|
||||
align_in_grid_and_add_text() {
|
||||
cube(5, center = true);
|
||||
}
|
||||
|
||||
color("cyan")
|
||||
translate([0, -20, 0])
|
||||
align_in_grid_and_add_text() {
|
||||
cube(5, center = true);
|
||||
sphere(4);
|
||||
}
|
||||
|
||||
color("green")
|
||||
translate([50, -20, 0])
|
||||
align_in_grid_and_add_text() {
|
||||
cube(5, center = true);
|
||||
sphere(4);
|
||||
cylinder(r = 4, h = 5);
|
||||
}
|
||||
|
||||
|
||||
module align_in_grid_and_add_text()
|
||||
{
|
||||
if ($children == 0) {
|
||||
linear_extrude(height = 1, center = true)
|
||||
text("Nothing...", 6, halign = "center");
|
||||
} else {
|
||||
t = $children == 1 ? "one object" : str($children, " objects ");
|
||||
linear_extrude(height = 1, center = true)
|
||||
text(t, 6, halign = "center");
|
||||
|
||||
for (y = [0 : $children - 1])
|
||||
for (x = [0 : $children - 1])
|
||||
translate([15 * (x - ($children - 1) / 2), 20 * y + 40, 0])
|
||||
scale(1 + x / $children)
|
||||
children(y);
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
51
examples/Advanced/module_recursion.scad
Normal file
51
examples/Advanced/module_recursion.scad
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
// Recursive calls of modules can generate complex geometry, especially
|
||||
// fractal style objects.
|
||||
// The example uses a recursive module to generate a random tree as
|
||||
// described in http://natureofcode.com/book/chapter-8-fractals/
|
||||
|
||||
levels = 10; // number of levels for the recursion
|
||||
|
||||
len = 100; // length of the first segment
|
||||
thickness = 5; // thickness of the first segment
|
||||
|
||||
// the identity matrix
|
||||
identity = [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ];
|
||||
|
||||
// random generator, to generate always the same output for the example,
|
||||
// this uses a seed for rands() and stores the array of random values in
|
||||
// the random variable. To generate different output, remove the seed or
|
||||
// replace the function rnd() to just call rands(s, e, 1)[0].
|
||||
rcnt = 1000;
|
||||
random = rands(0, 1, rcnt, 18);
|
||||
function rnd(s, e, r) = random[r % rcnt] * (e - s) + s;
|
||||
|
||||
// generate 4x4 translation matrix
|
||||
function mt(x, y) = [ [ 1, 0, 0, x ], [ 0, 1, 0, y ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ];
|
||||
|
||||
// generate 4x4 rotation matrix around Z axis
|
||||
function mr(a) = [ [ cos(a), -sin(a), 0, 0 ], [ sin(a), cos(a), 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ];
|
||||
|
||||
module tree(length, thickness, count, m = identity, r = 1) {
|
||||
color([0, 1 - (0.8 / levels * count), 0])
|
||||
multmatrix(m)
|
||||
square([thickness, length]);
|
||||
|
||||
if (count > 0) {
|
||||
tree(rnd(0.6, 0.8, r) * length, 0.8 * thickness, count - 1, m * mt(0, length) * mr(rnd(20, 35, r + 1)), 8 * r);
|
||||
tree(rnd(0.6, 0.8, r + 1) * length, 0.8 * thickness, count - 1, m * mt(0, length) * mr(-rnd(20, 35, r + 3)), 8 * r + 4);
|
||||
}
|
||||
}
|
||||
|
||||
tree(len, thickness, levels);
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
43
examples/Advanced/offset.scad
Normal file
43
examples/Advanced/offset.scad
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
// offset.scad - Example for offset() usage in OpenSCAD
|
||||
|
||||
$fn = 40;
|
||||
|
||||
foot_height = 20;
|
||||
|
||||
echo(version=version());
|
||||
|
||||
module outline(wall = 1) {
|
||||
difference() {
|
||||
offset(wall / 2) children();
|
||||
offset(-wall / 2) children();
|
||||
}
|
||||
}
|
||||
|
||||
// offsetting with a positive value allows to create rounded corners easily
|
||||
linear_extrude(height = foot_height, scale = 0.5) {
|
||||
offset(10) {
|
||||
square(50, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
translate([0, 0, foot_height]) {
|
||||
linear_extrude(height = 20) {
|
||||
outline(wall = 2) circle(15);
|
||||
}
|
||||
}
|
||||
|
||||
%cylinder(r = 14, h = 100);
|
||||
%translate([0, 0, 100]) sphere(r = 30);
|
||||
|
||||
|
||||
|
||||
// Written in 2014 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
BIN
examples/Advanced/surface_image.png
Normal file
BIN
examples/Advanced/surface_image.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.3 KiB |
26
examples/Advanced/surface_image.scad
Normal file
26
examples/Advanced/surface_image.scad
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
echo(version=version());
|
||||
|
||||
// surface() can import images, the pixel values are converted
|
||||
// to grayscale and converted to values between 0 and 100.
|
||||
// The example takes 3 cuts from the height map and displays
|
||||
// those as 3 stacked layers.
|
||||
|
||||
for (a = [1, 2, 3])
|
||||
color([a/6 + 0.5, 0, 0])
|
||||
linear_extrude(height = 2 * a, convexity = 10)
|
||||
projection(cut = true)
|
||||
translate([0, 0, -30 * a])
|
||||
surface("surface_image.png", center = true);
|
||||
|
||||
|
||||
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
94
examples/Basics/CSG-modules.scad
Normal file
94
examples/Basics/CSG-modules.scad
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
// CSG-modules.scad - Basic usage of modules, if, color, $fs/$fa
|
||||
|
||||
// Change this to false to remove the helper geometry
|
||||
debug = true;
|
||||
|
||||
// Global resolution
|
||||
$fs = 0.1; // Don't generate smaller facets than 0.1 mm
|
||||
$fa = 5; // Don't generate larger angles than 5 degrees
|
||||
|
||||
// Main geometry
|
||||
difference() {
|
||||
intersection() {
|
||||
body();
|
||||
intersector();
|
||||
}
|
||||
holes();
|
||||
}
|
||||
|
||||
// Helpers
|
||||
if (debug) helpers();
|
||||
|
||||
// Core geometric primitives.
|
||||
// These can be modified to create variations of the final object
|
||||
|
||||
module body() {
|
||||
color("Blue") sphere(10);
|
||||
}
|
||||
|
||||
module intersector() {
|
||||
color("Red") cube(15, center=true);
|
||||
}
|
||||
|
||||
module holeObject() {
|
||||
color("Lime") cylinder(h=20, r=5, center=true);
|
||||
}
|
||||
|
||||
// Various modules for visualizing intermediate components
|
||||
|
||||
module intersected() {
|
||||
intersection() {
|
||||
body();
|
||||
intersector();
|
||||
}
|
||||
}
|
||||
|
||||
module holeA() rotate([0,90,0]) holeObject();
|
||||
module holeB() rotate([90,0,0]) holeObject();
|
||||
module holeC() holeObject();
|
||||
|
||||
module holes() {
|
||||
union() {
|
||||
holeA();
|
||||
holeB();
|
||||
holeC();
|
||||
}
|
||||
}
|
||||
|
||||
module helpers() {
|
||||
// Inner module since it's only needed inside helpers
|
||||
module line() color("Black") cylinder(r=1, h=10, center=true);
|
||||
|
||||
scale(0.5) {
|
||||
translate([-30,0,-40]) {
|
||||
intersected();
|
||||
translate([-15,0,-35]) body();
|
||||
translate([15,0,-35]) intersector();
|
||||
translate([-7.5,0,-17.5]) rotate([0,30,0]) line();
|
||||
translate([7.5,0,-17.5]) rotate([0,-30,0]) line();
|
||||
}
|
||||
translate([30,0,-40]) {
|
||||
holes();
|
||||
translate([-10,0,-35]) holeA();
|
||||
translate([10,0,-35]) holeB();
|
||||
translate([30,0,-35]) holeC();
|
||||
translate([5,0,-17.5]) rotate([0,-20,0]) line();
|
||||
translate([-5,0,-17.5]) rotate([0,30,0]) line();
|
||||
translate([15,0,-17.5]) rotate([0,-45,0]) line();
|
||||
}
|
||||
translate([-20,0,-22.5]) rotate([0,45,0]) line();
|
||||
translate([20,0,-22.5]) rotate([0,-45,0]) line();
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written by Marius Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
32
examples/Basics/CSG.scad
Normal file
32
examples/Basics/CSG.scad
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
// CSG.scad - Basic example of CSG usage
|
||||
|
||||
translate([-24,0,0]) {
|
||||
union() {
|
||||
cube(15, center=true);
|
||||
sphere(10);
|
||||
}
|
||||
}
|
||||
|
||||
intersection() {
|
||||
cube(15, center=true);
|
||||
sphere(10);
|
||||
}
|
||||
|
||||
translate([24,0,0]) {
|
||||
difference() {
|
||||
cube(15, center=true);
|
||||
sphere(10);
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written by Marius Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
34
examples/Basics/LetterBlock.scad
Normal file
34
examples/Basics/LetterBlock.scad
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
// LetterBlock.scad - Basic usage of text() and linear_extrude()
|
||||
|
||||
// Module instantiation
|
||||
LetterBlock("M");
|
||||
|
||||
// Module definition.
|
||||
// size=30 defines an optional parameter with a default value.
|
||||
module LetterBlock(letter, size=30) {
|
||||
difference() {
|
||||
translate([0,0,size/4]) cube([size,size,size/2], center=true);
|
||||
translate([0,0,size/6]) {
|
||||
// convexity is needed for correct preview
|
||||
// since characters can be highly concave
|
||||
linear_extrude(height=size, convexity=4)
|
||||
text(letter,
|
||||
size=size*22/30,
|
||||
font="Bitstream Vera Sans",
|
||||
halign="center",
|
||||
valign="center");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written by Marius Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
36
examples/Basics/linear_extrude.scad
Normal file
36
examples/Basics/linear_extrude.scad
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
echo(version=version());
|
||||
|
||||
// simple 2D -> 3D extrusion of a rectangle
|
||||
color("red")
|
||||
translate([0, -30, 0])
|
||||
linear_extrude(height = 20)
|
||||
square([20, 10], center = true);
|
||||
|
||||
// using the scale parameter a frustum can be constructed
|
||||
color("green")
|
||||
translate([-30, 0, 0])
|
||||
linear_extrude(height = 20, scale = 0.2)
|
||||
square([20, 10], center = true);
|
||||
|
||||
// with twist the extruded shape will rotate around the Z axis
|
||||
color("cyan")
|
||||
translate([30, 0, 0])
|
||||
linear_extrude(height = 20, twist = 90)
|
||||
square([20, 10], center = true);
|
||||
|
||||
// combining both relatively complex shapes can be created
|
||||
color("gray")
|
||||
translate([0, 30, 0])
|
||||
linear_extrude(height = 40, twist = -360, scale = 0, center = true, slices = 200)
|
||||
square([20, 10], center = true);
|
||||
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
35
examples/Basics/logo.scad
Normal file
35
examples/Basics/logo.scad
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
// logo.scad - Basic example of module, top-level variable and $fn usage
|
||||
|
||||
Logo(50);
|
||||
|
||||
// The $fn parameter will influence all objects inside this module
|
||||
// It can, optionally, be overridden when instantiating the module
|
||||
module Logo(size=50, $fn=100) {
|
||||
// Temporary variables
|
||||
hole = size/2;
|
||||
cylinderHeight = size * 1.25;
|
||||
|
||||
// One positive object (sphere) and three negative objects (cylinders)
|
||||
difference() {
|
||||
sphere(d=size);
|
||||
|
||||
cylinder(d=hole, h=cylinderHeight, center=true);
|
||||
// The '#' operator highlights the object
|
||||
#rotate([90, 0, 0]) cylinder(d=hole, h=cylinderHeight, center=true);
|
||||
rotate([0, 90, 0]) cylinder(d=hole, h=cylinderHeight, center=true);
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
||||
42
examples/Basics/logo_and_text.scad
Normal file
42
examples/Basics/logo_and_text.scad
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
// logo_and_text.scad - Example for use<> and text()
|
||||
|
||||
use <logo.scad> // Imports the Logo() module from logo.scad into this namespace
|
||||
|
||||
// Set the initial viewport parameters
|
||||
$vpr = [90, 0, 0];
|
||||
$vpt = [250, 0, 80];
|
||||
$vpd = 500;
|
||||
|
||||
logosize = 120;
|
||||
|
||||
|
||||
translate([110, 0, 80]) {
|
||||
translate([0, 0, 30]) rotate([25, 25, -40]) Logo(logosize);
|
||||
translate([100, 0, 40]) green() t("Open", 42, ":style=Bold");
|
||||
translate([247, 0, 40]) black() t("SCAD", 42, ":style=Bold");
|
||||
translate([100, 0, 0]) black() t("The Programmers");
|
||||
translate([160, 0, -30]) black() t("Solid 3D CAD Modeller");
|
||||
}
|
||||
|
||||
// Helper to create 3D text with correct font and orientation
|
||||
module t(t, s = 18, style = "") {
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(height = 1)
|
||||
text(t, size = s, font = str("Liberation Sans", style), $fn = 16);
|
||||
}
|
||||
|
||||
// Color helpers
|
||||
module green() color([81/255, 142/255, 4/255]) children();
|
||||
module black() color([0, 0, 0]) children();
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2014 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
64
examples/Basics/projection.scad
Normal file
64
examples/Basics/projection.scad
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
echo(version=version());
|
||||
|
||||
%import("projection.stl");
|
||||
|
||||
// projection() without the cut = true parameter will project
|
||||
// the outline of the object onto the X/Y plane. The result is
|
||||
// a 2D shape.
|
||||
|
||||
color("red")
|
||||
translate([0, 0, -20])
|
||||
linear_extrude(height = 2, center = true)
|
||||
difference() {
|
||||
square(30, center = true);
|
||||
projection()
|
||||
import("projection.stl");
|
||||
}
|
||||
|
||||
color("green")
|
||||
rotate([0, 90, 0])
|
||||
translate([0, 0, -20])
|
||||
linear_extrude(height = 2, center = true)
|
||||
difference() {
|
||||
square(30, center = true);
|
||||
projection()
|
||||
rotate([0, 90, 0])
|
||||
import("projection.stl");
|
||||
}
|
||||
|
||||
color("cyan")
|
||||
rotate([-90, 0, 0])
|
||||
translate([0, 0, 20])
|
||||
linear_extrude(height = 2, center = true)
|
||||
difference() {
|
||||
square(30, center = true);
|
||||
projection()
|
||||
rotate([90, 0, 0])
|
||||
import("projection.stl");
|
||||
}
|
||||
|
||||
// Including the cut = true uses the outline of the cut at
|
||||
// the X/Y plane.at Z = 0. This can make internal features
|
||||
// of the model visible.
|
||||
|
||||
color("yellow", 0.5)
|
||||
translate([0, 0, 20])
|
||||
linear_extrude(height = 2, center = true)
|
||||
difference() {
|
||||
square(30, center = true);
|
||||
projection(cut = true)
|
||||
import("projection.stl");
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
29122
examples/Basics/projection.stl
Normal file
29122
examples/Basics/projection.stl
Normal file
File diff suppressed because it is too large
Load diff
35
examples/Basics/rotate_extrude.scad
Normal file
35
examples/Basics/rotate_extrude.scad
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
echo(version=version());
|
||||
|
||||
// rotate_extrude() always rotates the 2D shape 360 degrees
|
||||
// around the Z axis. Note that the 2D shape must be either
|
||||
// completely on the positive or negative side of the X axis.
|
||||
color("red")
|
||||
rotate_extrude()
|
||||
translate([10, 0])
|
||||
square(5);
|
||||
|
||||
// rotate_extrude() uses the global $fn/$fa/$fs settings, but
|
||||
// it's possible to give a different value as parameter.
|
||||
color("cyan")
|
||||
translate([40, 0, 0])
|
||||
rotate_extrude($fn = 80)
|
||||
text(" J");
|
||||
|
||||
// Using a shape that touches the X axis is allowed and produces
|
||||
// 3D objects that don't have a hole in the center.
|
||||
color("green")
|
||||
translate([0, 30, 0])
|
||||
rotate_extrude($fn = 80)
|
||||
polygon( points=[[0,0],[8,4],[4,8],[4,12],[12,16],[0,20]] );
|
||||
|
||||
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
51
examples/Basics/text_on_cube.scad
Normal file
51
examples/Basics/text_on_cube.scad
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
// text_on_cube.scad - Example for text() usage in OpenSCAD
|
||||
|
||||
echo(version=version());
|
||||
|
||||
font = "Liberation Sans";
|
||||
|
||||
cube_size = 60;
|
||||
letter_size = 50;
|
||||
letter_height = 5;
|
||||
|
||||
o = cube_size / 2 - letter_height / 2;
|
||||
|
||||
module letter(l) {
|
||||
// Use linear_extrude() to make the letters 3D objects as they
|
||||
// are only 2D shapes when only using text()
|
||||
linear_extrude(height = letter_height) {
|
||||
text(l, size = letter_size, font = font, halign = "center", valign = "center", $fn = 16);
|
||||
}
|
||||
}
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
color("gray") cube(cube_size, center = true);
|
||||
translate([0, -o, 0]) rotate([90, 0, 0]) letter("C");
|
||||
translate([o, 0, 0]) rotate([90, 0, 90]) letter("U");
|
||||
translate([0, o, 0]) rotate([90, 0, 180]) letter("B");
|
||||
translate([-o, 0, 0]) rotate([90, 0, -90]) letter("E");
|
||||
}
|
||||
|
||||
// Put some symbols on top and bottom using symbols from the
|
||||
// Unicode symbols table.
|
||||
// (see https://en.wikipedia.org/wiki/Miscellaneous_Symbols)
|
||||
//
|
||||
// Note that depending on the font used, not all the symbols
|
||||
// are actually available.
|
||||
translate([0, 0, o]) letter("\u263A");
|
||||
translate([0, 0, -o - letter_height]) letter("\u263C");
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Written in 2014 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
121
examples/COPYING-CC0.txt
Normal file
121
examples/COPYING-CC0.txt
Normal file
|
|
@ -0,0 +1,121 @@
|
|||
Creative Commons Legal Code
|
||||
|
||||
CC0 1.0 Universal
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||
HEREUNDER.
|
||||
|
||||
Statement of Purpose
|
||||
|
||||
The laws of most jurisdictions throughout the world automatically confer
|
||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||
authorship and/or a database (each, a "Work").
|
||||
|
||||
Certain owners wish to permanently relinquish those rights to a Work for
|
||||
the purpose of contributing to a commons of creative, cultural and
|
||||
scientific works ("Commons") that the public can reliably and without fear
|
||||
of later claims of infringement build upon, modify, incorporate in other
|
||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||
and for any purposes, including without limitation commercial purposes.
|
||||
These owners may contribute to the Commons to promote the ideal of a free
|
||||
culture and the further production of creative, cultural and scientific
|
||||
works, or to gain reputation or greater distribution for their Work in
|
||||
part through the use and efforts of others.
|
||||
|
||||
For these and/or other purposes and motivations, and without any
|
||||
expectation of additional consideration or compensation, the person
|
||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||
|
||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||
protected by copyright and related or neighboring rights ("Copyright and
|
||||
Related Rights"). Copyright and Related Rights include, but are not
|
||||
limited to, the following:
|
||||
|
||||
i. the right to reproduce, adapt, distribute, perform, display,
|
||||
communicate, and translate a Work;
|
||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||
iii. publicity and privacy rights pertaining to a person's image or
|
||||
likeness depicted in a Work;
|
||||
iv. rights protecting against unfair competition in regards to a Work,
|
||||
subject to the limitations in paragraph 4(a), below;
|
||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||
in a Work;
|
||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||
European Parliament and of the Council of 11 March 1996 on the legal
|
||||
protection of databases, and under any national implementation
|
||||
thereof, including any amended or successor version of such
|
||||
directive); and
|
||||
vii. other similar, equivalent or corresponding rights throughout the
|
||||
world based on applicable law or treaty, and any national
|
||||
implementations thereof.
|
||||
|
||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||
of action, whether now known or unknown (including existing as well as
|
||||
future claims and causes of action), in the Work (i) in all territories
|
||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||
treaty (including future time extensions), (iii) in any current or future
|
||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||
including without limitation commercial, advertising or promotional
|
||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||
member of the public at large and to the detriment of Affirmer's heirs and
|
||||
successors, fully intending that such Waiver shall not be subject to
|
||||
revocation, rescission, cancellation, termination, or any other legal or
|
||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||
as contemplated by Affirmer's express Statement of Purpose.
|
||||
|
||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||
be judged legally invalid or ineffective under applicable law, then the
|
||||
Waiver shall be preserved to the maximum extent permitted taking into
|
||||
account Affirmer's express Statement of Purpose. In addition, to the
|
||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||
maximum duration provided by applicable law or treaty (including future
|
||||
time extensions), (iii) in any current or future medium and for any number
|
||||
of copies, and (iv) for any purpose whatsoever, including without
|
||||
limitation commercial, advertising or promotional purposes (the
|
||||
"License"). The License shall be deemed effective as of the date CC0 was
|
||||
applied by Affirmer to the Work. Should any part of the License for any
|
||||
reason be judged legally invalid or ineffective under applicable law, such
|
||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||
of the License, and in such case Affirmer hereby affirms that he or she
|
||||
will not (i) exercise any of his or her remaining Copyright and Related
|
||||
Rights in the Work or (ii) assert any associated claims and causes of
|
||||
action with respect to the Work, in either case contrary to Affirmer's
|
||||
express Statement of Purpose.
|
||||
|
||||
4. Limitations and Disclaimers.
|
||||
|
||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||
surrendered, licensed or otherwise affected by this document.
|
||||
b. Affirmer offers the Work as-is and makes no representations or
|
||||
warranties of any kind concerning the Work, express, implied,
|
||||
statutory or otherwise, including without limitation warranties of
|
||||
title, merchantability, fitness for a particular purpose, non
|
||||
infringement, or the absence of latent or other defects, accuracy, or
|
||||
the present or absence of errors, whether or not discoverable, all to
|
||||
the greatest extent permissible under applicable law.
|
||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||
that may apply to the Work or any use thereof, including without
|
||||
limitation any person's Copyright and Related Rights in the Work.
|
||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||
consents, permissions or other rights required for any use of the
|
||||
Work.
|
||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||
party to this document and has no duty or obligation with respect to
|
||||
this CC0 or use of the Work.
|
||||
35
examples/Functions/functions.scad
Normal file
35
examples/Functions/functions.scad
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
echo(version=version());
|
||||
|
||||
// Functions can be defined to simplify code using lots of
|
||||
// calculations.
|
||||
|
||||
// Simple example with a single function argument (which should
|
||||
// be a number) and returning a number calculated based on that.
|
||||
function f(x) = 0.5 * x + 1;
|
||||
|
||||
color("red")
|
||||
for (a = [ -100 : 5 : 100 ])
|
||||
translate([a, f(a), 0]) cube(2, center = true);
|
||||
|
||||
// Functions can call other functions and return complex values
|
||||
// too. In this case a 3 element vector is returned which can
|
||||
// be used as point in 3D space or as vector (in the mathematical
|
||||
// meaning) for translations and other transformations.
|
||||
function g(x) = [ 5 * x + 20, f(x) * f(x) - 50, 0 ];
|
||||
|
||||
color("green")
|
||||
for (a = [ -200 : 10 : 200 ])
|
||||
translate(g(a / 8)) sphere(1);
|
||||
|
||||
|
||||
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
47
examples/Functions/list_comprehensions.scad
Normal file
47
examples/Functions/list_comprehensions.scad
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
// list_comprehensions.scad - Examples of list comprehension usage
|
||||
|
||||
// Basic list comprehension:
|
||||
// Returns a 2D vertex per iteration of the for loop
|
||||
// Note: subsequent assignments inside the for loop is allowed
|
||||
module ngon(num, r) {
|
||||
polygon([for (i=[0:num-1], a=i*360/num) [ r*cos(a), r*sin(a) ]]);
|
||||
}
|
||||
|
||||
ngon(3, 10);
|
||||
translate([20,0]) ngon(6, 8);
|
||||
translate([36,0]) ngon(10, 6);
|
||||
|
||||
// More complex list comprehension:
|
||||
// Similar to ngon(), but uses an inner function to calculate
|
||||
// the vertices. the let() keyword allows assignment of temporary variables.
|
||||
module rounded_ngon(num, r, rounding = 0) {
|
||||
function v(a) = let (d = 360/num, v = floor((a+d/2)/d)*d) (r-rounding) * [cos(v), sin(v)];
|
||||
polygon([for (a=[0:360-1]) v(a) + rounding*[cos(a),sin(a)]]);
|
||||
}
|
||||
|
||||
translate([0,22]) rounded_ngon(3, 10, 5);
|
||||
translate([20,22]) rounded_ngon(6, 8, 4);
|
||||
translate([36,22]) rounded_ngon(10, 6, 3);
|
||||
|
||||
// Gear/star generator
|
||||
// Uses a list comprehension taking a list of radii to generate a star shape
|
||||
module star(num, radii) {
|
||||
function r(a) = (floor(a / 10) % 2) ? 10 : 8;
|
||||
polygon([for (i=[0:num-1], a=i*360/num, r=radii[i%len(radii)]) [ r*cos(a), r*sin(a) ]]);
|
||||
}
|
||||
|
||||
translate([0,44]) star(20, [6,10]);
|
||||
translate([20,44]) star(40, [6,8,8,6]);
|
||||
translate([36,44]) star(30, [3,4,5,6,5,4]);
|
||||
|
||||
echo(version=version());
|
||||
// Written by Marius Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
50
examples/Functions/polygon_areas.scad
Normal file
50
examples/Functions/polygon_areas.scad
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
// polygon_areas.scad: Another recursion example
|
||||
|
||||
// Draw all geometry
|
||||
translate([0,20]) color("Red") text("Areas:", size=8, halign="center");
|
||||
translate([-44,0]) shapeWithArea(3, 10);
|
||||
translate([-22,0]) shapeWithArea(4, 10);
|
||||
translate([0,0]) shapeWithArea(6, 10);
|
||||
translate([22,0]) shapeWithArea(10, 10);
|
||||
translate([44,0]) shapeWithArea(360, 10);
|
||||
|
||||
// One shape with corresponding text
|
||||
module shapeWithArea(num, r) {
|
||||
polygon(ngon(num, r));
|
||||
translate([0,-20])
|
||||
color("Cyan")
|
||||
text(str(round(area(ngon(num, r)))), halign="center", size=8);
|
||||
}
|
||||
|
||||
// Simple list comprehension for creating N-gon vertices
|
||||
function ngon(num, r) =
|
||||
[for (i=[0:num-1], a=i*360/num) [ r*cos(a), r*sin(a) ]];
|
||||
|
||||
// Area of a triangle with the 3rd vertex in the origin
|
||||
function triarea(v0, v1) = cross(v0, v1) / 2;
|
||||
|
||||
// Area of a polygon using the Shoelace formula
|
||||
function area(vertices) =
|
||||
let (areas = [let (num=len(vertices))
|
||||
for (i=[0:num-1])
|
||||
triarea(vertices[i], vertices[(i+1)%num])
|
||||
])
|
||||
sum(areas);
|
||||
|
||||
// Recursive helper function: Sums all values in a list.
|
||||
// In this case, sum all partial areas into the final area.
|
||||
function sum(values,s=0) =
|
||||
s == len(values) - 1 ? values[s] : values[s] + sum(values,s+1);
|
||||
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2015 by Marius Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
25
examples/Functions/recursion.scad
Normal file
25
examples/Functions/recursion.scad
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
// recursionscad: Basic recursion example
|
||||
|
||||
// Recursive functions are very powerful for calculating values.
|
||||
// A good number of algorithms make use of recursive definitions,
|
||||
// e.g the caluclation of the factorial of a number.
|
||||
// The ternary operator " ? : " is the easiest way to define the
|
||||
// termination condition.
|
||||
// Note how the following simple implementation will never terminate
|
||||
// when called with a negative value. This will produce an error after
|
||||
// some time when OpenSCAD detects the endless recursive call.
|
||||
function factorial(n) = n == 0 ? 1 : factorial(n - 1) * n;
|
||||
|
||||
color("cyan") text(str("6! = ", factorial(6)), halign = "center");
|
||||
|
||||
echo(version=version());
|
||||
// Written in 2015 by Torsten Paul <Torsten.Paul@gmx.de>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
38
examples/Old/example001.scad
Normal file
38
examples/Old/example001.scad
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
module example001()
|
||||
{
|
||||
function r_from_dia(d) = d / 2;
|
||||
|
||||
module rotcy(rot, r, h) {
|
||||
rotate(90, rot)
|
||||
cylinder(r = r, h = h, center = true);
|
||||
}
|
||||
|
||||
difference() {
|
||||
sphere(r = r_from_dia(size));
|
||||
rotcy([0, 0, 0], cy_r, cy_h);
|
||||
rotcy([1, 0, 0], cy_r, cy_h);
|
||||
rotcy([0, 1, 0], cy_r, cy_h);
|
||||
}
|
||||
|
||||
size = 50;
|
||||
hole = 25;
|
||||
|
||||
cy_r = r_from_dia(hole);
|
||||
cy_h = r_from_dia(size * 2.5);
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
|
||||
example001();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
36
examples/Old/example002.scad
Normal file
36
examples/Old/example002.scad
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
module example002()
|
||||
{
|
||||
intersection() {
|
||||
difference() {
|
||||
union() {
|
||||
cube([30, 30, 30], center = true);
|
||||
translate([0, 0, -25])
|
||||
cube([15, 15, 50], center = true);
|
||||
}
|
||||
union() {
|
||||
cube([50, 10, 10], center = true);
|
||||
cube([10, 50, 10], center = true);
|
||||
cube([10, 10, 50], center = true);
|
||||
}
|
||||
}
|
||||
translate([0, 0, 5])
|
||||
cylinder(h = 50, r1 = 20, r2 = 5, center = true);
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
|
||||
example002();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
33
examples/Old/example003.scad
Normal file
33
examples/Old/example003.scad
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
|
||||
module example003()
|
||||
{
|
||||
difference() {
|
||||
union() {
|
||||
cube([30, 30, 30], center = true);
|
||||
cube([40, 15, 15], center = true);
|
||||
cube([15, 40, 15], center = true);
|
||||
cube([15, 15, 40], center = true);
|
||||
}
|
||||
union() {
|
||||
cube([50, 10, 10], center = true);
|
||||
cube([10, 50, 10], center = true);
|
||||
cube([10, 10, 50], center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
|
||||
example003();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
24
examples/Old/example004.scad
Normal file
24
examples/Old/example004.scad
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
|
||||
module example004()
|
||||
{
|
||||
difference() {
|
||||
cube(30, center = true);
|
||||
sphere(20);
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
|
||||
example004();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
34
examples/Old/example005.scad
Normal file
34
examples/Old/example005.scad
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
|
||||
module example005()
|
||||
{
|
||||
translate([0, 0, -120]) {
|
||||
difference() {
|
||||
cylinder(h = 50, r = 100);
|
||||
translate([0, 0, 10]) cylinder(h = 50, r = 80);
|
||||
translate([100, 0, 35]) cube(50, center = true);
|
||||
}
|
||||
for (i = [0:5]) {
|
||||
echo(360*i/6, sin(360*i/6)*80, cos(360*i/6)*80);
|
||||
translate([sin(360*i/6)*80, cos(360*i/6)*80, 0 ])
|
||||
cylinder(h = 200, r=10);
|
||||
}
|
||||
translate([0, 0, 200])
|
||||
cylinder(h = 80, r1 = 120, r2 = 0);
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
|
||||
example005();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
59
examples/Old/example006.scad
Normal file
59
examples/Old/example006.scad
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
|
||||
module example006()
|
||||
{
|
||||
module edgeprofile()
|
||||
{
|
||||
render(convexity = 2) difference() {
|
||||
cube([20, 20, 150], center = true);
|
||||
translate([-10, -10, 0])
|
||||
cylinder(h = 80, r = 10, center = true);
|
||||
translate([-10, -10, +40])
|
||||
sphere(r = 10);
|
||||
translate([-10, -10, -40])
|
||||
sphere(r = 10);
|
||||
}
|
||||
}
|
||||
|
||||
difference() {
|
||||
cube(100, center = true);
|
||||
for (rot = [ [0, 0, 0], [1, 0, 0], [0, 1, 0] ]) {
|
||||
rotate(90, rot)
|
||||
for (p = [[+1, +1, 0], [-1, +1, 90], [-1, -1, 180], [+1, -1, 270]]) {
|
||||
translate([ p[0]*50, p[1]*50, 0 ])
|
||||
rotate(p[2], [0, 0, 1])
|
||||
edgeprofile();
|
||||
}
|
||||
}
|
||||
for (i = [
|
||||
[ 0, 0, [ [0, 0] ] ],
|
||||
[ 90, 0, [ [-20, -20], [+20, +20] ] ],
|
||||
[ 180, 0, [ [-20, -25], [-20, 0], [-20, +25], [+20, -25], [+20, 0], [+20, +25] ] ],
|
||||
[ 270, 0, [ [0, 0], [-25, -25], [+25, -25], [-25, +25], [+25, +25] ] ],
|
||||
[ 0, 90, [ [-25, -25], [0, 0], [+25, +25] ] ],
|
||||
[ 0, -90, [ [-25, -25], [+25, -25], [-25, +25], [+25, +25] ] ]
|
||||
]) {
|
||||
rotate(i[0], [0, 0, 1])
|
||||
rotate(i[1], [1, 0, 0])
|
||||
translate([0, -50, 0])
|
||||
for (j = i[2]) {
|
||||
translate([j[0], 0, j[1]]) sphere(10);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
|
||||
example006();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
70
examples/Old/example007.scad
Normal file
70
examples/Old/example007.scad
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
|
||||
module cutout()
|
||||
{
|
||||
intersection() {
|
||||
rotate(90, [1, 0, 0])
|
||||
translate([0, 0, -50])
|
||||
linear_extrude(height = 100, convexity = 1)
|
||||
import(file = "example007.dxf", layer = "cutout1");
|
||||
|
||||
rotate(90, [0, 0, 1])
|
||||
rotate(90, [1, 0, 0])
|
||||
translate([0, 0, -50])
|
||||
linear_extrude(height = 100, convexity = 2)
|
||||
import(file = "example007.dxf", layer = "cutout2");
|
||||
}
|
||||
}
|
||||
|
||||
module clip()
|
||||
{
|
||||
difference() {
|
||||
rotate_extrude(convexity = 3, $fn = 0, $fa = 12, $fs = 2) {
|
||||
import(file = "example007.dxf", layer = "dorn");
|
||||
}
|
||||
for (r = [0, 90])
|
||||
rotate(r, [0, 0, 1])
|
||||
cutout();
|
||||
}
|
||||
}
|
||||
|
||||
module cutview()
|
||||
{
|
||||
difference() {
|
||||
difference() {
|
||||
translate([0, 0, -10]) clip();
|
||||
|
||||
rotate(20, [0, 0, 1])
|
||||
rotate(-20, [0, 1, 0])
|
||||
translate([18, 0, 0])
|
||||
cube(30, center = true);
|
||||
}
|
||||
|
||||
# render(convexity = 5) intersection() {
|
||||
translate([0, 0, -10])
|
||||
clip();
|
||||
|
||||
rotate(20, [0, 0, 1])
|
||||
rotate(-20, [0, 1, 0])
|
||||
translate([18, 0, 0])
|
||||
cube(30, center = true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
echo(version=version());
|
||||
|
||||
translate([0, 0, -10]) clip();
|
||||
|
||||
// cutview();
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
42
examples/Old/example008.scad
Normal file
42
examples/Old/example008.scad
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
echo(version=version());
|
||||
|
||||
difference() {
|
||||
intersection() {
|
||||
translate([ -25, -25, -25])
|
||||
linear_extrude(height = 50, convexity = 3)
|
||||
import(file = "example008.dxf", layer = "G");
|
||||
|
||||
rotate(90, [1, 0, 0])
|
||||
translate([ -25, -125, -25])
|
||||
linear_extrude(height = 50, convexity = 3)
|
||||
import(file = "example008.dxf", layer = "E");
|
||||
|
||||
rotate(90, [0, 1, 0])
|
||||
translate([ -125, -125, -25])
|
||||
linear_extrude(height = 50, convexity = 3)
|
||||
import(file = "example008.dxf", layer = "B");
|
||||
}
|
||||
|
||||
intersection() {
|
||||
translate([ -125, -25, -26])
|
||||
linear_extrude(height = 52, convexity = 1)
|
||||
import(file = "example008.dxf", layer = "X");
|
||||
|
||||
rotate(90, [0, 1, 0])
|
||||
translate([ -125, -25, -26])
|
||||
linear_extrude(height = 52, convexity = 1)
|
||||
import(file = "example008.dxf", layer = "X");
|
||||
}
|
||||
}
|
||||
|
||||
// Written by Clifford Wolf <clifford@clifford.at> and Marius
|
||||
// Kintel <marius@kintel.net>
|
||||
//
|
||||
// To the extent possible under law, the author(s) have dedicated all
|
||||
// copyright and related and neighboring rights to this software to the
|
||||
// public domain worldwide. This software is distributed without any
|
||||
// warranty.
|
||||
//
|
||||
// You should have received a copy of the CC0 Public Domain
|
||||
// Dedication along with this software.
|
||||
// If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue