1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-09-19 19:11:35 +02:00

713 Commits
v3.1 ... v3.2.1

Author SHA1 Message Date
Justin Lin
3bb2111e2f ship 3.2.1 2022-04-06 17:50:07 +08:00
Justin Lin
d0474ed757 update doc 2022-04-06 17:44:11 +08:00
Justin Lin
adf07c5da8 format 2022-04-06 17:02:32 +08:00
Justin Lin
0b23e5666a Szudzik function 2022-04-06 15:56:28 +08:00
Justin Lin
f5c4320d5e Szudzik's function 2022-04-06 15:40:41 +08:00
Justin Lin
eeaa9b3b2f Horner's method 2022-04-06 14:27:57 +08:00
Justin Lin
029ddc4150 format 2022-04-06 12:11:38 +08:00
Justin Lin
c810e30003 refactor: rows, columns is not necessary 2022-04-05 22:44:44 +08:00
Justin Lin
1225d4bf47 rename 2022-04-05 22:42:38 +08:00
Justin Lin
aec1ec38d1 add maze_city_taiwan 2022-04-05 18:30:02 +08:00
Justin Lin
b9e77be7e7 move 2022-04-05 18:10:12 +08:00
Justin Lin
0468ecae77 format 2022-04-05 18:08:40 +08:00
Justin Lin
57ec3f46ef del 2022-04-05 11:52:37 +08:00
Justin Lin
84301af250 use rands_sphere 2022-04-05 11:52:35 +08:00
Justin Lin
617139d720 update note 2022-04-05 11:45:36 +08:00
Justin Lin
3d7c2c6f85 move 2022-04-05 11:44:16 +08:00
Justin Lin
21d5638e94 add rands_sphere, rands_disk 2022-04-05 11:40:16 +08:00
Justin Lin
25b61d8ded return [] if no intersection 2022-04-05 11:37:43 +08:00
Justin Lin
6d4f7661ec update example 2022-04-04 21:38:36 +08:00
Justin Lin
c981127471 remove sort 2022-04-04 21:38:07 +08:00
Justin Lin
7c40e28e64 det == 0 is never error 2022-04-04 21:27:11 +08:00
Justin Lin
38ce75b708 reverse if necessary 2022-04-04 21:00:06 +08:00
Justin Lin
d2a936a5a3 don't sort 2022-04-04 20:47:48 +08:00
Justin Lin
c3425143c3 refactor/format 2022-04-04 18:58:32 +08:00
Justin Lin
556fd1ed28 update doc 2022-04-04 16:39:28 +08:00
Justin Lin
7421fa97c4 update doc 2022-04-04 16:37:37 +08:00
Justin Lin
d90b0c20fc update doc 2022-04-04 16:31:44 +08:00
Justin Lin
438e9cfd93 refactor: extract lines 2022-04-04 15:35:21 +08:00
Justin Lin
f76fd33054 format 2022-04-04 14:36:41 +08:00
Justin Lin
820cf7de83 format 2022-04-04 10:58:08 +08:00
Justin Lin
a3b9e42098 use vector sub 2022-04-04 10:57:55 +08:00
Justin Lin
b3289dd55b use vector substractiokn 2022-04-04 10:55:36 +08:00
Justin Lin
659654f533 update doc 2022-04-04 10:41:56 +08:00
Justin Lin
770adea91f fix doc error 2022-04-04 10:40:58 +08:00
Justin Lin
dcacb8a267 refactor: extract dist cond 2022-04-03 14:30:25 +08:00
Justin Lin
047731d7d6 refactor: extract dist cond 2022-04-03 14:22:59 +08:00
Justin Lin
8ce96f9128 format 2022-04-03 14:16:17 +08:00
Justin Lin
fb4a626707 format 2022-04-03 13:08:42 +08:00
Justin Lin
336648434c format 2022-04-03 11:58:46 +08:00
Justin Lin
b8e52677b3 refactor: cal px, py directly 2022-04-01 22:15:24 +08:00
Justin Lin
4e0078f25c change params 2022-04-01 17:11:29 +08:00
Justin Lin
356966b8f6 format 2022-04-01 13:58:01 +08:00
Justin Lin
bb9c630e20 format 2022-04-01 13:50:17 +08:00
Justin Lin
98f9d8ea57 format 2022-04-01 13:44:49 +08:00
Justin Lin
197c542c5e del echo 2022-04-01 13:40:39 +08:00
Justin Lin
e900aefcce merge scale 2022-04-01 13:38:50 +08:00
Justin Lin
2a461a62b0 merge z 2022-04-01 13:34:43 +08:00
Justin Lin
2601d8425c format 2022-04-01 13:32:26 +08:00
Justin Lin
a0d07ea78f fix module name 2022-04-01 13:30:15 +08:00
Justin Lin
3a4b1224e6 refactor: use each 2022-04-01 13:27:56 +08:00
Justin Lin
48315257b1 format 2022-04-01 13:25:32 +08:00
Justin Lin
62e129614f refactor: when leng 2, swap if necessary 2022-04-01 12:52:57 +08:00
Justin Lin
1fb61fc3ec refactor: use built-in search 2022-04-01 09:52:32 +08:00
Justin Lin
7889c5608f refactor: use search if eq undef 2022-04-01 09:07:41 +08:00
Justin Lin
d16d419463 roll back 2022-04-01 08:56:40 +08:00
Justin Lin
d4c4a78d98 fix param name error 2022-04-01 08:18:14 +08:00
Justin Lin
fafd073840 find_index: test support elem 2022-04-01 08:15:45 +08:00
Justin Lin
f8f91df05a add comment 2022-03-31 20:25:52 +08:00
Justin Lin
896e0bbd2e support $fn 2022-03-31 20:24:52 +08:00
Justin Lin
d4fc1279dd fix type error 2022-03-31 16:51:02 +08:00
Justin Lin
8715bcc927 add maze3d 2022-03-31 10:20:29 +08:00
Justin Lin
3a5cd29732 refactor: built-in search 2022-03-31 08:21:34 +08:00
Justin Lin
d5d809c70d refactor: built-in search 2022-03-31 07:44:05 +08:00
Justin Lin
aa082712df format 2022-03-30 21:44:37 +08:00
Justin Lin
da03b782ed refactor: merge for 2022-03-30 21:44:14 +08:00
Justin Lin
280332fb8f refactor: use norm 2022-03-30 21:40:58 +08:00
Justin Lin
aa0c8e1cd7 refactor: use dv 2022-03-30 21:34:01 +08:00
Justin Lin
0af33f4008 use m_transpose 2022-03-30 21:29:40 +08:00
Justin Lin
a65a8e60cb fix syntax error 2022-03-30 21:28:58 +08:00
Justin Lin
950e929edb refactor: the same as m_transpose 2022-03-30 21:24:23 +08:00
Justin Lin
032db93442 fix missing variable 2022-03-30 21:22:51 +08:00
Justin Lin
0e3a4d4ccd refactor: reuse p 2022-03-30 21:15:21 +08:00
Justin Lin
379b0c3614 refactor: use slice 2022-03-30 21:11:59 +08:00
Justin Lin
76afd424e3 refactor: use find_index 2022-03-30 20:50:36 +08:00
Justin Lin
1188fe9bcc format 2022-03-30 17:26:55 +08:00
Justin Lin
8e5255fdc9 refactor: naming value 2022-03-30 17:02:17 +08:00
Justin Lin
9f189e1124 refactor: format 2022-03-30 16:58:54 +08:00
Justin Lin
22ec55cfac refactor: look_at or not 2022-03-30 14:37:00 +08:00
Justin Lin
ba5b184d16 format 2022-03-30 09:39:11 +08:00
Justin Lin
3e1044787f add convexity 2022-03-30 09:36:02 +08:00
Justin Lin
96c9cfc0c4 fix rotation bug 2022-03-30 09:17:27 +08:00
Justin Lin
af87c89ecc refactor: start from unit sphere 2022-03-28 17:11:52 +08:00
Justin Lin
1c893c3fc7 update note 2022-03-28 17:00:14 +08:00
Justin Lin
0430baeaa9 refactor: start from unit sphere 2022-03-28 16:58:14 +08:00
Justin Lin
cd2b3bf379 redefine period 2022-03-28 16:45:58 +08:00
Justin Lin
91dff32e23 update doc 2022-03-28 15:39:58 +08:00
Justin Lin
da2ba88798 add mz_cube 2022-03-28 11:39:55 +08:00
Justin Lin
aa60b6f570 change seed 2022-03-28 10:08:49 +08:00
Justin Lin
c1d191dc97 update note 2022-03-27 12:24:54 +08:00
Justin Lin
9f3ecd0b3c refactor: use new maze functions/modules 2022-03-27 12:24:34 +08:00
Justin Lin
15478290e1 rename 2022-03-27 12:13:28 +08:00
Justin Lin
4c68946b3f refactor: use mz_square 2022-03-27 12:04:53 +08:00
Justin Lin
a1a306995f refactor: two dim cells 2022-03-27 11:59:00 +08:00
Justin Lin
53ac475bbf add mz_theta 2022-03-27 11:52:23 +08:00
Justin Lin
5f329649b6 refactor: two dim cells 2022-03-27 11:51:36 +08:00
Justin Lin
1072876ac7 refactor: two dim cells 2022-03-27 11:49:03 +08:00
Justin Lin
a5408736e5 refactor: two dim maze 2022-03-27 11:39:52 +08:00
Justin Lin
f34bfe1d90 refactor: clean code 2022-03-27 11:36:09 +08:00
Justin Lin
3f7478710f add mz_square 2022-03-27 11:34:18 +08:00
Justin Lin
5595170b09 update comment 2022-03-26 16:36:00 +08:00
Justin Lin
fdf879dbae refactor: reuse dir_vs 2022-03-25 15:53:20 +08:00
Justin Lin
a4e8194938 refactor: del search 2022-03-25 15:21:40 +08:00
Justin Lin
193ff6f531 refactor 2022-03-25 15:21:09 +08:00
Justin Lin
6fac123aee refactor 2022-03-25 11:32:55 +08:00
Justin Lin
d2f961494b refactor: built-in sign 2022-03-25 10:39:52 +08:00
Justin Lin
cadbdc826d refactor 2022-03-25 10:37:18 +08:00
Justin Lin
73c3e2d54c refactor 2022-03-25 10:33:25 +08:00
Justin Lin
6292c8989a refactor: conditional value 2022-03-24 22:30:12 +08:00
Justin Lin
438e7752ac refactor: border params are flexible 2022-03-24 14:23:46 +08:00
Justin Lin
6247979899 refactor: check border automatically 2022-03-24 14:11:18 +08:00
Justin Lin
bebf3bfc53 refactor: accept cells 2022-03-24 14:01:05 +08:00
Justin Lin
00680fe1fc wrapping default to false 2022-03-24 09:37:55 +08:00
Justin Lin
3f8fc98145 support wrapping 2022-03-24 09:37:35 +08:00
Justin Lin
8326dcc38f refactor 2022-03-23 21:00:42 +08:00
Justin Lin
5d39610f11 refactor: use % 2022-03-23 20:46:14 +08:00
Justin Lin
19f5f66697 refactor: use % 2022-03-23 20:37:57 +08:00
Justin Lin
535d64a562 refactor: clean dep 2022-03-23 20:27:14 +08:00
Justin Lin
66c0b70417 refactor: use tf matrix 2022-03-23 17:53:42 +08:00
Justin Lin
6a9da8be00 refactor: vector addition 2022-03-22 15:15:02 +08:00
Justin Lin
5dd6d0abd5 refactor 2022-03-22 15:12:28 +08:00
Justin Lin
f38d7a784b refactor: use rands directly 2022-03-22 15:11:22 +08:00
Justin Lin
cded66d2c4 refactor: 9-nearest-neighbor 2022-03-22 15:06:47 +08:00
Justin Lin
6229ab6d8c refactor: 9-nearest-neighbor 2022-03-22 15:04:38 +08:00
Justin Lin
d2a9b4be93 refactor: search is faster 2022-03-22 07:59:54 +08:00
Justin Lin
d38c3b91fc refactor: search is faster 2022-03-21 20:28:19 +08:00
Justin Lin
62da7cebdc refactor: find min directly 2022-03-21 18:44:20 +08:00
Justin Lin
07ee15da1c refactor 2022-03-21 17:43:16 +08:00
Justin Lin
d609292ad2 refactor: rename 2022-03-21 15:39:14 +08:00
Justin Lin
cf1d5deaa9 refactor: rename 2022-03-21 15:34:44 +08:00
Justin Lin
71815a2cdc reuse calculated weights 2022-03-21 15:26:28 +08:00
Justin Lin
7e66869bca refactor: rename 2022-03-21 14:59:05 +08:00
Justin Lin
a9b40f133b refactor: no undef 2022-03-21 14:55:38 +08:00
Justin Lin
a0d4d732a7 rename 2022-03-21 13:42:30 +08:00
Justin Lin
7c613930d5 rename 2022-03-21 13:39:43 +08:00
Justin Lin
b939634f8b refactor: process wf directly 2022-03-21 13:36:35 +08:00
Justin Lin
f3b3029d01 refactor: return coord directly 2022-03-21 11:37:02 +08:00
Justin Lin
fdc8e2f29a update featured img 2022-03-21 10:25:47 +08:00
Justin Lin
d9bc2e29ea rename 2022-03-21 09:49:16 +08:00
Justin Lin
b67f4bf200 avoid path loop 2022-03-21 09:23:03 +08:00
Justin Lin
5825205a4f del i = 0 2022-03-21 09:20:26 +08:00
Justin Lin
5b85e635d2 use len(not_collapsed_coords) == 0 to stop 2022-03-21 09:06:14 +08:00
Justin Lin
cb0a4bed9f check from notCollaspedCoords 2022-03-20 22:10:04 +08:00
Justin Lin
7926667772 find notCollaspedCoords from notCollaspedCoords 2022-03-20 21:59:05 +08:00
Justin Lin
bb4700ba66 random start collasped_propagated 2022-03-20 21:43:50 +08:00
Justin Lin
11b39945df refactor: cache rx 2022-03-20 18:46:08 +08:00
Justin Lin
03563afb6f refactor: clean variables 2022-03-20 18:10:43 +08:00
Justin Lin
6f13757cbc refactor: replace states directly 2022-03-20 18:03:18 +08:00
Justin Lin
27190008bf refactor: replaced by compatible_nbr_tiles 2022-03-20 17:55:23 +08:00
Justin Lin
6f9660a67d refactor: just test threshold < state_weight[1] 2022-03-20 12:47:24 +08:00
Justin Lin
f0bc7e5dc2 refactor: tail recursion 2022-03-20 12:18:38 +08:00
Justin Lin
8c57db2e06 refactor 2022-03-19 23:31:02 +08:00
Justin Lin
05abb19126 default wall_thickness 1.6 2022-03-19 14:59:34 +08:00
Justin Lin
ad064532e5 always with bottom 2022-03-19 14:47:10 +08:00
Justin Lin
0ed3e296ea diff levels 2022-03-19 14:23:53 +08:00
Justin Lin
8158938c13 rename 2022-03-19 11:15:01 +08:00
Justin Lin
af521dd53f add with_bottom 2022-03-19 11:11:29 +08:00
Justin Lin
8b77eba322 add linear_extrude(wall_thickness) 2022-03-19 10:40:43 +08:00
Justin Lin
bc96e0ebd5 add maze_tai_chi 2022-03-19 10:39:53 +08:00
Justin Lin
679b0d0fc2 fix end condition 2022-03-18 19:31:48 +08:00
Justin Lin
39c1c1a9db avoid recursion limit 2022-03-18 18:22:31 +08:00
Justin Lin
f97366ccdf refactor 2022-03-18 16:19:27 +08:00
Justin Lin
3d24874d6d refactor 2022-03-18 15:54:58 +08:00
Justin Lin
7d1cbb9460 refactor 2022-03-18 14:34:27 +08:00
Justin Lin
2cd56758eb refactor 2022-03-18 13:08:33 +08:00
Justin Lin
120b7ea2c7 update note 2022-03-18 12:02:02 +08:00
Justin Lin
e9dd4418d1 refactor 2022-03-18 12:01:42 +08:00
Justin Lin
5c547351db don't care the last one 2022-03-18 09:24:42 +08:00
Justin Lin
7744b4e79c avoid repeating computation 2022-03-18 09:20:44 +08:00
Justin Lin
18991671f8 add count 2022-03-18 08:07:46 +08:00
Justin Lin
2a7c38915b count path leng 2022-03-18 07:11:00 +08:00
Justin Lin
a7ab17c149 refactor 2022-03-17 21:05:29 +08:00
Justin Lin
1d1479b531 sorting is not necessary 2022-03-17 20:26:06 +08:00
Justin Lin
1184258336 update note 2022-03-17 18:07:06 +08:00
Justin Lin
da5cd8a250 performanced improved 2022-03-17 18:04:20 +08:00
Justin Lin
3e110a045b format 2022-03-17 17:03:20 +08:00
Justin Lin
637dcf0840 refactor 2022-03-17 16:39:12 +08:00
Justin Lin
4a5c576630 refactor 2022-03-17 16:28:04 +08:00
Justin Lin
4b24c81eeb support mask 2022-03-17 16:21:46 +08:00
Justin Lin
06a785bfb1 support init_cells param 2022-03-17 16:21:31 +08:00
Justin Lin
22fdb8c2e5 update doc 2022-03-17 08:51:26 +08:00
Justin Lin
045acaa3ac update doc 2022-03-17 08:45:26 +08:00
Justin Lin
d7a6bb35ac refactor 2022-03-16 13:36:59 +08:00
Justin Lin
43d338eaaf performance improved 2022-03-16 11:46:04 +08:00
Justin Lin
1723ba3abe refactor 2022-03-16 09:46:31 +08:00
Justin Lin
2dc729d860 refactor 2022-03-16 09:35:01 +08:00
Justin Lin
68b13fc330 refactor 2022-03-16 09:22:17 +08:00
Justin Lin
f9274fa745 update note 2022-03-16 09:16:15 +08:00
Justin Lin
3dc36af58b add mz_hexwalls 2022-03-16 09:15:45 +08:00
Justin Lin
c8efde6258 fix rc error 2022-03-16 09:15:36 +08:00
Justin Lin
deb875b147 fix rc error 2022-03-16 09:15:25 +08:00
Justin Lin
9a1ac9a363 fix idx error 2022-03-16 09:15:04 +08:00
Justin Lin
0280293192 add mz_squarewalls 2022-03-16 08:25:01 +08:00
Justin Lin
aa70a75fa2 refactor 2022-03-16 08:13:29 +08:00
Justin Lin
6459cc582e refactor 2022-03-16 08:03:00 +08:00
Justin Lin
a93739474b refactor 2022-03-16 07:59:41 +08:00
Justin Lin
cb0e361671 refactor 2022-03-15 21:45:11 +08:00
Justin Lin
f5e403bbf0 refactor 2022-03-15 20:49:29 +08:00
Justin Lin
65116cbc78 refactor 2022-03-15 20:43:21 +08:00
Justin Lin
ac9368e74d update doc 2022-03-15 20:39:34 +08:00
Justin Lin
61ca95d3a1 update doc 2022-03-15 20:36:52 +08:00
Justin Lin
b5063e12bf refactor 2022-03-15 18:35:18 +08:00
Justin Lin
3357bd4e84 support mask 2022-03-15 18:02:55 +08:00
Justin Lin
2e135ef9ae update note 2022-03-15 13:43:31 +08:00
Justin Lin
9585c3a75a move 2022-03-15 13:42:50 +08:00
Justin Lin
3eed784234 add helix_lampshade 2022-03-15 07:54:03 +08:00
Justin Lin
d2ad4ff388 update example 2022-03-14 17:12:04 +08:00
Justin Lin
7cfc2f21dd update note 2022-03-14 08:42:09 +08:00
Justin Lin
d6f7219eb6 refactor 2022-03-14 08:41:24 +08:00
Justin Lin
8b90e319b3 fix cond 2022-03-12 23:01:37 +08:00
Justin Lin
1a99069057 refactor 2022-03-12 22:39:46 +08:00
Justin Lin
b89a800022 refactor 2022-03-12 22:30:10 +08:00
Justin Lin
951ed2daf2 refactor 2022-03-12 22:28:38 +08:00
Justin Lin
e048056057 refactor 2022-03-12 22:14:04 +08:00
Justin Lin
2f7aea6147 refactor 2022-03-12 22:08:36 +08:00
Justin Lin
57914a8245 refactor 2022-03-12 18:31:09 +08:00
Justin Lin
987bc3be5b refactor 2022-03-12 18:24:00 +08:00
Justin Lin
3cb77f3a7a refactor 2022-03-12 17:52:05 +08:00
Justin Lin
ed01eebf16 refactor 2022-03-12 16:30:01 +08:00
Justin Lin
6df459370e remove sum 2022-03-12 16:25:14 +08:00
Justin Lin
14b15a2b1c refactor 2022-03-12 16:25:05 +08:00
Justin Lin
4eb10d2b73 refactor 2022-03-12 16:23:02 +08:00
Justin Lin
b9d3cc8530 refactor 2022-03-12 16:22:55 +08:00
Justin Lin
d2b61f1c60 refactor 2022-03-12 16:22:45 +08:00
Justin Lin
ccb16cc4f7 refactor 2022-03-12 16:22:38 +08:00
Justin Lin
95edbbee76 refactor 2022-03-12 11:48:03 +08:00
Justin Lin
79f9a76087 refactor 2022-03-12 11:35:18 +08:00
Justin Lin
e5aff6782d refactor 2022-03-12 09:37:57 +08:00
Justin Lin
52b5a26006 refactor 2022-03-12 09:19:46 +08:00
Justin Lin
da4342441f refactor 2022-03-12 08:37:38 +08:00
Justin Lin
c76766f5b4 refactor 2022-03-11 23:01:34 +08:00
Justin Lin
8a528e2e2b refactor 2022-03-11 22:18:26 +08:00
Justin Lin
37b4855793 refactor 2022-03-11 21:10:47 +08:00
Justin Lin
d60b35dd0d refactor 2022-03-11 21:08:40 +08:00
Justin Lin
78f6acdabf update test 2022-03-11 21:03:57 +08:00
Justin Lin
84e5fb4c7b add test 2022-03-11 20:54:49 +08:00
Justin Lin
b07b1b1f3d refactor 2022-03-11 15:36:56 +08:00
Justin Lin
a38fd21f43 refactor 2022-03-11 15:31:25 +08:00
Justin Lin
32f44ec9c1 refactor 2022-03-11 15:29:15 +08:00
Justin Lin
ffbb7c5db4 add test 2022-03-11 15:29:11 +08:00
Justin Lin
21c00b52d3 refactor 2022-03-11 15:19:44 +08:00
Justin Lin
88a970b2ba add test 2022-03-11 15:10:51 +08:00
Justin Lin
fbca4bd868 refactor 2022-03-11 15:08:49 +08:00
Justin Lin
5f400c124d refactor 2022-03-11 12:07:31 +08:00
Justin Lin
2b3fc8f80e refactor 2022-03-11 08:56:42 +08:00
Justin Lin
62f6c4caa5 refactor 2022-03-11 08:24:24 +08:00
Justin Lin
0ce5d6e1da refactor 2022-03-10 21:57:21 +08:00
Justin Lin
63ddbd3104 refactor 2022-03-10 21:41:06 +08:00
Justin Lin
2b2d4dbefa refactor 2022-03-10 20:43:24 +08:00
Justin Lin
642242b204 refactor 2022-03-10 20:40:10 +08:00
Justin Lin
920509c3f1 add test 2022-03-10 20:40:06 +08:00
Justin Lin
5b04d11ac8 refactor 2022-03-10 20:27:14 +08:00
Justin Lin
fa63d1eec6 refactor 2022-03-10 20:25:27 +08:00
Justin Lin
9def71f194 add tests 2022-03-10 20:24:06 +08:00
Justin Lin
58f26d8e0f refactor 2022-03-10 20:24:01 +08:00
Justin Lin
20242f5d51 refactor 2022-03-10 20:19:57 +08:00
Justin Lin
84c5ea2d91 refactor 2022-03-10 20:18:32 +08:00
Justin Lin
2f3bf9c309 add test 2022-03-10 20:18:13 +08:00
Justin Lin
8f6c8f340a refactor 2022-03-10 20:16:40 +08:00
Justin Lin
e36fd9bd46 refactor 2022-03-10 20:14:13 +08:00
Justin Lin
2687844621 add test 2022-03-10 20:13:12 +08:00
Justin Lin
7ab33ba03c del 2022-03-10 20:13:06 +08:00
Justin Lin
738ca61cab update docs 2022-03-09 10:32:44 +08:00
Justin Lin
dd76edf17f move 2022-03-08 09:33:41 +08:00
Justin Lin
ff89443ff2 update doc 2022-03-08 09:33:35 +08:00
Justin Lin
adf3ea365f refactor 2022-03-07 15:04:57 +08:00
Justin Lin
762d16b2a4 refactor 2022-03-07 11:24:06 +08:00
Justin Lin
118e1191dd refactor 2022-03-07 10:48:56 +08:00
Justin Lin
90006a6b20 refactor 2022-03-07 10:17:38 +08:00
Justin Lin
d9a93b401e refactor 2022-03-06 22:50:47 +08:00
Justin Lin
dbc918cfe1 refactor 2022-03-06 17:23:58 +08:00
Justin Lin
0a41e6bcc1 refactor 2022-03-06 17:18:11 +08:00
Justin Lin
5b37c7ad86 refactor 2022-03-06 16:24:37 +08:00
Justin Lin
dff52fd168 Merge pull request #27 from FranDias/patch-1
umber -> number in readme
2022-03-06 08:53:22 +08:00
Francisco Dias
fef3a55965 umber -> number in readme 2022-03-05 19:22:23 -05:00
Justin Lin
0ca2eb4e93 refactor 2022-03-05 11:46:03 +08:00
Justin Lin
ff8f754dcc refactor 2022-03-05 11:20:53 +08:00
Justin Lin
f16de19a00 refactor 2022-03-05 11:11:34 +08:00
Justin Lin
fe71af113f refactor 2022-03-05 11:10:12 +08:00
Justin Lin
ec276b274f refactor 2022-03-05 10:47:24 +08:00
Justin Lin
a8e903ccb7 refactor 2022-03-04 21:01:23 +08:00
Justin Lin
b89c2d90d3 return first when leng is 1 2022-03-04 19:52:16 +08:00
Justin Lin
2771e2cd31 performance improved 2022-03-04 19:44:08 +08:00
Justin Lin
ccbcac6a10 refactor 2022-03-04 18:05:25 +08:00
Justin Lin
d9c890d8c3 refactor 2022-03-04 15:58:33 +08:00
Justin Lin
18ecbcee93 refactor 2022-03-04 13:40:29 +08:00
Justin Lin
dff91873b3 refactor 2022-03-04 13:24:44 +08:00
Justin Lin
c7897c47c0 refactor 2022-03-04 09:37:48 +08:00
Justin Lin
26592f72cd fix Issue #26 2022-03-04 08:32:22 +08:00
Justin Lin
b0f8f5c4f4 refactor 2022-03-03 23:08:24 +08:00
Justin Lin
96ec1e0c26 refactor 2022-03-01 15:52:17 +08:00
Justin Lin
8475049fad refactor 2022-03-01 13:06:27 +08:00
Justin Lin
1d7d45e3ed refactor 2022-03-01 10:02:42 +08:00
Justin Lin
17fcdbb92e refactor 2022-03-01 09:56:45 +08:00
Justin Lin
14ad6b4090 refactor 2022-03-01 09:54:48 +08:00
Justin Lin
769023f639 update test 2022-03-01 09:24:14 +08:00
Justin Lin
fc7c8ae32f refactor 2022-03-01 09:07:15 +08:00
Justin Lin
716f48c450 update test 2022-03-01 09:04:42 +08:00
Justin Lin
943d7bffca refactor 2022-03-01 09:01:28 +08:00
Justin Lin
cb7c28d01a refactor 2022-03-01 08:48:01 +08:00
Justin Lin
e04381bdea use [each lt, v] to replace concat(lt, [v]) 2022-02-28 11:22:58 +08:00
Justin Lin
9a143a9f72 refactor 2022-02-28 11:07:35 +08:00
Justin Lin
8f76446bd8 use [each lt, v] to replace concat(lt, [v]) 2022-02-28 11:05:50 +08:00
Justin Lin
c9370160a7 use [each lt, v] to replace concat(lt, [v]) 2022-02-28 10:52:47 +08:00
Justin Lin
57f800f1fc use [each lt, v] to replace concat(lt, [v]) 2022-02-27 22:32:57 +08:00
Justin Lin
8dc6336f2f use [each lt, v] to replace concat(lt, [v]) 2022-02-27 22:02:51 +08:00
Justin Lin
042feb4951 use [each lt, v] to replace concat(lt, [v]) 2022-02-27 18:53:03 +08:00
Justin Lin
fd9eb1fe4d Merge branch 'master' of https://github.com/JustinSDK/dotSCAD 2022-02-27 18:50:23 +08:00
Justin Lin
7d407d8cda use [each lt, v] to replace concat(lt, [v]) 2022-02-27 18:50:19 +08:00
Justin Lin
97e6e5755e Merge pull request #25 from vaaski/patch-1
fix: readme typo
2022-02-26 08:29:33 +08:00
vaaski
70cdccd280 fix: readme typo 2022-02-25 17:24:53 +01:00
Justin Lin
69bfe3fdfa rename 2022-02-13 18:03:22 +08:00
Justin Lin
74aadcb514 add ruyi 2022-02-13 18:03:11 +08:00
Justin Lin
81ba7db6cc rand top 2022-02-13 16:51:17 +08:00
Justin Lin
0ac32c05b8 formatting 2022-02-13 15:59:24 +08:00
Justin Lin
00861bc751 scale 50 2022-02-13 15:56:11 +08:00
Justin Lin
ca6c2ba7ee add pineapple 2022-02-13 15:48:23 +08:00
Justin Lin
acdf107222 del 2022-02-05 11:23:20 +08:00
Justin Lin
97f2fd8d62 update top 2022-02-03 15:42:12 +08:00
Justin Lin
0835f77aaa update top 2022-02-03 14:23:31 +08:00
Justin Lin
b8d61e7578 add crystal_cluster 2022-02-03 11:47:47 +08:00
Justin Lin
0409c35375 rename 2022-01-26 16:51:44 +08:00
Justin Lin
dd632d5845 add reaction_diffusion 2022-01-24 18:05:37 +08:00
Justin Lin
9320125b42 change params 2022-01-20 17:22:11 +08:00
Justin Lin
7113cce683 add voronoi_melon 2022-01-20 17:06:39 +08:00
Justin Lin
86d0c65108 use rand_pts_sphere 2022-01-19 16:25:53 +08:00
Justin Lin
2cfc99a08c change phi 2022-01-17 20:04:21 +08:00
Justin Lin
6e0c0cfc78 change infinity 2022-01-17 20:03:04 +08:00
Justin Lin
a9938bfcfd add voronoi_sphere 2022-01-17 16:57:18 +08:00
Justin Lin
b3aaecd32c change infinity 2022-01-11 15:44:15 +08:00
Justin Lin
84eeaf913a add vrn_sphere 2022-01-11 11:34:12 +08:00
Justin Lin
1ec50f7b85 add gyroid 2022-01-09 18:48:50 +08:00
Justin Lin
3569617313 update note 2022-01-07 09:09:42 +08:00
Justin Lin
eca8947822 add sf_cylinder 2022-01-07 09:06:42 +08:00
Justin Lin
773dc87be9 add owls 2022-01-04 08:16:02 +08:00
Justin Lin
530faeec35 refactor 2022-01-03 08:07:24 +08:00
Justin Lin
48e986ce14 add detail param 2022-01-02 22:54:25 +08:00
Justin Lin
f3216c2062 df rock 2022-01-02 20:44:30 +08:00
Justin Lin
2942651117 adjust beak 2022-01-02 19:12:05 +08:00
Justin Lin
8d78ec4253 adjust beak 2022-01-02 19:10:45 +08:00
Justin Lin
39fc86e67e add owl 2022-01-02 17:49:03 +08:00
Justin Lin
09125eb667 remove polyline2d 2022-01-02 17:37:04 +08:00
Justin Lin
9ba754162a refactor 2021-12-27 09:20:43 +08:00
Justin Lin
b2e58ac763 refactor 2021-12-27 09:18:47 +08:00
Justin Lin
c917ffee41 refactor 2021-12-27 09:17:48 +08:00
Justin Lin
5270d6c606 add maze_city 2021-12-26 18:50:33 +08:00
Justin Lin
cd4dda3b39 add mz_wang_tiles 2021-12-26 18:50:16 +08:00
Justin Lin
cc15a7df8b add ripple_vase 2021-12-19 17:48:12 +08:00
Justin Lin
a299949c42 add amplitude 2021-12-19 16:00:03 +08:00
Justin Lin
47bdb4b31d refactor 2021-12-19 15:57:26 +08:00
Justin Lin
0fb6f4b9a1 add ripples 2021-12-19 15:52:51 +08:00
Justin Lin
9facafaf61 update gallery img 2021-12-14 21:56:21 +08:00
Justin Lin
cd16a74d08 rotate fin 2021-12-12 11:17:08 +08:00
Justin Lin
496a151005 rename 2021-12-11 09:36:04 +08:00
Justin Lin
2e12d6b79a add tail hair 2021-12-10 16:31:20 +08:00
Justin Lin
d5221e1289 rotate tail 2021-12-10 13:07:59 +08:00
Justin Lin
382d1c60b8 offset mountain 2021-12-10 11:16:07 +08:00
Justin Lin
d3d0517376 adjust 2021-12-10 11:08:41 +08:00
Justin Lin
43a71ead1d add spiral_dragon2 2021-12-10 10:56:44 +08:00
Justin Lin
e5f17508da new mountain 2021-12-10 08:46:02 +08:00
Justin Lin
3ff2961a6d update hair 2021-12-09 22:01:12 +08:00
Justin Lin
819a76d81c update tail 2021-12-09 21:31:49 +08:00
Justin Lin
efdd6c1078 update img 2021-12-09 21:12:52 +08:00
Justin Lin
4029ab4641 add tail hair 2021-12-09 21:12:48 +08:00
Justin Lin
14ca2c48ae update hair 2021-12-09 20:45:37 +08:00
Justin Lin
f8c89b1dab update hair 2021-12-09 20:37:59 +08:00
Justin Lin
2e92394513 format 2021-12-09 17:50:16 +08:00
Justin Lin
bd7d16d6e5 add tail hair 2021-12-09 17:46:45 +08:00
Justin Lin
6d212c8722 thicken road 2021-12-09 10:45:07 +08:00
Justin Lin
1d946647eb ship 3.2 2021-12-09 07:56:05 +08:00
Justin Lin
c5a99c3223 add rubber_duck_debugging 2021-12-05 13:55:41 +08:00
Justin Lin
39e363d59c thin tail 2021-12-04 16:50:36 +08:00
Justin Lin
9478d1ec60 update docs 2021-12-04 12:16:20 +08:00
Justin Lin
134ca1b364 refactor 2021-12-04 11:52:25 +08:00
Justin Lin
e7c38fa876 dot notation indexing 2021-12-04 11:23:04 +08:00
Justin Lin
bd8f755a6c it's y 2021-12-04 11:21:48 +08:00
Justin Lin
91d5c40336 use polyline_join 2021-12-04 10:57:29 +08:00
Justin Lin
5c8c0b8139 update doc 2021-12-04 10:17:13 +08:00
Justin Lin
324693a38f dot notation indexing 2021-12-04 10:16:45 +08:00
Justin Lin
14a6348771 update test 2021-12-04 09:58:07 +08:00
Justin Lin
7d9cb94f22 dot notation indexing 2021-12-04 09:58:00 +08:00
Justin Lin
90a29ceecd dot notation indexing 2021-12-04 08:56:09 +08:00
Justin Lin
e7bfb3c951 update doc 2021-12-03 09:45:52 +08:00
Justin Lin
59eb3a1dc2 update doc 2021-12-03 09:43:24 +08:00
Justin Lin
e49c40e0f0 add polar_zonohedra 2021-12-03 09:30:06 +08:00
Justin Lin
d822688eaf modify jaw 2021-12-02 16:03:55 +08:00
Justin Lin
d25b73dbda update note 2021-12-02 10:48:12 +08:00
Justin Lin
22dce8fee2 add polar_zonohedra 2021-12-02 10:47:32 +08:00
Justin Lin
abd287b29e rename 2021-12-02 10:25:53 +08:00
Justin Lin
a82827e389 pitch 2021-12-01 19:55:03 +08:00
Justin Lin
c6a661e074 add polar_zonohedra 2021-12-01 17:36:44 +08:00
Justin Lin
0490da4b91 add infinity_dragon 2021-11-30 10:36:59 +08:00
Justin Lin
364488970b update length 2021-11-30 09:13:33 +08:00
Justin Lin
4eda143bbb move 2021-11-30 08:23:41 +08:00
Justin Lin
2a87a2221f add lemniscate_2circles 2021-11-29 10:45:25 +08:00
Justin Lin
39cbc9a069 add comment 2021-11-29 10:01:00 +08:00
Justin Lin
55e64dcb53 change a default 2021-11-29 09:56:47 +08:00
Justin Lin
154436382c add lemniscate_curve 2021-11-29 09:49:45 +08:00
Justin Lin
90c6db16d5 union all 2021-11-22 18:02:10 +08:00
Justin Lin
0ec9f0e0e5 update doc 2021-11-22 09:46:34 +08:00
Justin Lin
218830d252 update README 2021-11-22 09:39:21 +08:00
Justin Lin
84f3636bf0 update note 2021-11-22 09:37:14 +08:00
Justin Lin
d9dd44db29 update README 2021-11-22 09:36:37 +08:00
Justin Lin
9577f68d13 deprecated 2021-11-22 09:32:36 +08:00
Justin Lin
7a8c152607 use new modules/functions 2021-11-22 09:31:05 +08:00
Justin Lin
345603551b use shape_star 2021-11-19 16:17:00 +08:00
Justin Lin
610c9588bd use polyline_join 2021-11-18 08:08:50 +08:00
Justin Lin
7b1095d130 update docs 2021-11-17 11:05:38 +08:00
Justin Lin
884892a3f1 use path_scaling_sections 2021-11-14 18:36:23 +08:00
Justin Lin
2600504dd5 add tiled_line_ring 2021-11-14 10:39:13 +08:00
Justin Lin
f27250d285 format 2021-11-13 09:44:22 +08:00
Justin Lin
5016231000 refactor 2021-11-12 09:54:03 +08:00
Justin Lin
402aa95289 update README 2021-11-10 11:27:14 +08:00
Justin Lin
50d11142d5 refine feet 2021-11-09 21:06:36 +08:00
Justin Lin
031438a4df update README 2021-11-09 18:17:41 +08:00
Justin Lin
9063d9da05 add torus_knot_dragon_and_pearl 2021-11-09 18:17:37 +08:00
Justin Lin
3fbee973a9 refactor 2021-11-09 16:57:51 +08:00
Justin Lin
3b5af34041 add doc 2021-11-07 16:01:53 +08:00
Justin Lin
824aefefd9 rename 2021-11-05 08:34:33 +08:00
Justin Lin
4cdeb5b4a6 add doc 2021-11-05 08:33:44 +08:00
Justin Lin
9271c79a3a add doc 2021-11-03 08:04:28 +08:00
Justin Lin
3b2b07ae25 del svg 2021-11-02 18:01:41 +08:00
Justin Lin
214b0a2640 update LICENSE 2021-11-02 17:55:28 +08:00
Justin Lin
29da8be872 add doc 2021-11-01 08:10:17 +08:00
Justin Lin
10930e8b1c add star 2021-10-29 16:49:18 +08:00
Justin Lin
756ed377c3 update README 2021-10-29 11:48:50 +08:00
Justin Lin
300f72a959 update note 2021-10-29 11:47:10 +08:00
Justin Lin
faf53b3846 add shape_star 2021-10-29 11:45:14 +08:00
Justin Lin
2376e429d1 update README 2021-10-28 15:15:44 +08:00
Justin Lin
b0817f2339 del unused module 2021-10-28 15:13:30 +08:00
Justin Lin
0304233cdc delete unused function 2021-10-28 15:11:34 +08:00
Justin Lin
4176cb476e add wormhole 2021-10-28 10:38:26 +08:00
Justin Lin
3901e4f1ea add doc 2021-10-28 08:20:03 +08:00
Justin Lin
9022cb731d rename 2021-10-28 08:04:26 +08:00
Justin Lin
b76a2f9c32 add doc 2021-10-28 07:42:16 +08:00
Justin Lin
bb2f10043f update example 2021-10-27 15:51:35 +08:00
Justin Lin
5b65cc16a7 rename 2021-10-26 16:51:54 +08:00
Justin Lin
8cdfe435ee rename 2021-10-26 10:29:10 +08:00
Justin Lin
1cddbc3453 rename 2021-10-26 10:25:49 +08:00
Justin Lin
50621b0306 change param 2021-10-26 09:36:26 +08:00
Justin Lin
8dad1bd4b6 add platonic_solid_frame 2021-10-26 09:33:47 +08:00
Justin Lin
c6b0c30fd8 reverse face 2021-10-26 09:08:01 +08:00
Justin Lin
a6d0c85dbe update README 2021-10-25 11:30:33 +08:00
Justin Lin
87deb39a4b add central_scale 2021-10-24 14:08:23 +08:00
Justin Lin
bfa0fd2b11 add doc 2021-10-21 17:09:54 +08:00
Justin Lin
2bd663d46b update doc 2021-10-18 16:06:05 +08:00
Justin Lin
5c1c6a7463 update doc 2021-10-18 16:04:53 +08:00
Justin Lin
ca92286690 update doc 2021-10-18 16:04:29 +08:00
Justin Lin
cbff19c33e add comment 2021-10-18 16:02:19 +08:00
Justin Lin
43b22a0f4c add comments 2021-10-18 16:01:53 +08:00
Justin Lin
6bda39ecef add doc 2021-10-18 16:00:56 +08:00
Justin Lin
37c3a647a5 refactor 2021-10-15 10:20:18 +08:00
Justin Lin
59ae93ba5f calculate r_base directly 2021-10-14 22:11:14 +08:00
Justin Lin
6d6f62c77f refactor 2021-10-14 18:25:10 +08:00
Justin Lin
a8ae7c18e4 rewrite polyhedra 2021-10-14 18:22:05 +08:00
Justin Lin
9c3c92ab13 update README 2021-10-13 16:12:17 +08:00
Justin Lin
f1116dc8cf add doc 2021-10-13 16:09:12 +08:00
Justin Lin
5a44454547 fix join index 2021-10-13 16:06:22 +08:00
Justin Lin
57d46eda8d update README 2021-10-12 16:38:05 +08:00
Justin Lin
4a19b445ab update README 2021-10-12 16:35:02 +08:00
Justin Lin
675f80159e add doc 2021-10-12 16:24:03 +08:00
Justin Lin
1132451009 i can be ignored 2021-10-12 16:23:55 +08:00
Justin Lin
c78fb13731 update README 2021-10-08 10:05:14 +08:00
Justin Lin
a53c202c48 update README 2021-10-08 10:04:24 +08:00
Justin Lin
ccbd81b88e update note 2021-10-08 09:36:51 +08:00
Justin Lin
a14c5676d4 use polyline_join 2021-10-08 09:36:01 +08:00
Justin Lin
e9440e55d6 scale first cat 2021-10-07 09:49:55 +08:00
Justin Lin
8f1d6a6e1a refactor 2021-10-06 16:33:17 +08:00
Justin Lin
95dc133d0d refactor 2021-10-06 16:29:33 +08:00
Justin Lin
dbdf8a757d move octahedron 2021-10-06 16:08:20 +08:00
Justin Lin
d6affc1ff5 add polyhedra 2021-10-06 15:54:20 +08:00
Justin Lin
f7e81a78e3 update readme 2021-10-06 15:53:57 +08:00
Justin Lin
63a5e53572 refactor 2021-10-04 12:39:16 +08:00
Justin Lin
006572c5bf move 2021-10-04 08:01:18 +08:00
Justin Lin
3678b8b6d7 move 2021-10-04 07:58:45 +08:00
Justin Lin
89eb57652b refactor 2021-10-01 14:17:53 +08:00
Justin Lin
0a24f4fc67 refactor 2021-10-01 13:39:12 +08:00
Justin Lin
6e8277c91d rename 2021-10-01 13:28:30 +08:00
Justin Lin
9071ac3788 update doc 2021-10-01 10:30:10 +08:00
Justin Lin
f1b1239950 fix wrong angleyz 2021-10-01 10:28:42 +08:00
Justin Lin
71b6203d9c fix 2D to 3D bugs 2021-10-01 09:54:47 +08:00
Justin Lin
fa0e77ebaf depends on $children 2021-10-01 09:15:06 +08:00
Justin Lin
6e38061655 refactor 2021-10-01 08:47:45 +08:00
Justin Lin
ac2c420487 refactor 2021-10-01 08:46:08 +08:00
Justin Lin
a29b851500 update note 2021-10-01 08:31:00 +08:00
Justin Lin
bc17a2df19 add polyline_hull 2021-10-01 08:27:07 +08:00
Justin Lin
d701b537f0 remove children support 2021-10-01 08:26:06 +08:00
Justin Lin
4683ff5a46 refactor 2021-10-01 08:20:49 +08:00
Justin Lin
06c1ef94bc refactor 2021-10-01 08:08:11 +08:00
Justin Lin
e2958b6ae1 use for-loop 2021-10-01 08:03:07 +08:00
Justin Lin
a2971ec1d0 add fidget_cat 2021-09-24 16:11:25 +08:00
Justin Lin
1634403e28 refactor 2021-09-23 07:46:45 +08:00
Justin Lin
57da4b39ad add hexahedron 2021-09-22 16:56:46 +08:00
Justin Lin
5374999967 add tetrahedron 2021-09-22 16:39:04 +08:00
Justin Lin
60f3698200 delete unnecessary code 2021-09-22 16:36:21 +08:00
Justin Lin
83b1843f3f add octahedron 2021-09-22 16:35:22 +08:00
Justin Lin
b2d2940ef1 refactor 2021-09-22 16:30:28 +08:00
Justin Lin
3c0c524186 format 2021-09-22 16:22:45 +08:00
Justin Lin
4eef2c6dde refactor 2021-09-22 16:22:09 +08:00
Justin Lin
af9cfb16e4 add dodecahedron 2021-09-22 16:08:48 +08:00
Justin Lin
9340f73f1a add geom_dodecahedron 2021-09-22 16:07:34 +08:00
Justin Lin
66d02d02e2 change default values 2021-09-19 10:40:12 +08:00
Justin Lin
44165275e7 create bottom 2021-09-19 09:32:37 +08:00
Justin Lin
dcda61390c shell param is not necessary 2021-09-18 17:14:15 +08:00
Justin Lin
58a7a20c53 don't concat 2021-09-18 16:26:28 +08:00
Justin Lin
d0bc8c0f7f shell_random_threshold default to 0.5 2021-09-18 16:22:12 +08:00
Justin Lin
26fcdbe8e3 add shell_random_threshold 2021-09-18 16:21:44 +08:00
Justin Lin
704ed1e725 add shell param 2021-09-18 12:22:46 +08:00
Justin Lin
702aab846e add shell 2021-09-18 12:21:03 +08:00
Justin Lin
fbc07cec80 we don't have to mod nums_of_buckets 2021-09-16 07:50:37 +08:00
Justin Lin
b1b61fddbf single a_step is ok 2021-09-10 15:17:33 +08:00
Justin Lin
89096ad329 update comment 2021-09-10 12:22:25 +08:00
Justin Lin
e5b1a6cf93 add superellipsoid 2021-09-10 12:11:38 +08:00
Justin Lin
523ce3cb33 add perlin_sphere 2021-09-10 09:45:53 +08:00
Justin Lin
ea36c97ac7 performance improved 2021-09-09 17:37:33 +08:00
Justin Lin
5e7b5f1691 update doc 2021-09-09 16:31:42 +08:00
Justin Lin
8fb3d5b579 add rand_pts_circle 2021-09-08 18:02:17 +08:00
Justin Lin
cafa0ebd06 update comment 2021-09-08 18:01:59 +08:00
Justin Lin
a2fee75749 adjust size of bucket 2021-09-08 11:45:04 +08:00
Justin Lin
0725d945de delete unused modules 2021-09-08 10:49:21 +08:00
Justin Lin
41ebc07fd0 don't use quick_mode 2021-09-08 10:48:43 +08:00
Justin Lin
c59fdc5f1d provide quick_mode 2021-09-08 08:36:33 +08:00
Justin Lin
23ed306148 performance improved 2021-09-07 15:59:11 +08:00
Justin Lin
657c10a9cc performance improved 2021-09-07 15:47:07 +08:00
Justin Lin
8da1912fff add _pt3_hash 2021-09-07 15:47:01 +08:00
Justin Lin
fd375dd50f rename 2021-09-07 10:21:24 +08:00
Justin Lin
69e2a79488 use geom_isosphere to rewrite 2021-09-07 10:14:45 +08:00
Justin Lin
e5af7b3027 refactor 2021-09-07 10:12:29 +08:00
Justin Lin
9c532acce4 refactor 2021-09-07 10:03:47 +08:00
Justin Lin
1d085c35d0 add isosphere 2021-09-06 17:36:44 +08:00
Justin Lin
09d898c035 add tri_subdivide 2021-09-06 17:23:51 +08:00
Justin Lin
12e6af2492 delete repeated function 2021-09-05 15:33:26 +08:00
Justin Lin
f3a5ce76e3 delete unused function 2021-09-05 15:28:16 +08:00
Justin Lin
8ca4e12b22 add fidget_heart 2021-09-04 08:39:36 +08:00
Justin Lin
e021750d7b clean code 2021-09-03 15:37:35 +08:00
Justin Lin
43fa3fb5fd rename variables 2021-09-03 11:40:08 +08:00
Justin Lin
853da1f9e2 refactor 2021-09-03 11:38:21 +08:00
Justin Lin
346cea1db8 add r_union 2021-09-03 11:29:32 +08:00
Justin Lin
c6ca52aba8 add r_union2 2021-09-03 11:18:03 +08:00
Justin Lin
5863a5c3f6 clean code 2021-09-03 07:40:17 +08:00
Justin Lin
43d614ba7c add euler_spiral 2021-08-31 11:28:42 +08:00
Justin Lin
fb0672480f dedup befor drawing 2021-08-31 10:02:48 +08:00
Justin Lin
3d1a4cbb33 rename 2021-08-31 08:29:37 +08:00
Justin Lin
0494ef7f32 del unnecessary code 2021-08-30 08:09:29 +08:00
Justin Lin
9850227fe4 adjust face 2021-08-29 21:39:18 +08:00
Justin Lin
4f22f8489a accept diff font and font_size 2021-08-29 17:51:37 +08:00
Justin Lin
210844c9f8 emoticon moai 2021-08-29 09:01:35 +08:00
Justin Lin
e9095eaff5 add ears 2021-08-29 08:21:16 +08:00
Justin Lin
950c7a5937 add moai 2021-08-27 19:50:18 +08:00
Justin Lin
9cbac21f17 del unused module 2021-08-27 07:54:06 +08:00
Justin Lin
30f83865f1 add tri_arc_path 2021-08-26 21:13:12 +08:00
Justin Lin
b6d86ab4ba angle_between adds a ccw param 2021-08-26 21:09:32 +08:00
Justin Lin
2355820034 change param 2021-08-26 20:27:42 +08:00
Justin Lin
679e3aae62 add tri_is_ccw 2021-08-26 18:49:42 +08:00
Justin Lin
21754293c8 add lavender 2021-08-25 17:33:24 +08:00
Justin Lin
d4a865080c fix error vector 2021-08-25 14:43:47 +08:00
Justin Lin
b79131f9bc add nose param 2021-08-24 16:46:54 +08:00
Justin Lin
7aad397860 rename 2021-08-24 16:44:16 +08:00
Justin Lin
b209c40d99 remove render 2021-08-24 09:10:54 +08:00
Justin Lin
d8122150a1 allow one word 2021-08-24 09:05:16 +08:00
Justin Lin
e507f71619 scale decoratiokn 2021-08-24 08:58:41 +08:00
Justin Lin
966f6f6850 rename 2021-08-23 15:31:27 +08:00
Justin Lin
d35fe91246 font default to 思源黑體 Medium 2021-08-23 15:20:27 +08:00
Justin Lin
2f9509c249 model default to both 2021-08-23 15:17:32 +08:00
Justin Lin
0810d86314 scale 0.7 2021-08-23 15:16:39 +08:00
Justin Lin
52e43aa03c adjust 2021-08-23 09:10:00 +08:00
Justin Lin
d875d41e4c rename 2021-08-23 08:44:51 +08:00
Justin Lin
82ec74eee1 add tumbler_helmet 2021-08-22 20:33:03 +08:00
Justin Lin
3390b0587d refactor 2021-08-22 20:32:47 +08:00
Justin Lin
433040f363 use string directly 2021-08-22 17:45:54 +08:00
Justin Lin
8cc0eeebc3 don't cut bottom 2021-08-22 16:04:06 +08:00
Justin Lin
803906e8cd remove render 2021-08-22 15:36:25 +08:00
Justin Lin
03f4939fe1 scale when smoothing 2021-08-22 15:33:02 +08:00
Justin Lin
066e5fc55d add tumbler 2021-08-22 15:21:57 +08:00
Justin Lin
aeb9dec141 change param value 2021-08-21 12:37:02 +08:00
Justin Lin
bfa3d6b8ff rename 2021-08-21 10:43:15 +08:00
Justin Lin
4fb0f9ac7b add engraved param 2021-08-21 10:11:46 +08:00
Justin Lin
e5eeb77292 delete extra support 2021-08-20 21:41:40 +08:00
Justin Lin
2e5b245167 update note 2021-08-20 21:29:57 +08:00
Justin Lin
a37c6030e9 add convexity param 2021-08-20 21:28:17 +08:00
Justin Lin
13ca93e9db extra support 2021-08-20 21:11:13 +08:00
Justin Lin
749079767d refactor 2021-08-19 16:37:58 +08:00
Justin Lin
d8a444099f add ivory_ball_fern_leaf 2021-08-19 16:36:42 +08:00
Justin Lin
0dc5544e2e use relative path 2021-08-19 16:12:40 +08:00
Justin Lin
ac41769faa change param name 2021-08-19 12:37:35 +08:00
Justin Lin
bcbc4e09a5 add worley_sphere 2021-08-19 12:30:54 +08:00
Justin Lin
888460d2e3 add param 2021-08-19 10:42:12 +08:00
Justin Lin
c5be2d398a add polyhedron_abuse param (hidden feature) 2021-08-18 17:56:30 +08:00
Justin Lin
798676e2eb refactor 2021-08-18 16:24:57 +08:00
Justin Lin
ad6b0ae4f1 add fidget ball 2021-08-18 12:44:32 +08:00
Justin Lin
9829c5c201 add kogan_sphere 2021-08-16 18:22:02 +08:00
Justin Lin
fd6fbbc92f add penrose_basket 2021-08-16 13:13:31 +08:00
Justin Lin
6aaab429fb add ptf_c2sphere 2021-08-16 12:23:27 +08:00
Justin Lin
d00f51edcb update examples 2021-08-15 14:02:56 +08:00
Justin Lin
0c1e85e5db init from OBTUSE 2021-08-15 13:58:14 +08:00
Justin Lin
ed3b8c1422 add triangles param 2021-08-15 11:48:57 +08:00
Justin Lin
7574f0aa3d mirror tri to tile 2021-08-15 11:24:32 +08:00
Justin Lin
62c4e1c656 add triangles param 2021-08-15 10:23:11 +08:00
Justin Lin
af88ee6e86 add worley_vase 2021-08-14 09:26:13 +08:00
Justin Lin
30d60d643f add images 2021-08-14 09:24:56 +08:00
Justin Lin
0d63029c4c update note 2021-08-14 09:10:48 +08:00
Justin Lin
c58e019b69 add rail_extruded_sections 2021-08-14 09:10:11 +08:00
Justin Lin
249cced4c7 update doc 2021-08-14 09:09:47 +08:00
Justin Lin
2a4bd4c006 use rails2sections 2021-08-14 08:44:09 +08:00
Justin Lin
569a0091c3 add rails2sections 2021-08-14 08:34:41 +08:00
Justin Lin
beaf6fb776 delete depreated doc 2021-08-14 08:29:41 +08:00
Justin Lin
9f8614397b better bottom fitness 2021-08-13 20:50:33 +08:00
Justin Lin
0c3c0286e9 tri is [type, vertices] 2021-08-13 15:01:02 +08:00
Justin Lin
026cd9391e add tile_penrose2 2021-08-13 14:59:25 +08:00
Justin Lin
58a293f6c8 fix fn 2021-08-12 16:03:14 +08:00
Justin Lin
0e6d98fd1e delete q 2021-08-12 08:03:29 +08:00
Justin Lin
7d8bfc6099 change vertices order 2021-08-11 20:18:33 +08:00
Justin Lin
2844a30d91 change vertices order 2021-08-11 20:03:51 +08:00
Justin Lin
9b0c825f92 simplify subdivid 2021-08-11 17:48:01 +08:00
Justin Lin
428af98b5d update type 2021-08-11 17:38:42 +08:00
Justin Lin
505e384343 rename fn 2021-08-11 17:16:50 +08:00
Justin Lin
9fe43dc7b2 delete ) 2021-08-11 17:14:24 +08:00
Justin Lin
9955169c75 update example 2021-08-11 17:01:57 +08:00
Justin Lin
d350362c47 refactor 2021-08-11 08:28:57 +08:00
Justin Lin
26a0d7a62e refactor 2021-08-10 19:30:07 +08:00
Justin Lin
091f071cb5 add tile_penrose3 2021-08-10 11:34:52 +08:00
Justin Lin
401c6baca4 add twist_taiji 2021-08-09 16:45:11 +08:00
Justin Lin
bbe59b9dbb move 2021-08-09 16:28:14 +08:00
Justin Lin
02fd718ca7 rename 2021-08-09 15:12:59 +08:00
Justin Lin
a00945ae1f scale foot 2021-08-09 08:37:03 +08:00
Justin Lin
a599842933 add caterpillar 2021-08-08 20:26:36 +08:00
Justin Lin
da08e75e73 refactor 2021-08-08 19:25:56 +08:00
Justin Lin
a129aa547c add shape2wire 2021-08-08 14:57:52 +08:00
Justin Lin
eceb3fa282 66 vertices 2021-08-03 22:01:37 +08:00
Justin Lin
a16a8373d3 elaborate fin 2021-08-03 16:15:05 +08:00
Justin Lin
4a516bf64d elaborate it 2021-08-03 16:05:56 +08:00
Justin Lin
43285d49b1 scale down tail 2021-08-03 11:43:04 +08:00
Justin Lin
3d081ed0c3 change peral position 2021-08-03 10:23:44 +08:00
Justin Lin
9ad1835322 rename 2021-08-03 09:19:44 +08:00
Justin Lin
05737e0512 add a pearl 2021-08-03 09:18:21 +08:00
Justin Lin
8b65a1cb5c chane tail scale 2021-08-03 08:59:28 +08:00
Justin Lin
179701330f change body path 2021-08-03 08:57:25 +08:00
Justin Lin
50f87275e0 dragon 2021-08-02 22:26:03 +08:00
Justin Lin
f8037bf484 adjust head 2021-08-02 17:00:53 +08:00
Justin Lin
3f3d799870 elaborate it 2021-08-02 16:54:25 +08:00
Justin Lin
3bb5553698 random hair 2021-08-02 16:46:52 +08:00
Justin Lin
ad826cfb77 elaborate it 2021-08-02 15:24:49 +08:00
Justin Lin
fabfd1a9ce add dragon_claw 2021-08-02 15:02:15 +08:00
Justin Lin
ecd8311921 clean code 2021-08-01 16:51:11 +08:00
Justin Lin
2939d03879 re-design scales 2021-08-01 16:46:51 +08:00
Justin Lin
2d3315f9ad refactor 2021-08-01 15:31:21 +08:00
Justin Lin
7c8dec3671 re-design scales 2021-08-01 15:18:45 +08:00
Justin Lin
6bed665368 thicken beard 2021-08-01 13:24:44 +08:00
Justin Lin
5a5ee9cc0c re-design body scales 2021-08-01 13:10:15 +08:00
Justin Lin
3784469c59 refactor 2021-07-31 16:23:26 +08:00
Justin Lin
1544546cdd remove params 2021-07-31 16:19:40 +08:00
Justin Lin
7bd7326794 remove params 2021-07-31 16:18:02 +08:00
Justin Lin
0a117e0c09 rename and refactor 2021-07-31 16:16:58 +08:00
Justin Lin
3b48de2c47 add tile_hitomezashi 2021-07-31 15:25:19 +08:00
Justin Lin
0295b0ded0 refactor 2021-07-31 12:34:50 +08:00
Justin Lin
4bddf3ca33 refactor 2021-07-31 12:34:43 +08:00
Justin Lin
a8472c0831 add knot_tiles 2021-07-31 12:32:30 +08:00
Justin Lin
a56cf44b4c add choose_children 2021-07-31 12:31:56 +08:00
Justin Lin
a213a797a0 add rand_pts_sphere 2021-07-30 18:05:02 +08:00
Justin Lin
4cd74cb0bf del echo 2021-07-30 12:18:19 +08:00
Justin Lin
b722d178e7 add tiled_quarter_circles 2021-07-30 12:02:15 +08:00
Justin Lin
bf8cb44595 rename param 2021-07-30 11:43:31 +08:00
Justin Lin
6e3d3e0a4b move 2021-07-30 11:07:03 +08:00
Justin Lin
352ca21300 refactor 2021-07-30 11:06:47 +08:00
Justin Lin
5399224ff0 move 2021-07-30 11:02:55 +08:00
Justin Lin
574e4b695a refactor 2021-07-30 11:02:42 +08:00
Justin Lin
2e1959f3ef move 2021-07-30 11:02:27 +08:00
Justin Lin
8829123ade add tile_truchet 2021-07-30 10:55:36 +08:00
Justin Lin
1812e732bb refactor 2021-07-29 18:54:09 +08:00
Justin Lin
021716cf80 add tile_w2c 2021-07-29 16:58:48 +08:00
Justin Lin
3f499ca32d round-robin edges 2021-07-29 15:24:19 +08:00
Justin Lin
a11eae4aaa rename 2021-07-29 12:06:48 +08:00
Justin Lin
61f7988820 refactor 2021-07-29 12:05:18 +08:00
Justin Lin
7d47d56bdd refactor 2021-07-29 11:55:27 +08:00
Justin Lin
1a6ce7ea0a thicken beard 2021-07-22 16:25:20 +08:00
Justin Lin
9c487ec304 refactor 2021-07-22 13:31:16 +08:00
Justin Lin
5d593ecbc3 fin lifted 2021-07-21 20:55:06 +08:00
Justin Lin
9153c997eb add torus_knot_dragon2 2021-07-21 18:08:19 +08:00
Justin Lin
904e15667d simplify it 2021-07-21 13:36:42 +08:00
Justin Lin
cdccc4723b rename param 2021-07-21 11:08:22 +08:00
Justin Lin
88775366db rename param 2021-07-21 11:08:10 +08:00
Justin Lin
0d188fa96c update README 2021-07-21 11:06:19 +08:00
Justin Lin
fd1b426d4f update doc 2021-07-21 11:06:08 +08:00
Justin Lin
e1a5fcb928 simplify it 2021-07-21 09:20:42 +08:00
Justin Lin
d77581d717 adjust head 2021-07-20 17:21:59 +08:00
Justin Lin
81f5e05840 sharpen mouth 2021-07-20 16:45:09 +08:00
Justin Lin
e312c03414 fix CG error 2021-07-20 16:20:11 +08:00
Justin Lin
6c6093d46b flame mountain 2021-07-20 14:19:59 +08:00
Justin Lin
61faa5ae06 fix CG error 2021-07-20 13:32:34 +08:00
Justin Lin
ccfca4e246 curve nose 2021-07-20 12:47:46 +08:00
Justin Lin
f4fa300fac delete duplicated module 2021-07-20 12:44:17 +08:00
Justin Lin
404a01b29b curved nose 2021-07-20 12:43:10 +08:00
Justin Lin
3cae424fb4 rename 2021-07-19 18:18:25 +08:00
Justin Lin
ad926d2def rotate meme 2021-07-19 17:50:14 +08:00
Justin Lin
96f9d8c38a refactor 2021-07-19 17:49:14 +08:00
Justin Lin
3c43ef8fc2 add ms_paperclip_meme 2021-07-19 15:30:15 +08:00
Justin Lin
0d71103959 random hair 2021-07-19 11:28:07 +08:00
Justin Lin
da07c95497 random hair 2021-07-18 17:58:47 +08:00
Justin Lin
ccafbe8a3a refactor 2021-07-18 10:09:35 +08:00
Justin Lin
bed658178e refactor 2021-07-18 09:20:14 +08:00
Justin Lin
7b6e873b2a del unnecessary code 2021-07-17 20:04:48 +08:00
Justin Lin
780ecc3c06 update params 2021-07-17 18:12:12 +08:00
Justin Lin
97f4cfa60d add maze_tower 2021-07-17 17:54:40 +08:00
Justin Lin
66bf0f89bf fix seed missing 2021-07-17 14:41:46 +08:00
Justin Lin
246fc3006c rename 2021-07-15 13:52:57 +08:00
Justin Lin
aa42d2cd4e delete y_offset 2021-07-15 12:23:48 +08:00
Justin Lin
4583305c76 modify examples 2021-07-15 12:21:06 +08:00
Justin Lin
f3473e8765 add shape 2021-07-15 12:01:54 +08:00
Justin Lin
e855403d7a add shape 2021-07-15 11:31:53 +08:00
Justin Lin
d3a51b280a rename 2021-07-15 11:26:33 +08:00
Justin Lin
9863b718a0 use arc_path 2021-07-15 10:57:24 +08:00
Justin Lin
0551981b07 generalize shape 2021-07-15 10:53:07 +08:00
Justin Lin
e6639cd01c rename 2021-07-14 15:39:33 +08:00
Justin Lin
8d39873360 add twisted_donut 2021-07-14 14:52:54 +08:00
580 changed files with 12189 additions and 5659 deletions

View File

@@ -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.

View File

@@ -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

223
README.md
View File

@@ -1,10 +1,8 @@
# dotSCAD 3.1
# dotSCAD 3.2.1
> **Reduce the burden of mathematics/algorithm when playing OpenSCAD.**
![dotSCAD](featured_img/TorusKnotMaze.JPG)
[![license/LGPL](LICENSE.svg)](https://github.com/JustinSDK/lib-openscad/blob/master/LICENSE)
![dotSCAD](featured_img/Owls.JPG)
## Introduction
@@ -12,7 +10,7 @@ Some of my [3D models](https://github.com/JustinSDK/dotSCAD#examples) require co
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. 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.
@@ -39,111 +37,110 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
[![examples](examples/images/gallery.JPG)](examples#dogfooding-examples)
# API Documentation
# API Reference
## 2D Module
Signature | Description
--|--
[**arc**(radius, angle, width = 1, width_mode = "LINE_CROSS")](https://openhome.cc/eGossip/OpenSCAD/lib3x-arc.html) | create an arc.
[**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.
[**hull_polyline2d**(points, width = 1)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hull_polyline2d.html) | create a 2D polyline from a list of `[x, y]`.
[**line2d**(p1, p2, width = 1, p1Style = "CAP_SQUARE", p2Style = "CAP_SQUARE")](https://openhome.cc/eGossip/OpenSCAD/lib3x-line2d.html) | create a line from two points.
[**multi_line_text**(lines, line_spacing = 15, size = 10, font = "Arial", ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-multi_line_text.html) | create multi-line text from a list of strings.
[**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 = 1, startingStyle = "CAP_SQUARE", endingStyle = "CAP_SQUARE", ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline2d.html) | create a polyline from a list of `[x, y]` coordinates.
[**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 = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_square.html) | create a rounded square in the first quadrant.
[**rounded_square**(size, corner_r[, center])](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_square.html) | create a rounded square in the first quadrant.
## 3D Module
Signature | Description
--|--
[**crystal_ball**(radius, theta = 360, phi = 180, thickness = undef)](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).
[**hull_polyline3d**(points, diameter = 1)](https://openhome.cc/eGossip/OpenSCAD/lib3x-hull_polyline3d.html) | create a 3D polyline from a list of `[x, y, z]`.
[**line3d**(p1, p2, diameter = 1, p1Style = "CAP_CIRCLE", p2Style = "CAP_CIRCLE")](https://openhome.cc/eGossip/OpenSCAD/lib3x-line3d.html) | create a 3D line from two points.
[**loft**(sections, slices = 1)](https://openhome.cc/eGossip/OpenSCAD/lib3x-loft.html) | develop a smooth skin between crosssections with different geometries.
[**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 = "CAP_CIRCLE", endingStyle = "CAP_CIRCLE")](https://openhome.cc/eGossip/OpenSCAD/lib3x-polyline3d.html) | create a polyline from a list of `[x, y, z]`.
[**rounded_cube**(size, corner_r, center = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_cube.html) | create a cube in the first octant.
[**rounded_cylinder**(radius, h, round_r, convexity = 2, center = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_cylinder.html) | create a rounded cylinder.
[**starburst**(r1, r2, n, height)](https://openhome.cc/eGossip/OpenSCAD/lib3x-starburst.html) | a 3D version of [`shape_starburst`](https://openhome.cc/eGossip/OpenSCAD/lib3x-starburst.html).
[**sweep**(sections, triangles = "SOLID")](https://openhome.cc/eGossip/OpenSCAD/lib3x-sweep.html) | develop a smooth skin from crosssections with the same umber of sides.
[**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.
## Transformation
Signature | Description
--|--
[**along_with**(points, angles, twist = 0, scale = 1.0, method = "AXIS_ANGLE")](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 = 24)](https://openhome.cc/eGossip/OpenSCAD/lib3x-bend.html) | bend a 3D object.
[**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 = [0, 0], sy = [0, 0], sz = [0, 0])](https://openhome.cc/eGossip/OpenSCAD/lib3x-shear.html) | shear all child elements along the X-axis, Y-axis, or Z-axis.
[**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.
## 2D Function
Signature | Description
--|--
[**bijection_offset**(pts, d, epsilon = 0.0001)](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.
[**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 = false, epsilon = 0.0001)](https://openhome.cc/eGossip/OpenSCAD/lib3x-in_shape.html) | check whether a point is inside a shape.
[**trim_shape**(shape_pts, from, to, epsilon = 0.0001)](https://openhome.cc/eGossip/OpenSCAD/lib3x-trim_shape.html) | trim a tangled-edge shape to a non-tangled shape.
[**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/3D Function
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 = 0.1, closed = false, angle_threshold = 0)](https://openhome.cc/eGossip/OpenSCAD/lib3x-bezier_smooth.html) | use bazier curves to smooth a path.
[**cross_sections**(shape_pts, path_pts, angles, twist = 0, scale = 1.0)](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 = 0.0001)](https://openhome.cc/eGossip/OpenSCAD/lib3x-in_polyline.html) | check whether a point is on a line.
[**lines_intersection**(line1, line2, ext = false, epsilon = 0.0001)](https://openhome.cc/eGossip/OpenSCAD/lib3x-lines_intersection.html) | find the intersection of two line segments. Return `[]` if lines don't intersect.
[**paths2sections**(paths)](https://openhome.cc/eGossip/OpenSCAD/lib3x-paths2sections.html) | given a list of paths, this function returns all cross-sections described by those paths.
[**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 = false)](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.
[**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.
## Path
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 = "CT_CLK")](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 = "CT_CLK")](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.
[**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 = 0)](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 = "CT_CLK")](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 = "CT_CLK")](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 = "SPI_DOWN", rt_dir = "CT_CLK")](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 = 1, begin_angle = 0, end_angle = 0, ...) ](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]]`.
[**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 = 24)](https://openhome.cc/eGossip/OpenSCAD/lib3x-bend_extrude.html) | extrude and bend a 2D shape.
[**box_extrude**(height, shell_thickness, bottom_thickness, offset_mode = "delta", chamfer = false, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-box_extrude.html) | create a box (container) from a 2D object.
[**ellipse_extrude**(semi_minor_axis, height, center = false, convexity = 10, twist = 0, slices = 20)](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 = 90, twist = 0, convexity = 10)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rounded_extrude.html) | extrude a 2D object roundly from 0 to 180 degrees.
[**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 = "LINE_CROSS")](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_arc.html) | return points on the path of an arc shape.
[**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 = 30, t_step = 0.1)](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 = 1.0, closed = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_path_extend.html) | extend a 2D stroke along a path to create a 2D shape.
[**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 = 0)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_square.html) | return shape points of a rounded square or rectangle.
[**shape_starburst**(r1, r2, n)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_starburst.html) | returns shape points of a star.
[**shape_superformula**(phi_step, m1, m2, n1, n2 = 1, n3 = 1, a = 1, b = 1)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_superformula.html) | return shape points of [Superformula](https://en.wikipedia.org/wiki/Superformula).
[**shape_taiwan**(h, distance = 0)](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 = 0)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shape_trapezium.html) | return shape points of an isosceles trapezoid.
[**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
@@ -153,7 +150,7 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
[**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.
[**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
@@ -163,13 +160,13 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
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 = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-has.html) | return `true` if `lt` contains elem.
[**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 = 1)](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/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", idx = 0)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sort.html) | sort a list.
[**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.
@@ -181,8 +178,8 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
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 = 0, max_value = 1, seed_value = undef)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rand.html) | generate a pseudo random number.
[**util/shuffle**(lt, seed = undef)](https://openhome.cc/eGossip/OpenSCAD/lib3x-shuffle.html) | randomizes the order of the elements.
[**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
@@ -235,7 +232,7 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
[**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 = [0, 0], sy = [0, 0], sz = [0, 0])](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_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.
@@ -245,10 +242,10 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
--|--
[**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 = 360, twist = 0)](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_ring.html) | transform a point inside a rectangle to a point of a ring.
[**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 = [180, 360])](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 = [360, 360], twist = 0)](https://openhome.cc/eGossip/OpenSCAD/lib3x-ptf_torus.html) | transform a point inside a rectangle to a point of a torus.
[**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.
@@ -258,8 +255,8 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
--|--
[**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_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.
@@ -270,10 +267,10 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
Signature | Description
--|--
[**turtle/footprints2**(cmds, start = [0, 0])](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 = [0, 0, 0])](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprints3.html) | a 3D verion of `footprint2`.
[**turtle/lsystem2**(axiom, rules, n, angle, leng = 1, heading = 0, ...)](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 = 1, heading = 0, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-lsystem3.html) | 3D implementation of [L-system](https://en.wikipedia.org/wiki/L-system).
[**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`.
@@ -281,40 +278,40 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
Signature | Description
--|--
[**voxel/vx_ascii**(char, center = false, invert = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_ascii.html) | generate 8x8 voxel points of printable ASCII characters (codes 32dec to 126dec).
[**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 = false)](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 = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_contour.html) | return the contour which encircles the area.
[**voxel/vx_curve**(points, tightness = 0)](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 = false, thickness = 1)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_cylinder.html) | return points that can be used to draw a voxel-style cylinder.
[**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 = false, invert = false)](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 = false, invert = false, normalize = false)](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_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 = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_polygon.html) | return points that can be used to draw a voxel-style polygon.
[**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 = false, thickness = 1)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vx_sphere.html) | return points that can be used to draw a voxel-style sphere.
[**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.
## Part
Signature | Description
--|--
[**part/cone**(radius, length = 0, spacing = 0.5, angle = 50, void = false, ends = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-cone.html) | create a cone for rotatable models.
[**part/connector_peg**(radius, height, spacing = 0.5, void = false, ends = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-connector_peg.html) | create a connector peg.
[**part/joint_T**(shaft_r, shaft_h, t_leng, thickness, spacing = 0.5, center = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-joint_T.html) | create a joint_T for rotatable models.
[**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.
## Surface
Signature | Description
--|--
[**surface/sf_bend**(levels, radius, thickness, depth, angle = 180, invert = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_bend.html) | bend a photo.
[**surface/sf_ring**(levels, radius, thickness, depth, angle = 360, twist = 0, invert = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_ring.html) | turn a photo into a ring.
[**surface/sf_solidify**(surface1, surface2, slicing = "SLASH")](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_solidify.html) | solidify two square surfaces.
[**surface/sf_sphere**(levels, radius, thickness, depth, angle = [180, 360], invert = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_sphere.html) | map a photo onto a sphere.
[**surface/sf_square**(levels, thickness, depth, x_twist = 0, y_twist = 0, invert = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_square.html) | turn a photo into a twistable square.
[**surface/sf_torus**(levels, radius, thickness, depth, angle = [360, 360], twist = 0, invert = false)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sf_torus.html) | turn a photo to a torus.
[**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.
@@ -325,38 +322,54 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
Signature | Description
--|--
[**noise/nz_cell**(points, p, dist = "euclidean")](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 = undef)](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 = undef)](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 = undef)](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 = undef)](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 = undef)](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 = undef)](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 = undef, grid_w = 10, dist = "euclidean")](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 = undef, grid_w = 10, dist = "euclidean")](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 = undef, tile_w = 10, dist = "euclidean")](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 = undef, tile_w = 10, dist = "euclidean")](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.
[**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 = undef)](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 = 1, ...)](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 = undef, spacing = 1, ...)](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 = 1)](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 = undef, spacing = 1)](https://openhome.cc/eGossip/OpenSCAD/lib3x-vrn3_space.html) | create a [Voronoi](https://en.wikipedia.org/wiki/Voronoi_diagram) in the first octant.
[**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 = [0, 0], ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_cells.html) | return cell data of a square maze.
[**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 = [0, 0], seed = undef)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hamiltonian.html) | create a hamiltonian path from a maze.
[**maze/mz_theta_cells**(rows, beginning_number, start = [0, 0], seed = undef)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta_cells.html) | return cell data of a theta 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.
----

View File

@@ -1,5 +1,60 @@
> 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:

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -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");
![along_with](images/lib3x-along_with-3.JPG)
@@ -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;

View File

@@ -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);
![arc_path](images/lib3x-arc_path-1.JPG)
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);
![arc_path](images/lib3x-arc_path-2.JPG)

View File

@@ -47,22 +47,22 @@ An `init_angle` less than 180 degrees is not recommended because the function us
}
![archimedean_spiral](images/lib3x-archimedean_spiral-2.JPG)
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");
}
![archimedean_spiral](images/lib3x-archimedean_spiral-3.JPG)

View File

@@ -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);
![bauer_spiral](images/lib3x-bauer_spiral-1.JPG)

View File

@@ -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");
![bend](images/lib3x-bend-2.JPG)
@@ -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");
![bend](images/lib3x-bend-3.JPG)

View File

@@ -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);
![bezier_curve](images/lib3x-bezier_curve-1.JPG)

View File

@@ -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);
![bezier_smooth](images/lib3x-bezier_smooth-1.JPG)
@@ -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);
![bezier_smooth](images/lib3x-bezier_smooth-2.JPG)

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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");
}
![circle_path](images/lib3x-circle_path-1.JPG)

View File

@@ -11,7 +11,7 @@ Computes contour polygons by applying [marching squares](https://en.wikipedia.or
## Examples
use <hull_polyline2d.scad>;
use <polyline_join.scad>;
use <surface/sf_thicken.scad>;
use <contours.scad>;
@@ -23,10 +23,10 @@ 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)]
]
];
sf_thicken(points, 1);
@@ -36,7 +36,8 @@ Computes contour polygons by applying [marching squares](https://en.wikipedia.or
translate([0, 0, z])
linear_extrude(1)
for(isoline = contours(points, z)) {
hull_polyline2d(isoline, width = 1);
polyline_join(isoline)
circle(.5);
}
}

View File

@@ -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);
![curve](images/lib3x-curve-3.JPG)

View File

@@ -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");
![ellipse_extrude](images/lib3x-ellipse_extrude-3.JPG)

View File

@@ -31,7 +31,7 @@ Creates visually even spacing of n points on the surface of the sphere. Nearest-
![fibonacci_lattice](images/lib3x-fibonacci_lattice-1.JPG)
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);
}
![fibonacci_lattice](images/lib3x-fibonacci_lattice-2.JPG)

View File

@@ -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]
);

View File

@@ -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);
![footprints2](images/lib3x-footprints2-1.JPG)

View File

@@ -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);
![footprints3](images/lib3x-footprints3-1.JPG)

View File

@@ -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");
}
![golden_spiral](images/lib3x-golden_spiral-2.JPG)

View File

@@ -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])]
])
);

View File

@@ -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.

View File

@@ -7,7 +7,7 @@ This function gets the value of the specified key from a [util/map/hashmap](http
## 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.

View File

@@ -7,6 +7,10 @@ Puts a key/value pair to a [util/map/hashmap](https://openhome.cc/eGossip/OpenSC
## 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

View File

@@ -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]);

View File

@@ -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]);

View File

@@ -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);
![helix](images/lib3x-helix-1.JPG)
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);

View File

@@ -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]);
![hollow_out](images/lib3x-hollow_out-1.JPG)

View File

@@ -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
);
![hull_polyline3d](images/lib3x-hull_polyline2d-1.JPG)

View File

@@ -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
);
![polyline3d](images/lib3x-hull_polyline3d-1.JPG)
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);
}
![polyline3d](images/lib3x-hull_polyline3d-2.JPG)

View File

@@ -20,10 +20,10 @@ Checks whether 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 whether 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]));

View File

@@ -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

View File

@@ -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
);

View File

@@ -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]) =

View File

@@ -16,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]);
![m_mirror](images/lib3x-m_mirror-1.JPG)

View File

@@ -19,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);
}
![m_rotation](images/lib3x-m_rotation-1.JPG)
@@ -32,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);
}
![m_rotation](images/lib3x-m_rotation-2.JPG)

View File

@@ -14,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);
![m_scaling](images/lib3x-m_scaling-1.JPG)

View File

@@ -18,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);
}
@@ -29,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);
}
@@ -40,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);
}

View File

@@ -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);
![midpt_smooth](images/lib3x-midpt_smooth-1.JPG)

View File

@@ -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);
![mz_hamiltonian](images/lib3x-mz_hamiltonian-1.JPG)

View File

@@ -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);
}
![mz_hex_walls](images/lib3x-mz_hex_walls-1.JPG)

View File

@@ -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);
![mz_square_cells](images/lib3x-mz_square_cells-1.JPG)

View File

@@ -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);
![mz_square_get](images/lib3x-mz_square_get-1.JPG)

View File

@@ -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);
}
}

View File

@@ -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);
}
![mz_theta_cells](images/lib3x-mz_theta_cells-3.JPG)

View File

@@ -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);
}
![mz_theta_get](images/lib3x-mz_theta_get-1.JPG)

View File

@@ -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]]);

View File

@@ -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);
![nz_perlin1](images/lib3x-nz_perlin1-1.JPG)

View File

@@ -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);
![nz_perlin1s](images/lib3x-nz_perlin1s-1.JPG)

View File

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

View File

@@ -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);
}
}

View File

@@ -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]) {

View File

@@ -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)

View File

@@ -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);

View File

@@ -26,7 +26,7 @@ It divides the space into grids. The nucleus of each cell is randomly placed in
points = vx_sphere(20);
cells = [for(p = points) nz_worley3(p[0], p[1], p[2], seed, grid_w, dist)];
cells = [for(p = points) nz_worley3(p.x, p.y, p.z, seed, grid_w, dist)];
max_dist = max([for(c = cells) c[3]]);
for(i = [0:len(cells) - 1]) {

View File

@@ -18,15 +18,15 @@ It divides the space into grids. The nucleus of each cell is randomly placed in
use <voxel/vx_sphere.scad>;
use <noise/nz_worley3s.scad>;
tile_w = 10;
grid_w = 10;
dist = "euclidean"; // [euclidean, manhattan, chebyshev, border]
seed = 51;
points = vx_sphere(20);
cells = nz_worley3s(points, seed, tile_w, dist);
cells = nz_worley3s(points, seed, grid_w, dist);
for(i = [0:len(cells) - 1]) {
c = (norm([cells[i][0], cells[i][1], cells[i][2]]) % 20) / 20;
c = (norm([cells[i].x, cells[i].y, cells[i].z]) % 20) / 20;
color([c, c, c])
translate(points[i])
cube(1);

View File

@@ -255,29 +255,31 @@ So, which is the correct method? Both methods are correct when you provide only
shape_pentagram_pts = shape_pentagram(star_radius);
// not closed perfectly
translate([-8, 0, 0]) path_extrude(
shape_pentagram_pts,
concat(pts, [pts[0]]),
closed = true,
method = "AXIS_ANGLE"
);
translate([-8, 0, 0])
path_extrude(
shape_pentagram_pts,
[each pts, pts[0]],
closed = true,
method = "AXIS_ANGLE"
);
// adjust it
path_extrude(
shape_pentagram_pts,
concat(pts, [pts[0]]),
[each pts, pts[0]],
closed = true,
twist = 188,
method = "AXIS_ANGLE"
);
// "EULER_ANGLE" is easy in this situation
translate([0, 8, 0]) path_extrude(
shape_pentagram_pts,
concat(pts, [pts[0]]),
closed = true,
method = "EULER_ANGLE"
);
translate([0, 8, 0])
path_extrude(
shape_pentagram_pts,
[each pts, pts[0]],
closed = true,
method = "EULER_ANGLE"
);
![path_extrude](images/lib3x-path_extrude-9.JPG)

View File

@@ -15,7 +15,7 @@ You can use any point as the first point of the edge path. Just remember that yo
## Examples
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <shape_taiwan.scad>;
use <path_scaling_sections.scad>;
use <sweep.scad>;
@@ -33,18 +33,18 @@ You can use any point as the first point of the edge path. Just remember that yo
fst_pt + [0, 0, 60]
];
#hull_polyline3d(edge_path);
#polyline_join(edge_path)
sphere(.5);
sweep(path_scaling_sections(taiwan, edge_path));
![path_scaling_sections](images/lib3x-path_scaling_sections-1.JPG)
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <shape_taiwan.scad>;
use <path_scaling_sections.scad>;
use <sweep.scad>;
use <bezier_curve.scad>;
taiwan = shape_taiwan(100);
fst_pt = [13, 0, 0];
@@ -58,7 +58,8 @@ You can use any point as the first point of the edge path. Just remember that yo
fst_pt + [0, 0, 60]
]);
#hull_polyline3d(edge_path);
#polyline_join(edge_path)
sphere(.5);
sweep(path_scaling_sections(taiwan, edge_path));
![path_scaling_sections](images/lib3x-path_scaling_sections-2.JPG)
@@ -67,7 +68,7 @@ You can use any point as the first point of the edge path. Just remember that yo
use <path_scaling_sections.scad>;
use <sweep.scad>;
use <bezier_curve.scad>;
use <rotate_p.scad>;
use <ptf/ptf_rotate.scad>;
taiwan = shape_taiwan(100);
fst_pt = [13, 0, 0];
@@ -91,7 +92,7 @@ You can use any point as the first point of the edge path. Just remember that yo
for(i = [0:leng - 1])
[
for(p = sections[i])
rotate_p(p, twist_step * i)
ptf_rotate(p, twist_step * i)
]
];
@@ -99,11 +100,11 @@ You can use any point as the first point of the edge path. Just remember that yo
![path_scaling_sections](images/lib3x-path_scaling_sections-3.JPG)
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <shape_taiwan.scad>;
use <path_scaling_sections.scad>;
use <sweep.scad>;
use <rotate_p.scad>;
use <ptf/ptf_rotate.scad>;
taiwan = shape_taiwan(100);
@@ -115,15 +116,16 @@ You can use any point as the first point of the edge path. Just remember that yo
a = atan2(fst_pt[1], fst_pt[0]);
edge_path = [
fst_pt,
fst_pt + rotate_p([0, 0, 10], a),
fst_pt + rotate_p([10, 0, 20], a),
fst_pt + rotate_p([8, 0, 30], a),
fst_pt + rotate_p([10, 0, 40], a),
fst_pt + rotate_p([0, 0, 50], a),
fst_pt + rotate_p([0, 0, 60], a)
fst_pt + ptf_rotate([0, 0, 10], a),
fst_pt + ptf_rotate([10, 0, 20], a),
fst_pt + ptf_rotate([8, 0, 30], a),
fst_pt + ptf_rotate([10, 0, 40], a),
fst_pt + ptf_rotate([0, 0, 50], a),
fst_pt + ptf_rotate([0, 0, 60], a)
];
#hull_polyline3d(edge_path);
#polyline_join(edge_path)
sphere(.5);
sweep(path_scaling_sections(taiwan, edge_path));
![path_scaling_sections](images/lib3x-path_scaling_sections-4.JPG)

View File

@@ -11,7 +11,7 @@ You paths should be indexed count-clockwisely.
## Examples
use <paths2sections.scad>;
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <sweep.scad>;
paths = [
@@ -26,14 +26,15 @@ You paths should be indexed count-clockwisely.
sweep(sections);
#for(path = paths) {
hull_polyline3d(path, 0.5);
polyline_join(path)
sphere(.25);
}
![paths2sections](images/lib3x-paths2sections-1.JPG)
use <bezier_curve.scad>;
use <paths2sections.scad>;
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <sweep.scad>;
t_step = 0.05;
@@ -59,7 +60,8 @@ You paths should be indexed count-clockwisely.
sweep(sections);
#for(path = paths) {
hull_polyline3d(path, 0.5);
polyline_join(path)
sphere(.25);
}
![paths2sections](images/lib3x-paths2sections-2.JPG)

View File

@@ -13,8 +13,10 @@ Creates a pie (circular sector). Its `$fa`, `$fs` and `$fn` are consistent with
use <pie.scad>;
pie(radius = 20, angle = [210, 310]);
translate([-15, 0, 0]) pie(radius = 20, angle = [45, 135]);
translate([15, 0, 0]) pie(radius = 20, angle = [45, 135], $fn = 12);
translate([-15, 0, 0])
pie(radius = 20, angle = [45, 135]);
translate([15, 0, 0])
pie(radius = 20, angle = [45, 135], $fn = 12);
![pie](images/lib3x-pie-1.JPG)

View File

@@ -0,0 +1,22 @@
# dodecahedron
Creates a dodecahedron.
**Since:** 3.2
## Parameters
- `radius` : Radius of the dodecahedron.
- `detail` : Default to 0. Setting this to a value greater than 0 adds vertices making it no longer a dodecahedron.
## Examples
use <polyhedra/dodecahedron.scad>;
for(i = [0:5]) {
translate([i * 2, 0])
dodecahedron(radius = 1, detail = i);
}
![dodecahedron](images/lib3x-polyhedra_dodecahedron-1.JPG)

View File

@@ -0,0 +1,22 @@
# hexahedron
Creates a hexahedron.
**Since:** 3.2
## Parameters
- `radius` : Radius of the hexahedron.
- `detail` : Default to 0. Setting this to a value greater than 0 adds vertices making it no longer a hexahedron.
## Examples
use <polyhedra/hexahedron.scad>;
for(i = [0:5]) {
translate([i * 2, 0])
hexahedron(radius = 1, detail = i);
}
![hexahedron](images/lib3x-polyhedra_hexahedron-1.JPG)

View File

@@ -0,0 +1,22 @@
# icosahedron
Creates a icosahedron.
**Since:** 3.2
## Parameters
- `radius` : Radius of the icosahedron.
- `detail` : Default to 0. Setting this to a value greater than 0 adds vertices making it no longer a icosahedron.
## Examples
use <polyhedra/icosahedron.scad>;
for(i = [0:5]) {
translate([i * 2, 0])
icosahedron(radius = 1, detail = i);
}
![icosahedron](images/lib3x-polyhedra_icosahedron-1.JPG)

View File

@@ -0,0 +1,22 @@
# octahedron
Creates a octahedron.
**Since:** 3.2
## Parameters
- `radius` : Radius of the octahedron.
- `detail` : Default to 0. Setting this to a value greater than 0 adds vertices making it no longer a octahedron.
## Examples
use <polyhedra/octahedron.scad>;
for(i = [0:5]) {
translate([i * 2, 0])
octahedron(radius = 1, detail = i);
}
![octahedron](images/lib3x-polyhedra_octahedron-1.JPG)

View File

@@ -0,0 +1,22 @@
# polar_zonohedra
Creates a [polar zonohedra](https://mathworld.wolfram.com/PolarZonohedron.html).
**Since:** 3.2
## Parameters
- `n` : n equal rhombs surrounding one vertex. (rotational symmetry)
- `theta` : the pitch angle of the edges. Default to 35.5.
## Examples
use <polyhedra/polar_zonohedra.scad>;
for(n = [3:8]) {
translate([0.5 * n * (n - 3), 0, 0])
polar_zonohedra(n);
}
![polar_zonohedra](images/lib3x-polyhedra_polar_zonohedra-1.JPG)

View File

@@ -0,0 +1,24 @@
# star
Create a star. Default to a pentagram.
**Since:** 3.2
## Parameters
- `outer_radius`: The outer radius of the star. Default to 1.
- `inner_radius`: The inner radius of the star. Default to 0.381966.
- `height`: The star height. Default to 0.5.
- `n`: The burst number. Default to 5.
## Examples
use <polyhedra/star.scad>;
for(i = [3:6]) {
translate([(i - 3) * 2, 0])
star(n = i);
}
![star](images/lib3x-polyhedra_star-1.JPG)

View File

@@ -0,0 +1,26 @@
# superellipsoid
Creates a [superellipsoid](https://en.wikipedia.org/wiki/Superellipsoid).
**Since:** 3.2
## Parameters
- `e` : The east-west parameter.
- `n` : The north-south parameter.
## Examples
use <polyhedra/superellipsoid.scad>;
$fn = 24;
step = 0.5;
for(e = [0:step:4], n = [0:step:4]) {
translate([e / step, n / step] * 3)
superellipsoid(e, n);
}
![superellipsoid](images/lib3x-polyhedra_superellipsoid-1.JPG)

View File

@@ -0,0 +1,22 @@
# tetrahedron
Creates a tetrahedron.
**Since:** 3.2
## Parameters
- `radius` : Radius of the tetrahedron.
- `detail` : Default to 0. Setting this to a value greater than 0 adds vertices making it no longer a tetrahedron.
## Examples
use <polyhedra/tetrahedron.scad>;
for(i = [0:5]) {
translate([i * 2, 0])
tetrahedron(radius = 1, detail = i);
}
![tetrahedron](images/lib3x-polyhedra_tetrahedron-1.JPG)

View File

@@ -23,16 +23,23 @@ Creates a polyline from a list of `[x, y]` coordinates. When the end points are
use <polyline2d.scad>;
$fn = 24;
polyline2d(points = [[1, 2], [-5, -4], [-5, 3], [5, 5]], width = 1,
endingStyle = "CAP_ROUND");
polyline2d(
points = [[1, 2], [-5, -4], [-5, 3], [5, 5]],
width = 1,
endingStyle = "CAP_ROUND"
);
![polyline2d](images/lib3x-polyline2d-2.JPG)
use <polyline2d.scad>;
$fn = 24;
polyline2d(points = [[1, 2], [-5, -4], [-5, 3], [5, 5]], width = 1,
startingStyle = "CAP_ROUND", endingStyle = "CAP_ROUND");
polyline2d(
points = [[1, 2], [-5, -4], [-5, 3], [5, 5]],
width = 1,
startingStyle = "CAP_ROUND",
endingStyle = "CAP_ROUND"
);
![polyline2d](images/lib3x-polyline2d-3.JPG)

View File

@@ -0,0 +1,42 @@
# polyline_join
Place a join on each point. Hull each pair of joins and union all convex hulls.
**Since:** 3.2
## Parameters
- `points` : a list of points.
## Examples
use <polyline_join.scad>;
polyline_join([[0, 0], [10, 0], [10, 10], [0, 10]])
square(1);
polyline_join([[15, 0], [25, 0], [25, 10], [15, 10]]) {
square(1);
circle(1);
square(1);
circle(2);
}
![polyline_join](images/lib3x-polyline_join-1.JPG)
use <polyline_join.scad>;
polyline_join([[0, 0, 0], [10, 0, 0], [10, 0, 10], [10, 10, 10]])
cube(1);
polyline_join([[15, 0, 0], [25, 0, 0], [25, 0, 10], [25, 10, 10]]) {
cube(1);
sphere(1);
cube(1);
sphere(2);
}
![polyline_join](images/lib3x-polyline_join-2.JPG)

View File

@@ -1,141 +0,0 @@
# polysections
Crosscutting a tube-like shape at different points gets several cross-sections. This module can operate reversely. It uses cross-sections to construct a tube-like shape. For example, imagine that you have the following cross-sections:
![polysections](images/lib3x-polysections-1.JPG)
This module can use them to construct the following model:
![polysections](images/lib3x-polysections-2.JPG)
Looks like extruding along the path? Yes, it can perform the task; however, it's more flexible.
You can also view it as a better polyline3d module if you want. If you have only the points of a path, using `polyline3d` or `hull_polyline3d` is a simple solution. If you know the cross sections along a path, you can use `polysections` to do more.
When using this module, you should use points to represent each cross section. The points of your cross section should have count-clockwise indexes. For example:
![polysections](images/lib3x-polysections-10.JPG)
If your cross section is hollow, set the `triangles` parameter to `"HOLLOW"` and index the points as the following:
![polysections](images/lib3x-polysections-5.JPG)
You can cut triangles by yourself. For example, the above shape can be cut into triangles such as:
![polysections](images/lib3x-polysections-6.JPG)
The indexes of the above triangles is:
[
[0, 3, 1],
[1, 3, 4],
[1, 4, 2],
[2, 4, 5],
[2, 5, 0],
[0, 5, 3]
]
When defining triangles, you can use clockwise or counter-clockwise indexes.
## Parameters
- `sections` : A list of cross-sections. Each cross-section is represented by a list of points. See the example below.
- `triangles` : `"SOLID"` (default), `"HOLLOW"`, or user-defined indexes. See example below.
## Examples
use <rotate_p.scad>;
use <polysections.scad>;
section1 = [
[20, 0, 0],
[18, 9, 0],
[15, 10, 0],
[10, 0, 0]
];
// spin section1
sections = [
for(i = [0:55])
[
for(p = section1)
let(pt = rotate_p(p, [90, 0, 10 * i]))
[pt[0], pt[1] , pt[2] + i]
]
];
polysections(sections);
![polysections](images/lib3x-polysections-7.JPG)
use <rotate_p.scad>;
use <polysections.scad>;
section1 = [
// outer
[20, 0, 0],
[18, 9, 0],
[15, 10, 0],
[10, 0, 0],
// inner
[18, 2, 0],
[17, 7, 0],
[15, 7, 0],
[12, 2, 0]
];
// spin section1
sections = [
for(i = [0:55])
[
for(p = section1)
let(pt = rotate_p(p, [90, 0, 10 * i]))
[pt[0], pt[1] , pt[2] + i]
]
];
polysections(sections, "HOLLOW");
![polysections](images/lib3x-polysections-8.JPG)
use <rotate_p.scad>;
use <polysections.scad>;
section1 = [
// outer
[30, 0, 0],
[15, 10, 0],
[10, 0, 0],
// inner
[26, 1, 0],
[15, 8, 0],
[12, 1, 0],
];
// spin section1
sections = [
for(i = [0:55])
[
for(p = section1)
let(pt = rotate_p(p, [90, 0, 10 * i]))
[pt[0], pt[1] , pt[2] + i]
]
];
polysections(
sections = sections,
triangles = [
[0, 3, 1],
[1, 3, 4],
[1, 4, 2],
[2, 4, 5],
[2, 5, 0],
[0, 5, 3]
]
);
![polysections](images/lib3x-polysections-9.JPG)

View File

@@ -21,12 +21,10 @@ Transforms a point inside a rectangle to a point of an arc.
radius = 20;
angle = 180;
for(i = [0:len(t) - 1]) {
for(pt = vx_ascii(t[i], invert = true)) {
bended = ptf_bend(size, pt + [i * 8, 0], radius, angle);
translate(bended)
sphere(0.5, $fn = 24);
}
for(i = [0:len(t) - 1], pt = vx_ascii(t[i], invert = true)) {
bended = ptf_bend(size, pt + [i * 8, 0], radius, angle);
translate(bended)
sphere(0.5, $fn = 24);
}
![ptf_bend](images/lib3x-ptf_bend-1.JPG)

View File

@@ -13,29 +13,31 @@ Transform a point inside a rectangle to a point inside a circle. You can use it
## Examples
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <ptf/ptf_circle.scad>;
size = [10, 10];
rows = [
for(y = [0:size[1]])
[for(x = [0:size[0]]) [x, y]]
for(y = [0:size.y])
[for(x = [0:size.x]) [x, y]]
];
columns = [
for(x = [0:size[0]])
[for(y = [0:size[1]]) [x, y]]
for(x = [0:size.x])
[for(y = [0:size.y]) [x, y]]
];
for(line = rows) {
transformed = [for(p = line) ptf_circle(size, p)];
hull_polyline3d(transformed, thickness = .1);
polyline_join(transformed)
sphere(.05);
}
for(line = columns) {
transformed = [for(p = line) ptf_circle(size, p)];
hull_polyline3d(transformed, thickness = .1);
polyline_join(transformed)
sphere(.05);
}
![ptf_circle](images/lib3x-ptf_circle-2.JPG)

View File

@@ -16,30 +16,32 @@ Transforms a point inside a rectangle to a point of a ring. It can create things
## Examples
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <ptf/ptf_ring.scad>;
size = [20, 10];
radius = 5;
rows = [
for(y = [0:size[1]])
[for(x = [0:size[0]]) [x, y]]
for(y = [0:size.y])
[for(x = [0:size.x]) [x, y]]
];
columns = [
for(x = [0:size[0]])
[for(y = [0:size[1]]) [x, y]]
for(x = [0:size.x])
[for(y = [0:size.y]) [x, y]]
];
for(line = rows) {
transformed = [for(p = line) ptf_ring(size, p, radius, 360, 180)];
hull_polyline3d(transformed, thickness = .5);
polyline_join(transformed)
sphere(.25);
}
for(line = columns) {
transformed = [for(p = line) ptf_ring(size, p, radius, 360, 180)];
hull_polyline3d(transformed, thickness = .5);
polyline_join(transformed)
sphere(.25);
}
![ptf_ring](images/lib3x-ptf_ring-2.JPG)

View File

@@ -22,11 +22,11 @@ Rotates a point `a` degrees around the axis of the coordinate system or an arbit
hull() {
sphere(1);
translate(ptf_rotate(point, a))
rotate(a)
sphere(1);
rotate(a)
sphere(1);
}
![ptf_rotate](images/lib3x-rotate_p-1.JPG)
![ptf_rotate](images/lib3x-ptf_rotate-1.JPG)
use <ptf/ptf_rotate.scad>;
@@ -48,7 +48,7 @@ Rotates a point `a` degrees around the axis of the coordinate system or an arbit
%sphere(radius);
![ptf_rotate](images/lib3x-rotate_p-2.JPG)
![ptf_rotate](images/lib3x-ptf_rotate-2.JPG)
use <ptf/ptf_rotate.scad>;
@@ -57,7 +57,7 @@ Rotates a point `a` degrees around the axis of the coordinate system or an arbit
hull() {
sphere(1);
translate(v)
sphere(1);
sphere(1);
}
p = [10, 10, 0];
@@ -66,4 +66,4 @@ Rotates a point `a` degrees around the axis of the coordinate system or an arbit
sphere(1);
}
![ptf_rotate](images/lib3x-rotate_p-3.JPG)
![ptf_rotate](images/lib3x-ptf_rotate-3.JPG)

View File

@@ -15,7 +15,7 @@ Transforms a point inside a rectangle to a point of a sphere. It can create thin
## Examples
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <ptf/ptf_sphere.scad>;
size = [20, 10];
@@ -23,23 +23,25 @@ Transforms a point inside a rectangle to a point of a sphere. It can create thin
angle = [180, 270];
rows = [
for(y = [0:size[1]])
[for(x = [0:size[0]]) [x, y]]
for(y = [0:size.y])
[for(x = [0:size.x]) [x, y]]
];
columns = [
for(x = [0:size[0]])
[for(y = [0:size[1]]) [x, y]]
for(x = [0:size.x])
[for(y = [0:size.y]) [x, y]]
];
for(line = rows) {
transformed = [for(p = line) ptf_sphere(size, p, radius, angle)];
hull_polyline3d(transformed, thickness = .5);
polyline_join(transformed)
sphere(.25);
}
for(line = columns) {
transformed = [for(p = line) ptf_sphere(size, p, radius, angle)];
hull_polyline3d(transformed, thickness = .5);
polyline_join(transformed)
sphere(.25);
}
![ptf_sphere](images/lib3x-ptf_sphere-2.JPG)

View File

@@ -16,7 +16,7 @@ Transforms a point inside a rectangle to a point of a torus. It can create thing
## Examples
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <ptf/ptf_torus.scad>;
size = [20, 10];
@@ -25,23 +25,25 @@ Transforms a point inside a rectangle to a point of a torus. It can create thing
twist = 90;
rows = [
for(y = [0:size[1]])
[for(x = [0:size[0]]) [x, y]]
for(y = [0:size.y])
[for(x = [0:size.x]) [x, y]]
];
columns = [
for(x = [0:size[0]])
[for(y = [0:size[1]]) [x, y]]
for(x = [0:size.x])
[for(y = [0:size.y]) [x, y]]
];
for(line = rows) {
transformed = [for(p = line) ptf_torus(size, p, radius, angle, twist)];
hull_polyline3d(transformed, thickness = .5);
polyline_join(transformed)
sphere(.25);
}
for(line = columns) {
transformed = [for(p = line) ptf_torus(size, p, radius, angle, twist)];
hull_polyline3d(transformed, thickness = .5);
polyline_join(transformed)
sphere(.25);
}
![ptf_torus](images/lib3x-ptf_torus-2.JPG)

View File

@@ -14,29 +14,31 @@ Twist a point along the x-axis. You can use it to create something such as a [tw
## Examples
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <ptf/ptf_x_twist.scad>;
size = [20, 10];
rows = [
for(y = [0:size[1]])
[for(x = [0:size[0]]) [x, y]]
for(y = [0:size.y])
[for(x = [0:size.x]) [x, y]]
];
columns = [
for(x = [0:size[0]])
[for(y = [0:size[1]]) [x, y]]
for(x = [0:size.x])
[for(y = [0:size.y]) [x, y]]
];
for(line = rows) {
twisted = [for(p = line) ptf_x_twist(size, p, 90)];
hull_polyline3d(twisted, thickness = .1);
polyline_join(twisted)
sphere(.05);
}
for(line = columns) {
twisted = [for(p = line) ptf_x_twist(size, p, 90)];
hull_polyline3d(twisted, thickness = .1);
polyline_join(twisted)
sphere(.05);
}
![ptf_x_twist](images/lib3x-ptf_x_twist-1.JPG)

View File

@@ -14,29 +14,31 @@ Twist a point along the y-axis. You can use it to create something such as a [tw
## Examples
use <hull_polyline3d.scad>;
use <polyline_join.scad>;
use <ptf/ptf_y_twist.scad>;
size = [10, 20];
rows = [
for(y = [0:size[1]])
[for(x = [0:size[0]]) [x, y]]
for(y = [0:size.y])
[for(x = [0:size.x]) [x, y]]
];
columns = [
for(x = [0:size[0]])
[for(y = [0:size[1]]) [x, y]]
for(x = [0:size.x])
[for(y = [0:size.y]) [x, y]]
];
for(line = rows) {
twisted = [for(p = line) ptf_y_twist(size, p, 90)];
hull_polyline3d(twisted, thickness = .1);
polyline_join(twisted)
sphere(.05);
}
for(line = columns) {
twisted = [for(p = line) ptf_y_twist(size, p, 90)];
hull_polyline3d(twisted, thickness = .1);
polyline_join(twisted)
sphere(.05);
}
![ptf_y_twist](images/lib3x-ptf_y_twist-1.JPG)

View File

@@ -0,0 +1,69 @@
# rails2sections
Create sections along rails. Combined with the `sweep` module, you can describe a more complex model.
Rails should be indexed count-clockwisely.
**Since:** 3.2
## Parameters
- `rails` : A list of rails used to describe the surface of the model.
## Examples
use <rails2sections.scad>;
use <polyline_join.scad>;
use <sweep.scad>;
rails = [
[[5, 0, 5], [15, 10, 10], [25, 20, 5]],
[[-5, 0, 5], [-15, 10, 10], [-25, 20, 5]],
[[-5, 0, -5], [-15, 10, -10], [-25, 20, -5]],
[[5, 0, -5], [15, 10, -10], [25, 20, -5]]
];
sections = rails2sections(rails);
sweep(sections);
#for(path = rails) {
polyline_join(path)
sphere(.25);
}
![rails2sections](images/lib3x-rails2sections-1.JPG)
use <bezier_curve.scad>;
use <rails2sections.scad>;
use <polyline_join.scad>;
use <sweep.scad>;
t_step = 0.05;
rails = [
bezier_curve(t_step,
[[1.25, 0, 5], [5, 20, 5], [16, 20, -2], [18, 20, 10], [30, 15, 8]]
),
bezier_curve(t_step,
[[-1.25, 0, 5], [0, 20, 5], [16, 22, -2], [18, 20, 10], [30, 25, 8]]
),
bezier_curve(t_step,
[[-1.25, 0, -5], [0, 20, -5], [16, 20, 1], [18, 27, -3], [20, 27, -5]]
),
bezier_curve(t_step,
[[1.25, 0, -5], [5, 20, -5], [16, 20, 1], [18, 17.5, -3], [20, 17.5, -5]]
)
];
sections = rails2sections(rails);
sweep(sections);
#for(path = rails) {
polyline_join(path)
sphere(.25);
}
![rails2sections](images/lib3x-rails2sections-2.JPG)

View File

@@ -1,82 +0,0 @@
# rotate_p
Rotates a point `a` degrees about the axis of the coordinate system or around an arbitrary axis. It behaves as the built-in `rotate` module
## Parameters
- `point` : A 3D point `[x, y, z]` or a 2D point `[x, y]`.
- `a` : If it's `[deg_x, deg_y, deg_z]`, the rotation is applied in the order `x`, `y`, `z`. If it's `[deg_x, deg_y]`, the rotation is applied in the order `x`, `y`. If it's`[deg_x]`, the rotation is only applied to the `x` axis. If it's an number, the rotation is only applied to the `z` axis or an arbitrary axis.
- `v`: A vector allows you to set an arbitrary axis about which the object will be rotated. When `a` is an array, the `v` argument is ignored. **Since:** 1.1.
## Examples
You can use the code below to create a line.
use <rotate_p.scad>;
hull() {
sphere(1);
rotate([0, -45, 45])
translate([20, 0, 0])
sphere(1);
}
The following code has the same effect.
use <rotate_p.scad>;
point = [20, 0, 0];
a = [0, -45, 45];
hull() {
sphere(1);
translate(rotate_p(point, a))
rotate(a)
sphere(1);
}
![rotate_p](images/lib3x-rotate_p-1.JPG)
The `rotate_p` function is useful in some situations. For example, you probably want to get all points on the path of a spiral around a sphere.
use <rotate_p.scad>;
radius = 40;
step_angle = 10;
z_circles = 20;
points = [for(a = [0:step_angle:90 * z_circles])
rotate_p(
[radius, 0, 0],
[0, -90 + 2 * a / z_circles, a]
)
];
// Once you get all points on the path, you can place anything at each point.
// I just place a sphere as a simple demonstration.
for(p = points) {
translate(p)
sphere(1);
}
%sphere(radius);
![rotate_p](images/lib3x-rotate_p-2.JPG)
use <rotate_p.scad>;
v = [10, 10, 10];
hull() {
sphere(1);
translate(v)
sphere(1);
}
p = [10, 10, 0];
for(i = [0:20:340]) {
translate(rotate_p(p, a = i, v = v))
sphere(1);
}
![rotate_p](images/lib3x-rotate_p-3.JPG)

37
docs/lib3x-select.md Normal file
View File

@@ -0,0 +1,37 @@
# select
Selects module objects.
**Since:** 3.2
## Parameters
- `i` : An index value, range, or list. Select all module objects if `i` is ignored.
## Examples
If you write code like this:
i = 0;
if(i == 0) {
sphere(1);
}
else if(i == 1) {
cube(1);
}
else if(i == 2) {
cylinder(1, 1);
}
You may use `select`:
use <select.scad>;
i = 0;
select(i) {
sphere(1);
cube(1);
cylinder(1, 1);
}

Some files were not shown because too many files have changed in this diff Show More