Compare commits
951 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
3bb2111e2f | ||
|
d0474ed757 | ||
|
adf07c5da8 | ||
|
0b23e5666a | ||
|
f5c4320d5e | ||
|
eeaa9b3b2f | ||
|
029ddc4150 | ||
|
c810e30003 | ||
|
1225d4bf47 | ||
|
aec1ec38d1 | ||
|
b9e77be7e7 | ||
|
0468ecae77 | ||
|
57ec3f46ef | ||
|
84301af250 | ||
|
617139d720 | ||
|
3d7c2c6f85 | ||
|
21d5638e94 | ||
|
25b61d8ded | ||
|
6d4f7661ec | ||
|
c981127471 | ||
|
7c40e28e64 | ||
|
38ce75b708 | ||
|
d2a936a5a3 | ||
|
c3425143c3 | ||
|
556fd1ed28 | ||
|
7421fa97c4 | ||
|
d90b0c20fc | ||
|
438e9cfd93 | ||
|
f76fd33054 | ||
|
820cf7de83 | ||
|
a3b9e42098 | ||
|
b3289dd55b | ||
|
659654f533 | ||
|
770adea91f | ||
|
dcacb8a267 | ||
|
047731d7d6 | ||
|
8ce96f9128 | ||
|
fb4a626707 | ||
|
336648434c | ||
|
b8e52677b3 | ||
|
4e0078f25c | ||
|
356966b8f6 | ||
|
bb9c630e20 | ||
|
98f9d8ea57 | ||
|
197c542c5e | ||
|
e900aefcce | ||
|
2a461a62b0 | ||
|
2601d8425c | ||
|
a0d07ea78f | ||
|
3a4b1224e6 | ||
|
48315257b1 | ||
|
62e129614f | ||
|
1fb61fc3ec | ||
|
7889c5608f | ||
|
d16d419463 | ||
|
d4c4a78d98 | ||
|
fafd073840 | ||
|
f8f91df05a | ||
|
896e0bbd2e | ||
|
d4fc1279dd | ||
|
8715bcc927 | ||
|
3a5cd29732 | ||
|
d5d809c70d | ||
|
aa082712df | ||
|
da03b782ed | ||
|
280332fb8f | ||
|
aa0c8e1cd7 | ||
|
0af33f4008 | ||
|
a65a8e60cb | ||
|
950e929edb | ||
|
032db93442 | ||
|
0e3a4d4ccd | ||
|
379b0c3614 | ||
|
76afd424e3 | ||
|
1188fe9bcc | ||
|
8e5255fdc9 | ||
|
9f189e1124 | ||
|
22ec55cfac | ||
|
ba5b184d16 | ||
|
3e1044787f | ||
|
96c9cfc0c4 | ||
|
af87c89ecc | ||
|
1c893c3fc7 | ||
|
0430baeaa9 | ||
|
cd2b3bf379 | ||
|
91dff32e23 | ||
|
da2ba88798 | ||
|
aa60b6f570 | ||
|
c1d191dc97 | ||
|
9f3ecd0b3c | ||
|
15478290e1 | ||
|
4c68946b3f | ||
|
a1a306995f | ||
|
53ac475bbf | ||
|
5f329649b6 | ||
|
1072876ac7 | ||
|
a5408736e5 | ||
|
f34bfe1d90 | ||
|
3f7478710f | ||
|
5595170b09 | ||
|
fdf879dbae | ||
|
a4e8194938 | ||
|
193ff6f531 | ||
|
6fac123aee | ||
|
d2f961494b | ||
|
cadbdc826d | ||
|
73c3e2d54c | ||
|
6292c8989a | ||
|
438e7752ac | ||
|
6247979899 | ||
|
bebf3bfc53 | ||
|
00680fe1fc | ||
|
3f8fc98145 | ||
|
8326dcc38f | ||
|
5d39610f11 | ||
|
19f5f66697 | ||
|
535d64a562 | ||
|
66c0b70417 | ||
|
6a9da8be00 | ||
|
5dd6d0abd5 | ||
|
f38d7a784b | ||
|
cded66d2c4 | ||
|
6229ab6d8c | ||
|
d2a9b4be93 | ||
|
d38c3b91fc | ||
|
62da7cebdc | ||
|
07ee15da1c | ||
|
d609292ad2 | ||
|
cf1d5deaa9 | ||
|
71815a2cdc | ||
|
7e66869bca | ||
|
a9b40f133b | ||
|
a0d4d732a7 | ||
|
7c613930d5 | ||
|
b939634f8b | ||
|
f3b3029d01 | ||
|
fdc8e2f29a | ||
|
d9bc2e29ea | ||
|
b67f4bf200 | ||
|
5825205a4f | ||
|
5b85e635d2 | ||
|
cb0a4bed9f | ||
|
7926667772 | ||
|
bb4700ba66 | ||
|
11b39945df | ||
|
03563afb6f | ||
|
6f13757cbc | ||
|
27190008bf | ||
|
6f9660a67d | ||
|
f0bc7e5dc2 | ||
|
8c57db2e06 | ||
|
05abb19126 | ||
|
ad064532e5 | ||
|
0ed3e296ea | ||
|
8158938c13 | ||
|
af521dd53f | ||
|
8b77eba322 | ||
|
bc96e0ebd5 | ||
|
679b0d0fc2 | ||
|
39c1c1a9db | ||
|
f97366ccdf | ||
|
3d24874d6d | ||
|
7d1cbb9460 | ||
|
2cd56758eb | ||
|
120b7ea2c7 | ||
|
e9dd4418d1 | ||
|
5c547351db | ||
|
7744b4e79c | ||
|
18991671f8 | ||
|
2a7c38915b | ||
|
a7ab17c149 | ||
|
1d1479b531 | ||
|
1184258336 | ||
|
da5cd8a250 | ||
|
3e110a045b | ||
|
637dcf0840 | ||
|
4a5c576630 | ||
|
4b24c81eeb | ||
|
06a785bfb1 | ||
|
22fdb8c2e5 | ||
|
045acaa3ac | ||
|
d7a6bb35ac | ||
|
43d338eaaf | ||
|
1723ba3abe | ||
|
2dc729d860 | ||
|
68b13fc330 | ||
|
f9274fa745 | ||
|
3dc36af58b | ||
|
c8efde6258 | ||
|
deb875b147 | ||
|
9a1ac9a363 | ||
|
0280293192 | ||
|
aa70a75fa2 | ||
|
6459cc582e | ||
|
a93739474b | ||
|
cb0e361671 | ||
|
f5e403bbf0 | ||
|
65116cbc78 | ||
|
ac9368e74d | ||
|
61ca95d3a1 | ||
|
b5063e12bf | ||
|
3357bd4e84 | ||
|
2e135ef9ae | ||
|
9585c3a75a | ||
|
3eed784234 | ||
|
d2ad4ff388 | ||
|
7cfc2f21dd | ||
|
d6f7219eb6 | ||
|
8b90e319b3 | ||
|
1a99069057 | ||
|
b89a800022 | ||
|
951ed2daf2 | ||
|
e048056057 | ||
|
2f7aea6147 | ||
|
57914a8245 | ||
|
987bc3be5b | ||
|
3cb77f3a7a | ||
|
ed01eebf16 | ||
|
6df459370e | ||
|
14b15a2b1c | ||
|
4eb10d2b73 | ||
|
b9d3cc8530 | ||
|
d2b61f1c60 | ||
|
ccb16cc4f7 | ||
|
95edbbee76 | ||
|
79f9a76087 | ||
|
e5aff6782d | ||
|
52b5a26006 | ||
|
da4342441f | ||
|
c76766f5b4 | ||
|
8a528e2e2b | ||
|
37b4855793 | ||
|
d60b35dd0d | ||
|
78f6acdabf | ||
|
84e5fb4c7b | ||
|
b07b1b1f3d | ||
|
a38fd21f43 | ||
|
32f44ec9c1 | ||
|
ffbb7c5db4 | ||
|
21c00b52d3 | ||
|
88a970b2ba | ||
|
fbca4bd868 | ||
|
5f400c124d | ||
|
2b3fc8f80e | ||
|
62f6c4caa5 | ||
|
0ce5d6e1da | ||
|
63ddbd3104 | ||
|
2b2d4dbefa | ||
|
642242b204 | ||
|
920509c3f1 | ||
|
5b04d11ac8 | ||
|
fa63d1eec6 | ||
|
9def71f194 | ||
|
58f26d8e0f | ||
|
20242f5d51 | ||
|
84c5ea2d91 | ||
|
2f3bf9c309 | ||
|
8f6c8f340a | ||
|
e36fd9bd46 | ||
|
2687844621 | ||
|
7ab33ba03c | ||
|
738ca61cab | ||
|
dd76edf17f | ||
|
ff89443ff2 | ||
|
adf3ea365f | ||
|
762d16b2a4 | ||
|
118e1191dd | ||
|
90006a6b20 | ||
|
d9a93b401e | ||
|
dbc918cfe1 | ||
|
0a41e6bcc1 | ||
|
5b37c7ad86 | ||
|
dff52fd168 | ||
|
fef3a55965 | ||
|
0ca2eb4e93 | ||
|
ff8f754dcc | ||
|
f16de19a00 | ||
|
fe71af113f | ||
|
ec276b274f | ||
|
a8e903ccb7 | ||
|
b89c2d90d3 | ||
|
2771e2cd31 | ||
|
ccbcac6a10 | ||
|
d9c890d8c3 | ||
|
18ecbcee93 | ||
|
dff91873b3 | ||
|
c7897c47c0 | ||
|
26592f72cd | ||
|
b0f8f5c4f4 | ||
|
96ec1e0c26 | ||
|
8475049fad | ||
|
1d7d45e3ed | ||
|
17fcdbb92e | ||
|
14ad6b4090 | ||
|
769023f639 | ||
|
fc7c8ae32f | ||
|
716f48c450 | ||
|
943d7bffca | ||
|
cb7c28d01a | ||
|
e04381bdea | ||
|
9a143a9f72 | ||
|
8f76446bd8 | ||
|
c9370160a7 | ||
|
57f800f1fc | ||
|
8dc6336f2f | ||
|
042feb4951 | ||
|
fd9eb1fe4d | ||
|
7d407d8cda | ||
|
97e6e5755e | ||
|
70cdccd280 | ||
|
69bfe3fdfa | ||
|
74aadcb514 | ||
|
81ba7db6cc | ||
|
0ac32c05b8 | ||
|
00861bc751 | ||
|
ca6c2ba7ee | ||
|
acdf107222 | ||
|
97f2fd8d62 | ||
|
0835f77aaa | ||
|
b8d61e7578 | ||
|
0409c35375 | ||
|
dd632d5845 | ||
|
9320125b42 | ||
|
7113cce683 | ||
|
86d0c65108 | ||
|
2cfc99a08c | ||
|
6e0c0cfc78 | ||
|
a9938bfcfd | ||
|
b3aaecd32c | ||
|
84eeaf913a | ||
|
1ec50f7b85 | ||
|
3569617313 | ||
|
eca8947822 | ||
|
773dc87be9 | ||
|
530faeec35 | ||
|
48e986ce14 | ||
|
f3216c2062 | ||
|
2942651117 | ||
|
8d78ec4253 | ||
|
39fc86e67e | ||
|
09125eb667 | ||
|
9ba754162a | ||
|
b2e58ac763 | ||
|
c917ffee41 | ||
|
5270d6c606 | ||
|
cd4dda3b39 | ||
|
cc15a7df8b | ||
|
a299949c42 | ||
|
47bdb4b31d | ||
|
0fb6f4b9a1 | ||
|
9facafaf61 | ||
|
cd16a74d08 | ||
|
496a151005 | ||
|
2e12d6b79a | ||
|
d5221e1289 | ||
|
382d1c60b8 | ||
|
d3d0517376 | ||
|
43a71ead1d | ||
|
e5f17508da | ||
|
3ff2961a6d | ||
|
819a76d81c | ||
|
efdd6c1078 | ||
|
4029ab4641 | ||
|
14ca2c48ae | ||
|
f8c89b1dab | ||
|
2e92394513 | ||
|
bd7d16d6e5 | ||
|
6d212c8722 | ||
|
1d946647eb | ||
|
c5a99c3223 | ||
|
39e363d59c | ||
|
9478d1ec60 | ||
|
134ca1b364 | ||
|
e7c38fa876 | ||
|
bd8f755a6c | ||
|
91d5c40336 | ||
|
5c8c0b8139 | ||
|
324693a38f | ||
|
14a6348771 | ||
|
7d9cb94f22 | ||
|
90a29ceecd | ||
|
e7bfb3c951 | ||
|
59eb3a1dc2 | ||
|
e49c40e0f0 | ||
|
d822688eaf | ||
|
d25b73dbda | ||
|
22dce8fee2 | ||
|
abd287b29e | ||
|
a82827e389 | ||
|
c6a661e074 | ||
|
0490da4b91 | ||
|
364488970b | ||
|
4eda143bbb | ||
|
2a87a2221f | ||
|
39cbc9a069 | ||
|
55e64dcb53 | ||
|
154436382c | ||
|
90c6db16d5 | ||
|
0ec9f0e0e5 | ||
|
218830d252 | ||
|
84f3636bf0 | ||
|
d9dd44db29 | ||
|
9577f68d13 | ||
|
7a8c152607 | ||
|
345603551b | ||
|
610c9588bd | ||
|
7b1095d130 | ||
|
884892a3f1 | ||
|
2600504dd5 | ||
|
f27250d285 | ||
|
5016231000 | ||
|
402aa95289 | ||
|
50d11142d5 | ||
|
031438a4df | ||
|
9063d9da05 | ||
|
3fbee973a9 | ||
|
3b5af34041 | ||
|
824aefefd9 | ||
|
4cdeb5b4a6 | ||
|
9271c79a3a | ||
|
3b2b07ae25 | ||
|
214b0a2640 | ||
|
29da8be872 | ||
|
10930e8b1c | ||
|
756ed377c3 | ||
|
300f72a959 | ||
|
faf53b3846 | ||
|
2376e429d1 | ||
|
b0817f2339 | ||
|
0304233cdc | ||
|
4176cb476e | ||
|
3901e4f1ea | ||
|
9022cb731d | ||
|
b76a2f9c32 | ||
|
bb2f10043f | ||
|
5b65cc16a7 | ||
|
8cdfe435ee | ||
|
1cddbc3453 | ||
|
50621b0306 | ||
|
8dad1bd4b6 | ||
|
c6b0c30fd8 | ||
|
a6d0c85dbe | ||
|
87deb39a4b | ||
|
bfa0fd2b11 | ||
|
2bd663d46b | ||
|
5c1c6a7463 | ||
|
ca92286690 | ||
|
cbff19c33e | ||
|
43b22a0f4c | ||
|
6bda39ecef | ||
|
37c3a647a5 | ||
|
59ae93ba5f | ||
|
6d6f62c77f | ||
|
a8ae7c18e4 | ||
|
9c3c92ab13 | ||
|
f1116dc8cf | ||
|
5a44454547 | ||
|
57d46eda8d | ||
|
4a19b445ab | ||
|
675f80159e | ||
|
1132451009 | ||
|
c78fb13731 | ||
|
a53c202c48 | ||
|
ccbd81b88e | ||
|
a14c5676d4 | ||
|
e9440e55d6 | ||
|
8f1d6a6e1a | ||
|
95dc133d0d | ||
|
dbdf8a757d | ||
|
d6affc1ff5 | ||
|
f7e81a78e3 | ||
|
63a5e53572 | ||
|
006572c5bf | ||
|
3678b8b6d7 | ||
|
89eb57652b | ||
|
0a24f4fc67 | ||
|
6e8277c91d | ||
|
9071ac3788 | ||
|
f1b1239950 | ||
|
71b6203d9c | ||
|
fa0e77ebaf | ||
|
6e38061655 | ||
|
ac2c420487 | ||
|
a29b851500 | ||
|
bc17a2df19 | ||
|
d701b537f0 | ||
|
4683ff5a46 | ||
|
06c1ef94bc | ||
|
e2958b6ae1 | ||
|
a2971ec1d0 | ||
|
1634403e28 | ||
|
57da4b39ad | ||
|
5374999967 | ||
|
60f3698200 | ||
|
83b1843f3f | ||
|
b2d2940ef1 | ||
|
3c0c524186 | ||
|
4eef2c6dde | ||
|
af9cfb16e4 | ||
|
9340f73f1a | ||
|
66d02d02e2 | ||
|
44165275e7 | ||
|
dcda61390c | ||
|
58a7a20c53 | ||
|
d0bc8c0f7f | ||
|
26fcdbe8e3 | ||
|
704ed1e725 | ||
|
702aab846e | ||
|
fbc07cec80 | ||
|
b1b61fddbf | ||
|
89096ad329 | ||
|
e5b1a6cf93 | ||
|
523ce3cb33 | ||
|
ea36c97ac7 | ||
|
5e7b5f1691 | ||
|
8fb3d5b579 | ||
|
cafa0ebd06 | ||
|
a2fee75749 | ||
|
0725d945de | ||
|
41ebc07fd0 | ||
|
c59fdc5f1d | ||
|
23ed306148 | ||
|
657c10a9cc | ||
|
8da1912fff | ||
|
fd375dd50f | ||
|
69e2a79488 | ||
|
e5af7b3027 | ||
|
9c532acce4 | ||
|
1d085c35d0 | ||
|
09d898c035 | ||
|
12e6af2492 | ||
|
f3a5ce76e3 | ||
|
8ca4e12b22 | ||
|
e021750d7b | ||
|
43fa3fb5fd | ||
|
853da1f9e2 | ||
|
346cea1db8 | ||
|
c6ca52aba8 | ||
|
5863a5c3f6 | ||
|
43d614ba7c | ||
|
fb0672480f | ||
|
3d1a4cbb33 | ||
|
0494ef7f32 | ||
|
9850227fe4 | ||
|
4f22f8489a | ||
|
210844c9f8 | ||
|
e9095eaff5 | ||
|
950c7a5937 | ||
|
9cbac21f17 | ||
|
30f83865f1 | ||
|
b6d86ab4ba | ||
|
2355820034 | ||
|
679e3aae62 | ||
|
21754293c8 | ||
|
d4a865080c | ||
|
b79131f9bc | ||
|
7aad397860 | ||
|
b209c40d99 | ||
|
d8122150a1 | ||
|
e507f71619 | ||
|
966f6f6850 | ||
|
d35fe91246 | ||
|
2f9509c249 | ||
|
0810d86314 | ||
|
52e43aa03c | ||
|
d875d41e4c | ||
|
82ec74eee1 | ||
|
3390b0587d | ||
|
433040f363 | ||
|
8cc0eeebc3 | ||
|
803906e8cd | ||
|
03f4939fe1 | ||
|
066e5fc55d | ||
|
aeb9dec141 | ||
|
bfa3d6b8ff | ||
|
4fb0f9ac7b | ||
|
e5eeb77292 | ||
|
2e5b245167 | ||
|
a37c6030e9 | ||
|
13ca93e9db | ||
|
749079767d | ||
|
d8a444099f | ||
|
0dc5544e2e | ||
|
ac41769faa | ||
|
bcbc4e09a5 | ||
|
888460d2e3 | ||
|
c5be2d398a | ||
|
798676e2eb | ||
|
ad6b0ae4f1 | ||
|
9829c5c201 | ||
|
fd6fbbc92f | ||
|
6aaab429fb | ||
|
d00f51edcb | ||
|
0c1e85e5db | ||
|
ed3b8c1422 | ||
|
7574f0aa3d | ||
|
62c4e1c656 | ||
|
af88ee6e86 | ||
|
30d60d643f | ||
|
0d63029c4c | ||
|
c58e019b69 | ||
|
249cced4c7 | ||
|
2a4bd4c006 | ||
|
569a0091c3 | ||
|
beaf6fb776 | ||
|
9f8614397b | ||
|
0c3c0286e9 | ||
|
026cd9391e | ||
|
58a293f6c8 | ||
|
0e6d98fd1e | ||
|
7d8bfc6099 | ||
|
2844a30d91 | ||
|
9b0c825f92 | ||
|
428af98b5d | ||
|
505e384343 | ||
|
9fe43dc7b2 | ||
|
9955169c75 | ||
|
d350362c47 | ||
|
26a0d7a62e | ||
|
091f071cb5 | ||
|
401c6baca4 | ||
|
bbe59b9dbb | ||
|
02fd718ca7 | ||
|
a00945ae1f | ||
|
a599842933 | ||
|
da08e75e73 | ||
|
a129aa547c | ||
|
eceb3fa282 | ||
|
a16a8373d3 | ||
|
4a516bf64d | ||
|
43285d49b1 | ||
|
3d081ed0c3 | ||
|
9ad1835322 | ||
|
05737e0512 | ||
|
8b65a1cb5c | ||
|
179701330f | ||
|
50f87275e0 | ||
|
f8037bf484 | ||
|
3f3d799870 | ||
|
3bb5553698 | ||
|
ad826cfb77 | ||
|
fabfd1a9ce | ||
|
ecd8311921 | ||
|
2939d03879 | ||
|
2d3315f9ad | ||
|
7c8dec3671 | ||
|
6bed665368 | ||
|
5a5ee9cc0c | ||
|
3784469c59 | ||
|
1544546cdd | ||
|
7bd7326794 | ||
|
0a117e0c09 | ||
|
3b48de2c47 | ||
|
0295b0ded0 | ||
|
4bddf3ca33 | ||
|
a8472c0831 | ||
|
a56cf44b4c | ||
|
a213a797a0 | ||
|
4cd74cb0bf | ||
|
b722d178e7 | ||
|
bf8cb44595 | ||
|
6e3d3e0a4b | ||
|
352ca21300 | ||
|
5399224ff0 | ||
|
574e4b695a | ||
|
2e1959f3ef | ||
|
8829123ade | ||
|
1812e732bb | ||
|
021716cf80 | ||
|
3f499ca32d | ||
|
a11eae4aaa | ||
|
61f7988820 | ||
|
7d47d56bdd | ||
|
1a6ce7ea0a | ||
|
9c487ec304 | ||
|
5d593ecbc3 | ||
|
9153c997eb | ||
|
904e15667d | ||
|
cdccc4723b | ||
|
88775366db | ||
|
0d188fa96c | ||
|
fd1b426d4f | ||
|
e1a5fcb928 | ||
|
d77581d717 | ||
|
81f5e05840 | ||
|
e312c03414 | ||
|
6c6093d46b | ||
|
61faa5ae06 | ||
|
ccfca4e246 | ||
|
f4fa300fac | ||
|
404a01b29b | ||
|
3cae424fb4 | ||
|
ad926d2def | ||
|
96f9d8c38a | ||
|
3c43ef8fc2 | ||
|
0d71103959 | ||
|
da07c95497 | ||
|
ccafbe8a3a | ||
|
bed658178e | ||
|
7b6e873b2a | ||
|
780ecc3c06 | ||
|
97f4cfa60d | ||
|
66bf0f89bf | ||
|
246fc3006c | ||
|
aa42d2cd4e | ||
|
4583305c76 | ||
|
f3473e8765 | ||
|
e855403d7a | ||
|
d3a51b280a | ||
|
9863b718a0 | ||
|
0551981b07 | ||
|
e6639cd01c | ||
|
8d39873360 | ||
|
71b6ab666d | ||
|
a7d9a26b07 | ||
|
dc8e747545 | ||
|
b34724ee43 | ||
|
c4075b886d | ||
|
82e328dc56 | ||
|
d2a07d052d | ||
|
77395af6d3 | ||
|
e24df8c443 | ||
|
50abc4c93c | ||
|
39b6a1ebfd | ||
|
7df79fd6fe | ||
|
21012a76fe | ||
|
3ea7909853 | ||
|
90831fb216 | ||
|
d6505ca082 | ||
|
64513c8fb0 | ||
|
738076131c | ||
|
1ad4d38dca | ||
|
fccd4c73a7 | ||
|
d2949cd53d | ||
|
0053576c7f | ||
|
a2296774da | ||
|
13bd40b8a5 | ||
|
7330e65ce7 | ||
|
03e2b9cc9e | ||
|
b610a0a1cd | ||
|
4e39228a12 | ||
|
5f091f84a3 | ||
|
52f3d10175 | ||
|
131c1aec83 | ||
|
7e41e738e2 | ||
|
2054cf64ff | ||
|
fb45f89381 | ||
|
701bbb47e9 | ||
|
ef9ec57cdc | ||
|
b47f07e659 | ||
|
fa6bb62d41 | ||
|
a5065f7062 | ||
|
ded1b38580 | ||
|
9490f960d6 | ||
|
67f3b36613 | ||
|
1d437f53b4 | ||
|
caf29ff9aa | ||
|
9595e2cb34 | ||
|
9cc90e482a | ||
|
43d25322f0 | ||
|
74ed27cbc4 | ||
|
bed2cf49fa | ||
|
536128227b | ||
|
507c7ec226 | ||
|
1415848406 | ||
|
1a3514e1c8 | ||
|
bf5cf4af31 | ||
|
a3e27d98bf | ||
|
c69fd8820b | ||
|
e30b57343c | ||
|
ae21c27cfe | ||
|
b5a142e4b5 | ||
|
ba89c31b17 | ||
|
c4f7e29f03 | ||
|
fcbf5d1923 | ||
|
95c5076a0a | ||
|
a43647ea41 | ||
|
0aaf599868 | ||
|
629edc0422 | ||
|
26302df1bc | ||
|
1f101a37d6 | ||
|
2b6a4fc03a | ||
|
a987e2749c | ||
|
c64c81720f | ||
|
6e3038f222 | ||
|
874e6bfd3e | ||
|
1febd7deea | ||
|
cb12836e8b | ||
|
d06d719468 | ||
|
caabc795cd | ||
|
dfaa75e2b0 | ||
|
f00402b0d1 | ||
|
7518539350 | ||
|
ad1b0c898a | ||
|
ac5c850aa9 | ||
|
e8619fe3ff | ||
|
db9a43e073 | ||
|
d0acef0cf8 | ||
|
81413584ad | ||
|
3ba9e6a3ce | ||
|
0aea981273 | ||
|
4db960af36 | ||
|
32478aa942 | ||
|
4a5251579e | ||
|
7d1f168102 | ||
|
0607811c6c | ||
|
179804d936 | ||
|
cd99e2d4dd | ||
|
0279738e41 | ||
|
9dccb65ad2 | ||
|
89ec4df583 | ||
|
88132600fe | ||
|
9f44991ccf | ||
|
6303d19cbf | ||
|
0f5fb100cc | ||
|
036a84606f | ||
|
a5c5f7b15e | ||
|
ffec5dba60 | ||
|
57543b1791 | ||
|
f6de4f31d4 | ||
|
abe2fe661a | ||
|
9e25b59584 | ||
|
a592755390 | ||
|
34b49281c8 | ||
|
b8dbe53756 | ||
|
6330473ea7 | ||
|
2c02c0ff59 | ||
|
3e51eb9afe | ||
|
e207aea55f | ||
|
ceb704f943 | ||
|
f356842f9c | ||
|
32c407ff0b | ||
|
009230c8f8 | ||
|
9f4ede7e29 | ||
|
047f82a9a3 | ||
|
9762822c11 | ||
|
4a80dc87d3 | ||
|
e1df07da37 | ||
|
8865d1cf36 | ||
|
a319a0e680 | ||
|
639f3befac | ||
|
98d66acb4f | ||
|
ea5b08b7dd | ||
|
fd51f696ff | ||
|
80014fbcf7 | ||
|
eb86524787 | ||
|
bba2ae4f0f | ||
|
4f0b530e39 | ||
|
623c24c66b | ||
|
22c6174812 | ||
|
85449ed29e | ||
|
6d9e2d0822 | ||
|
f2bf6bcaba | ||
|
51532e09c0 | ||
|
52696f518c | ||
|
ce475031b0 | ||
|
4e0d3e8d28 | ||
|
512c1b9c7d | ||
|
045db5889d | ||
|
a15f98dafb | ||
|
c59b35fd81 | ||
|
a42f758f35 | ||
|
d4dbbc7952 | ||
|
003a13c247 | ||
|
5e70eef142 | ||
|
c0ad7be8b0 | ||
|
6044aaeb75 | ||
|
d92ca8161a | ||
|
3480f9be06 | ||
|
5defe6e218 | ||
|
58eaccf998 | ||
|
665b90ee3c | ||
|
53dc3fd81e | ||
|
9a82b9901b | ||
|
662915c805 | ||
|
056a09920c | ||
|
332ea57577 | ||
|
c8aaea8e1f | ||
|
5af03c2eb4 | ||
|
d49f9fbeec | ||
|
ef6a1d1d1c | ||
|
08060db897 | ||
|
20fcbfaee7 | ||
|
a9b088af90 | ||
|
76e6ecaa6c | ||
|
3b090cbc95 | ||
|
7991f86144 | ||
|
53c82c6308 | ||
|
90c0552c19 | ||
|
962c98f7d0 | ||
|
209ba9cc01 | ||
|
baf64e47b8 | ||
|
d18665329f | ||
|
e2d9643e72 | ||
|
1004fad157 | ||
|
3921f1e2ce | ||
|
34b4dd761b | ||
|
2035dc2bb7 | ||
|
7cabed710d | ||
|
6f9d01659f | ||
|
334f7132d0 | ||
|
4d1e2b9345 | ||
|
99a0ee4159 | ||
|
b6eb09dc65 | ||
|
675a3ef519 | ||
|
843e03ce18 | ||
|
f2b69a9ce0 | ||
|
a4e73b0cee | ||
|
159c668e87 | ||
|
e3b1e82cc8 | ||
|
81cad42db7 | ||
|
8ac2f973cc | ||
|
6468746766 | ||
|
7b07fa981c | ||
|
97e2c50dee | ||
|
252eb53be4 | ||
|
49f66cded2 | ||
|
5b76beed2f | ||
|
cf9c312106 | ||
|
3a328e99e8 | ||
|
996cd35daa | ||
|
dba9fd8895 | ||
|
99f260b372 | ||
|
5ba4a37089 | ||
|
bbc0705602 | ||
|
9609e8f25f | ||
|
1129f7aaba | ||
|
bc2421a9d9 | ||
|
fdc09bc8be | ||
|
e47a8bb405 | ||
|
abad26feae | ||
|
1f7555fcea | ||
|
fc64bd31c7 | ||
|
b171250548 | ||
|
18287b88ba | ||
|
ce78bd20b9 | ||
|
710d068e1f | ||
|
6d235c0f0c | ||
|
7ea045bf11 | ||
|
1650d7a27b | ||
|
b10b23cc7e | ||
|
cfc528faf4 | ||
|
9462d7c009 | ||
|
85d155e7cb | ||
|
c2081de452 | ||
|
f4e4d366d3 | ||
|
a57b6d51be | ||
|
63259fac0d | ||
|
48ad3d67ac | ||
|
cf7cfeb839 | ||
|
ea8a5d87ed |
2
LICENSE
@@ -1,7 +1,7 @@
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="84" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="84" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h47v20H0z"/><path fill="#007ec6" d="M47 0h37v20H47z"/><path fill="url(#b)" d="M0 0h84v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11"><text x="23.5" y="15" fill="#010101" fill-opacity=".3">license</text><text x="23.5" y="14">license</text><text x="64.5" y="15" fill="#010101" fill-opacity=".3">LGPL</text><text x="64.5" y="14">LGPL</text></g></svg>
|
Before Width: | Height: | Size: 793 B |
537
README.md
@@ -1,32 +1,28 @@
|
||||
# dotSCAD 3.0
|
||||
# dotSCAD 3.2.1
|
||||
|
||||
> **Reduce the burden of mathematics/algorithm when playing OpenSCAD.**
|
||||
|
||||

|
||||
|
||||
[](https://github.com/JustinSDK/lib-openscad/blob/master/LICENSE)
|
||||

|
||||
|
||||
## Introduction
|
||||
|
||||
**This version Breaks Backward Compatibility and requires OpenSCAD 2021.01 or later!! Please see [Release Notes](RELEASE.md). You can still download v2.5 or older versions from [Releases](https://github.com/JustinSDK/dotSCAD/tags).**
|
||||
|
||||
Some of my [3D models](https://github.com/JustinSDK/dotSCAD#examples) require complex mathematics/algorithm. I extract them into dotSCAD. Hope it helps when you're playing OpenSCAD.
|
||||
|
||||
The idea of the name dotSCAD comes from the filename extension ".scad" of OpenSCAD.
|
||||
|
||||
## Get Started
|
||||
## Getting started
|
||||
|
||||
OpenSCAD uses three library locations, the installation library, built-in library, and user defined libraries. It's convenient to set `OPENSCADPATH`. Check [Setting OPENSCADPATH](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries#Setting_OPENSCADPATH) in [OpenSCAD User Manual/Libraries](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries) for details.
|
||||
OpenSCAD uses three library locations, the installation library, built-in library, and user defined libraries. Check [Setting OPENSCADPATH](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries#Setting_OPENSCADPATH) in [OpenSCAD User Manual/Libraries](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Libraries) for details.
|
||||
|
||||
**I set `OPENSCADPATH` to the `src` folder of dotSCAD so all examples here start searching modules or functions from `src`.**
|
||||
**I set `OPENSCADPATH` to the `src` folder of dotSCAD so all examples here start searching modules/functions from `src`.**
|
||||
|
||||
Every module or function is located in the file which has the same name as the module or the function. For example, if you want to use the `line2d` module to draw a line, `use <line2d.scad>;` first.
|
||||
Every public module/function has the same name as the .scad file. Here's an example using the `line2d` module:
|
||||
|
||||
use <line2d.scad>;
|
||||
|
||||
line2d(p1 = [0, 0], p2 = [5, 0], width = 1);
|
||||
|
||||
Some module files are organized in a directory. For example, px_circle.scad exists in `pixel` directory. You have to prefix the directory name when including `px_circle`.
|
||||
The library uses directories to categorize some modules/functions. For example, vx_circle.scad exists in `voxel` directory. Prefix the directory name when using `vx_circle`.
|
||||
|
||||
use <voxel/vx_circle.scad>;
|
||||
|
||||
@@ -41,232 +37,339 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
|
||||
|
||||
[](examples#dogfooding-examples)
|
||||
|
||||
## Documentation
|
||||
# API Reference
|
||||
|
||||
### 2D Module
|
||||
- [arc](https://openhome.cc/eGossip/OpenSCAD/lib3x-arc.html)
|
||||
- [hexagons](https://openhome.cc/eGossip/OpenSCAD/lib3x-hexagons.html)
|
||||
- [hull_polyline2d](https://openhome.cc/eGossip/OpenSCAD/lib3x-hull_polyline2d.html)
|
||||
- [line2d](https://openhome.cc/eGossip/OpenSCAD/lib3x-line2d.html)
|
||||
- [multi_line_text](https://openhome.cc/eGossip/OpenSCAD/lib3x-multi_line_text.html)
|
||||
- [pie](https://openhome.cc/eGossip/OpenSCAD/lib3x-pie.html)
|
||||
- [polyline2d](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline2d.html)
|
||||
- [polygon_hull](https://openhome.cc/eGossip/OpenSCAD/lib3x-polygon_hull.html)
|
||||
- [rounded_square](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_square.html)
|
||||
## 2D Module
|
||||
|
||||
### 3D Module
|
||||
- [crystal_ball](https://openhome.cc/eGossip/OpenSCAD/lib3x-crystal_ball.html)
|
||||
- [function_grapher](https://openhome.cc/eGossip/OpenSCAD/lib3x-function_grapher.html)
|
||||
- [hull_polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib3x-hull_polyline3d.html)
|
||||
- [line3d](https://openhome.cc/eGossip/OpenSCAD/lib3x-line3d.html)
|
||||
- [loft](https://openhome.cc/eGossip/OpenSCAD/lib3x-loft.html)
|
||||
- [polyhedron_hull](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedron_hull.html)
|
||||
- [polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline3d.html)
|
||||
- [rounded_cube](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_cube.html)
|
||||
- [rounded_cylinder](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_cylinder.html)
|
||||
- [starburst](https://openhome.cc/eGossip/OpenSCAD/lib3x-starburst.html)
|
||||
- [sweep](https://openhome.cc/eGossip/OpenSCAD/lib3x-sweep.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**arc**(radius, angle[, width, width_mode"])](https://openhome.cc/eGossip/OpenSCAD/lib3x-arc.html) | create an arc.
|
||||
[**hexagons**(radius, spacing, levels)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hexagons.html) | create hexagons in a hexagon.
|
||||
[**line2d**(p1, p2[, width, p1Style, p2Style])](https://openhome.cc/eGossip/OpenSCAD/lib3x-line2d.html) | create a line from two points.
|
||||
[**multi_line_text**(lines[, line_spacing, size, font, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-multi_line_text.html) | create multi-line text from a list of strings.
|
||||
[**pie**(radius, angle)](https://openhome.cc/eGossip/OpenSCAD/lib3x-pie.html) | create polyline2de a pie (circular sector).
|
||||
[**polyline2d**(points[, width, startingStyle, endingStyle, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline2d.html) | create a polyline from a list of `[x, y]` coordinates.
|
||||
[**polygon_hull**(points)](https://openhome.cc/eGossip/OpenSCAD/lib3x-polygon_hull.html) | create a convex polygon by hulling a list of points. It avoids using hull and small 2D primitives to create the polygon.
|
||||
[**rounded_square**(size, corner_r[, center])](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_square.html) | create a rounded square in the first quadrant.
|
||||
|
||||
### Transformation
|
||||
- [along_with](https://openhome.cc/eGossip/OpenSCAD/lib3x-along_with.html)
|
||||
- [bend](https://openhome.cc/eGossip/OpenSCAD/lib3x-bend.html)
|
||||
- [hollow_out](https://openhome.cc/eGossip/OpenSCAD/lib3x-hollow_out.html)
|
||||
- [shear](https://openhome.cc/eGossip/OpenSCAD/lib3x-shear.html)
|
||||
## 3D Module
|
||||
|
||||
### 2D Function
|
||||
- [bijection_offset](https://openhome.cc/eGossip/OpenSCAD/lib3x-bijection_offset.html)
|
||||
- [contours](https://openhome.cc/eGossip/OpenSCAD/lib3x-contours.html)
|
||||
- [in_shape](https://openhome.cc/eGossip/OpenSCAD/lib3x-in_shape.html)
|
||||
- [trim_shape](https://openhome.cc/eGossip/OpenSCAD/lib3x-trim_shape.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**crystal_ball**(radius[, theta, phi, thickness])](https://openhome.cc/eGossip/OpenSCAD/lib3x-crystal_ball.html) | create a crystal ball based on [spherical coordinates (r, θ, φ) used in mathematics](https://en.wikipedia.org/wiki/Spherical_coordinate_system).
|
||||
[**line3d**(p1, p2[, diameter, p1Style, p2Style])](https://openhome.cc/eGossip/OpenSCAD/lib3x-line3d.html) | create a 3D line from two points.
|
||||
[**loft**(sections[, slices])](https://openhome.cc/eGossip/OpenSCAD/lib3x-loft.html) | develop a smooth skin between crosssections with different geometries.
|
||||
[**polyhedron_hull**(points)](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedron_hull.html) | create a convex polyhedron by hulling a list of points. It avoids using `hull` and small 3D primitives to create the polyhedron.
|
||||
[**polyline3d**(points, diameter[, startingStyle, endingStyle])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline3d.html) | create a polyline from a list of `[x, y, z]`.
|
||||
[**rounded_cube**(size, corner_r[, center])](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_cube.html) | create a cube in the first octant.
|
||||
[**rounded_cylinder**(radius, h, round_r[, convexity, center])](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_cylinder.html) | create a rounded cylinder.
|
||||
[**sweep**(sections[, triangles])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sweep.html) | develop a smooth skin from crosssections with the same number of sides.
|
||||
|
||||
### 2D/3D Function
|
||||
- [angle_between](https://openhome.cc/eGossip/OpenSCAD/lib3x-angle_between.html)
|
||||
- [bezier_surface](https://openhome.cc/eGossip/OpenSCAD/lib3x-bezier_surface.html)
|
||||
- [bezier_smooth](https://openhome.cc/eGossip/OpenSCAD/lib3x-bezier_smooth.html)
|
||||
- [cross_sections](https://openhome.cc/eGossip/OpenSCAD/lib3x-cross_sections.html)
|
||||
- [in_polyline](https://openhome.cc/eGossip/OpenSCAD/lib3x-in_polyline.html)
|
||||
- [lines_intersection](https://openhome.cc/eGossip/OpenSCAD/lib3x-lines_intersection.html)
|
||||
- [paths2sections](https://openhome.cc/eGossip/OpenSCAD/lib3x-paths2sections.html)
|
||||
- [path_scaling_sections](https://openhome.cc/eGossip/OpenSCAD/lib3x-path_scaling_sections.html)
|
||||
- [midpt_smooth](https://openhome.cc/eGossip/OpenSCAD/lib3x-midpt_smooth.html)
|
||||
## Transformation
|
||||
|
||||
### Path
|
||||
- [arc_path](https://openhome.cc/eGossip/OpenSCAD/lib3x-arc_path.html)
|
||||
- [archimedean_spiral](https://openhome.cc/eGossip/OpenSCAD/lib3x-archimedean_spiral.html)
|
||||
- [bauer_spiral](https://openhome.cc/eGossip/OpenSCAD/lib3x-bauer_spiral.html)
|
||||
- [bezier_curve](https://openhome.cc/eGossip/OpenSCAD/lib3x-bezier_curve.html)
|
||||
- [bspline_curve](https://openhome.cc/eGossip/OpenSCAD/lib3x-bspline_curve.html)
|
||||
- [curve](https://openhome.cc/eGossip/OpenSCAD/lib3x-curve.html)
|
||||
- [fibonacci_lattice](https://openhome.cc/eGossip/OpenSCAD/lib3x-fibonacci_lattice.html)
|
||||
- [golden_spiral](https://openhome.cc/eGossip/OpenSCAD/lib3x-golden_spiral.html)
|
||||
- [helix](https://openhome.cc/eGossip/OpenSCAD/lib3x-helix.html)
|
||||
- [sphere_spiral](https://openhome.cc/eGossip/OpenSCAD/lib3x-sphere_spiral.html)
|
||||
- [torus_knot](https://openhome.cc/eGossip/OpenSCAD/lib3x-torus_knot.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**along_with**(points, angles[, twist, scale, method])](https://openhome.cc/eGossip/OpenSCAD/lib3x-along_with.html) | put children along the given path. If there's only one child, put the child for each point.
|
||||
[**bend**(size, angle[, frags])](https://openhome.cc/eGossip/OpenSCAD/lib3x-bend.html) | bend a 3D object.
|
||||
[**hollow_out**(shell_thickness) ](https://openhome.cc/eGossip/OpenSCAD/lib3x-hollow_out.html)| hollow out a 2D object.
|
||||
[**shear**([sx, sy, sz])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shear.html) | shear all child elements along the X-axis, Y-axis, or Z-axis.
|
||||
[**select**(i)](https://openhome.cc/eGossip/OpenSCAD/lib3x-select.html) | select module objects.
|
||||
[**polyline_join**(points)](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline_join.html) | place a join on each point. Hull each pair of joins and union all convex hulls.
|
||||
|
||||
### Extrusion
|
||||
- [bend_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-bend_extrude.html)
|
||||
- [box_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-box_extrude.html)
|
||||
- [ellipse_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-ellipse_extrude.html)
|
||||
- [rounded_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_extrude.html)
|
||||
- [stereographic_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-stereographic_extrude.html)
|
||||
## 2D Function
|
||||
|
||||
### 2D Shape
|
||||
- [shape_arc](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_arc.html)
|
||||
- [shape_circle](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_circle.html)
|
||||
- [shape_cyclicpolygon](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_cyclicpolygon.html)
|
||||
- [shape_ellipse](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_ellipse.html)
|
||||
- [shape_liquid_splitting](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_liquid_splitting.html)
|
||||
- [shape_path_extend](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_path_extend.html)
|
||||
- [shape_pentagram](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_pentagram.html)
|
||||
- [shape_pie](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_pie.html)
|
||||
- [shape_square](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_square.html)
|
||||
- [shape_starburst](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_starburst.html)
|
||||
- [shape_superformula](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_superformula.html)
|
||||
- [shape_taiwan](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_taiwan.html)
|
||||
- [shape_trapezium](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_trapezium.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**bijection_offset**(pts, d[, epsilon])](https://openhome.cc/eGossip/OpenSCAD/lib3x-bijection_offset.html) | move 2D outlines outward or inward by a given amount. Each point of the offsetted shape is paired with exactly one point of the original shape.
|
||||
[**contours**(points, threshold)](https://openhome.cc/eGossip/OpenSCAD/lib3x-contours.html) | compute contour polygons by applying [marching squares](https://en.wikipedia.org/wiki/Marching_squares) to a rectangular list of numeric values.
|
||||
[**in_shape**(shapt_pts, pt[, include_edge, epsilon])](https://openhome.cc/eGossip/OpenSCAD/lib3x-in_shape.html) | check whether a point is inside a shape.
|
||||
[**trim_shape**(shape_pts, from, to[, epsilon])](https://openhome.cc/eGossip/OpenSCAD/lib3x-trim_shape.html) | trim a tangled-edge shape to a non-tangled shape.
|
||||
|
||||
### 2D Shape Extrusion
|
||||
- [archimedean_spiral_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-archimedean_spiral_extrude.html)
|
||||
- [golden_spiral_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-golden_spiral_extrude.html)
|
||||
- [helix_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-helix_extrude.html)
|
||||
- [path_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-path_extrude.html)
|
||||
- [ring_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-ring_extrude.html)
|
||||
- [sphere_spiral_extrude](https://openhome.cc/eGossip/OpenSCAD/lib3x-sphere_spiral_extrude.html)
|
||||
## 2D/3D Function
|
||||
|
||||
### Util
|
||||
- list
|
||||
- [util/bsearch](https://openhome.cc/eGossip/OpenSCAD/lib3x-bsearch.html)
|
||||
- [util/has](https://openhome.cc/eGossip/OpenSCAD/lib3x-has.html)
|
||||
- [util/find_index](https://openhome.cc/eGossip/OpenSCAD/lib3x-find_index.html)
|
||||
- [util/dedup](https://openhome.cc/eGossip/OpenSCAD/lib3x-dedup.html)
|
||||
- [util/flat](https://openhome.cc/eGossip/OpenSCAD/lib3x-flat.html)
|
||||
- [util/reverse](https://openhome.cc/eGossip/OpenSCAD/lib3x-reverse.html)
|
||||
- [util/slice](https://openhome.cc/eGossip/OpenSCAD/lib3x-slice.html)
|
||||
- [util/sort](https://openhome.cc/eGossip/OpenSCAD/lib3x-sort.html)
|
||||
- [util/sum](https://openhome.cc/eGossip/OpenSCAD/lib3x-sum.html)
|
||||
- [util/swap](https://openhome.cc/eGossip/OpenSCAD/lib3x-swap.html)
|
||||
- [util/zip](https://openhome.cc/eGossip/OpenSCAD/lib3x-zip.html)
|
||||
- [util/every](https://openhome.cc/eGossip/OpenSCAD/lib3x-every.html)
|
||||
- [util/some](https://openhome.cc/eGossip/OpenSCAD/lib3x-some.html)
|
||||
- random
|
||||
- [util/choose](https://openhome.cc/eGossip/OpenSCAD/lib3x-choose.html)
|
||||
- [util/rand](https://openhome.cc/eGossip/OpenSCAD/lib3x-rand.html)
|
||||
- [util/shuffle](https://openhome.cc/eGossip/OpenSCAD/lib3x-shuffle.html)
|
||||
- string
|
||||
- [util/parse_number](https://openhome.cc/eGossip/OpenSCAD/lib3x-parse_number.html)
|
||||
- [util/split_str](https://openhome.cc/eGossip/OpenSCAD/lib3x-split_str.html)
|
||||
- [util/sub_str](https://openhome.cc/eGossip/OpenSCAD/lib3x-sub_str.html)
|
||||
- math
|
||||
- [util/degrees](https://openhome.cc/eGossip/OpenSCAD/lib3x-degrees.html)
|
||||
- [util/radians](https://openhome.cc/eGossip/OpenSCAD/lib3x-radians.html)
|
||||
- [util/polar_coordinate](https://openhome.cc/eGossip/OpenSCAD/lib3x-polar_coordinate.html)
|
||||
- [util/spherical_coordinate](https://openhome.cc/eGossip/OpenSCAD/lib3x-spherical_coordinate.html)
|
||||
- [util/lerp](https://openhome.cc/eGossip/OpenSCAD/lib3x-lerp.html)
|
||||
- [util/fibseq](https://openhome.cc/eGossip/OpenSCAD/lib3x-fibseq.html)
|
||||
- set
|
||||
- [util/set/hashset](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset.html)
|
||||
- [util/set/hashset_add](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_add.html)
|
||||
- [util/set/hashset_has](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_has.html)
|
||||
- [util/set/hashset_del](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_del.html)
|
||||
- [util/set/hashset_len](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_len.html)
|
||||
- [util/set/hashset_elems](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_elems.html)
|
||||
- map
|
||||
- [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html)
|
||||
- [util/map/hashmap_put](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_put.html)
|
||||
- [util/map/hashmap_get](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_get.html)
|
||||
- [util/map/hashmap_del](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_del.html)
|
||||
- [util/map/hashmap_len](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_len.html)
|
||||
- [util/map/hashmap_keys](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_keys.html)
|
||||
- [util/map/hashmap_values](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_values.html)
|
||||
- [util/map/hashmap_entries](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_entries.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**angle_between**(vt1, vt2)](https://openhome.cc/eGossip/OpenSCAD/lib3x-angle_between.html) | return the angle between two vectors.
|
||||
[**bezier_smooth**(path_pts, round_d[, t_step, closed, angle_threshold])](https://openhome.cc/eGossip/OpenSCAD/lib3x-bezier_smooth.html) | use bezier curves to smooth a path.
|
||||
[**cross_sections**(shape_pts, path_pts, angles[, twist, scale])](https://openhome.cc/eGossip/OpenSCAD/lib3x-cross_sections.html) | given a 2D shape, points and angles along the path, this function returns all cross-sections.
|
||||
[**in_polyline**(line_pts, pt[, epsilon])](https://openhome.cc/eGossip/OpenSCAD/lib3x-in_polyline.html) | check whether a point is on a line.
|
||||
[**lines_intersection**(line1, line2[, ext, epsilon])](https://openhome.cc/eGossip/OpenSCAD/lib3x-lines_intersection.html) | find the intersection of two line segments. Return `[]` if lines don't intersect.
|
||||
[**rails2sections**(rails)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rails2sections.html) | create sections along rails.
|
||||
[**path_scaling_sections**(shape_pts, edge_path)](https://openhome.cc/eGossip/OpenSCAD/lib3x-path_scaling_sections.html) | given an edge path with the first point at the outline of a shape, this function uses the path to calculate scaling factors and returns all scaled sections in the reversed order of the edge path.
|
||||
[**midpt_smooth**(points, n[, closed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-midpt_smooth.html) | given a 2D path, this function constructs a mid-point smoothed version by joining the mid-points of the lines of the path.
|
||||
|
||||
### Matrix
|
||||
- [matrix/m_determinant](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_determinant.html)
|
||||
- [matrix/m_mirror](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_mirror.html)
|
||||
- [matrix/m_rotation](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_rotation.html)
|
||||
- [matrix/m_scaling](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_scaling.html)
|
||||
- [matrix/m_shearing](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_shearing.html)
|
||||
- [matrix/m_translation](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_translation.html)
|
||||
## Path
|
||||
|
||||
### Point Transformation
|
||||
- [ptf/ptf_bend](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_bend.html)
|
||||
- [ptf/ptf_circle](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_circle.html)
|
||||
- [ptf/ptf_ring](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_ring.html)
|
||||
- [ptf/ptf_rotate](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_rotate.html)
|
||||
- [ptf/ptf_sphere](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_sphere.html)
|
||||
- [ptf/ptf_torus](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_torus.html)
|
||||
- [ptf/ptf_x_twist](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_x_twist.html)
|
||||
- [ptf/ptf_y_twist](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_y_twist.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**arc_path**(radius, angle)](https://openhome.cc/eGossip/OpenSCAD/lib3x-arc_path.html) | create an arc path.
|
||||
[**archimedean_spiral**(arm_distance, init_angle, point_distance, num_of_points[, rt_dir])](https://openhome.cc/eGossip/OpenSCAD/lib3x-archimedean_spiral.html) | get all points and angles on the path of an archimedean spiral.
|
||||
[**bauer_spiral**(n, radius = 1[, rt_dir])](https://openhome.cc/eGossip/OpenSCAD/lib3x-bauer_spiral.html) | create visually even spacing of n points on the surface of the sphere. Successive points will all be approximately the same distance apart.
|
||||
[**bezier_curve**(t_step, points)](https://openhome.cc/eGossip/OpenSCAD/lib3x-bezier_curve.html) | given a set of control points, this function returns points of the Bézier path.
|
||||
[**bspline_curve**(t_step, degree, points, knots, weights)](https://openhome.cc/eGossip/OpenSCAD/lib3x-bspline_curve.html) | B-spline interpolation using [de Boor's algorithm](https://en.wikipedia.org/wiki/De_Boor%27s_algorithm).
|
||||
[**curve**(t_step, points[, tightness])](https://openhome.cc/eGossip/OpenSCAD/lib3x-curve.html) | create a curved path. An implementation of [Centripetal Catmull-Rom spline](https://en.wikipedia.org/wiki/Centripetal_Catmull%E2%80%93Rom_spline).
|
||||
[**fibonacci_lattice**(n, radius = 1[, dir])](https://openhome.cc/eGossip/OpenSCAD/lib3x-fibonacci_lattice.html) | create visually even spacing of n points on the surface of the sphere. Nearest-neighbor points will all be approximately the same distance apart.
|
||||
[**golden_spiral**(from, to, point_distance[, rt_dir)]](https://openhome.cc/eGossip/OpenSCAD/lib3x-golden_spiral.html) | get all points and angles on the path of a golden spiral based on Fibonacci numbers. The distance between two points is almost constant.
|
||||
[**helix**(radius, levels, level_dist[, vt_dir, rt_dir])](https://openhome.cc/eGossip/OpenSCAD/lib3x-helix.html) | get all points on the path of a spiral around a cylinder.
|
||||
[**sphere_spiral**(radius, za_step[, z_circles, begin_angle, end_angle, ...]) ](https://openhome.cc/eGossip/OpenSCAD/lib3x-sphere_spiral.html)| create all points and angles on the path of a spiral around a sphere. It returns a vector of `[[x, y, z], [ax, ay, az]]`.
|
||||
[**torus_knot**(p, q, phi_step)](https://openhome.cc/eGossip/OpenSCAD/lib3x-torus_knot.html) | generate a path of [The (p,q)-torus knot](https://en.wikipedia.org/wiki/Torus_knot).
|
||||
|
||||
## Extrusion
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**bend_extrude**(size, thickness, angle[, frags])](https://openhome.cc/eGossip/OpenSCAD/lib3x-bend_extrude.html) | extrude and bend a 2D shape.
|
||||
[**box_extrude**(height, shell_thickness, bottom_thickness[, offset_mode, chamfer, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-box_extrude.html) | create a box (container) from a 2D object.
|
||||
[**ellipse_extrude**(semi_minor_axis, height[, center, convexity, twist, slices])](https://openhome.cc/eGossip/OpenSCAD/lib3x-ellipse_extrude.html) | extrude a 2D object along the path of an ellipse from 0 to 180 degrees.
|
||||
[**rounded_extrude**(size, round_r[, angle, twist, convexity])](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_extrude.html) | extrude a 2D object roundly from 0 to 180 degrees.
|
||||
[**stereographic_extrude**(shadow_side_leng)](https://openhome.cc/eGossip/OpenSCAD/lib3x-stereographic_extrude.html) | take a 2D polygon as input and extend it onto a sphere.
|
||||
|
||||
## 2D Shape
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**shape_arc**(radius, angle, width[, width_mode])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_arc.html) | return points on the path of an arc shape.
|
||||
[**shape_circle**(radius, n)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_circle.html) | return points on the path of a circle.
|
||||
[**shape_cyclicpolygon**(sides, circle_r, corner_r)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_cyclicpolygon.html) | return points on the path of a regular cyclic polygon.
|
||||
[**shape_ellipse**(axes)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_ellipse.html) | return points on the path of an ellipse.
|
||||
[**shape_liquid_splitting**(radius, centre_dist[, tangent_angle, t_step])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_liquid_splitting.html) | return shape points of two splitting liquid shapes, kind of how cells divide.
|
||||
[**shape_path_extend**(stroke_pts, path_pts[, scale, closed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_path_extend.html) | extend a 2D stroke along a path to create a 2D shape.
|
||||
[**shape_pentagram**(r)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_pentagram.html) | return shape points of a pentagram.
|
||||
[**shape_pie**(radius, angle)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_pie.html) | return shape points of a pie (circular sector) shape.
|
||||
[**shape_square**(size[, corner_r])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_square.html) | return shape points of a rounded square or rectangle.
|
||||
[**shape_star**([outer_radius, inner_radius, n])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_star.html) | create a 2D star.
|
||||
[**shape_superformula**(phi_step, m1, m2, n1, [n2, n3, a, b])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_superformula.html) | return shape points of [Superformula](https://en.wikipedia.org/wiki/Superformula).
|
||||
[**shape_taiwan**(h[, distance])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_taiwan.html) | return shape points of [Taiwan](https://www.google.com.tw/maps?q=taiwan&um=1&ie=UTF-8&sa=X&ved=0ahUKEwjai9XrqurTAhVIopQKHbEHClwQ_AUICygC).
|
||||
[**shape_trapezium**(length, h[, corner_r])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_trapezium.html) | return shape points of an isosceles trapezoid.
|
||||
|
||||
## 2D Shape Extrusion
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**archimedean_spiral_extrude**(shape_pts, arm_distance, init_angle, point_distance, num_of_points, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-archimedean_spiral_extrude.html) | extrude a 2D shape along the path of an archimedean spiral.
|
||||
[**golden_spiral_extrude**(shape_pts, from, to, point_distance, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-golden_spiral_extrude.html) | extrude a 2D shape along the path of a golden spiral.
|
||||
[**helix_extrude**(shape_pts, radius, levels, level_dist, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-helix_extrude.html) | extrude a 2D shape along a helix path.
|
||||
[**path_extrude**(shape_pts, path_pts, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-path_extrude.html) | extrude a 2D shape along a path.
|
||||
[**ring_extrude**(shape_pts, radius[, angle = 360])](https://openhome.cc/eGossip/OpenSCAD/lib3x-ring_extrude.html) | rotational extrusion spins a 2D shape around the Z-axis.
|
||||
[**sphere_spiral_extrude**(shape_pts, radius, za_step, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sphere_spiral_extrude.html) | extrude a 2D shape along the path of a sphere spiral.
|
||||
|
||||
## Util
|
||||
|
||||
### util/list
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**util/bsearch**(sorted, target)](https://openhome.cc/eGossip/OpenSCAD/lib3x-bsearch.html) | search a value in a list whose elements must be sorted by zyx.
|
||||
[**util/has**(lt, elem[, sorted])](https://openhome.cc/eGossip/OpenSCAD/lib3x-has.html) | return `true` if `lt` contains elem.
|
||||
[**util/find_index**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-find_index.html) | return the index of the first element that satisfies the testing function.
|
||||
[**util/dedup**(lt, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-dedup.html) | eliminate duplicate vectors.
|
||||
[**util/flat**(lt[, depth])](https://openhome.cc/eGossip/OpenSCAD/lib3x-flat.html) | return a new list with all sub-list elements concatenated into it recursively up to the specified depth.
|
||||
[**util/reverse**(lt)](https://openhome.cc/eGossip/OpenSCAD/lib3x-reverse.html) | reverse a list.
|
||||
[**util/slice**(lt, begin, end)](https://openhome.cc/eGossip/OpenSCAD/lib3x-slice.html) | return a list selected from `begin` to `end`, or to the `end` of the list (`end` not included).
|
||||
[**util/sort**(lt[, by, idx])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sort.html) | sort a list.
|
||||
[**util/sum**(lt)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sum.html) | use `+` to sum up all elements in a list.
|
||||
[**util/swap**(lt, i, j)](https://openhome.cc/eGossip/OpenSCAD/lib3x-swap.html) | swap two elements in a list.
|
||||
[**util/zip**(lts, combine)](https://openhome.cc/eGossip/OpenSCAD/lib3x-zip.html) | make a list that aggregates elements from each of the lists.
|
||||
[**util/every**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-every.html) | test whether all elements in the list pass the test implemented by the provided function.
|
||||
[**util/some**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-some.html) | test whether at least one element in the list passes the test implemented by the provided function.
|
||||
|
||||
### util/random
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**util/choose**(choices, seed)](https://openhome.cc/eGossip/OpenSCAD/lib3x-choose.html) | choose an element from the given list.
|
||||
[**util/rand**([min_value, max_value, seed_value])](https://openhome.cc/eGossip/OpenSCAD/lib3x-rand.html) | generate a pseudo random number.
|
||||
[**util/shuffle**(lt[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shuffle.html) | randomizes the order of the elements.
|
||||
|
||||
### util/string
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**util/parse_number**(t)](https://openhome.cc/eGossip/OpenSCAD/lib3x-parse_number.html) | parse the string argument as an number.
|
||||
[**util/split_str**(t, delimiter)](https://openhome.cc/eGossip/OpenSCAD/lib3x-split_str.html) | split the given string around matches of the given delimiting character.
|
||||
[**util/sub_str**(t, begin, end)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sub_str.html) | return the part of the string from `begin` to `end`, or to the `end` of the string (`end` not included).
|
||||
|
||||
### util/math
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**util/degrees**(radians)](https://openhome.cc/eGossip/OpenSCAD/lib3x-degrees.html) | convert a radian measurement to the corresponding value in degrees.
|
||||
[**util/radians**(degrees)](https://openhome.cc/eGossip/OpenSCAD/lib3x-radians.html) | convert a degree measurement to the corresponding value in radians.
|
||||
[**util/polar_coordinate**(point)](https://openhome.cc/eGossip/OpenSCAD/lib3x-polar_coordinate.html) | convert from Cartesian to Polar coordinates.
|
||||
[**util/spherical_coordinate**(point)](https://openhome.cc/eGossip/OpenSCAD/lib3x-spherical_coordinate.html) | convert from Cartesian to Spherical coordinates (used in mathematics).
|
||||
[**util/lerp**(v1, v2, amt)](https://openhome.cc/eGossip/OpenSCAD/lib3x-lerp.html) | linear interpolate the vector v1 to v2.
|
||||
[**util/fibseq**(from, to)](https://openhome.cc/eGossip/OpenSCAD/lib3x-fibseq.html) | generate a Fibonacci sequence.
|
||||
|
||||
### util/set
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**util/set/hashset**(lt, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset.html) | model the mathematical set, backed by a hash table.
|
||||
[**util/set/hashset_add**(set, elem, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_add.html) | add an element to a `hashset`.
|
||||
[**util/set/hashset_has**(set, elem, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_has.html) | return `true` if a `hashset` contains the specified element.
|
||||
[**util/set/hashset_del**(set, elem, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_del.html) | del an element from a `hashset`.
|
||||
[**util/set/hashset_len**(set)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_len.html) | return the length of the elements in a `hashset`.
|
||||
[**util/set/hashset_elems**(set)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashset_elems.html) | returns a list containing all elements in a `hashset`. No guarantees to the order.
|
||||
|
||||
### util/map
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**util/map/hashmap**(kv_lt, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html) | map keys to values.
|
||||
[**util/map/hashmap_put**(map, key, value, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_put.html) | put a key/value pair to a `hashmap`.
|
||||
[**util/map/hashmap_get**(map, key, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_get.html) | get the value of the specified key from a `hashmap`.
|
||||
[**util/map/hashmap_del**(map, key, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_del.html) | delete the mapping for the specified key from a `hashmap` if present.
|
||||
[**util/map/hashmap_len**(map)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_len.html) | return the length of a `hashmap`.
|
||||
[**util/map/hashmap_keys**(map)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_keys.html) | return a list containing all keys in a `hashmap`.
|
||||
[**util/map/hashmap_values**(map)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_values.html) | return a list containing all values in a `hashmap`.
|
||||
[**util/map/hashmap_entries**(map)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap_entries.html) | return a list containing all `[key, value]`s in a `hashmap`.
|
||||
|
||||
## Matrix
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**matrix/m_determinant**(m)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_determinant.html) | calculate a determinant of a square matrix.
|
||||
[**matrix/m_mirror**(v)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_mirror.html) | generate a transformation matrix which can pass into `multmatrix` to mirror the child element on a plane through the origin.
|
||||
[**matrix/m_rotation**(a, v)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_rotation.html) | Generate a transformation matrix which can pass into `multmatrix` to rotate the child element about the axis of the coordinate system or around an arbitrary axis.
|
||||
[**matrix/m_scaling**(s)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_scaling.html) | generate a transformation matrix which can pass into `multmatrix` to scale its child elements using the specified vector.
|
||||
[**matrix/m_shearing**([sx, sy, sz])](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_shearing.html) | generate a transformation matrix which can pass into `multmatrix` to shear all child elements along the X-axis, Y-axis, or Z-axis in 3D.
|
||||
[**matrix/m_translation**(v)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_translation.html) | generate a transformation matrix which can pass into multmatrix to translates (moves) its child elements along the specified vector.
|
||||
[**maxtrix/m_transpose**(m)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_transpose.html) | transpose a matrix.
|
||||
|
||||
## Point Transformation
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**ptf/ptf_bend**(size, point, radius, angle)](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_bend.html) | transform a point inside a rectangle to a point of an arc.
|
||||
[**ptf/ptf_circle**(size, point)](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_circle.html) | transform a point inside a rectangle to a point inside a circle.
|
||||
[**ptf/ptf_ring**(size, point, radius[, angle, twist])](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_ring.html) | transform a point inside a rectangle to a point of a ring.
|
||||
[**ptf/ptf_rotate**(point, a, v)](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_rotate.html) | rotate a point a degrees around the axis of the coordinate system or an arbitrary axis.
|
||||
[**ptf/ptf_sphere**(size, point, radius[, angle])](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_sphere.html) | transform a point inside a rectangle to a point of a sphere.
|
||||
[**ptf/ptf_torus**(size, point, radius[, angle, twist])](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_torus.html) | transform a point inside a rectangle to a point of a torus.
|
||||
[**ptf/ptf_x_twist**(size, point, angle)](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_x_twist.html) | twist a point along the x-axis.
|
||||
[**ptf/ptf_y_twist**(size, point, angle)](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_y_twist.html) | twist a point along the y-axis.
|
||||
|
||||
## Triangle
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**triangle/tri_circumcenter**(shape_pts)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_circumcenter.html) | return the circumcenter of a triangle.
|
||||
[**triangle/tri_incenter**(shape_pts)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_incenter.html) | return the incenter of a triangle.
|
||||
[**triangle/tri_ear_clipping**(shape_pts[, ret, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_ear_clipping.html) | triangulation by [ear clipping](https://en.wikipedia.org/wiki/Polygon_triangulation#Ear_clipping_method).
|
||||
[**triangle/tri_delaunay**(points[, ret])](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay.html) | Join a set of points to make a [Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation).
|
||||
[**triangle/tri_delaunay_indices**(d)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay_indices.html) | return triangle indices from a delaunay object.
|
||||
[**triangle/tri_delaunay_shapes**(d)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay_shapes.html) | return triangle shapes from a delaunay object.
|
||||
[**triangle/tri_delaunay_voronoi**(d)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay_voronoi.html) | return [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) cells from a delaunay object.
|
||||
|
||||
----
|
||||
|
||||
### Turtle
|
||||
- [turtle/footprints2](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprints2.html)
|
||||
- [turtle/footprints3](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprints3.html)
|
||||
- [turtle/lsystem2](https://openhome.cc/eGossip/OpenSCAD/lib3x-lsystem2.html)
|
||||
- [turtle/lsystem3](https://openhome.cc/eGossip/OpenSCAD/lib3x-lsystem3.html)
|
||||
- [turtle/t2d](https://openhome.cc/eGossip/OpenSCAD/lib3x-t2d.html)
|
||||
- [turtle/t3d](https://openhome.cc/eGossip/OpenSCAD/lib3x-t3d.html)
|
||||
## Turtle
|
||||
|
||||
### Voxel
|
||||
- [voxel/vx_ascii](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_ascii.html)
|
||||
- [voxel/vx_bezier](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_bezier.html)
|
||||
- [voxel/vx_contour](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_contour.html)
|
||||
- [voxel/vx_circle](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_circle.html)
|
||||
- [voxel/vx_curve](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_curve.html)
|
||||
- [voxel/vx_cylinder](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_cylinder.html)
|
||||
- [voxel/vx_difference](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_difference.html)
|
||||
- [voxel/vx_from](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_from.html)
|
||||
- [voxel/vx_gray](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_gray.html)
|
||||
- [voxel/vx_intersection](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_intersection.html)
|
||||
- [voxel/vx_line](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_line.html)
|
||||
- [voxel/vx_polygon](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_polygon.html)
|
||||
- [voxel/vx_polyline](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_polyline.html)
|
||||
- [voxel/vx_sphere](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_sphere.html)
|
||||
- [voxel/vx_union](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_union.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**turtle/footprints2**(cmds[, start])](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprints2.html) | drive a turtle with `["forward", length]` or `["turn", angle]`. This function is intended to use a turtle to imitate freehand drawing.
|
||||
[**turtle/footprints3**(cmds[, start])](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprints3.html) | a 3D verion of `footprint2`.
|
||||
[**turtle/lsystem2**(axiom, rules, n, angle[, leng, heading, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-lsystem2.html) | 2D implementation of [L-system](https://en.wikipedia.org/wiki/L-system).
|
||||
[**turtle/lsystem3**(axiom, rules, n, angle[, leng, heading, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-lsystem3.html) | 3D implementation of [L-system](https://en.wikipedia.org/wiki/L-system).
|
||||
[**turtle/t2d**(t, cmd, point, angle, leng)](https://openhome.cc/eGossip/OpenSCAD/lib3x-t2d.html) | an implementation of Turtle Graphics.
|
||||
[**turtle/t3d**(t, cmd, point, unit_vectors, leng, angle)](https://openhome.cc/eGossip/OpenSCAD/lib3x-t3d.html) | a 3D version of `t2d`.
|
||||
|
||||
### Part
|
||||
- [part/connector_peg](https://openhome.cc/eGossip/OpenSCAD/lib3x-connector_peg.html)
|
||||
- [part/cone](https://openhome.cc/eGossip/OpenSCAD/lib3x-cone.html)
|
||||
- [part/joint_T](https://openhome.cc/eGossip/OpenSCAD/lib3x-joint_T.html)
|
||||
## Voxel
|
||||
|
||||
### Surface
|
||||
- [surface/sf_bend](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_bend.html)
|
||||
- [surface/sf_ring](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_ring.html)
|
||||
- [surface/sf_solidify](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_solidify.html)
|
||||
- [surface/sf_sphere](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_sphere.html)
|
||||
- [surface/sf_square](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_square.html)
|
||||
- [surface/sf_torus](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_torus.html)
|
||||
Signature | Description
|
||||
--|--
|
||||
[**voxel/vx_ascii**(char[, center, invert])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_ascii.html) | generate 8x8 voxel points of printable ASCII characters (codes 32dec to 126dec).
|
||||
[**voxel/vx_bezier**(p1, p2, p3, p4)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_bezier.html) | return voxel-by-voxel points of Bézier Curve.
|
||||
[**voxel/vx_circle**(radius[, filled])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_circle.html) | return points that can be used to draw a voxel-style circle.
|
||||
[**voxel/vx_contour**(points[, sorted])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_contour.html) | return the contour which encircles the area.
|
||||
[**voxel/vx_curve**(points[, tightness])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_curve.html) | the curve is drawn only from the 2nd control point to the second-last control point.
|
||||
[**voxel/vx_cylinder**(r, h[, filled, thickness])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_cylinder.html) | return points that can be used to draw a voxel-style cylinder.
|
||||
[**voxel/vx_difference**(points1, points2)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_difference.html) | create a difference of two lists of points.
|
||||
[**voxel/vx_from**(binaries[, center, invert])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_from.html) | given a list of 0s and 1s that represent a black-and-white image. This function translates them into voxel points.
|
||||
[**voxel/vx_gray**(levels[, center, invert, normalize])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_gray.html) | given a list of numbers (0 ~ 255) that represent a gray image. This function translates them into a list of `[x, y, level]`s.
|
||||
[**voxel/vx_intersection**(points1, points2)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_intersection.html) | create an intersection of two lists of points.
|
||||
[**voxel/vx_line**(p1, p2)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_line.html) | given two points. it returns points that can be used to draw a voxel-style line.
|
||||
[**voxel/vx_polygon**(points[, filled])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_polygon.html) | return points that can be used to draw a voxel-style polygon.
|
||||
[**voxel/vx_polyline**(points)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_polyline.html) | return points that can be used to draw a voxel-style polyline.
|
||||
[**voxel/vx_sphere**(radius[, filled, thickness])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_sphere.html) | return points that can be used to draw a voxel-style sphere.
|
||||
[**voxel/vx_union**(points1, points2)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_union.html) | create a union of two lists of points.
|
||||
|
||||
### Noise
|
||||
- [noise/nz_cell](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_cell.html)
|
||||
- [noise/nz_perlin1](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin1.html)
|
||||
- [noise/nz_perlin1s](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin1s.html)
|
||||
- [noise/nz_perlin2](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin2.html)
|
||||
- [noise/nz_perlin2s](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin2s.html)
|
||||
- [noise/nz_perlin3](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin3.html)
|
||||
- [noise/nz_perlin3s](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin3s.html)
|
||||
- [noise/nz_worley2](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley2.html)
|
||||
- [noise/nz_worley2s](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley2s.html)
|
||||
- [noise/nz_worley3](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley3.html)
|
||||
- [noise/nz_worley3s](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley3s.html)
|
||||
## Part
|
||||
|
||||
### Voronoi
|
||||
Signature | Description
|
||||
--|--
|
||||
[**part/cone**(radius[, length, spacing, angle, void, ends])](https://openhome.cc/eGossip/OpenSCAD/lib3x-cone.html) | create a cone for rotatable models.
|
||||
[**part/connector_peg**(radius, height[, spacing, void, ends])](https://openhome.cc/eGossip/OpenSCAD/lib3x-connector_peg.html) | create a connector peg.
|
||||
[**part/joint_T**(shaft_r, shaft_h, t_leng, thickness,[ spacing, center])](https://openhome.cc/eGossip/OpenSCAD/lib3x-joint_T.html) | create a joint_T for rotatable models.
|
||||
|
||||
- [voronoi/vrn2_cells_from](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_cells_from.html)
|
||||
- [voronoi/vrn2_cells_space](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_cells_space.html)
|
||||
- [voronoi/vrn2_from](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_from.html)
|
||||
- [voronoi/vrn2_space](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_space.html)
|
||||
- [voronoi/vrn3_from](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn3_from.html)
|
||||
- [voronoi/vrn3_space](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn3_space.html)
|
||||
## Surface
|
||||
|
||||
### Maze
|
||||
Signature | Description
|
||||
--|--
|
||||
[**surface/sf_bend**(levels, radius, thickness, depth[, angle, invert])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_bend.html) | bend a photo.
|
||||
[**surface/sf_ring**(levels, radius, thickness, depth[, angle, twist, invert])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_ring.html) | turn a photo into a ring.
|
||||
[**surface/sf_solidify**(surface1, surface2[, slicing])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_solidify.html) | solidify two square surfaces.
|
||||
[**surface/sf_sphere**(levels, radius, thickness, depth[, angle, invert)]](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_sphere.html) | map a photo onto a sphere.
|
||||
[**surface/sf_square**(levels, thickness, depth[, x_twist, y_twist, invert])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_square.html) | turn a photo into a twistable square.
|
||||
[**surface/sf_torus**(levels, radius, thickness, depth[, angle, twist, invert])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_torus.html) | turn a photo to a torus.
|
||||
[**surface/sf_curve**(levels, curve_path, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_curve.html) | curve a photo.
|
||||
[**surface/sf_splines**(ctrl_pts, row_spline, column_spline)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_splines.html) | generalized-spline surface.
|
||||
[**surface/sf_thicken**(points, thickness, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_thicken.html) | thicken a surface.
|
||||
[**surface/sf_solidifyT**(points1, points2, triangles)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_solidifyT.html) | solidify two surfaces with triangular mesh.
|
||||
[**surface/sf_thickenT**(points, thickness, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_thickenT.html) | thicken a surface with triangular mesh.
|
||||
|
||||
## Noise
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**noise/nz_cell**(points, p[, dist])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_cell.html) | an implementation of [Worley noise](https://en.wikipedia.org/wiki/Worley_noise).
|
||||
[**noise/nz_perlin1**(x[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin1.html) | return the 1D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) value at the x coordinate.
|
||||
[**noise/nz_perlin1s**(xs[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin1s.html) | return 1D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) values at x coordinates.
|
||||
[**noise/nz_perlin2**(x, y[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin2.html) | return the 2D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) value at the (x, y) coordinate.
|
||||
[**noise/nz_perlin2s**(points[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin2s.html) | return 2D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) values at (x, y) coordinates.
|
||||
[**noise/nz_perlin3**(x, y, z[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin3.html) | return the 3D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) value at the (x, y, z) coordinate.
|
||||
[**noise/nz_perlin3s**(points[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_perlin3s.html) | return 3D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) values at (x, y, z) coordinates.
|
||||
[**noise/nz_worley2**(x, y[, seed, grid_w, dist])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley2.html) | return the 2D [Worley noise](https://en.wikipedia.org/wiki/Worley_noise) value at the (x, y) coordinate.
|
||||
[**noise/nz_worley2s**(points[, seed, grid_w, dist])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley2s.html) | return 2D [Worley noise](https://en.wikipedia.org/wiki/Worley_noise) values at (x, y) coordinates.
|
||||
[**noise/nz_worley3**(x, y, z[, seed, grid_w, dist])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley3.html) | return the 3D [Worley noise](https://en.wikipedia.org/wiki/Worley_noise) value at the (x, y, z) coordinate.
|
||||
[**noise/nz_worley3s**(points[, seed, grid_w, dist])](https://openhome.cc/eGossip/OpenSCAD/lib3x-nz_worley3s.html) | return 3D [Worley noise](https://en.wikipedia.org/wiki/Worley_noise) values at (x, y, z) coordinates.
|
||||
|
||||
## Voronoi
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**voronoi/vrn2_cells_from**(points)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_cells_from.html) | create cell shapes of [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) from a list of points.
|
||||
[**voronoi/vrn2_cells_space**(size, grid_w[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_cells_space.html) | create cell shapes of [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) in the first quadrant.
|
||||
[**voronoi/vrn2_from**(points[, spacing, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_from.html) | create a [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) from a list of points.
|
||||
[**voronoi/vrn2_space**(size, grid_w[, seed, spacing, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn2_space.html) | create a [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) in the first quadrant.
|
||||
[**voronoi/vrn3_from**(points[, spacing])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn3_from.html) | create a 3D version of [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram).
|
||||
[**voronoi/vrn3_space**(size, grid_w[, seed, spacing])](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn3_space.html) | create a [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) in the first octant.
|
||||
|
||||
## Maze
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**maze/mz_square_cells**(rows, columns[, start, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_cells.html) | return cell data of a square maze.
|
||||
[**maze/mz_square_get**(cell, query)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_get.html) | a helper for getting data from a square-maze cell.
|
||||
[**maze/mz_square_walls**(cells, rows, columns, cell_width, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_walls.html) | a helper for creating square wall data from maze cells.
|
||||
[**maze/mz_hex_walls**(cells, rows, columns, cell_radius, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hex_walls.html) | a helper for creating hex wall data from maze cells.
|
||||
[**maze/mz_square_initialize**(rows, columns, mask)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_initialize.html) | a helper for initializing cell data of a maze.
|
||||
[**maze/mz_hamiltonian**(rows, columns[, start, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hamiltonian.html) | create a hamiltonian path from a maze.
|
||||
[**maze/mz_theta_cells**(rows, beginning_number[, start, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta_cells.html) | return cell data of a theta maze.
|
||||
[**maze/mz_theta_get**(cell, query)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta_get.html) | a helper for getting data from a theta-maze cell.
|
||||
|
||||
## Polyhedra
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**polyhedra/star**([outerRadius, innerRadius, height, n])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_star.html) | create a 3D star.
|
||||
[**polyhedra/polar_zonohedra**(n[, theta])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_polar_zonohedra.html) | create a [polar zonohedra](https://mathworld.wolfram.com/PolarZonohedron.html).
|
||||
[**polyhedra/tetrahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_tetrahedron.html) | create a tetrahedron.
|
||||
[**polyhedra/hexahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_hexahedron.html) | create a hexahedron.
|
||||
[**polyhedra/octahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_octahedron.html) | create a octahedron.
|
||||
[**polyhedra/dodecahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_dodecahedron.html) | create a dodecahedron.
|
||||
[**polyhedra/icosahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_icosahedron.html) | create a icosahedron.
|
||||
[**polyhedra/superellipsoid**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_superellipsoid.html) | create a superellipsoid.
|
||||
|
||||
----
|
||||
|
||||
- [maze/mz_square_cells](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_cells.html)
|
||||
- [maze/mz_square_get](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_get.html)
|
||||
- [maze/mz_square_walls](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_walls.html)
|
||||
- [maze/mz_hex_walls](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hex_walls.html)
|
||||
- [maze/mz_square_initialize](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_initialize.html)
|
||||
- [maze/mz_hamiltonian](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hamiltonian.html)
|
||||
- [maze/mz_theta_cells](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta_cells.html)
|
||||
- [maze/mz_theta_get](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta_get.html)
|
94
RELEASE.md
@@ -1,5 +1,99 @@
|
||||
> Version numbers are based on [Semantic Versioning](https://semver.org/).
|
||||
|
||||
# v3.2.1
|
||||
|
||||
Maintenance release: bug fixes & performance improvements.
|
||||
|
||||
# v3.2
|
||||
|
||||
## Deprecated:
|
||||
|
||||
Name | Description
|
||||
--|--
|
||||
**paths2sections** | use **rails2sections** instead.
|
||||
**hull_polyline2d**, **hull_polyline3d** | use **polyline_join** instead.
|
||||
**shape_starburst**, **shape_pentagram** | use **shape_star** instead.
|
||||
**starburst** | use **polyhedra/star** instead.
|
||||
|
||||
## New parameters:
|
||||
|
||||
- `angle_between` adds `ccw`.
|
||||
|
||||
## New modules/functions:
|
||||
|
||||
### Matrix
|
||||
|
||||
## 2D/3D Function
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**rails2sections**(rails)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rails2sections.html) | create sections along rails.
|
||||
|
||||
## Transformation
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**select**(i)](https://openhome.cc/eGossip/OpenSCAD/lib3x-select.html) | select module objects.
|
||||
[**polyline_join**(points)](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline_join.html) | place a join on each point. Hull each pair of joins and union all convex hulls.
|
||||
|
||||
## 2D Shape
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**shape_star**([outer_radius, inner_radius, n])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_star.html) | create a 2D star.
|
||||
|
||||
## Polyhedra
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**polyhedra/star**([outerRadius, innerRadius, height, n])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_star.html) | create a 3D star.
|
||||
[**polyhedra/polar_zonohedra**(n[, theta])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_polar_zonohedra.html) | create a [polar zonohedra](https://mathworld.wolfram.com/PolarZonohedron.html).
|
||||
[**polyhedra/tetrahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_tetrahedron.html) | create a tetrahedron.
|
||||
[**polyhedra/hexahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_hexahedron.html) | create a hexahedron.
|
||||
[**polyhedra/octahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_octahedron.html) | create a octahedron.
|
||||
[**polyhedra/dodecahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_dodecahedron.html) | create a dodecahedron.
|
||||
[**polyhedra/icosahedron**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_icosahedron.html) | create a icosahedron.
|
||||
[**polyhedra/superellipsoid**(radius[, detail])](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyhedra_superellipsoid.html) | create a superellipsoid.
|
||||
|
||||
# v3.1
|
||||
|
||||
## Deprecated:
|
||||
|
||||
Name | Description
|
||||
--|--
|
||||
**bezier_surface** | use **surface/sf_splines** instead.
|
||||
**function_grapher** | use **surface/sf_thicken** instead.
|
||||
|
||||
## New modules/functions:
|
||||
|
||||
### Matrix
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**maxtrix/m_transpose**(m)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_transpose.html) | transpose a matrix.
|
||||
|
||||
### Surface
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**surface/sf_curve**(levels, curve_path, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_curve.html) | curve a photo.
|
||||
[**surface/sf_splines**(ctrl_pts, row_spline, column_spline)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_splines.html) | generalized-spline surface.
|
||||
[**surface/sf_thicken**(points, thickness, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_thicken.html) | thicken a surface.
|
||||
[**surface/sf_solidifyT**(points1, points2, triangles)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_solidifyT.html) | solidify two surfaces with triangular mesh.
|
||||
[**surface/sf_thickenT**(points, thickness, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_thickenT.html) | thicken a surface with triangular mesh.
|
||||
|
||||
### Triangle
|
||||
|
||||
Signature | Description
|
||||
--|--
|
||||
[**triangle/tri_circumcenter**(shape_pts)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_circumcenter.html) | return the circumcenter of a triangle.
|
||||
[**triangle/tri_incenter**(shape_pts)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_incenter.html) | return the incenter of a triangle.
|
||||
[**triangle/tri_ear_clipping**(shape_pts, ret = "TRI_INDICES", ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_ear_clipping.html) | triangulation by [ear clipping](https://en.wikipedia.org/wiki/Polygon_triangulation#Ear_clipping_method).
|
||||
[**triangle/tri_delaunay**(points, ret = "TRI_INDICES")](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay.html) | Join a set of points to make a [Delaunay triangulation](https://en.wikipedia.org/wiki/Delaunay_triangulation).
|
||||
[**triangle/tri_delaunay_indices**(d)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay_indices.html) | return triangle indices from a delaunay object.
|
||||
[**triangle/tri_delaunay_shapes**(d)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay_shapes.html) | return triangle shapes from a delaunay object.
|
||||
[**triangle/tri_delaunay_voronoi**(d)](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_delaunay_voronoi.html) | return [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) cells from a delaunay object.
|
||||
|
||||
# v3.0
|
||||
|
||||
**It's a version that Breaks Backward Compatibility!!**
|
||||
|
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 48 KiB |
Before Width: | Height: | Size: 118 KiB |
BIN
docs/images/lib3x-polyhedra_dodecahedron-1.JPG
Normal file
After Width: | Height: | Size: 25 KiB |
BIN
docs/images/lib3x-polyhedra_hexahedron-1.JPG
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
docs/images/lib3x-polyhedra_icosahedron-1.JPG
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
docs/images/lib3x-polyhedra_octahedron-1.JPG
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
docs/images/lib3x-polyhedra_polar_zonohedra-1.JPG
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
docs/images/lib3x-polyhedra_star-1.JPG
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
docs/images/lib3x-polyhedra_superellipsoid-1.JPG
Normal file
After Width: | Height: | Size: 77 KiB |
BIN
docs/images/lib3x-polyhedra_tetrahedron-1.JPG
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
docs/images/lib3x-polyline_join-1.JPG
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
docs/images/lib3x-polyline_join-2.JPG
Normal file
After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
BIN
docs/images/lib3x-rails2sections-1.JPG
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
docs/images/lib3x-rails2sections-2.JPG
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
docs/images/lib3x-sf_curve-1.JPG
Normal file
After Width: | Height: | Size: 60 KiB |
BIN
docs/images/lib3x-sf_solidifyT-1.JPG
Normal file
After Width: | Height: | Size: 42 KiB |
BIN
docs/images/lib3x-sf_solidifyT-2.JPG
Normal file
After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
BIN
docs/images/lib3x-sf_splines-2.JPG
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
docs/images/lib3x-sf_splines-3.JPG
Normal file
After Width: | Height: | Size: 35 KiB |
BIN
docs/images/lib3x-sf_thicken-1.JPG
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
docs/images/lib3x-sf_thicken-2.JPG
Normal file
After Width: | Height: | Size: 48 KiB |
BIN
docs/images/lib3x-sf_thicken-3.JPG
Normal file
After Width: | Height: | Size: 33 KiB |
BIN
docs/images/lib3x-sf_thickenT-1.JPG
Normal file
After Width: | Height: | Size: 31 KiB |
BIN
docs/images/lib3x-sf_thickenT-2.JPG
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
docs/images/lib3x-shape_star-1.JPG
Normal file
After Width: | Height: | Size: 32 KiB |
BIN
docs/images/lib3x-tri_delaunay-1.JPG
Normal file
After Width: | Height: | Size: 104 KiB |
BIN
docs/images/lib3x-tri_delaunay_indices-1.JPG
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
docs/images/lib3x-tri_delaunay_shapes-1.JPG
Normal file
After Width: | Height: | Size: 92 KiB |
BIN
docs/images/lib3x-tri_delaunay_voronoi-1.JPG
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
docs/images/lib3x-tri_ear_clipping-1.JPG
Normal file
After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 66 KiB |
@@ -57,9 +57,9 @@ Puts children along the given path. If there's only one child, it will put the c
|
||||
angles = [for(p_a = pts_angles) p_a[1]];
|
||||
|
||||
along_with(points, angles)
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(1, center = true)
|
||||
text("A", valign = "center", halign = "center");
|
||||
rotate([90, 0, 0])
|
||||
linear_extrude(1, center = true)
|
||||
text("A", valign = "center", halign = "center");
|
||||
|
||||

|
||||
|
||||
@@ -69,20 +69,20 @@ Puts children along the given path. If there's only one child, it will put the c
|
||||
module scales() {
|
||||
module one_scale() {
|
||||
rotate([0, 60, 0])
|
||||
linear_extrude(1, center = true)
|
||||
scale([2, 1])
|
||||
circle(1.25, $fn = 24);
|
||||
linear_extrude(1, center = true)
|
||||
scale([2, 1])
|
||||
circle(1.25, $fn = 24);
|
||||
}
|
||||
|
||||
for(a = [0:30:330]) {
|
||||
rotate(a)
|
||||
translate([5, 0, 0])
|
||||
one_scale();
|
||||
rotate(a + 15)
|
||||
translate([5, 0, 1.75])
|
||||
one_scale();
|
||||
}
|
||||
translate([5, 0, 0])
|
||||
one_scale();
|
||||
|
||||
rotate(a + 15)
|
||||
translate([5, 0, 1.75])
|
||||
one_scale();
|
||||
}
|
||||
}
|
||||
|
||||
t_step = 0.01;
|
||||
|
@@ -11,21 +11,23 @@ Creates an arc path. You can pass a 2 element vector to define the central angle
|
||||
|
||||
## Examples
|
||||
|
||||
use <arc_path.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
|
||||
$fn = 24;
|
||||
points = arc_path(radius = 20, angle = [45, 290]);
|
||||
hull_polyline2d(points, width = 2);
|
||||
use <arc_path.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
$fn = 24;
|
||||
points = arc_path(radius = 20, angle = [45, 290]);
|
||||
polyline_join(points)
|
||||
circle(1);
|
||||
|
||||

|
||||
|
||||
use <arc_path.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
$fn = 24;
|
||||
points = arc_path(radius = 20, angle = 135);
|
||||
hull_polyline2d(points, width = 2);
|
||||
polyline_join(points)
|
||||
circle(1);
|
||||
|
||||

|
||||
|
||||
|
@@ -47,22 +47,22 @@ An `init_angle` less than 180 degrees is not recommended because the function us
|
||||
}
|
||||
|
||||

|
||||
|
||||
include <archimedean_spiral.scad>;
|
||||
|
||||
t = "3.141592653589793238462643383279502884197169399375105820974944592307816406286";
|
||||
|
||||
points = archimedean_spiral(
|
||||
|
||||
use <archimedean_spiral.scad>;
|
||||
|
||||
t = "3.141592653589793238462643383279502884197169399375105820974944592307816406286";
|
||||
|
||||
points_angles = archimedean_spiral(
|
||||
arm_distance = 15,
|
||||
init_angle = 450,
|
||||
point_distance = 12,
|
||||
num_of_points = len(t)
|
||||
);
|
||||
|
||||
for(i = [0: len(points) - 1]) {
|
||||
translate(points[i][0])
|
||||
rotate(points[i][1] + 90)
|
||||
text(t[i], valign = "center", halign = "center");
|
||||
for(i = [0: len(points_angles) - 1]) {
|
||||
translate(points_angles[i][0])
|
||||
rotate(points_angles[i][1] + 90)
|
||||
text(t[i], valign = "center", halign = "center");
|
||||
}
|
||||
|
||||

|
||||
|
@@ -15,7 +15,7 @@ Creates visually even spacing of n points on the surface of the sphere. Successi
|
||||
## Examples
|
||||
|
||||
use <bauer_spiral.scad>;
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
n = 200;
|
||||
radius = 20;
|
||||
@@ -26,7 +26,8 @@ Creates visually even spacing of n points on the surface of the sphere. Successi
|
||||
sphere(1, $fn = 24);
|
||||
}
|
||||
|
||||
hull_polyline3d(pts, 1);
|
||||
polyline_join(pts)
|
||||
sphere(.5);
|
||||
|
||||

|
||||
|
||||
|
@@ -34,7 +34,8 @@ Once you have the size of the containing cube, you can use it as the `size` argu
|
||||
*cube(size = [x, y, z]);
|
||||
|
||||
bend(size = [x, y, z], angle = 270)
|
||||
linear_extrude(z) text("A");
|
||||
linear_extrude(z)
|
||||
text("A");
|
||||
|
||||

|
||||
|
||||
@@ -47,8 +48,8 @@ The arc shape is smoother if the `frags` value is larger.
|
||||
z = 1;
|
||||
|
||||
bend(size = [x, y, z], angle = 270, frags = 360)
|
||||
linear_extrude(z)
|
||||
text("A");
|
||||
linear_extrude(z)
|
||||
text("A");
|
||||
|
||||

|
||||
|
||||
|
@@ -1,21 +1,21 @@
|
||||
# bezier_curve
|
||||
|
||||
Given a set of control points, the `bezier_curve` function returns points of the Bézier path. Combined with the `polyline`, `polyline3d` or `hull_polyline3d` module defined in my library, you can create a Bézier curve.
|
||||
Given a set of control points, the `bezier_curve` function returns points of the Bézier path.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `t_step` : The distance between two points of the Bézier path.
|
||||
- `t_step` : 0 ~ 1. Control the distance between two points of the Bézier path.
|
||||
- `points` : A list of `[x, y]` or `[x, y, z]` control points.
|
||||
|
||||
## Examples
|
||||
|
||||
If you have four control points and combine with the `hull_polyline3d` module:
|
||||
If you have four control points:
|
||||
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <bezier_curve.scad>;
|
||||
|
||||
t_step = 0.05;
|
||||
width = 2;
|
||||
radius = 2;
|
||||
|
||||
p0 = [0, 0, 0];
|
||||
p1 = [40, 60, 35];
|
||||
@@ -26,6 +26,7 @@ If you have four control points and combine with the `hull_polyline3d` module:
|
||||
[p0, p1, p2, p3]
|
||||
);
|
||||
|
||||
hull_polyline3d(points, width);
|
||||
polyline_join(points)
|
||||
sphere(radius);
|
||||
|
||||

|
||||
|
@@ -12,7 +12,7 @@ Given a path, the `bezier_smooth` function uses bazier curves to smooth all corn
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <bezier_smooth.scad>;
|
||||
|
||||
width = 2;
|
||||
@@ -25,15 +25,15 @@ Given a path, the `bezier_smooth` function uses bazier curves to smooth all corn
|
||||
[-10, -10, 50]
|
||||
];
|
||||
|
||||
hull_polyline3d(
|
||||
path_pts, width
|
||||
);
|
||||
polyline_join(path_pts)
|
||||
sphere(width / 2);
|
||||
|
||||
smoothed_path_pts = bezier_smooth(path_pts, round_d);
|
||||
|
||||
color("red") translate([30, 0, 0]) hull_polyline3d(
|
||||
smoothed_path_pts, width
|
||||
);
|
||||
color("red")
|
||||
translate([30, 0, 0])
|
||||
polyline_join(smoothed_path_pts)
|
||||
sphere(width / 2);
|
||||
|
||||

|
||||
|
||||
@@ -51,6 +51,7 @@ Given a path, the `bezier_smooth` function uses bazier curves to smooth all corn
|
||||
|
||||
smoothed_path_pts = bezier_smooth(path_pts, round_d, closed = true);
|
||||
|
||||
translate([50, 0, 0]) polygon(smoothed_path_pts);
|
||||
translate([50, 0, 0])
|
||||
polygon(smoothed_path_pts);
|
||||
|
||||

|
@@ -1,34 +0,0 @@
|
||||
# bezier_surface
|
||||
|
||||
Given a set of control points, the `bezier_surface` function returns points of the Bézier surface. Combined with the `function_grapher` module defined in my library, you can create a Bézier surface.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `t_step` : The distance between two points of the Bézier path.
|
||||
- `points` : A set of control points. See examples below.
|
||||
|
||||
## Examples
|
||||
|
||||
If you have 16 control points and combine with the `function_grapher` module:
|
||||
|
||||
use <bezier_surface.scad>;
|
||||
use <function_grapher.scad>;
|
||||
|
||||
t_step = 0.05;
|
||||
thickness = 0.5;
|
||||
|
||||
ctrl_pts = [
|
||||
[[0, 0, 20], [60, 0, -35], [90, 0, 60], [200, 0, 5]],
|
||||
[[0, 50, 30], [100, 60, -25], [120, 50, 120], [200, 50, 5]],
|
||||
[[0, 100, 0], [60, 120, 35], [90, 100, 60], [200, 100, 45]],
|
||||
[[0, 150, 0], [60, 150, -35], [90, 180, 60], [200, 150, 45]]
|
||||
];
|
||||
|
||||
g = bezier_surface(t_step, ctrl_pts);
|
||||
function_grapher(g, thickness);
|
||||
|
||||

|
||||
|
||||
The following figure shows controll points and bazier curves around the surface.
|
||||
|
||||

|
@@ -22,11 +22,11 @@ Move 2D outlines outward or inward by a given amount. Each point of the offsette
|
||||
[-15, 0]
|
||||
];
|
||||
|
||||
color("red") polygon(bijection_offset(shape, 3));
|
||||
color("red") polygon(bijection_offset(shape, 3));
|
||||
color("orange") polygon(bijection_offset(shape, 2));
|
||||
color("yellow") polygon(bijection_offset(shape, 1));
|
||||
color("green") polygon(shape);
|
||||
color("blue") polygon(bijection_offset(shape, -1));
|
||||
color("green") polygon(shape);
|
||||
color("blue") polygon(bijection_offset(shape, -1));
|
||||
color("indigo") polygon(bijection_offset(shape, -2));
|
||||
color("purple") polygon(bijection_offset(shape, -3));
|
||||
|
||||
@@ -43,7 +43,6 @@ Move 2D outlines outward or inward by a given amount. Each point of the offsette
|
||||
[-5, 0]
|
||||
];
|
||||
offsetted = bijection_offset(shape, 1);
|
||||
|
||||
offsetted2 = bijection_offset(shape, 2);
|
||||
offsetted3 = bijection_offset(shape, 3);
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# bspline_curve
|
||||
|
||||
[B-spline](https://en.wikipedia.org/wiki/B-spline) interpolation using [de Boor's algorithm](https://en.wikipedia.org/wiki/De_Boor%27s_algorithm). This function returns points of the B-spline path. Combined with the `polyline`, `polyline3d` or `hull_polyline3d` module, you can create a B-spline curve.
|
||||
[B-spline](https://en.wikipedia.org/wiki/B-spline) interpolation using [de Boor's algorithm](https://en.wikipedia.org/wiki/De_Boor%27s_algorithm). This function returns points of the B-spline path.
|
||||
|
||||
**Since:** 2.1
|
||||
|
||||
@@ -49,7 +49,8 @@
|
||||
// a non-uniform B-spline curve
|
||||
knots = [0, 1/8, 1/4, 1/2, 3/4, 4/5, 1];
|
||||
|
||||
color("red") for(p = points) {
|
||||
color("red")
|
||||
for(p = points) {
|
||||
translate(p)
|
||||
sphere(0.5);
|
||||
}
|
||||
@@ -73,7 +74,8 @@
|
||||
// For a clamped B-spline curve, the first `degree + 1` and the last `degree + 1` knots must be identical.
|
||||
knots = [0, 0, 0, 1, 2, 2, 2];
|
||||
|
||||
color("red") for(p = points) {
|
||||
color("red")
|
||||
for(p = points) {
|
||||
translate(p)
|
||||
sphere(0.5);
|
||||
}
|
||||
|
@@ -21,9 +21,9 @@ Sometimes you need all points on the path of a circle. Here's the function. Its
|
||||
step_angle = 360 / leng;
|
||||
for(i = [0:leng - 1]) {
|
||||
translate(points[i])
|
||||
rotate([90, 0, 90 + i * step_angle])
|
||||
linear_extrude(1, center = true)
|
||||
text("A", valign = "center", halign = "center");
|
||||
rotate([90, 0, 90 + i * step_angle])
|
||||
linear_extrude(1, center = true)
|
||||
text("A", valign = "center", halign = "center");
|
||||
}
|
||||
|
||||

|
||||
|
@@ -11,8 +11,8 @@ Computes contour polygons by applying [marching squares](https://en.wikipedia.or
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline2d.scad>;
|
||||
use <function_grapher.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <surface/sf_thicken.scad>;
|
||||
use <contours.scad>;
|
||||
|
||||
min_value = 1;
|
||||
@@ -23,20 +23,21 @@ Computes contour polygons by applying [marching squares](https://en.wikipedia.or
|
||||
|
||||
points = [
|
||||
for(y = [min_value:resolution:max_value])
|
||||
[
|
||||
for(x = [min_value:resolution:max_value])
|
||||
[x, y, f(x, y)]
|
||||
]
|
||||
[
|
||||
for(x = [min_value:resolution:max_value])
|
||||
[x, y, f(x, y)]
|
||||
]
|
||||
];
|
||||
|
||||
function_grapher(points, 1);
|
||||
sf_thicken(points, 1);
|
||||
|
||||
translate([max_value, 0, 0])
|
||||
for(z = [-30:5:30]) {
|
||||
translate([0, 0, z])
|
||||
linear_extrude(1)
|
||||
for(isoline = contours(points, z)) {
|
||||
hull_polyline2d(isoline, width = 1);
|
||||
polyline_join(isoline)
|
||||
circle(.5);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -6,7 +6,7 @@ Draws a curved line from control points. The curve is drawn only from the 2nd co
|
||||
|
||||
## Parameters
|
||||
|
||||
- `t_step` : The distance between two points of the generated curve.
|
||||
- `t_step` : 0 ~ 1. Control the distance between two points of the generated curve.
|
||||
- `points` : A list of `[x, y]` or `[x, y, z]` control points.
|
||||
- `tightness` : You can view it as the curve tigntness if you provide a value between 0.0 and 1.0. The default value is 0.0. The value 1.0 connects all the points with straight lines. The value greater than 1.0 or less than 0.0 is also acceptable because it defines how to generate a bezier curve every four control points.
|
||||
|
||||
@@ -17,7 +17,7 @@ Draws a curved line from control points. The curve is drawn only from the 2nd co
|
||||
## Examples
|
||||
|
||||
use <curve.scad>;
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
pts = [
|
||||
[28, 2, 1],
|
||||
@@ -32,12 +32,14 @@ Draws a curved line from control points. The curve is drawn only from the 2nd co
|
||||
tightness = 0;
|
||||
points = curve(t_step, pts, tightness);
|
||||
|
||||
hull_polyline3d(points, 1);
|
||||
polyline_join(points)
|
||||
sphere(.5);
|
||||
|
||||
#for(pt = pts) {
|
||||
translate(pt)
|
||||
sphere(1);
|
||||
}
|
||||
#hull_polyline3d(pts, .1);
|
||||
#polyline_join(pts)
|
||||
sphere(.05);
|
||||
|
||||

|
@@ -34,7 +34,9 @@ Extrudes a 2D object along the path of an ellipse from 0 to 180 degrees. The sem
|
||||
|
||||
ellipse_extrude(semi_minor_axis)
|
||||
text("♥", size = 40, valign = "center", halign = "center");
|
||||
mirror([0, 0, 1]) ellipse_extrude(semi_minor_axis)
|
||||
|
||||
mirror([0, 0, 1])
|
||||
ellipse_extrude(semi_minor_axis)
|
||||
text("♥", size = 40, valign = "center", halign = "center");
|
||||
|
||||

|
||||
|
@@ -31,7 +31,7 @@ Creates visually even spacing of n points on the surface of the sphere. Nearest-
|
||||

|
||||
|
||||
use <fibonacci_lattice.scad>;
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
n = 200;
|
||||
radius = 20;
|
||||
@@ -49,7 +49,8 @@ Creates visually even spacing of n points on the surface of the sphere. Nearest-
|
||||
];
|
||||
|
||||
for(spiral = spirals) {
|
||||
hull_polyline3d(spiral, 1);
|
||||
polyline_join(spiral)
|
||||
sphere(.5);
|
||||
}
|
||||
|
||||

|
@@ -16,26 +16,21 @@ returns a new list with all sub-list elements concatenated into it recursively u
|
||||
vt = [[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]];
|
||||
|
||||
assert(
|
||||
flat([1, 2, [3, 4]]) ==
|
||||
[1, 2, 3, 4]
|
||||
flat([1, 2, [3, 4]]) == [1, 2, 3, 4]
|
||||
);
|
||||
|
||||
assert(
|
||||
flat([[1, 2], [3, 4]]) ==
|
||||
[1, 2, 3, 4]
|
||||
flat([[1, 2], [3, 4]]) == [1, 2, 3, 4]
|
||||
);
|
||||
|
||||
assert(
|
||||
flat([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]]) ==
|
||||
[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
|
||||
flat([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]]) == [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]
|
||||
);
|
||||
|
||||
assert(
|
||||
flat([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]], 2) ==
|
||||
[[1, 2], [3, 4], [5, 6], [7, 8]]
|
||||
flat([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]], 2) == [[1, 2], [3, 4], [5, 6], [7, 8]]
|
||||
);
|
||||
|
||||
assert(
|
||||
flat([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]], 3) ==
|
||||
[1, 2, 3, 4, 5, 6, 7, 8]
|
||||
flat([[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]], 3) == [1, 2, 3, 4, 5, 6, 7, 8]
|
||||
);
|
||||
|
@@ -11,7 +11,7 @@ Drive a turtle with `["forward", length]` or `["turn", angle]`. This function is
|
||||
|
||||
## Examples
|
||||
|
||||
use <polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <turtle/footprints2.scad>;
|
||||
|
||||
function arc_cmds(radius, angle, steps) =
|
||||
@@ -20,35 +20,33 @@ Drive a turtle with `["forward", length]` or `["turn", angle]`. This function is
|
||||
ta = fa / 2,
|
||||
leng = sin(ta) * radius * 2
|
||||
)
|
||||
concat(
|
||||
[["turn", ta]],
|
||||
[
|
||||
[
|
||||
["turn", ta],
|
||||
each [
|
||||
for(i = [0:steps - 2])
|
||||
each [["forward", leng], ["turn", fa]]
|
||||
],
|
||||
[["forward", leng], ["turn", ta]]
|
||||
);
|
||||
["forward", leng],
|
||||
["turn", ta]
|
||||
];
|
||||
|
||||
poly = footprints2(
|
||||
concat(
|
||||
[
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10]
|
||||
],
|
||||
arc_cmds(5, 180, 12),
|
||||
[
|
||||
["turn", -90],
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10]
|
||||
]
|
||||
)
|
||||
[
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10],
|
||||
each arc_cmds(5, 180, 12),
|
||||
["turn", -90],
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10]
|
||||
]
|
||||
);
|
||||
|
||||
polyline2d(poly, width = 1);
|
||||
polyline_join(poly)
|
||||
circle(.5);
|
||||
|
||||

|
||||
|
||||
|
@@ -11,7 +11,7 @@ A 3D verion of [footprint2](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprint
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <turtle/footprints3.scad>;
|
||||
|
||||
function xy_arc_cmds(radius, angle, steps) =
|
||||
@@ -20,36 +20,32 @@ A 3D verion of [footprint2](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprint
|
||||
ta = fa / 2,
|
||||
leng = sin(ta) * radius * 2
|
||||
)
|
||||
concat(
|
||||
[["turn", ta]],
|
||||
[
|
||||
[
|
||||
["turn", ta],
|
||||
each [
|
||||
for(i = [0:steps - 2])
|
||||
each [["forward", leng], ["turn", fa]]
|
||||
],
|
||||
[["forward", leng], ["turn", ta]]
|
||||
);
|
||||
["forward", leng],
|
||||
["turn", ta]
|
||||
];
|
||||
|
||||
poly = footprints3(
|
||||
concat(
|
||||
[
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10]
|
||||
],
|
||||
xy_arc_cmds(5, 180, 12),
|
||||
[
|
||||
["pitch", 90],
|
||||
["forward", 10],
|
||||
["roll", 90]
|
||||
],
|
||||
xy_arc_cmds(5, 180, 12),
|
||||
[
|
||||
["forward", 10]
|
||||
]
|
||||
)
|
||||
[
|
||||
["forward", 10],
|
||||
["turn", 90],
|
||||
["forward", 10],
|
||||
each xy_arc_cmds(5, 180, 12),
|
||||
["pitch", 90],
|
||||
["forward", 10],
|
||||
["roll", 90],
|
||||
each xy_arc_cmds(5, 180, 12),
|
||||
["forward", 10]
|
||||
]
|
||||
);
|
||||
|
||||
hull_polyline3d(poly, thickness = 1);
|
||||
polyline_join(poly)
|
||||
sphere(.5);
|
||||
|
||||

|
||||
|
||||
|
@@ -1,78 +0,0 @@
|
||||
# function_grapher
|
||||
|
||||
Given a list of points `[x, y, f(x, y)]` where `f(x, y)` is a mathematics function, the `function_grapher` module can create the graph of `f(x, y)`.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `points` : A list of points `[x, y, f(x, y)]`. See examples below.
|
||||
- `thickness` : The face or line thickness. Default to 1.
|
||||
- `style` : The style of the graph. It accepts `"FACES"`, `"LINES"`, `"HULL_FACES"` and `"HULL_LINES"`. The default value is `"FACES"` which simply takes `f(x, y) - thickness` for each point to build a bottom. It may cause thickness problems when slopes is high. The `"HULL_FACES"` value can solve the problem but is slow. When assigning `"LINES"`, it uses lines to connect points. The `"HULL_LINES"` is very very slow; however, the model might look smoother if you have a small `$fn`.
|
||||
- `$fa`, `$fs`, `$fn` : Used by the `circle` or `sphere` module internally. It affects the speed of rending. For example, a large `$fn` may be very slow when rending. Check [the circle module](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#circle) or [the sphere module](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#sphere) for more details.
|
||||
|
||||
## Examples
|
||||
|
||||
use <function_grapher.scad>;
|
||||
|
||||
points = [
|
||||
[[0, 0, 1], [1, 0, 2], [2, 0, 2], [3, 0, 3]],
|
||||
[[0, 1, 1], [1, 1, 4], [2, 1, 0], [3, 1, 3]],
|
||||
[[0, 2, 1], [1, 2, 3], [2, 2, 1], [3, 2, 3]],
|
||||
[[0, 3, 1], [1, 3, 3], [2, 3, 1], [3, 3, 3]]
|
||||
];
|
||||
|
||||
thickness = 0.5;
|
||||
|
||||
function_grapher(points, thickness);
|
||||
|
||||

|
||||
|
||||
use <function_grapher.scad>;
|
||||
|
||||
function f(x, y) =
|
||||
30 * (
|
||||
cos(sqrt(pow(x, 2) + pow(y, 2))) +
|
||||
cos(3 * sqrt(pow(x, 2) + pow(y, 2)))
|
||||
);
|
||||
|
||||
thickness = 2;
|
||||
min_value = -200;
|
||||
max_value = 200;
|
||||
resolution = 10;
|
||||
|
||||
points = [
|
||||
for(y = [min_value:resolution:max_value])
|
||||
[
|
||||
for(x = [min_value:resolution:max_value])
|
||||
[x, y, f(x, y)]
|
||||
]
|
||||
];
|
||||
|
||||
function_grapher(points, thickness);
|
||||
|
||||

|
||||
|
||||
use <function_grapher.scad>;
|
||||
|
||||
function f(x, y) =
|
||||
30 * (
|
||||
cos(sqrt(pow(x, 2) + pow(y, 2))) +
|
||||
cos(3 * sqrt(pow(x, 2) + pow(y, 2)))
|
||||
);
|
||||
|
||||
thickness = 2;
|
||||
min_value = -200;
|
||||
max_value = 200;
|
||||
resolution = 10;
|
||||
style = "LINES";
|
||||
|
||||
points = [
|
||||
for(y = [min_value:resolution:max_value])
|
||||
[
|
||||
for(x = [min_value:resolution:max_value])
|
||||
[x, y, f(x, y)]
|
||||
]
|
||||
];
|
||||
|
||||
function_grapher(points, thickness, style);
|
||||
|
||||

|
@@ -38,9 +38,9 @@ It returns a vector of `[[x, y], angle]`.
|
||||
|
||||
for(pt_angle = pts_angles) {
|
||||
translate(pt_angle[0])
|
||||
rotate([90, 0, pt_angle[1]])
|
||||
linear_extrude(1, center = true)
|
||||
text("A", valign = "center", halign = "center");
|
||||
rotate([90, 0, pt_angle[1]])
|
||||
linear_extrude(1, center = true)
|
||||
text("A", valign = "center", halign = "center");
|
||||
}
|
||||
|
||||

|
@@ -39,9 +39,9 @@ This function maps keys to values. You can use the following to process the retu
|
||||
m3 = hashmap_del(m2, "k1");
|
||||
assert(hashmap_get(m3, "k1") == undef);
|
||||
|
||||
echo(hashmap_keys(m3)); // a list contains "k2", "k2", "k3"
|
||||
echo(hashmap_values(m3)); // a list contains 20, 30, 40
|
||||
echo(hashmap_entries(m3)); // a list contains ["k2", 20], ["k3", 30], ["k4", 40]
|
||||
assert(hashmap_keys(m3) == ["k2", "k3", "k4"]);
|
||||
assert(hashmap_values(m3) == [20, 30, 40]);
|
||||
assert(hashmap_entries(m3) == [["k2", 20], ["k3", 30], ["k4", 40]]);
|
||||
|
||||
Want to simulate class-based OO in OpenSCAD? Here's my experiment.
|
||||
|
||||
@@ -54,7 +54,7 @@ Want to simulate class-based OO in OpenSCAD? Here's my experiment.
|
||||
function clz_list(data) = function(name) _(name,
|
||||
methods([
|
||||
["get", function(i) data[i]],
|
||||
["append", function(n) clz_list(concat(data, [n]))]
|
||||
["append", function(n) clz_list([each data, n])]
|
||||
])
|
||||
);
|
||||
|
||||
|
@@ -7,7 +7,7 @@ This function deletes the mapping for the specified key from a [util/map/hashmap
|
||||
## Parameters
|
||||
|
||||
- `map` : The original map.
|
||||
- `key` : Adds the specified element to the specified set
|
||||
- `key` : The specified key.
|
||||
- `eq` : A equality function. If it's ignored, use `==` to compare elements.
|
||||
- `hash` : A hash function. If it's ignored, convert each element to a string and hash it.
|
||||
|
||||
|
@@ -1,13 +1,13 @@
|
||||
# hashmap_get
|
||||
|
||||
This function gets the value of the specified key from a [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html).
|
||||
This function gets the value of the specified key from a [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html). If the key doesn't exist, return `undef`.
|
||||
|
||||
**Since:** 3.0
|
||||
|
||||
## Parameters
|
||||
|
||||
- `map` : The original map.
|
||||
- `key` : Adds the specified element to the specified set
|
||||
- `key` : The specified key.
|
||||
- `eq` : A equality function. If it's ignored, use `==` to compare elements.
|
||||
- `hash` : A hash function. If it's ignored, convert each element to a string and hash it.
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# hashmap_len
|
||||
|
||||
This function puts a key/value to a [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html). It returns a new map containing the key/value.
|
||||
Returns the length of a [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html).
|
||||
|
||||
**Since:** 3.0
|
||||
|
||||
|
@@ -1,12 +1,16 @@
|
||||
# hashmap_put
|
||||
|
||||
This function returns the length of a [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html).
|
||||
Puts a key/value pair to a [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/lib3x-hashmap.html).
|
||||
|
||||
**Since:** 3.0
|
||||
|
||||
## Parameters
|
||||
|
||||
- `map` : The original map.
|
||||
- `key` : The specified key.
|
||||
- `value` : The specified value.
|
||||
- `eq` : A equality function. If it's ignored, use `==` to compare elements.
|
||||
- `hash` : A hash function. If it's ignored, convert each element to a string and hash it.
|
||||
|
||||
## Examples
|
||||
|
||||
|
@@ -35,4 +35,4 @@ This function models the mathematical set, backed by a hash table. You can use t
|
||||
s3 = hashset_del(s2, 2);
|
||||
assert(!hashset_has(s3, 2));
|
||||
|
||||
echo(hashset_elems(s3)); // a list contains 1, 3, 4, 5, 9
|
||||
assert(hashset_elems(s3) == [1, 3, 4, 5, 9]);
|
||||
|
@@ -14,5 +14,5 @@ Returns a list containing all elements in a [util/set/hashset](https://openhome.
|
||||
use <util/set/hashset_elems.scad>;
|
||||
|
||||
s = hashset([1, 2, 3, 4, 5]);
|
||||
echo(hashset_elems(s)); // a list contains 1, 2, 3, 4, 5
|
||||
assert(hashset_elems(s) == [1, 2, 3, 4, 5]);
|
||||
|
||||
|
@@ -14,7 +14,7 @@ Gets all points on the path of a spiral around a cylinder. Its `$fa`, `$fs` and
|
||||
## Examples
|
||||
|
||||
use <helix.scad>;
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
$fn = 12;
|
||||
|
||||
@@ -27,15 +27,17 @@ Gets all points on the path of a spiral around a cylinder. Its `$fa`, `$fs` and
|
||||
);
|
||||
|
||||
for(p = points) {
|
||||
translate(p) sphere(5);
|
||||
translate(p)
|
||||
sphere(5);
|
||||
}
|
||||
|
||||
hull_polyline3d(points, 2);
|
||||
polyline_join(points)
|
||||
sphere(1);
|
||||
|
||||

|
||||
|
||||
use <helix.scad>;
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
$fn = 12;
|
||||
|
||||
@@ -47,7 +49,8 @@ Gets all points on the path of a spiral around a cylinder. Its `$fa`, `$fs` and
|
||||
rt_dir = "CLK"
|
||||
);
|
||||
|
||||
hull_polyline3d(points, 2);
|
||||
polyline_join(points)
|
||||
sphere(1);
|
||||
|
||||
%cylinder(h = 100, r1 = 40, r2 = 20);
|
||||
|
||||
|
@@ -10,7 +10,10 @@ Hollows out a 2D object.
|
||||
|
||||
use <hollow_out.scad>;
|
||||
|
||||
hollow_out(shell_thickness = 1) circle(r = 3, $fn = 48);
|
||||
hollow_out(shell_thickness = 1) square([10, 5]);
|
||||
hollow_out(shell_thickness = 1)
|
||||
circle(r = 3, $fn = 48);
|
||||
|
||||
hollow_out(shell_thickness = 1)
|
||||
square([10, 5]);
|
||||
|
||||

|
||||
|
@@ -1,22 +0,0 @@
|
||||
# hull_polyline2d
|
||||
|
||||
Creates a 2D polyline from a list of `[x, y]` coordinates. As the name says, it uses the built-in hull operation for each pair of points (created by the `circle` module). It's slow. However, it can be used to create metallic effects for a small `$fn`, large `$fa` or `$fs`.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `points` : The list of `[x, y]` points of the polyline. The points are indexed from 0 to n-1.
|
||||
- `width` : The line width. Default to 1.
|
||||
- `$fa`, `$fs`, `$fn` : Check [the circle module](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#circle) for more details.
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline2d.scad>;
|
||||
|
||||
$fn = 4;
|
||||
|
||||
hull_polyline2d(
|
||||
points = [[1, 2], [-5, -4], [-5, 3], [5, 5]],
|
||||
width = 1
|
||||
);
|
||||
|
||||

|
@@ -1,45 +0,0 @@
|
||||
# hull_polyline3d
|
||||
|
||||
Creates a 3D polyline from a list of `[x, y, z]` coordinates. As the name says, it uses the built-in hull operation for each pair of points (created by the `sphere` module). It's slow. However, it can be used to create metallic effects for a small `$fn`, large `$fa` or `$fs`.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `points` : The list of `[x, y, z]` points of the polyline. The points are indexed from 0 to n-1.
|
||||
- `diameter` : The line diameter. Default to 1.
|
||||
- `$fa`, `$fs`, `$fn` : Check [the sphere module](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Primitive_Solids#sphere) for more details.
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline3d.scad>;
|
||||
|
||||
hull_polyline3d(
|
||||
points = [
|
||||
[1, 2, 3],
|
||||
[4, -5, -6],
|
||||
[-1, -3, -5],
|
||||
[0, 0, 0]
|
||||
],
|
||||
diameter = 1,
|
||||
$fn = 3
|
||||
);
|
||||
|
||||

|
||||
|
||||
use <hull_polyline3d.scad>;
|
||||
|
||||
r = 50;
|
||||
points = [
|
||||
for(a = [0:180])
|
||||
[
|
||||
r * cos(-90 + a) * cos(a),
|
||||
r * cos(-90 + a) * sin(a),
|
||||
r * sin(-90 + a)
|
||||
]
|
||||
];
|
||||
|
||||
for(i = [0:7]) {
|
||||
rotate(45 * i)
|
||||
hull_polyline3d(points, 2, $fn = 3);
|
||||
}
|
||||
|
||||

|
@@ -1,6 +1,6 @@
|
||||
# in_polyline
|
||||
|
||||
Checks wether a point is on a line.
|
||||
Checks whether a point is on a line.
|
||||
|
||||
**Since:** 1.3
|
||||
|
||||
@@ -20,10 +20,10 @@ Checks wether a point is on a line.
|
||||
[10, 10]
|
||||
];
|
||||
|
||||
echo(in_polyline(pts, [-2, -3])); // false
|
||||
echo(in_polyline(pts, [5, 0])); // true
|
||||
echo(in_polyline(pts, [10, 5])); // true
|
||||
echo(in_polyline(pts, [10, 15])); // false
|
||||
assert(!in_polyline(pts, [-2, -3]));
|
||||
assert(in_polyline(pts, [5, 0]));
|
||||
assert(in_polyline(pts, [10, 5]));
|
||||
assert(!in_polyline(pts, [10, 15]));
|
||||
|
||||
----
|
||||
|
||||
@@ -35,7 +35,7 @@ Checks wether a point is on a line.
|
||||
[20, 10, 10]
|
||||
];
|
||||
|
||||
echo(in_polyline(pts, [10, 0, 10])); // true
|
||||
echo(in_polyline(pts, [15, 0, 10])); // true
|
||||
echo(in_polyline(pts, [15, 1, 10])); // false
|
||||
echo(in_polyline(pts, [20, 11, 10])); // false
|
||||
assert(in_polyline(pts, [10, 0, 10]));
|
||||
assert(in_polyline(pts, [15, 0, 10]));
|
||||
assert(!in_polyline(pts, [15, 1, 10]));
|
||||
assert(!in_polyline(pts, [20, 11, 10]));
|
@@ -1,6 +1,6 @@
|
||||
# in_shape
|
||||
|
||||
Checks wether a point is inside a shape.
|
||||
Checks whether a point is inside a shape.
|
||||
|
||||
**Since:** 1.3
|
||||
|
||||
|
@@ -6,8 +6,8 @@ Linear interpolate the vector v1 to v2.
|
||||
|
||||
## Parameters
|
||||
|
||||
- `v1` : Minimum value of random number range. Default to 0.
|
||||
- `v2` : Maximum value of random number range. Default to 1.
|
||||
- `v1` : The vector v1.
|
||||
- `v2` : The vector v2.
|
||||
- `amt` : The amount of interpolation. Some value between 0.0 and 1.0.
|
||||
|
||||
## Examples
|
||||
|
@@ -11,7 +11,7 @@ When having uniform cross sections, you can use [sweep](https://openhome.cc/eGos
|
||||
|
||||
## Examples
|
||||
|
||||
use <shape_starburst.scad>;
|
||||
use <shape_star.scad>;
|
||||
use <shape_circle.scad>;
|
||||
use <ptf/ptf_rotate.scad>;
|
||||
use <loft.scad>;
|
||||
@@ -19,7 +19,7 @@ When having uniform cross sections, you can use [sweep](https://openhome.cc/eGos
|
||||
sects = [
|
||||
for(i = 10; i >= 4; i = i - 1)
|
||||
[
|
||||
for(p = shape_starburst(15, 12, i % 2 == 1 ? i : i - 1)) ptf_rotate([p[0], p[1], 5 * (i - 4)], i * 10)
|
||||
for(p = shape_star(15, 12, i % 2 == 1 ? i : i - 1)) ptf_rotate([p.x, p.y, 5 * (i - 4)], i * 10)
|
||||
]
|
||||
];
|
||||
loft(sects, slices = 3);
|
||||
@@ -28,16 +28,16 @@ When having uniform cross sections, you can use [sweep](https://openhome.cc/eGos
|
||||
difference() {
|
||||
loft(
|
||||
[
|
||||
[for(p = shape_circle(10, $fn = 3)) [p[0], p[1], 15]],
|
||||
[for(p = shape_circle(15, $fn = 24)) [p[0], p[1], 0]]
|
||||
[for(p = shape_circle(10, $fn = 3)) [p.x, p.y, 15]],
|
||||
[for(p = shape_circle(15, $fn = 24)) [p.x, p.y, 0]]
|
||||
],
|
||||
slices = 4
|
||||
);
|
||||
|
||||
loft(
|
||||
[
|
||||
[for(p = shape_circle(8, $fn = 3)) [p[0], p[1], 15.1]],
|
||||
[for(p = shape_circle(13, $fn = 24)) [p[0], p[1], -0.1]]
|
||||
[for(p = shape_circle(8, $fn = 3)) [p.x, p.y, 15.1]],
|
||||
[for(p = shape_circle(13, $fn = 24)) [p.x, p.y, -0.1]]
|
||||
],
|
||||
slices = 4
|
||||
);
|
||||
|
@@ -33,14 +33,11 @@
|
||||
[lsystem3-collections.scad](https://github.com/JustinSDK/dotSCAD/blob/master/examples/turtle/lsystem3_collection.scad) collects several L-system grammars. Here's one of them.
|
||||
|
||||
use <turtle/lsystem3.scad>;
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
for(line = hilbert_curve()) {
|
||||
hull_polyline3d(
|
||||
[line[0], line[1]],
|
||||
thickness = 0.5,
|
||||
$fn = 4
|
||||
);
|
||||
polyline_join([line[0], line[1]])
|
||||
sphere(.25, $fn = 4);
|
||||
}
|
||||
|
||||
function hilbert_curve(n = 3, angle = 90, leng = 1, heading = 0, start = [0, 0, 0]) =
|
||||
@@ -60,14 +57,11 @@
|
||||
// a stochastic L-system
|
||||
|
||||
use <turtle/lsystem3.scad>;
|
||||
use <hull_polyline3d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
for(line = vine()) {
|
||||
hull_polyline3d(
|
||||
[line[0], line[1]],
|
||||
thickness = 0.5,
|
||||
$fn = 4
|
||||
);
|
||||
polyline_join([line[0], line[1]])
|
||||
sphere(.25, $fn = 4);
|
||||
}
|
||||
|
||||
function vine(n = 3, angle = 18, leng = 1, heading = 0, start = [0, 0, 0]) =
|
||||
|
@@ -1,7 +1,5 @@
|
||||
# m_mirror
|
||||
|
||||
The dir changed since 2.0.
|
||||
|
||||
Generate a 4x4 transformation matrix which can pass into `multmatrix` to mirror the child element on a plane through the origin.
|
||||
|
||||
**Since:** 1.1
|
||||
@@ -18,8 +16,8 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to mirror
|
||||
cube([3, 2, 1]);
|
||||
|
||||
multmatrix(m_mirror([1, 1, 0]))
|
||||
rotate([0, 0, 10])
|
||||
cube([3, 2, 1]);
|
||||
rotate([0, 0, 10])
|
||||
cube([3, 2, 1]);
|
||||
|
||||

|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
# m_rotation
|
||||
|
||||
The dir changed since 2.0.
|
||||
|
||||
Generate a 4x4 transformation matrix which can pass into `multmatrix` to rotate the child element about the axis of the coordinate system or around an arbitrary axis.
|
||||
|
||||
**Since:** 1.1
|
||||
@@ -21,8 +19,8 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to rotate
|
||||
hull() {
|
||||
sphere(1);
|
||||
multmatrix(m_rotation(a))
|
||||
translate(point)
|
||||
sphere(1);
|
||||
translate(point)
|
||||
sphere(1);
|
||||
}
|
||||
|
||||

|
||||
@@ -34,14 +32,14 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to rotate
|
||||
hull() {
|
||||
sphere(1);
|
||||
translate(v)
|
||||
sphere(1);
|
||||
sphere(1);
|
||||
}
|
||||
|
||||
p = [10, 10, 0];
|
||||
for(i = [0:20:340]) {
|
||||
multmatrix(m_rotation(a = i, v = v))
|
||||
translate(p)
|
||||
sphere(1);
|
||||
translate(p)
|
||||
sphere(1);
|
||||
}
|
||||
|
||||

|
@@ -1,7 +1,5 @@
|
||||
# m_scaling
|
||||
|
||||
The dir changed since 2.0.
|
||||
|
||||
Generate a 4x4 transformation matrix which can pass into `multmatrix` to scale its child elements using the specified vector.
|
||||
|
||||
**Since:** 1.1
|
||||
@@ -16,8 +14,8 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to scale i
|
||||
|
||||
cube(10);
|
||||
translate([15, 0, 0])
|
||||
multmatrix(m_scaling([0.5, 1, 2]))
|
||||
cube(10);
|
||||
multmatrix(m_scaling([0.5, 1, 2]))
|
||||
cube(10);
|
||||
|
||||

|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
# m_shearing
|
||||
|
||||
The dir changed since 2.0.
|
||||
|
||||
Generate a 4x4 transformation matrix which can pass into `multmatrix` to shear all child elements along the X-axis, Y-axis, or Z-axis in 3D.
|
||||
|
||||
**Since:** 1.1
|
||||
@@ -20,10 +18,12 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to shear a
|
||||
multmatrix(m_shearing(sx = [1, 0]))
|
||||
cube(1);
|
||||
|
||||
translate([2, 0, 0]) multmatrix(m_shearing(sx = [0, 1]))
|
||||
translate([2, 0, 0])
|
||||
multmatrix(m_shearing(sx = [0, 1]))
|
||||
cube(1);
|
||||
|
||||
translate([4, 0, 0]) multmatrix(m_shearing(sx = [1, 1]))
|
||||
translate([4, 0, 0])
|
||||
multmatrix(m_shearing(sx = [1, 1]))
|
||||
cube(1);
|
||||
}
|
||||
|
||||
@@ -31,10 +31,12 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to shear a
|
||||
multmatrix(m_shearing(sy = [1, 0]))
|
||||
cube(1);
|
||||
|
||||
translate([2, 0, 0]) multmatrix(m_shearing(sy = [0, 1]))
|
||||
translate([2, 0, 0])
|
||||
multmatrix(m_shearing(sy = [0, 1]))
|
||||
cube(1);
|
||||
|
||||
translate([4, 0, 0]) multmatrix(m_shearing(sy = [1, 1]))
|
||||
translate([4, 0, 0])
|
||||
multmatrix(m_shearing(sy = [1, 1]))
|
||||
cube(1);
|
||||
}
|
||||
|
||||
@@ -42,10 +44,12 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to shear a
|
||||
multmatrix(m_shearing(sz = [1, 0]))
|
||||
cube(1);
|
||||
|
||||
translate([2, 0, 0]) multmatrix(m_shearing(sz = [0, 1]))
|
||||
translate([2, 0, 0])
|
||||
multmatrix(m_shearing(sz = [0, 1]))
|
||||
cube(1);
|
||||
|
||||
translate([4, 0, 0]) multmatrix(m_shearing(sz = [1, 1]))
|
||||
translate([4, 0, 0])
|
||||
multmatrix(m_shearing(sz = [1, 1]))
|
||||
cube(1);
|
||||
}
|
||||
|
||||
|
@@ -1,7 +1,5 @@
|
||||
# m_translation
|
||||
|
||||
The dir changed since 2.0.
|
||||
|
||||
Generate a 4x4 transformation matrix which can pass into `multmatrix` to translates (moves) its child elements along the specified vector.
|
||||
|
||||
**Since:** 1.1
|
||||
|
30
docs/lib3x-m_transpose.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# m_transpose
|
||||
|
||||
It transposes a matrix.
|
||||
|
||||
**Since:** 3.1
|
||||
|
||||
## Parameters
|
||||
|
||||
- `m` : A matrix.
|
||||
|
||||
## Examples
|
||||
|
||||
use <matrix/m_transpose.scad>;
|
||||
|
||||
original_m = [
|
||||
[1, 2, 3, 4],
|
||||
[5, 6, 7, 8],
|
||||
[9, 10, 11, 12]
|
||||
];
|
||||
|
||||
traget = [
|
||||
[1, 5, 9],
|
||||
[2, 6, 10],
|
||||
[3, 7, 11],
|
||||
[4, 8, 12]
|
||||
];
|
||||
|
||||
transposed = m_transpose(original_m);
|
||||
|
||||
assert(transposed == traget);
|
@@ -12,14 +12,19 @@ Given a 2D path, this function constructs a mid-point smoothed version by joinin
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <shape_taiwan.scad>;
|
||||
use <midpt_smooth.scad>;
|
||||
|
||||
taiwan = shape_taiwan(50);
|
||||
smoothed = midpt_smooth(taiwan, 20, true);
|
||||
|
||||
translate([0, 0, 0]) hull_polyline2d(taiwan, .25);
|
||||
#translate([10, 0, 0]) hull_polyline2d(smoothed, .25);
|
||||
translate([0, 0, 0])
|
||||
polyline_join(taiwan)
|
||||
circle(.125);
|
||||
|
||||
#translate([10, 0, 0])
|
||||
polyline_join(smoothed)
|
||||
circle(.125);
|
||||
|
||||

|
@@ -14,13 +14,14 @@ Creates a hamiltonian path from a maze. The path is the result of maze traversal
|
||||
## Examples
|
||||
|
||||
use <maze/mz_hamiltonian.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
rows = 5;
|
||||
columns = 10;
|
||||
|
||||
path = mz_hamiltonian(rows, columns, [0, 0]);
|
||||
hull_polyline2d(path, .5);
|
||||
polyline_join(path)
|
||||
circle(.25);
|
||||
|
||||

|
||||
|
||||
|
@@ -17,7 +17,7 @@ It's a helper for creating wall data from maze cells. You can transform wall poi
|
||||
|
||||
use <maze/mz_square_cells.scad>;
|
||||
use <maze/mz_hex_walls.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
rows = 10;
|
||||
columns = 12;
|
||||
@@ -28,7 +28,8 @@ It's a helper for creating wall data from maze cells. You can transform wall poi
|
||||
walls = mz_hex_walls(cells, rows, columns, cell_width);
|
||||
|
||||
for(wall = walls) {
|
||||
hull_polyline2d(wall, wall_thickness, $fn = 24);
|
||||
polyline_join(wall)
|
||||
circle(wall_thickness, $fn = 24);
|
||||
}
|
||||
|
||||

|
@@ -41,11 +41,9 @@ The cell data is seperated from views. You can use cell data to construct [diffe
|
||||
cells = mz_square_cells(rows, columns);
|
||||
|
||||
for(cell = cells) {
|
||||
x = cell[0];
|
||||
y = cell[1];
|
||||
type = cell[2];
|
||||
|
||||
translate([x, y] * cell_width) {
|
||||
translate([cell.x, cell.y] * cell_width) {
|
||||
if(type == TOP_WALL || type == TOP_RIGHT_WALL) {
|
||||
line2d([0, cell_width], [cell_width, cell_width], wall_thickness);
|
||||
}
|
||||
@@ -56,8 +54,8 @@ The cell data is seperated from views. You can use cell data to construct [diffe
|
||||
}
|
||||
}
|
||||
|
||||
line2d([0, 0], [cell_width * rows, 0], wall_thickness);
|
||||
line2d([0, 0], [0, cell_width * columns], wall_thickness);
|
||||
line2d([0, 0], [cell_width * columns, 0], wall_thickness);
|
||||
line2d([0, 0], [0, cell_width * rows], wall_thickness);
|
||||
|
||||

|
||||
|
||||
|
@@ -25,7 +25,7 @@ It's a helper for getting data from a square-maze cell.
|
||||
for(cell = cells) {
|
||||
x = mz_square_get(cell, "x");
|
||||
y = mz_square_get(cell, "y");
|
||||
type = mz_square_get(cell, "t");;
|
||||
type = mz_square_get(cell, "t");
|
||||
|
||||
translate([x, y] * cell_width) {
|
||||
if(type == "TOP_WALL" || type == "TOP_RIGHT_WALL") {
|
||||
@@ -38,7 +38,7 @@ It's a helper for getting data from a square-maze cell.
|
||||
}
|
||||
}
|
||||
|
||||
line2d([0, 0], [cell_width * rows, 0], wall_thickness);
|
||||
line2d([0, 0], [0, cell_width * columns], wall_thickness);
|
||||
line2d([0, 0], [cell_width * columns, 0], wall_thickness);
|
||||
line2d([0, 0], [0, cell_width * rows], wall_thickness);
|
||||
|
||||

|
@@ -68,12 +68,10 @@ It's a helper for initializing cell data of a maze.
|
||||
// Mask
|
||||
mask_width = cell_width + wall_thickness;
|
||||
translate([-wall_thickness / 2, -wall_thickness / 2])
|
||||
for(i = [0:rows - 1]) {
|
||||
for(j = [0:columns - 1]) {
|
||||
if(mask[i][j] == 0) {
|
||||
translate([cell_width * j, cell_width * (rows - i - 1)])
|
||||
square(mask_width);
|
||||
}
|
||||
for(i = [0:rows - 1], j = [0:columns - 1]) {
|
||||
if(mask[i][j] == 0) {
|
||||
translate([cell_width * j, cell_width * (rows - i - 1)])
|
||||
square(mask_width);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -25,7 +25,7 @@ The value of `type` is the wall type of the cell. It can be `0`, `1`, `2` or `3`
|
||||
## Examples
|
||||
|
||||
use <maze/mz_theta_cells.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
rows = 8;
|
||||
beginning_number = 8;
|
||||
@@ -42,29 +42,29 @@ The value of `type` is the wall type of the cell. It can be `0`, `1`, `2` or `3`
|
||||
maze = mz_theta_cells(rows, beginning_number);
|
||||
|
||||
// draw cell walls
|
||||
for(rows = maze) {
|
||||
for(cell = rows) {
|
||||
ri = cell[0];
|
||||
ci = cell[1];
|
||||
type = cell[2];
|
||||
thetaStep = 360 / len(maze[ri]);
|
||||
innerR = (ri + 1) * cell_width;
|
||||
outerR = (ri + 2) * cell_width;
|
||||
theta1 = thetaStep * ci;
|
||||
theta2 = thetaStep * (ci + 1);
|
||||
|
||||
innerVt1 = vt_from_angle(theta1, innerR);
|
||||
innerVt2 = vt_from_angle(theta2, innerR);
|
||||
outerVt2 = vt_from_angle(theta2, outerR);
|
||||
|
||||
if(type == INWARD_WALL || type == INWARD_CCW_WALL) {
|
||||
hull_polyline2d([innerVt1, innerVt2], width = wall_thickness);
|
||||
}
|
||||
for(rows = maze, cell = rows) {
|
||||
ri = cell[0];
|
||||
ci = cell[1];
|
||||
type = cell[2];
|
||||
thetaStep = 360 / len(maze[ri]);
|
||||
innerR = (ri + 1) * cell_width;
|
||||
outerR = (ri + 2) * cell_width;
|
||||
theta1 = thetaStep * ci;
|
||||
theta2 = thetaStep * (ci + 1);
|
||||
|
||||
innerVt1 = vt_from_angle(theta1, innerR);
|
||||
innerVt2 = vt_from_angle(theta2, innerR);
|
||||
outerVt2 = vt_from_angle(theta2, outerR);
|
||||
|
||||
if(type == INWARD_WALL || type == INWARD_CCW_WALL) {
|
||||
polyline_join([innerVt1, innerVt2])
|
||||
circle(wall_thickness / 2);
|
||||
}
|
||||
|
||||
if(type == CCW_WALL || type == INWARD_CCW_WALL) {
|
||||
hull_polyline2d([innerVt2, outerVt2], width = wall_thickness);
|
||||
}
|
||||
}
|
||||
if(type == CCW_WALL || type == INWARD_CCW_WALL) {
|
||||
polyline_join([innerVt2, outerVt2])
|
||||
circle(wall_thickness / 2);
|
||||
}
|
||||
}
|
||||
|
||||
// outmost walls
|
||||
@@ -73,7 +73,8 @@ The value of `type` is the wall type of the cell. It can be `0`, `1`, `2` or `3`
|
||||
for(theta = [0:thetaStep:360 - thetaStep]) {
|
||||
vt1 = vt_from_angle(theta, r);
|
||||
vt2 = vt_from_angle(theta + thetaStep, r);
|
||||
hull_polyline2d([vt1, vt2], width = wall_thickness);
|
||||
polyline_join([vt1, vt2])
|
||||
circle(wall_thickness / 2);
|
||||
}
|
||||
|
||||

|
@@ -13,7 +13,7 @@ It's a helper for getting data from a theta-maze cell.
|
||||
|
||||
use <maze/mz_theta_cells.scad>;
|
||||
use <maze/mz_theta_get.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
|
||||
rows = 8;
|
||||
beginning_number = 8;
|
||||
@@ -23,29 +23,29 @@ It's a helper for getting data from a theta-maze cell.
|
||||
function vt_from_angle(theta, r) = [r * cos(theta), r * sin(theta)];
|
||||
|
||||
maze = mz_theta_cells(rows, beginning_number);
|
||||
for(rows = maze) {
|
||||
for(cell = rows) {
|
||||
ri = mz_theta_get(cell, "r");
|
||||
ci = mz_theta_get(cell, "c");
|
||||
type = mz_theta_get(cell, "t");
|
||||
thetaStep = 360 / len(maze[ri]);
|
||||
innerR = (ri + 1) * cell_width;
|
||||
outerR = (ri + 2) * cell_width;
|
||||
theta1 = thetaStep * ci;
|
||||
theta2 = thetaStep * (ci + 1);
|
||||
|
||||
innerVt1 = vt_from_angle(theta1, innerR);
|
||||
innerVt2 = vt_from_angle(theta2, innerR);
|
||||
outerVt2 = vt_from_angle(theta2, outerR);
|
||||
|
||||
if(type == "INWARD_WALL" || type == "INWARD_CCW_WALL") {
|
||||
hull_polyline2d([innerVt1, innerVt2], width = wall_thickness);
|
||||
}
|
||||
for(rows = maze, cell = rows) {
|
||||
ri = mz_theta_get(cell, "r");
|
||||
ci = mz_theta_get(cell, "c");
|
||||
type = mz_theta_get(cell, "t");
|
||||
thetaStep = 360 / len(maze[ri]);
|
||||
innerR = (ri + 1) * cell_width;
|
||||
outerR = (ri + 2) * cell_width;
|
||||
theta1 = thetaStep * ci;
|
||||
theta2 = thetaStep * (ci + 1);
|
||||
|
||||
innerVt1 = vt_from_angle(theta1, innerR);
|
||||
innerVt2 = vt_from_angle(theta2, innerR);
|
||||
outerVt2 = vt_from_angle(theta2, outerR);
|
||||
|
||||
if(type == "INWARD_WALL" || type == "INWARD_CCW_WALL") {
|
||||
polyline_join([innerVt1, innerVt2])
|
||||
circle(wall_thickness / 2);
|
||||
}
|
||||
|
||||
if(type == "CCW_WALL" || type == "INWARD_CCW_WALL") {
|
||||
hull_polyline2d([innerVt2, outerVt2], width = wall_thickness);
|
||||
}
|
||||
}
|
||||
if(type == "CCW_WALL" || type == "INWARD_CCW_WALL") {
|
||||
polyline_join([innerVt2, outerVt2])
|
||||
circle(wall_thickness / 2);
|
||||
}
|
||||
}
|
||||
|
||||
thetaStep = 360 / len(maze[rows - 1]);
|
||||
@@ -53,7 +53,8 @@ It's a helper for getting data from a theta-maze cell.
|
||||
for(theta = [0:thetaStep:360 - thetaStep]) {
|
||||
vt1 = vt_from_angle(theta, r);
|
||||
vt2 = vt_from_angle(theta + thetaStep, r);
|
||||
hull_polyline2d([vt1, vt2], width = wall_thickness);
|
||||
polyline_join([vt1, vt2])
|
||||
circle(wall_thickness / 2);
|
||||
}
|
||||
|
||||

|
@@ -26,9 +26,8 @@ It's an implementation of [Worley noise](https://en.wikipedia.org/wiki/Worley_no
|
||||
|
||||
feature_points = [for(pt_angle = pts_angles) pt_angle[0] + half_size];
|
||||
noised = [
|
||||
for(y = [0:size[1] - 1])
|
||||
for(x = [0:size[0] - 1])
|
||||
[x, y, nz_cell(feature_points, [x, y])]
|
||||
for(y = [0:size.y - 1], x = [0:size.x - 1])
|
||||
[x, y, nz_cell(feature_points, [x, y])]
|
||||
];
|
||||
|
||||
max_dist = max([for(n = noised) n[2]]);
|
||||
|
@@ -11,13 +11,12 @@ Returns the 1D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) value
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <util/rand.scad>;
|
||||
use <noise/nz_perlin1.scad>;
|
||||
|
||||
seed = rand();
|
||||
hull_polyline2d(
|
||||
[for(x = [0:.1:10]) [x, nz_perlin1(x, seed)]], width = .1
|
||||
);
|
||||
seed = rand(0, 255);
|
||||
polyline_join([for(x = [0:.1:10]) [x, nz_perlin1(x, seed)]])
|
||||
circle(.05);
|
||||
|
||||

|
@@ -11,13 +11,14 @@ Returns 1D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) values at
|
||||
|
||||
## Examples
|
||||
|
||||
use <hull_polyline2d.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <noise/nz_perlin1s.scad>;
|
||||
|
||||
xs = [for(x = [0:.1:10]) x];
|
||||
ys = nz_perlin1s(xs);
|
||||
points = [for(i = [0:len(xs) - 1]) [xs[i], ys[i]]];
|
||||
|
||||
hull_polyline2d(points, width = .1);
|
||||
polyline_join(points)
|
||||
circle(.05);
|
||||
|
||||

|
@@ -13,8 +13,8 @@ Returns the 2D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) value
|
||||
## Examples
|
||||
|
||||
use <util/rand.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
use <function_grapher.scad>;
|
||||
use <polyline_join.scad>;
|
||||
use <surface/sf_thicken.scad>;
|
||||
use <noise/nz_perlin2.scad>;
|
||||
use <contours.scad>;
|
||||
|
||||
@@ -27,11 +27,12 @@ Returns the 2D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) value
|
||||
]
|
||||
];
|
||||
|
||||
function_grapher(points, 1);
|
||||
sf_thicken(points, .1);
|
||||
|
||||
translate([11, 0])
|
||||
for(isoline = contours(points, 0)) {
|
||||
hull_polyline2d(isoline, width = .1);
|
||||
}
|
||||
polyline_join(isoline)
|
||||
circle(.05);
|
||||
}
|
||||
|
||||

|
@@ -12,10 +12,7 @@ Returns 2D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) values at
|
||||
## Examples
|
||||
|
||||
use <util/rand.scad>;
|
||||
use <hull_polyline2d.scad>;
|
||||
use <function_grapher.scad>;
|
||||
use <noise/nz_perlin2s.scad>;
|
||||
use <contours.scad>;
|
||||
|
||||
seed = rand(0, 255);
|
||||
|
||||
|
@@ -18,15 +18,13 @@ Returns the 3D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) value
|
||||
|
||||
seed = rand(0, 255);
|
||||
noised = [
|
||||
for(z = [0:.2:5])
|
||||
for(y = [0:.2:5])
|
||||
for(x = [0:.2:5])
|
||||
[x, y, z, nz_perlin3(x, y, z, seed)]
|
||||
for(z = [0:.2:5], y = [0:.2:5], x = [0:.2:5])
|
||||
[x, y, z, nz_perlin3(x, y, z, seed)]
|
||||
];
|
||||
|
||||
for(nz = noised) {
|
||||
if(nz[3] > 0.2) {
|
||||
translate([nz[0], nz[1], nz[2]])
|
||||
translate([nz.x, nz.y, nz.z])
|
||||
cube(.2);
|
||||
}
|
||||
}
|
||||
|
@@ -27,11 +27,11 @@ Returns 3D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) values at
|
||||
|
||||
points_with_h = [
|
||||
for(ri = [0:len(points) - 1])
|
||||
let(ns = nz_perlin2s(points[ri], seed))
|
||||
[
|
||||
for(ci = [0:len(ns) - 1])
|
||||
[points[ri][ci][0], points[ri][ci][1], ns[ci] + 1]
|
||||
]
|
||||
let(ns = nz_perlin2s(points[ri], seed))
|
||||
[
|
||||
for(ci = [0:len(ns) - 1])
|
||||
[points[ri][ci][0], points[ri][ci][1], ns[ci] + 1]
|
||||
]
|
||||
];
|
||||
|
||||
h_scale = 1.5;
|
||||
@@ -39,7 +39,7 @@ Returns 3D [Perlin noise](https://en.wikipedia.org/wiki/Perlin_noise) values at
|
||||
for(i = [0:len(row) - 1]) {
|
||||
p = row[i];
|
||||
pts = [
|
||||
for(z = [0:.2:p[2] * h_scale]) [p[0], p[1], z]
|
||||
for(z = [0:.2:p[2] * h_scale]) [p.x, p.y, z]
|
||||
];
|
||||
noise = nz_perlin3s(pts, seed);
|
||||
for(j = [0:len(pts) - 1]) {
|
||||
|
@@ -27,12 +27,11 @@ It divides the space into grids. The nucleus of each cell is randomly placed in
|
||||
seed = 51;
|
||||
|
||||
points = [
|
||||
for(y = [0:size[1] - 1])
|
||||
for(x = [0:size[0] - 1])
|
||||
[x, y]
|
||||
for(y = [0:size.y - 1], x = [0:size.x - 1])
|
||||
[x, y]
|
||||
];
|
||||
|
||||
cells = [for(p = points) nz_worley2(p[0], p[1], seed, grid_w, dist)];
|
||||
cells = [for(p = points) nz_worley2(p.x, p.y, seed, grid_w, dist)];
|
||||
|
||||
max_dist = max([for(c = cells) c[2]]);
|
||||
for(i = [0:len(cells) - 1]) {
|
||||
@@ -43,7 +42,7 @@ It divides the space into grids. The nucleus of each cell is randomly placed in
|
||||
square(1);
|
||||
}
|
||||
|
||||
cells_pts = dedup([for(c = cells) [c[0], c[1]]]);
|
||||
cells_pts = dedup([for(c = cells) [c.x, c.y]]);
|
||||
for(p = cells_pts) {
|
||||
translate(p)
|
||||
linear_extrude(max_dist)
|
||||
|
@@ -25,9 +25,8 @@ It divides the space into grids. The nucleus of each cell is randomly placed in
|
||||
seed = 51;
|
||||
|
||||
points = [
|
||||
for(y = [0:size[1] - 1])
|
||||
for(x = [0:size[0] - 1])
|
||||
[x, y]
|
||||
for(y = [0:size.y - 1], x = [0:size.x - 1])
|
||||
[x, y]
|
||||
];
|
||||
|
||||
cells = nz_worley2s(points, seed, grid_w, dist);
|
||||
|