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

214 Commits

Author SHA1 Message Date
Justin Lin
bb33edfd75 add deprecated msg 2022-10-11 17:41:16 +08:00
Justin Lin
8bfcdc39a9 update RELEASE 2022-10-11 11:14:19 +08:00
Justin Lin
5e60756a27 update README 2022-10-11 11:11:03 +08:00
Justin Lin
2ea9bcdffc update note 2022-10-11 11:04:08 +08:00
Justin Lin
f26629cb4c update examples 2022-10-11 11:03:41 +08:00
Justin Lin
ea60a5628a add fidget_boo 2022-10-02 17:33:30 +08:00
Justin Lin
c1d1997714 spacing = 1.35 2022-09-26 07:07:19 +08:00
Justin Lin
78a23c0a12 spacing = 1.25 2022-09-25 21:42:14 +08:00
Justin Lin
17d6364865 add fidget_pumpkin 2022-09-25 19:43:12 +08:00
Justin Lin
fbb4024168 simplified symbols 2022-09-25 12:30:12 +08:00
Justin Lin
fcdcf0b2b4 change eyes 2022-09-24 16:31:30 +08:00
Justin Lin
e75fd110d7 adjust head 2022-09-24 16:17:35 +08:00
Justin Lin
49461b3ce1 adjust head 2022-09-24 15:11:52 +08:00
Justin Lin
86028431bf use pt hash 2022-09-21 17:11:08 +08:00
Justin Lin
c30e83d318 adjust position 2022-09-21 11:23:22 +08:00
Justin Lin
bd628815bd modify head 2022-09-21 10:02:52 +08:00
Justin Lin
7a6ea23903 modify mouth 2022-09-21 09:15:42 +08:00
Justin Lin
ebfc46fd26 add maze_maze 2022-09-18 12:00:18 +08:00
Justin Lin
469fdcc6f7 del sorted param 2022-09-18 11:15:39 +08:00
Justin Lin
5578c169b0 rename 2022-09-14 15:30:27 +08:00
Justin Lin
b90b83ebc5 format 2022-09-13 16:46:03 +08:00
Justin Lin
daaff1322f add tri_concave_hull 2022-09-13 14:56:36 +08:00
Justin Lin
84c83769db rename 2022-09-11 15:56:17 +08:00
Justin Lin
bb59ba0939 rename 2022-09-11 15:54:53 +08:00
Justin Lin
3c70c23afa add island_maze 2022-09-11 13:07:12 +08:00
Justin Lin
683074dc54 change rose scale 2022-09-03 11:25:49 +08:00
Justin Lin
9d2f6eaac2 add rose_scale 2022-09-03 11:17:29 +08:00
Justin Lin
4c46ac11fc use sf_hull 2022-09-03 09:48:24 +08:00
Justin Lin
fb73eced66 change param value 2022-09-02 16:13:44 +08:00
Justin Lin
7a890293fb reduce ovelapped propabilities 2022-09-02 16:07:43 +08:00
Justin Lin
7eff4d759e refactor 2022-09-02 14:31:28 +08:00
Justin Lin
d78bed91e7 more random 2022-09-02 13:13:05 +08:00
Justin Lin
f875bacaf8 add climbing_rose 2022-09-02 11:27:57 +08:00
Justin Lin
bc424ed7b3 add center 2022-09-02 10:39:15 +08:00
Justin Lin
ca7a0e7ef1 i is not required 2022-08-31 10:06:41 +08:00
Justin Lin
264d83cdf1 ci as a seed factor 2022-08-31 09:48:53 +08:00
Justin Lin
7af26906d0 update img 2022-08-29 11:57:34 +08:00
Justin Lin
ee0ffbabd3 larger rect 2022-08-29 11:56:01 +08:00
Justin Lin
ce257f859b add directions param 2022-08-27 17:31:36 +08:00
Justin Lin
4bdd3ca089 change param order 2022-08-27 17:30:21 +08:00
Justin Lin
18281f72fc refactor 2022-08-27 16:38:29 +08:00
Justin Lin
18d3757079 refactor for adding a directions function 2022-08-27 16:19:09 +08:00
Justin Lin
2d5a38194a update doc 2022-08-27 15:36:50 +08:00
Justin Lin
02895d6529 add convexity 2022-08-27 15:33:30 +08:00
Justin Lin
29594b8688 use sf_cylinder if angle is 360 2022-08-27 15:26:59 +08:00
Justin Lin
d0ea27a76c update doc 2022-08-27 15:13:05 +08:00
Justin Lin
ea8fc1da2b update docs 2022-08-27 14:58:41 +08:00
Justin Lin
d29ab4eb8a check if coplanar 2022-08-22 23:38:18 +08:00
Justin Lin
824168a006 optimization 2022-08-22 14:34:43 +08:00
Justin Lin
87ec19fb7a refactor lines_intersection 2022-08-22 11:01:17 +08:00
Justin Lin
2602a90388 refactor lines_intersection 2022-08-22 11:00:51 +08:00
Justin Lin
95b679d82a rename 2022-08-21 16:32:27 +08:00
Justin Lin
6e08ec5fdb giant_theta_maze 2022-08-21 11:01:22 +08:00
Justin Lin
6a98237517 update head 2022-08-20 15:49:08 +08:00
Justin Lin
4a9d935059 noise lower rock 2022-08-18 15:30:45 +08:00
Justin Lin
f587ffecd0 offset .1 2022-08-18 11:48:31 +08:00
Justin Lin
7689ac9c55 add giant maze 2022-08-18 11:46:47 +08:00
Justin Lin
b832cbec2e refactor 2022-08-17 15:28:21 +08:00
Justin Lin
174eb609d5 add doc 2022-08-16 10:36:34 +08:00
Justin Lin
40dfebe040 refactor 2022-08-13 17:30:58 +08:00
Justin Lin
795c7c0a87 don't use hull 2022-08-13 17:16:54 +08:00
Justin Lin
a403ca060e add fidget_skull 2022-08-12 17:12:01 +08:00
Justin Lin
995b531faf update README 2022-08-11 16:55:59 +08:00
Justin Lin
ce915abd33 update doc 2022-08-11 16:49:34 +08:00
Justin Lin
631e78d642 add doc 2022-08-11 16:45:52 +08:00
Justin Lin
2cf3ac6781 refactor 2022-08-11 09:33:14 +08:00
Justin Lin
04e089613a rename 2022-08-10 15:06:22 +08:00
Justin Lin
232a2a56bf add fourier_vase 2022-08-07 17:07:52 +08:00
Justin Lin
8fbf812bca change values 2022-08-06 15:20:49 +08:00
Justin Lin
582fc09262 fn 4 2022-08-06 15:05:57 +08:00
Justin Lin
3a4e6b2a19 halftone 2022-08-06 15:05:17 +08:00
Justin Lin
bd64388362 add photo_fibonacci_lattice 2022-08-05 08:51:31 +08:00
Justin Lin
a3933b945e fix error dir 2022-08-02 15:11:19 +08:00
Justin Lin
9ef35e42bd fix off-1 error 2022-08-02 15:04:59 +08:00
Justin Lin
ef07707cdb accept n = 0 2022-08-02 07:53:08 +08:00
Justin Lin
b33e725523 improve wave_smoothness 2022-08-01 09:21:36 +08:00
Justin Lin
0c29e2b108 don't require x, y 2022-08-01 09:07:45 +08:00
Justin Lin
6b6f0d832a update examples 2022-07-31 20:44:44 +08:00
Justin Lin
f35d04e0e6 update examples 2022-07-31 20:36:03 +08:00
Justin Lin
1e1587c600 add spiral_ripples 2022-07-30 09:11:12 +08:00
Justin Lin
390bef0061 refactor 2022-07-29 08:58:27 +08:00
Justin Lin
86d5da1e23 remove center param 2022-07-29 08:32:43 +08:00
Justin Lin
b83d9440c0 rename 2022-07-29 08:19:44 +08:00
Justin Lin
30b906a1c3 add test 2022-07-28 20:14:02 +08:00
Justin Lin
047c175a19 update note 2022-07-28 15:46:18 +08:00
Justin Lin
77f9750091 add comment 2022-07-28 15:30:02 +08:00
Justin Lin
5b8e62a559 add doc 2022-07-28 15:25:50 +08:00
Justin Lin
5b725bd6bb use matrix index convention 2022-07-28 15:21:02 +08:00
Justin Lin
abd5683698 fix x error 2022-07-27 11:35:04 +08:00
Justin Lin
49a68a9f84 update examples 2022-07-22 11:06:35 +08:00
Justin Lin
505e514075 update doc 2022-07-22 10:42:20 +08:00
Justin Lin
11f9a5b58a add demo 2022-07-22 10:38:21 +08:00
Justin Lin
3b1c12247c add center 2022-07-21 20:23:57 +08:00
Justin Lin
f732686823 update example 2022-07-21 18:58:10 +08:00
Justin Lin
15c1cd605f fix a_step == 0 2022-07-21 18:00:27 +08:00
Justin Lin
709c92714e add arc_great_circle 2022-07-21 17:17:52 +08:00
Justin Lin
ed75179dfe default to 0.8 2022-07-20 18:31:11 +08:00
Justin Lin
cb1ee004ce del * 2022-07-20 07:43:14 +08:00
Justin Lin
6d0eb7de03 rename var 2022-07-19 17:19:56 +08:00
Justin Lin
a51a8f2bd4 0.618 2022-07-19 11:50:55 +08:00
Justin Lin
e6e52f7ab8 golden angle 2022-07-19 11:36:14 +08:00
Justin Lin
4e2edcef5b update doc 2022-07-19 11:34:07 +08:00
Justin Lin
756fde7c0f fix dir 2022-07-19 11:32:27 +08:00
Justin Lin
f278d7430a del 0.5 2022-07-19 11:29:09 +08:00
Justin Lin
86e30155c8 update doc 2022-07-19 11:18:29 +08:00
Justin Lin
97860fdf67 update doc 2022-07-19 10:18:26 +08:00
Justin Lin
c93d1ae897 add fibonacci_lattice2 2022-07-19 10:05:36 +08:00
Justin Lin
0a5d64d999 rename 2022-07-17 11:01:10 +08:00
Justin Lin
8eba081532 add storage_box 2022-07-17 10:38:06 +08:00
Justin Lin
bcee313c0e refactor 2022-07-14 12:12:58 +08:00
Justin Lin
4b7133252f add tetrapod_doll 2022-07-14 10:05:21 +08:00
Justin Lin
7a6712d1b1 format 2022-07-14 08:37:18 +08:00
Justin Lin
32995370d0 refactor foot 2022-07-11 09:14:58 +08:00
Justin Lin
65b434878d scale fin 2022-07-10 18:27:00 +08:00
Justin Lin
22b14f7923 fix foot error 2022-07-10 18:09:26 +08:00
Justin Lin
e4f3522143 clean up 2022-07-10 17:55:50 +08:00
Justin Lin
d1f595dbf1 clean up 2022-07-10 16:31:55 +08:00
Justin Lin
28278e814a add treble_clef_dragon 2022-07-10 16:12:20 +08:00
Justin Lin
fbe58944e8 remove scale 2022-07-10 15:06:48 +08:00
Justin Lin
dd63a9574e update docs 2022-07-10 11:52:01 +08:00
Justin Lin
0c1e2049e2 start accept a list of points 2022-07-10 11:50:51 +08:00
Justin Lin
7f3da91174 fix var error 2022-07-10 11:50:41 +08:00
Justin Lin
c63d5c0d47 start accept a list of points 2022-07-10 11:39:57 +08:00
Justin Lin
160d2e67ac refactor 2022-07-03 10:37:23 +08:00
Justin Lin
a6e74ca978 update docs 2022-07-02 17:38:55 +08:00
Justin Lin
e39a7311f3 add comments 2022-07-02 17:33:50 +08:00
Justin Lin
f2f7438257 update note 2022-07-02 17:32:56 +08:00
Justin Lin
e436e09923 update doc 2022-07-02 17:32:19 +08:00
Justin Lin
10b99289c6 add docs 2022-07-02 17:32:01 +08:00
Justin Lin
2fab2309fe random start 2022-07-02 17:05:17 +08:00
Justin Lin
0d19380f74 start default to start 2022-07-02 17:03:43 +08:00
Justin Lin
b384817b98 rand startr 2022-07-02 17:03:14 +08:00
Justin Lin
e66aeccd33 update doc 2022-07-02 16:50:28 +08:00
Justin Lin
6df0170d81 start default to undef 2022-07-02 16:46:14 +08:00
Justin Lin
c551e96352 update note 2022-06-30 16:10:11 +08:00
Justin Lin
b0c521f8c1 rename 2022-06-30 16:09:33 +08:00
Justin Lin
0e8b676c09 add pp_poisson3 2022-06-30 16:08:15 +08:00
Justin Lin
183b3b74b6 add seed param 2022-06-30 10:54:22 +08:00
Justin Lin
964e6b5020 add pp_poisson 2022-06-29 16:55:28 +08:00
Justin Lin
c71143c113 add stereographic_foliage_scroll 2022-06-24 09:22:39 +08:00
Justin Lin
5772dcbc55 move 2022-06-24 09:03:42 +08:00
Justin Lin
243c3eb659 return spiral r 2022-06-24 08:52:38 +08:00
Justin Lin
623878b75e refactor 2022-06-24 08:35:01 +08:00
Justin Lin
b613b87536 refactor 2022-06-24 08:29:37 +08:00
Justin Lin
90b4c830be refactor 2022-06-24 08:24:56 +08:00
Justin Lin
f1fd2797a4 add foliage_scroll 2022-06-23 18:36:25 +08:00
Justin Lin
938507d02d move to pp 2022-06-19 11:47:54 +08:00
Justin Lin
2651a23524 conditional end_i 2022-06-19 09:38:00 +08:00
Justin Lin
ad4b54984b update test 2022-06-19 09:19:39 +08:00
Justin Lin
31e7ca6275 remove the extra section 2022-06-19 09:07:15 +08:00
Justin Lin
6a30eb0e76 move feet 2022-06-17 11:50:01 +08:00
Justin Lin
464fcc5f8f modify head 2022-06-16 11:13:55 +08:00
Justin Lin
669e7c4b1d remove shear 2022-06-16 08:13:10 +08:00
Justin Lin
ac4288d5f4 modify dorsal fin 2022-06-15 23:28:59 +08:00
Justin Lin
a169468da6 modify horn 2022-06-15 17:45:39 +08:00
Justin Lin
91b56e3a5a update doc 2022-06-14 09:00:48 +08:00
Justin Lin
273f83bd27 update readme 2022-06-14 08:56:43 +08:00
Justin Lin
45050f31cd del semicolon of use/include 2022-06-06 13:11:46 +08:00
Justin Lin
fd666676d6 rename 2022-06-06 11:51:23 +08:00
Justin Lin
5330981a19 del one_spiral param 2022-06-06 10:49:19 +08:00
Justin Lin
6bfe94ce1c add type, one_spiral params 2022-06-05 21:01:58 +08:00
Justin Lin
9333145a6d add start_n param 2022-06-05 20:56:32 +08:00
Justin Lin
0fc6e05d8f add golden_spiral_jigsaw 2022-06-05 19:01:46 +08:00
Justin Lin
98ae52b828 add star bunny 2022-06-04 21:14:56 +08:00
Justin Lin
dae4ee49cc add star_bunny 2022-06-04 21:14:43 +08:00
Justin Lin
5cde164bb5 support 3D triangles 2022-06-04 15:51:58 +08:00
Justin Lin
7356046aa7 add triangle/tri_subdivide 2022-06-04 14:53:35 +08:00
Justin Lin
8ce4b435c6 update README 2022-06-03 21:03:39 +08:00
Justin Lin
1ee48d6f13 update README 2022-06-03 21:02:55 +08:00
Justin Lin
cdd5452618 refactor out pack_one 2022-06-03 19:51:37 +08:00
Justin Lin
95f69374e4 rename param 2022-06-03 19:12:01 +08:00
Justin Lin
832174831f remove unused modules 2022-06-03 13:50:25 +08:00
Justin Lin
cf5d70c1ef add forest 2022-06-03 12:46:54 +08:00
Justin Lin
0c4c338046 move 2022-06-03 12:46:41 +08:00
Justin Lin
cdb403ae8e refactor 2022-06-03 10:41:34 +08:00
Justin Lin
3046b8eacd rename 2022-06-03 10:40:00 +08:00
Justin Lin
8371943c25 remove density param 2022-06-03 10:37:45 +08:00
Justin Lin
e0b32b96b7 refactor out a tri_circle_packing 2022-06-02 14:12:14 +08:00
Justin Lin
1b3ff91046 refactor 2022-06-02 12:30:58 +08:00
Justin Lin
c3025ea51c add circle_packing3 2022-05-31 16:11:35 +08:00
Justin Lin
e4661c74eb refactor 2022-05-31 16:11:28 +08:00
Justin Lin
5cd9b7e7a0 rename 2022-05-31 16:07:10 +08:00
Justin Lin
89790d50ae add circle_packing2 2022-05-31 15:50:45 +08:00
Justin Lin
6affac09a7 add tri_subdivide 2022-05-31 15:50:25 +08:00
Justin Lin
b80ea25688 use circle_packing 2022-05-31 14:36:23 +08:00
Justin Lin
8c3a7d7f7a add circle_packing 2022-05-31 14:27:18 +08:00
Justin Lin
e2ec67b67d block it 2022-05-30 17:39:42 +08:00
Justin Lin
8c88932588 add mandelbrot_set 2022-05-30 12:57:42 +08:00
Justin Lin
c7ea5b384b optimization 2022-05-29 16:19:59 +08:00
Justin Lin
a46e75c672 optimization 2022-05-29 15:57:48 +08:00
Justin Lin
fb001c8752 change value 2022-05-29 12:11:39 +08:00
Justin Lin
0c534e6133 add filled param 2022-05-29 12:10:35 +08:00
Justin Lin
4d611bb0b5 filled 2022-05-29 12:09:50 +08:00
Justin Lin
f1d5d6e472 use norm 2022-05-29 11:28:48 +08:00
Justin Lin
12e6ad672d add differential_line_growth_bowl 2022-05-28 15:59:17 +08:00
Justin Lin
e71ee91b90 clean code 2022-05-28 11:44:06 +08:00
Justin Lin
27701333c7 support 3D line 2022-05-28 11:40:29 +08:00
Justin Lin
238c2ede27 shorten allSep 2022-05-27 17:22:51 +08:00
Justin Lin
1fb449fdf6 refactor and add smooth params 2022-05-27 09:10:35 +08:00
Justin Lin
bce7487a96 add differential_line_growth 2022-05-26 18:19:56 +08:00
Justin Lin
27536f28f6 add count 2022-05-25 09:32:36 +08:00
Justin Lin
9ce272b434 fix typo 2022-05-25 09:06:18 +08:00
Justin Lin
1c04072738 update note 2022-05-21 14:16:53 +08:00
Justin Lin
9996fe9fad update README 2022-05-21 14:12:03 +08:00
Justin Lin
b8ccb792af update README 2022-05-21 14:10:58 +08:00
Justin Lin
d9bbdce328 update README 2022-05-21 14:09:07 +08:00
Justin Lin
cc8522dd05 add docs 2022-05-21 14:02:04 +08:00
Justin Lin
5a39846101 add Deprecated/Preview 2022-05-21 12:17:55 +08:00
Justin Lin
795ac56f50 draw OBTUSE & ACUTE 2022-05-20 10:17:23 +08:00
Justin Lin
6fa4fe0ea9 refactor 2022-05-20 10:05:41 +08:00
Justin Lin
d5dd12ffcd refactor 2022-05-20 09:54:04 +08:00
Justin Lin
bcc10201b3 refactor 2022-05-20 09:37:06 +08:00
Justin Lin
a3b8fc41b5 refactor 2022-05-20 08:40:06 +08:00
Justin Lin
e5d38e2d6f add penrose3_crystallization 2022-05-19 15:50:54 +08:00
820 changed files with 6397 additions and 2449 deletions

View File

@@ -1,4 +1,4 @@
# dotSCAD 3.2.2
# dotSCAD 3.3
> **Reduce the burden of mathematics/algorithm when playing OpenSCAD.**
@@ -18,13 +18,13 @@ OpenSCAD uses three library locations, the installation library, built-in librar
Every public module/function has the same name as the .scad file. Here's an example using the `line2d` module:
use <line2d.scad>;
use <line2d.scad>
line2d(p1 = [0, 0], p2 = [5, 0], width = 1);
The library uses directories to categorize some modules/functions. For example, vx_circle.scad exists in `voxel` directory. Prefix the directory name when using `vx_circle`.
use <voxel/vx_circle.scad>;
use <voxel/vx_circle.scad>
points = vx_circle(radius = 10);
for(pt = points) {
@@ -94,7 +94,6 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
[**cross_sections**(shape_pts, path_pts, angles[, twist, scale])](https://openhome.cc/eGossip/OpenSCAD/lib3x-cross_sections.html) | given a 2D shape, points and angles along the path, this function returns all cross-sections.
[**in_polyline**(line_pts, pt[, epsilon])](https://openhome.cc/eGossip/OpenSCAD/lib3x-in_polyline.html) | check whether a point is on a line.
[**lines_intersection**(line1, line2[, ext, epsilon])](https://openhome.cc/eGossip/OpenSCAD/lib3x-lines_intersection.html) | find the intersection of two line segments. Return `[]` if lines don't intersect.
[**rails2sections**(rails)](https://openhome.cc/eGossip/OpenSCAD/lib3x-rails2sections.html) | create sections along rails.
[**path_scaling_sections**(shape_pts, edge_path)](https://openhome.cc/eGossip/OpenSCAD/lib3x-path_scaling_sections.html) | given an edge path with the first point at the outline of a shape, this function uses the path to calculate scaling factors and returns all scaled sections in the reversed order of the edge path.
[**midpt_smooth**(points, n[, closed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-midpt_smooth.html) | given a 2D path, this function constructs a mid-point smoothed version by joining the mid-points of the lines of the path.
@@ -159,19 +158,20 @@ 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])](https://openhome.cc/eGossip/OpenSCAD/lib3x-has.html) | return `true` if `lt` contains elem.
[**util/binary_search**(sorted, target[, lo, hi])](https://openhome.cc/eGossip/OpenSCAD/lib3x-binary_search.html) | search a value in a sorted list.
[**util/contains**(lt, elem)](https://openhome.cc/eGossip/OpenSCAD/lib3x-contains.html) | return `true` if `lt` contains `elem`.
[**util/find_index**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-find_index.html) | return the index of the first element that satisfies the testing function.
[**util/dedup**(lt, ...)](https://openhome.cc/eGossip/OpenSCAD/lib3x-dedup.html) | eliminate duplicate vectors.
[**util/flat**(lt[, depth])](https://openhome.cc/eGossip/OpenSCAD/lib3x-flat.html) | return a new list with all sub-list elements concatenated into it recursively up to the specified depth.
[**util/reverse**(lt)](https://openhome.cc/eGossip/OpenSCAD/lib3x-reverse.html) | reverse a list.
[**util/slice**(lt, begin, end)](https://openhome.cc/eGossip/OpenSCAD/lib3x-slice.html) | return a list selected from `begin` to `end`, or to the `end` of the list (`end` not included).
[**util/sort**(lt[, by, idx])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sort.html) | sort a list.
[**util/sorted**(lt[, cmp, key, reverse])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sorted.html) | sort a list.
[**util/sum**(lt)](https://openhome.cc/eGossip/OpenSCAD/lib3x-sum.html) | use `+` to sum up all elements in a list.
[**util/swap**(lt, i, j)](https://openhome.cc/eGossip/OpenSCAD/lib3x-swap.html) | swap two elements in a list.
[**util/zip**(lts, combine)](https://openhome.cc/eGossip/OpenSCAD/lib3x-zip.html) | make a list that aggregates elements from each of the lists.
[**util/every**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-every.html) | test whether all elements in the list pass the test implemented by the provided function.
[**util/some**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-some.html) | test whether at least one element in the list passes the test implemented by the provided function.
[**util/count**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-count.html) | return the number of times `test` return `true` in the list.
### util/random
@@ -235,6 +235,7 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
[**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.
[**matrix/m_replace**(m, i, j, value)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_replace.html) | replace the aᵢⱼ element of a matrix.
## Point Transformation
@@ -260,6 +261,7 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
[**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.
[**triangle/tri_subdivide**(shape_pts[, n])](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_subdivide.html) | subdivide a triangle `n` times.
----
@@ -349,14 +351,15 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
Signature | Description
--|--
[**maze/mz_square_cells**(rows, columns[, start, ...])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_cells.html) | return cell data of a square maze.
[**maze/mz_square**([rows, columns, start, init_cells, x_wrapping, y_wrapping, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square.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_squarewalls**(cells, cell_width[, left_border, bottom_border])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_squarewalls.html) | a helper for creating square wall data from maze cells.
[**maze/mz_hexwalls**(cells, cell_radius[, left_border, bottom_border])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hexwalls.html) | a helper for creating hex wall data from maze cells.
[**maze/mz_square_initialize**(rows, columns, mask)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square_initialize.html) | a helper for initializing cell data of a maze.
[**maze/mz_hamiltonian**(rows, columns[, start, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hamiltonian.html) | create a hamiltonian path from a maze.
[**maze/mz_theta_cells**(rows, beginning_number[, start, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta_cells.html) | return cell data of a theta maze.
[**maze/mz_theta_get**(cell, query)](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta_get.html) | a helper for getting data from a theta-maze cell.
[**maze/mz_theta**(rings, beginning_number[, start, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta.html) | return cell data of a theta maze.
[**maze/mz_tiles**(cells[, left_border, bottom_border])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_tiles.html) | turn maze cells into tiles.
## Polyhedra
@@ -371,5 +374,13 @@ These examples incubate dotSCAD and dotSCAD refactors these examples. See [examp
[**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.
----
## Point Picking
Signature | Description
--|--
[**pp/pp_disk**(radius, value_count[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_disk.html) | generate random points over a disk.
[**pp/pp_sphere**(radius, value_count[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_sphere.html) | pick random points on the surface of a sphere.
[**pp/pp_poisson2**(size, r[, start, k, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_poisson2.html) | perform poisson sampling over a rectangle area.
[**pp/pp_poisson3**(size, r[, start, k, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_poisson3.html) | perform poisson sampling over a cube space.
----

View File

@@ -1,5 +1,62 @@
> Version numbers are based on [Semantic Versioning](https://semver.org/).
# v3.3
## Deprecated
Signature | Description
--|--
**rails2sections** | use [`maxtrix/m_transpose`](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_transpose.html) instead.
**util/sort** | use [`util/sorted`](https://openhome.cc/eGossip/OpenSCAD/lib3x-sorted.html) instead.
**util/has** | use [`util/contains`](https://openhome.cc/eGossip/OpenSCAD/lib3x-contains.html) instead.
**util/bsearch** | use [`util/binary_search`](https://openhome.cc/eGossip/OpenSCAD/lib3x-binary_search.html) instead.
**maze/mz_square_cells** | use [`maze/mz_square`](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square.html).
**maze/mz_square_walls** | use [`maze/mz_squarewalls`](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_squarewalls.html) instead.
**maze/mz_hex_walls** | use [`maze/mz_hexwalls`](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hexwalls.html) instead.
**maze/mz_theta_cells** | use [`maze/mz_theta`](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta.html) instead.
## Util
Signature | Description
--|--
[**util/sorted**(lt[, cmp, key, reverse])](https://openhome.cc/eGossip/OpenSCAD/lib3x-sorted.html) | sort a list.
[**util/contains**(lt, elem)](https://openhome.cc/eGossip/OpenSCAD/lib3x-contains.html) | return `true` if `lt` contains `elem`.
[**util/binary_search**(sorted, target[, lo, hi])](https://openhome.cc/eGossip/OpenSCAD/lib3x-binary_search.html) | search a value in a sorted list.
[**util/count**(lt, test)](https://openhome.cc/eGossip/OpenSCAD/lib3x-count.html) | return the number of times `test` return `true` in the list.
## Matrix
Signature | Description
--|--
[**matrix/m_replace**(m, i, j, value)](https://openhome.cc/eGossip/OpenSCAD/lib3x-m_replace.html) | replace the aᵢⱼ element of a matrix.
## Triangle
Signature | Description
--|--
[**triangle/tri_subdivide**(shape_pts[, n])](https://openhome.cc/eGossip/OpenSCAD/lib3x-tri_subdivide.html) | subdivide a triangle `n` times.
## Point Picking
Signature | Description
--|--
[**pp/pp_disk**(radius, value_count[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_disk.html) | generate random points over a disk.
[**pp/pp_sphere**(radius, value_count[, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_sphere.html) | pick random points on the surface of a sphere.
[**pp/pp_poisson2**(size, r[, start, k, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_poisson2.html) | perform poisson sampling over a rectangle area.
[**pp/pp_poisson3**(size, r[, start, k, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-pp_poisson3.html) | perform poisson sampling over a cube space.
## Maze
Signature | Description
--|--
[**maze/mz_square**([rows, columns, start, init_cells, x_wrapping, y_wrapping, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_square.html) | return cell data of a square maze.
[**maze/mz_squarewalls**(cells, cell_width[, left_border, bottom_border])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_squarewalls.html) | a helper for creating square wall data from maze cells.
[**maze/mz_hexwalls**(cells, cell_radius[, left_border, bottom_border])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_hexwalls.html) | a helper for creating hex wall data from maze cells.
[**maze/mz_theta**(rings, beginning_number[, start, seed])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_theta.html) | return cell data of a theta maze.
[**maze/mz_tiles**(cells[, left_border, bottom_border])](https://openhome.cc/eGossip/OpenSCAD/lib3x-mz_tiles.html) | turn maze cells into tiles.
# v3.2.2
Maintenance release: bug fixes & performance improvements.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -12,8 +12,8 @@ If you want to place objects precisely, their points and angles are required. Wh
## Examples
use <along_with.scad>;
use <shape_circle.scad>;
use <along_with.scad>
use <shape_circle.scad>
$fn = 24;
@@ -24,8 +24,8 @@ If you want to place objects precisely, their points and angles are required. Wh
![along_with](images/lib3x-along_with-1.JPG)
use <along_with.scad>;
use <shape_circle.scad>;
use <along_with.scad>
use <shape_circle.scad>
$fn = 24;
@@ -44,8 +44,8 @@ If you want to place objects precisely, their points and angles are required. Wh
![along_with](images/lib3x-along_with-2.JPG)
use <along_with.scad>;
use <golden_spiral.scad>;
use <along_with.scad>
use <golden_spiral.scad>
pts_angles = golden_spiral(
from = 5,
@@ -63,8 +63,8 @@ If you want to place objects precisely, their points and angles are required. Wh
![along_with](images/lib3x-along_with-3.JPG)
use <bezier_curve.scad>;
use <along_with.scad>;
use <bezier_curve.scad>
use <along_with.scad>
module scales() {
module one_scale() {

View File

@@ -11,7 +11,7 @@ Returns the angle between two vectors.
## Examples
use <angle_between.scad>;
use <angle_between.scad>
assert(angle_between([0, 1], [1, 0]) == 90);
assert(angle_between([0, 1, 0], [1, 0, 0]) == 90);

View File

@@ -13,7 +13,7 @@ Creates an arc. You can pass a 2 element vector to define the central angle. Its
## Examples
use <arc.scad>;
use <arc.scad>
$fn = 24;
arc(radius = 20, angle = [45, 290], width = 2);
@@ -21,7 +21,7 @@ Creates an arc. You can pass a 2 element vector to define the central angle. Its
![arc](images/lib3x-arc-1.JPG)
use <arc.scad>;
use <arc.scad>
$fn = 24;
arc(radius = 20, angle = [45, 290], width = 2, width_mode = "LINE_OUTWARD");
@@ -29,7 +29,7 @@ Creates an arc. You can pass a 2 element vector to define the central angle. Its
![arc](images/lib3x-arc-2.JPG)
use <arc.scad>;
use <arc.scad>
$fn = 24;
arc(radius = 20, angle = [45, 290], width = 2, width_mode = "LINE_INWARD");

View File

@@ -11,8 +11,8 @@ Creates an arc path. You can pass a 2 element vector to define the central angle
## Examples
use <arc_path.scad>;
use <polyline_join.scad>;
use <arc_path.scad>
use <polyline_join.scad>
$fn = 24;
points = arc_path(radius = 20, angle = [45, 290]);
@@ -21,8 +21,8 @@ Creates an arc path. You can pass a 2 element vector to define the central angle
![arc_path](images/lib3x-arc_path-1.JPG)
use <arc_path.scad>;
use <polyline_join.scad>;
use <arc_path.scad>
use <polyline_join.scad>
$fn = 24;
points = arc_path(radius = 20, angle = 135);

View File

@@ -16,8 +16,8 @@ An `init_angle` less than 180 degrees is not recommended because the function us
## Examples
use <polyline2d.scad>;
use <archimedean_spiral.scad>;
use <polyline2d.scad>
use <archimedean_spiral.scad>
points_angles = archimedean_spiral(
arm_distance = 10,
@@ -32,7 +32,7 @@ An `init_angle` less than 180 degrees is not recommended because the function us
![archimedean_spiral](images/lib3x-archimedean_spiral-1.JPG)
use <archimedean_spiral.scad>;
use <archimedean_spiral.scad>
points_angles = archimedean_spiral(
arm_distance = 10,
@@ -48,7 +48,7 @@ An `init_angle` less than 180 degrees is not recommended because the function us
![archimedean_spiral](images/lib3x-archimedean_spiral-2.JPG)
use <archimedean_spiral.scad>;
use <archimedean_spiral.scad>
t = "3.141592653589793238462643383279502884197169399375105820974944592307816406286";

View File

@@ -14,7 +14,7 @@ When using this module, you should use points to represent the 2D shape. If your
## Examples
use <archimedean_spiral_extrude.scad>;
use <archimedean_spiral_extrude.scad>
shape_pts = [
[5, 0],

View File

@@ -14,8 +14,8 @@ Creates visually even spacing of n points on the surface of the sphere. Successi
## Examples
use <bauer_spiral.scad>;
use <polyline_join.scad>;
use <bauer_spiral.scad>
use <polyline_join.scad>
n = 200;
radius = 20;

View File

@@ -12,7 +12,7 @@ Bends a 3D object into an arc shape.
The containing cube of the target object should be laid down on the x-y plane. For example.
use <bend.scad>;
use <bend.scad>
x = 9.25;
y = 9.55;
@@ -25,7 +25,7 @@ The containing cube of the target object should be laid down on the x-y plane. F
Once you have the size of the containing cube, you can use it as the `size` argument of the `bend` module.
use <bend.scad>;
use <bend.scad>
x = 9.25;
y = 9.55;
@@ -41,7 +41,7 @@ Once you have the size of the containing cube, you can use it as the `size` argu
The arc shape is smoother if the `frags` value is larger.
use <bend.scad>;
use <bend.scad>
x = 9.25;
y = 9.55;

View File

@@ -25,7 +25,7 @@ The containing square of the target shape should be laid down on the x-y plane.
Once you have the size of the containing square, you can use it as the `size` argument of the `bend_extrude` module.
use <bend_extrude.scad>;
use <bend_extrude.scad>
x = 9.25;
y = 9.55;

View File

@@ -11,8 +11,8 @@ Given a set of control points, the `bezier_curve` function returns points of the
If you have four control points:
use <polyline_join.scad>;
use <bezier_curve.scad>;
use <polyline_join.scad>
use <bezier_curve.scad>
t_step = 0.05;
radius = 2;

View File

@@ -12,8 +12,8 @@ Given a path, the `bezier_smooth` function uses bazier curves to smooth all corn
## Examples
use <polyline_join.scad>;
use <bezier_smooth.scad>;
use <polyline_join.scad>
use <bezier_smooth.scad>
width = 2;
round_d = 15;
@@ -37,7 +37,7 @@ Given a path, the `bezier_smooth` function uses bazier curves to smooth all corn
![bezier_smooth](images/lib3x-bezier_smooth-1.JPG)
use <bezier_smooth.scad>;
use <bezier_smooth.scad>
round_d = 10;

View File

@@ -12,7 +12,7 @@ Move 2D outlines outward or inward by a given amount. Each point of the offsette
## Examples
use <bijection_offset.scad>;
use <bijection_offset.scad>
shape = [
[15, 0],
@@ -32,9 +32,9 @@ Move 2D outlines outward or inward by a given amount. Each point of the offsette
![bijection_offset](images/lib3x-bijection_offset-1.JPG)
use <bijection_offset.scad>;
use <path_extrude.scad>;
use <bezier_curve.scad>;
use <bijection_offset.scad>
use <path_extrude.scad>
use <bezier_curve.scad>
shape = [
[5, 0],

View File

@@ -0,0 +1,28 @@
# binary_search
A general-purpose function to search a value in a sorted list.
**Since:** 3.3
## Parameters
- `sorted` : The sorted list.
- `target` : The target element or a function literal that returns a negative integer, zero, or a positive integer as the element is less than, equal to, or greater than the value you want to search.
- `lo` : Default to 0. The lower bound to be searched.
- `hi` : Default to the end of the list. The higher bound to be searched.
## Examples
use <util/sorted.scad>
use <util/binary_search.scad>
points = [[1, 1], [3, 4], [7, 2], [5, 2]];
lt = sorted(points); // [[1, 1], [3, 4], [5, 2], [7, 2]]
assert(binary_search(lt, [7, 2]) == 3);
xIs5 = function(elem) elem[0] - 5;
assert(binary_search(lt, xIs5) == 2);
yIs4 = function(elem) elem[1] - 4;
assert(binary_search(lt, yIs4) == 1);

View File

@@ -12,14 +12,14 @@ Creates a box (container) from a 2D object.
## Examples
use <box_extrude.scad>;
use <box_extrude.scad>
box_extrude(height = 30, shell_thickness = 2)
circle(r = 30);
![box_extrude](images/lib3x-box_extrude-1.JPG)
use <box_extrude.scad>;
use <box_extrude.scad>
box_extrude(height = 30, shell_thickness = 2)
text("XD", size = 40, font = "Cooper Black");

View File

@@ -11,8 +11,8 @@ The `bsearch` function is a general-purpose function to search a value in a list
## Examples
use <util/sort.scad>;
use <util/bsearch.scad>;
use <util/sort.scad>
use <util/bsearch.scad>
points = [[1, 1], [3, 4], [7, 2], [5, 2]];
sorted = sort(points, by = "vt"); // [[1, 1], [5, 2], [7, 2], [3, 4]]

View File

@@ -14,7 +14,7 @@
## Examples
use <bspline_curve.scad>;
use <bspline_curve.scad>
points = [
[-10, 0],
@@ -37,7 +37,7 @@
![bspline_curve](images/lib3x-bspline_curve-1.JPG)
use <bspline_curve.scad>;
use <bspline_curve.scad>
points = [
[-10, 0],
@@ -62,7 +62,7 @@
![bspline_curve](images/lib3x-bspline_curve-2.JPG)
use <bspline_curve.scad>;
use <bspline_curve.scad>
points = [
[-10, 0],

View File

@@ -11,6 +11,6 @@ Choose an element from the given list randomly.
## Examples
use <util/choose.scad>;
use <util/choose.scad>
echo(choose([1, 2, 3, 4]));

View File

@@ -10,7 +10,7 @@ Sometimes you need all points on the path of a circle. Here's the function. Its
## Examples
use <circle_path.scad>;
use <circle_path.scad>
$fn = 24;

View File

@@ -18,7 +18,7 @@ Create a cone for rotatable models.
## Examples
use <part/cone.scad>;
use <part/cone.scad>
radius = 2.5;
length = 2;
@@ -41,7 +41,7 @@ Create a cone for rotatable models.
![cone](images/lib3x-cone-2.JPG)
use <part/cone.scad>;
use <part/cone.scad>
radius = 2.5;
length = 2;

View File

@@ -17,7 +17,7 @@ Create a connector peg.
## Examples
use <part/connector_peg.scad>;
use <part/connector_peg.scad>
radius = 2.5;
spacing = 0.5;
@@ -37,7 +37,7 @@ Create a connector peg.
![connector_peg](images/lib3x-connector_peg-1.JPG)
use <part/connector_peg.scad>;
use <part/connector_peg.scad>
radius = 2.5;
spacing = 0.5;

19
docs/lib3x-contains.md Normal file
View File

@@ -0,0 +1,19 @@
# contains
If `lt` contains `elem`, this function returns `true`.
**Since:** 3.3
## Parameters
- `lt` : A list of vectors.
- `elem` : A element.
## Examples
use <voxel/vx_circle.scad>
use <util/contains.scad>
pts = vx_circle(10);
assert(contains(pts, [2, -10]));
assert(!contains(pts, [0, 0]));

View File

@@ -11,9 +11,9 @@ Computes contour polygons by applying [marching squares](https://en.wikipedia.or
## Examples
use <polyline_join.scad>;
use <surface/sf_thicken.scad>;
use <contours.scad>;
use <polyline_join.scad>
use <surface/sf_thicken.scad>
use <contours.scad>
min_value = 1;
max_value = 360;

15
docs/lib3x-count.md Normal file
View File

@@ -0,0 +1,15 @@
# count
Returns the number of times `test` return `true` in the list.
**Since:** 3.3
## Parameters
- `lt` : The list.
- `test` : A testing function.
## Examples
points = [[7, 2, 2], [1, 1, 2], [3, 4, 2], [3, 4, 2], [1, 2, 3]];
assert(count(points, function(p) norm(p) > 5) == 3);

View File

@@ -12,9 +12,9 @@ Given a 2D shape, points and angles along the path, this function will return al
## Examples
use <sweep.scad>;
use <cross_sections.scad>;
use <archimedean_spiral.scad>;
use <sweep.scad>
use <cross_sections.scad>
use <archimedean_spiral.scad>
shape_pts = [
[-2, -10],

View File

@@ -14,7 +14,7 @@ Uses spherical coordinate system to create a crystal ball.
## Examples
use <crystal_ball.scad>;
use <crystal_ball.scad>
crystal_ball(radius = 6);

View File

@@ -16,8 +16,8 @@ Draws a curved line from control points. The curve is drawn only from the 2nd co
## Examples
use <curve.scad>;
use <polyline_join.scad>;
use <curve.scad>
use <polyline_join.scad>
pts = [
[28, 2, 1],

View File

@@ -13,6 +13,8 @@ Eliminating duplicate copies of repeating vectors.
## Examples
use <util/dedup.scad>
eq = function(e1, e2) e1[0] == e2[0] && e1[1] == e2[1] && e1[2] == e2[2];
points = [[1, 1, 2], [3, 4, 2], [7, 2, 2], [3, 4, 2], [1, 2, 3]];

View File

@@ -10,6 +10,6 @@ Converts a radian measurement to the corresponding value in degrees.
## Examples
use <util/degrees.scad>;
use <util/degrees.scad>
assert(degrees(PI) == 180);

View File

@@ -10,7 +10,7 @@ Extrudes a 2D object along the path of an ellipse from 0 to 180 degrees. The sem
## Examples
use <ellipse_extrude.scad>;
use <ellipse_extrude.scad>
semi_minor_axis = 5;
@@ -19,7 +19,7 @@ Extrudes a 2D object along the path of an ellipse from 0 to 180 degrees. The sem
![ellipse_extrude](images/lib3x-ellipse_extrude-1.JPG)
use <ellipse_extrude.scad>;
use <ellipse_extrude.scad>
semi_minor_axis = 5;
@@ -28,7 +28,7 @@ Extrudes a 2D object along the path of an ellipse from 0 to 180 degrees. The sem
![ellipse_extrude](images/lib3x-ellipse_extrude-2.JPG)
use <ellipse_extrude.scad>;
use <ellipse_extrude.scad>
semi_minor_axis = 5;
@@ -41,7 +41,7 @@ Extrudes a 2D object along the path of an ellipse from 0 to 180 degrees. The sem
![ellipse_extrude](images/lib3x-ellipse_extrude-3.JPG)
use <ellipse_extrude.scad>;
use <ellipse_extrude.scad>
semi_minor_axis = 10;

View File

@@ -11,7 +11,7 @@ The `every` function tests whether all elements in the list pass the test implem
## Examples
use <util/every.scad>;
use <util/every.scad>
biggerThanZero = function(elem) elem > 0;
assert(every([1, 30, 39, 29, 10, 13], biggerThanZero));

View File

@@ -1,6 +1,6 @@
# fibonacci_lattice
Creates visually even spacing of n points on the surface of the sphere. Nearest-neighbor points will all be approximately the same distance apart. There're 8 spirals on the sphere.
Creates visually even spacing of n points on the surface of the sphere. Nearest-neighbor points will all be approximately the same distance apart.
(It's called "visually even spacing" because only the vertices of the 5 [Platonic solids](https://en.wikipedia.org/wiki/Platonic_solid) can be said to be truly evenly spaced around the surface of a sphere.)
@@ -14,7 +14,7 @@ Creates visually even spacing of n points on the surface of the sphere. Nearest-
## Examples
use <fibonacci_lattice.scad>;
use <fibonacci_lattice.scad>
n = 200;
radius = 20;
@@ -29,9 +29,9 @@ 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 <polyline_join.scad>;
use <fibonacci_lattice.scad>
use <polyline_join.scad>
n = 200;
radius = 20;
@@ -41,16 +41,18 @@ Creates visually even spacing of n points on the surface of the sphere. Nearest-
translate(p)
sphere(1);
}
sphere(radius);
spirals = [for(j = [0:7])
[for(i = j; i < len(pts); i = i + 8) pts[i]]
sphere(radius * 0.9);
// You can pick spirals from points.
spirals = [for(j = [0:20])
[for(i = j; i < len(pts); i = i + 21) pts[i]]
];
for(spiral = spirals) {
polyline_join(spiral)
sphere(.5);
sphere(.25);
}
![fibonacci_lattice](images/lib3x-fibonacci_lattice-2.JPG)

View File

@@ -11,6 +11,6 @@ Generate a Fibonacci sequence.
## Examples
use <util/fibseq.scad>;
use <util/fibseq.scad>
echo(fibseq(1, 10)); // ECHO: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

View File

@@ -11,6 +11,6 @@ Returns the index of the first element in the list that satisfies the testing fu
## Examples
use <util/find_index.scad>;
use <util/find_index.scad>
assert(find_index([10, 20, 30, 40], function(e) e > 10) == 1);

View File

@@ -11,7 +11,7 @@ returns a new list with all sub-list elements concatenated into it recursively u
## Examples
use <util/flat.scad>;
use <util/flat.scad>
vt = [[[[1, 2], [3, 4]], [[5, 6], [7, 8]]]];

View File

@@ -11,8 +11,8 @@ Drive a turtle with `["forward", length]` or `["turn", angle]`. This function is
## Examples
use <polyline_join.scad>;
use <turtle/footprints2.scad>;
use <polyline_join.scad>
use <turtle/footprints2.scad>
function arc_cmds(radius, angle, steps) =
let(

View File

@@ -11,8 +11,8 @@ A 3D verion of [footprint2](https://openhome.cc/eGossip/OpenSCAD/lib3x-footprint
## Examples
use <polyline_join.scad>;
use <turtle/footprints3.scad>;
use <polyline_join.scad>
use <turtle/footprints3.scad>
function xy_arc_cmds(radius, angle, steps) =
let(

View File

@@ -13,7 +13,7 @@ It returns a vector of `[[x, y], angle]`.
## Examples
use <golden_spiral.scad>;
use <golden_spiral.scad>
pts_angles = golden_spiral(
from = 3,
@@ -28,7 +28,7 @@ It returns a vector of `[[x, y], angle]`.
![golden_spiral](images/lib3x-golden_spiral-1.JPG)
use <golden_spiral.scad>;
use <golden_spiral.scad>
pts_angles = golden_spiral(
from = 5,

View File

@@ -17,7 +17,7 @@ When using this module, you should use points to represent the 2D shape. If your
## Examples
use <golden_spiral_extrude.scad>;
use <golden_spiral_extrude.scad>
shape_pts = [
[2, -10],
@@ -38,8 +38,8 @@ When using this module, you should use points to represent the 2D shape. If your
![golden_spiral_extrude](images/lib3x-golden_spiral_extrude-1.JPG)
use <shape_circle.scad>;
use <golden_spiral_extrude.scad>;
use <shape_circle.scad>
use <golden_spiral_extrude.scad>
$fn = 12;

View File

@@ -12,9 +12,9 @@ If `lt` contains `elem`, this function returns `true`. If you want to test eleme
## Examples
use <voxel/vx_circle.scad>;
use <util/sort.scad>;
use <util/has.scad>;
use <voxel/vx_circle.scad>
use <util/sort.scad>
use <util/has.scad>
pts = vx_circle(10);
assert(has(pts, [2, -10]));

View File

@@ -21,14 +21,14 @@ This function maps keys to values. You can use the following to process the retu
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_len.scad>;
use <util/map/hashmap_put.scad>;
use <util/map/hashmap_get.scad>;
use <util/map/hashmap_del.scad>;
use <util/map/hashmap_keys.scad>;
use <util/map/hashmap_values.scad>;
use <util/map/hashmap_entries.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_len.scad>
use <util/map/hashmap_put.scad>
use <util/map/hashmap_get.scad>
use <util/map/hashmap_del.scad>
use <util/map/hashmap_keys.scad>
use <util/map/hashmap_values.scad>
use <util/map/hashmap_entries.scad>
m1 = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);
assert(hashmap_len(m1) == 3);
@@ -45,8 +45,8 @@ This function maps keys to values. You can use the following to process the retu
Want to simulate class-based OO in OpenSCAD? Here's my experiment.
use <util/map/hashmap.scad>;
use <util/map/hashmap_get.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_get.scad>
function methods(mths) = hashmap(mths);
function _(name, instance) = hashmap_get(instance, name);

View File

@@ -13,9 +13,9 @@ This function deletes the mapping for the specified key from a [util/map/hashmap
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_get.scad>;
use <util/map/hashmap_del.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_get.scad>
use <util/map/hashmap_del.scad>
m1 = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);
m2 = hashmap_del(m1, "k1");

View File

@@ -10,8 +10,8 @@ Returns a list containing all `[key, value]`s in a [util/map/hashmap](https://op
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_entries.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_entries.scad>
m = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);
echo(hashmap_entries(m)); // a list contains ["k1", 10], ["k2", 20], ["k3", 30]

View File

@@ -13,8 +13,8 @@ This function gets the value of the specified key from a [util/map/hashmap](http
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_get.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_get.scad>
m = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);
assert(hashmap_get(m, "k2") == 20);

View File

@@ -10,8 +10,8 @@ Returns a list containing all keys in a [util/map/hashmap](https://openhome.cc/e
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_keys.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_keys.scad>
m = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);

View File

@@ -10,8 +10,8 @@ Returns the length of a [util/map/hashmap](https://openhome.cc/eGossip/OpenSCAD/
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_len.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_len.scad>
m = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);
assert(hashmap_len(m) == 3);

View File

@@ -14,9 +14,9 @@ Puts a key/value pair to a [util/map/hashmap](https://openhome.cc/eGossip/OpenSC
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_put.scad>;
use <util/map/hashmap_get.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_put.scad>
use <util/map/hashmap_get.scad>
m1 = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);

View File

@@ -10,8 +10,8 @@ Returns a list containing all values in a [util/map/hashmap](https://openhome.cc
## Examples
use <util/map/hashmap.scad>;
use <util/map/hashmap_values.scad>;
use <util/map/hashmap.scad>
use <util/map/hashmap_values.scad>
m = hashmap([["k1", 10], ["k2", 20], ["k3", 30]]);

View File

@@ -19,12 +19,12 @@ This function models the mathematical set, backed by a hash table. You can use t
## Examples
use <util/set/hashset.scad>;
use <util/set/hashset_add.scad>;
use <util/set/hashset_has.scad>;
use <util/set/hashset_del.scad>;
use <util/set/hashset_len.scad>;
use <util/set/hashset_elems.scad>;
use <util/set/hashset.scad>
use <util/set/hashset_add.scad>
use <util/set/hashset_has.scad>
use <util/set/hashset_del.scad>
use <util/set/hashset_len.scad>
use <util/set/hashset_elems.scad>
s1 = hashset([1, 2, 3, 4, 5, 2, 3, 5]);
assert(hashset_len(s1) == 5);

View File

@@ -13,9 +13,9 @@ This function adds an element to a [util/set/hashset](https://openhome.cc/eGossi
## Examples
use <util/set/hashset.scad>;
use <util/set/hashset_add.scad>;
use <util/set/hashset_has.scad>;
use <util/set/hashset.scad>
use <util/set/hashset_add.scad>
use <util/set/hashset_has.scad>
s1 = hashset([1, 2, 3, 4, 5]);
s2 = hashset_add(s1, 9);

View File

@@ -13,9 +13,9 @@ This function dels an element from a [util/set/hashset](https://openhome.cc/eGos
## Examples
use <util/set/hashset.scad>;
use <util/set/hashset_del.scad>;
use <util/set/hashset_has.scad>;
use <util/set/hashset.scad>
use <util/set/hashset_del.scad>
use <util/set/hashset_has.scad>
s1 = hashset([1, 2, 3, 4, 5]);
s2 = hashset_del(s1, 3);

View File

@@ -10,8 +10,8 @@ Returns a list containing all elements in a [util/set/hashset](https://openhome.
## Examples
use <util/set/hashset.scad>;
use <util/set/hashset_elems.scad>;
use <util/set/hashset.scad>
use <util/set/hashset_elems.scad>
s = hashset([1, 2, 3, 4, 5]);
assert(hashset_elems(s) == [1, 2, 3, 4, 5]);

View File

@@ -13,8 +13,8 @@ Returns `true` if a [util/set/hashset](https://openhome.cc/eGossip/OpenSCAD/lib3
## Examples
use <util/set/hashset.scad>;
use <util/set/hashset_has.scad>;
use <util/set/hashset.scad>
use <util/set/hashset_has.scad>
s = hashset([1, 2, 3, 4, 5]);
assert(hashset_has(s, 3));

View File

@@ -10,8 +10,8 @@ Returns the length of the elements in a [util/set/hashset](https://openhome.cc/e
## Examples
use <util/set/hashset.scad>;
use <util/set/hashset_len.scad>;
use <util/set/hashset.scad>
use <util/set/hashset_len.scad>
s = hashset([1, 2, 3, 4, 5]);
assert(hashset_len(s) == 5);

View File

@@ -13,8 +13,8 @@ Gets all points on the path of a spiral around a cylinder. Its `$fa`, `$fs` and
## Examples
use <helix.scad>;
use <polyline_join.scad>;
use <helix.scad>
use <polyline_join.scad>
$fn = 12;
@@ -36,8 +36,8 @@ Gets all points on the path of a spiral around a cylinder. Its `$fa`, `$fs` and
![helix](images/lib3x-helix-1.JPG)
use <helix.scad>;
use <polyline_join.scad>;
use <helix.scad>
use <polyline_join.scad>
$fn = 12;

View File

@@ -21,7 +21,7 @@ Its `$fa`, `$fs` and `$fn` parameters are consistent with the `cylinder` module.
## Examples
use <helix_extrude.scad>;
use <helix_extrude.scad>
shape_pts = [
[5, -2],
@@ -43,7 +43,7 @@ Its `$fa`, `$fs` and `$fn` parameters are consistent with the `cylinder` module.
![helix_extrude](images/lib3x-helix_extrude-1.JPG)
use <helix_extrude.scad>;
use <helix_extrude.scad>
r1 = 40;
r2 = 20;

View File

@@ -10,7 +10,7 @@ This module creates hexagons in a hexagon.
## Examples
use <hexagons.scad>;
use <hexagons.scad>
radius = 20;
spacing = 2;
@@ -20,7 +20,7 @@ This module creates hexagons in a hexagon.
![hexagons](images/lib3x-hexagons-1.JPG)
use <hexagons.scad>;
use <hexagons.scad>
radius = 20;
spacing = 2;

View File

@@ -8,7 +8,7 @@ Hollows out a 2D object.
## Examples
use <hollow_out.scad>;
use <hollow_out.scad>
hollow_out(shell_thickness = 1)
circle(r = 3, $fn = 48);

View File

@@ -12,7 +12,7 @@ Checks whether a point is on a line.
## Examples
use <in_polyline.scad>;
use <in_polyline.scad>
pts = [
[0, 0],
@@ -27,7 +27,7 @@ Checks whether a point is on a line.
----
use <in_polyline.scad>;
use <in_polyline.scad>
pts = [
[10, 0, 10],

View File

@@ -13,8 +13,8 @@ Checks whether a point is inside a shape.
## Examples
use <shape_taiwan.scad>;
use <in_shape.scad>;
use <shape_taiwan.scad>
use <in_shape.scad>
points = shape_taiwan(30);

View File

@@ -17,7 +17,7 @@ Create a joint_T for rotatable models.
## Examples
use <part/joint_T.scad>;
use <part/joint_T.scad>
$fn = 48;

View File

@@ -12,6 +12,6 @@ Linear interpolate the vector v1 to v2.
## Examples
use <util/lerp.scad>;
use <util/lerp.scad>
assert(lerp([0, 0, 0], [100, 100, 100], 0.5) == [50, 50, 50]);

View File

@@ -13,7 +13,7 @@ Creates a line from two points. When the end points are `CAP_ROUND`, you can use
## Examples
use <line2d.scad>;
use <line2d.scad>
$fn = 24;

View File

@@ -13,7 +13,7 @@ Creates a 3D line from two points.
## Examples
use <line3d.scad>;
use <line3d.scad>
line3d(
p1 = [0, 0, 0],
@@ -24,7 +24,7 @@ Creates a 3D line from two points.
![line3d](images/lib3x-line3d-1.JPG)
use <line3d.scad>;
use <line3d.scad>
line3d(
p1 = [0, 0, 0],
@@ -37,7 +37,7 @@ Creates a 3D line from two points.
![line3d](images/lib3x-line3d-2.JPG)
use <line3d.scad>;
use <line3d.scad>
line3d(
p1 = [0, 0, 0],

View File

@@ -13,7 +13,7 @@ Find the intersection of two line segments. Return `[]` if lines don't intersect
## Examples
use <lines_intersection.scad>;
use <lines_intersection.scad>
line1 = [[0, 0], [0, 10]];
line2 = [[5, 0], [-5, 5]];

View File

@@ -11,10 +11,10 @@ When having uniform cross sections, you can use [sweep](https://openhome.cc/eGos
## Examples
use <shape_star.scad>;
use <shape_circle.scad>;
use <ptf/ptf_rotate.scad>;
use <loft.scad>;
use <shape_star.scad>
use <shape_circle.scad>
use <ptf/ptf_rotate.scad>
use <loft.scad>
sects = [
for(i = 10; i >= 4; i = i - 1)

View File

@@ -23,13 +23,14 @@
- `start` : The starting point of the turtle. Default to `[0, 0]`.
- `forward_chars` : Chars used for forwarding after the last iteration. Default to `'F'`.
- `rule_prs` : The probabilities for taking rules. If each rule is chosen with a certain probability, it's a stochastic L-system. Each probability value for a rule ranges from 0 to 1.
- `seed` : Optional. Seed value for random number generator for repeatable results. **Since:** 3.3.
## Examples
[lsystem2-collections.scad](https://github.com/JustinSDK/dotSCAD/blob/master/examples/turtle/lsystem2_collection.scad) collects several L-system grammars. Here's one of them.
use <turtle/lsystem2.scad>;
use <line2d.scad>;
use <turtle/lsystem2.scad>
use <line2d.scad>
for(line = fern()) {
line2d(
@@ -56,8 +57,8 @@
// a stochastic L-system
use <turtle/lsystem2.scad>;
use <line2d.scad>;
use <turtle/lsystem2.scad>
use <line2d.scad>
for(line = weed()) {
line2d(

View File

@@ -27,13 +27,14 @@
- `start` : The starting point of the turtle. Default to `[0, 0]`.
- `forward_chars` : Chars used for forwarding after the last iteration. Default to `'F'`.
- `rule_prs` : The probabilities for taking rules. If each rule is chosen with a certain probability, it's a stochastic L-system. Each probability value for a rule ranges from 0 to 1.
- `seed` : Optional. Seed value for random number generator for repeatable results. **Since:** 3.3.
## Examples
[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 <polyline_join.scad>;
use <turtle/lsystem3.scad>
use <polyline_join.scad>
for(line = hilbert_curve()) {
polyline_join([line[0], line[1]])
@@ -56,8 +57,8 @@
// a stochastic L-system
use <turtle/lsystem3.scad>;
use <polyline_join.scad>;
use <turtle/lsystem3.scad>
use <polyline_join.scad>
for(line = vine()) {
polyline_join([line[0], line[1]])

View File

@@ -10,7 +10,7 @@ It can calculate a determinant, a special number that can be calculated from a s
## Examples
use <matrix/m_determinant.scad>;
use <matrix/m_determinant.scad>
assert(
m_determinant([

View File

@@ -10,7 +10,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to mirror
## Examples
use <matrix/m_mirror.scad>;
use <matrix/m_mirror.scad>
rotate([0, 0, 10])
cube([3, 2, 1]);

32
docs/lib3x-m_replace.md Normal file
View File

@@ -0,0 +1,32 @@
# m_replace
It replaces the aᵢⱼ element of a matrix.
**Since:** 3.3
## Parameters
- `m` : A matrix.
- `i` : The i-th row.
- `j` : The j-th column.
- `value` : The new value.
## Examples
use <matrix/m_replace.scad>
original_m = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
];
expected = [
[1, 2, 3, 4],
[5, 6, 70, 8],
[9, 10, 11, 12]
];
actual = m_replace(original_m, 1, 2, 70);
assert(actual == expected);

View File

@@ -11,7 +11,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to rotate
## Examples
use <matrix/m_rotation.scad>;
use <matrix/m_rotation.scad>
point = [20, 0, 0];
a = [0, -45, 45];
@@ -25,7 +25,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to rotate
![m_rotation](images/lib3x-m_rotation-1.JPG)
use <matrix/m_rotation.scad>;
use <matrix/m_rotation.scad>
v = [10, 10, 10];

View File

@@ -10,7 +10,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to scale i
## Examples
use <matrix/m_scaling.scad>;
use <matrix/m_scaling.scad>
cube(10);
translate([15, 0, 0])

View File

@@ -12,7 +12,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to shear a
## Examples
use <matrix/m_shearing.scad>;
use <matrix/m_shearing.scad>
color("red") {
multmatrix(m_shearing(sx = [1, 0]))

View File

@@ -10,7 +10,7 @@ Generate a 4x4 transformation matrix which can pass into `multmatrix` to transla
## Examples
use <matrix/m_translation.scad>;
use <matrix/m_translation.scad>
cube(2, center = true);
multmatrix(m_translation([5, 0, 0]))

View File

@@ -10,7 +10,7 @@ It transposes a matrix.
## Examples
use <matrix/m_transpose.scad>;
use <matrix/m_transpose.scad>
original_m = [
[1, 2, 3, 4],

View File

@@ -12,9 +12,9 @@ Given a 2D path, this function constructs a mid-point smoothed version by joinin
## Examples
use <polyline_join.scad>;
use <shape_taiwan.scad>;
use <midpt_smooth.scad>;
use <polyline_join.scad>
use <shape_taiwan.scad>
use <midpt_smooth.scad>
taiwan = shape_taiwan(50);
smoothed = midpt_smooth(taiwan, 20, true);

View File

@@ -9,7 +9,7 @@ Creates multi-line text from a list of strings. Parameters are the same as the b
## Examples
use <multi_line_text.scad>;
use <multi_line_text.scad>
multi_line_text(
["Welcome", "to", "Taiwan"],

View File

@@ -9,12 +9,13 @@ Creates a hamiltonian path from a maze. The path is the result of maze traversal
- `rows` : The rows of a maze.
- `columns` : The columns of a maze.
- `start` : The start point to travel the maze. Default to `[0, 0]`.
- `init_cells` : You can define your own initial cell data, a 2-dimension list of `[x, y, type, visited]`. `visited` means the cell is visited or not. A visited cell won't be visited when traveling the maze. If you don't provide `init_cells`, `mz_square` will generate one automatically. If you provide `init_cells`, `rows` and `columns` will be ignored. **Since:** 3.3
- `seed` : The maze is traveling randomly. Use `seed` to initialize the pseudorandom number generator.
## Examples
use <maze/mz_hamiltonian.scad>;
use <polyline_join.scad>;
use <maze/mz_hamiltonian.scad>
use <polyline_join.scad>
rows = 5;
columns = 10;

View File

@@ -15,9 +15,9 @@ It's a helper for creating wall data from maze cells. You can transform wall poi
## Examples
use <maze/mz_square_cells.scad>;
use <maze/mz_hex_walls.scad>;
use <polyline_join.scad>;
use <maze/mz_square_cells.scad>
use <maze/mz_hex_walls.scad>
use <polyline_join.scad>
rows = 10;
columns = 12;

33
docs/lib3x-mz_hexwalls.md Normal file
View File

@@ -0,0 +1,33 @@
# mz_hexwalls
It's a helper for creating wall data from maze cells. You can transform wall points for creating different types of mazes.
**Since:** 3.3
## Parameters
- `cells` : Maze cells.
- `cell_radius` : The radius of a cell.
- `left_border` : Default to `true`. Create the leftmost border of the maze.
- `bottom_border` : Default to `true`. Create the bottommost border of the maze.
## Examples
use <maze/mz_square.scad>
use <maze/mz_hexwalls.scad>
use <polyline_join.scad>
rows = 10;
columns = 12;
cell_width = 5;
wall_thickness = 2;
cells = mz_square(rows, columns);
walls = mz_hexwalls(cells, cell_width);
for(wall = walls) {
polyline_join(wall)
circle(wall_thickness, $fn = 24);
}
![mz_hexwalls](images/lib3x-mz_hexwalls-1.JPG)

61
docs/lib3x-mz_square.md Normal file
View File

@@ -0,0 +1,61 @@
# mz_square
This function returns cell data of a square maze. The data is a 2-dimension list of cells. A cell has the data structure `[x, y, type]`. `x` and `y` are 0-based. `x` means the x-th column and `y` means y-th row for a cell. The value of `type` can be `0`, `1`, `2`, `3` or `4`. Setting them to constants is convenient.
NO_WALL = 0; // the cell has no wall
TOP_WALL = 1; // the cell has a top wall
RIGHT_WALL = 2; // the cell has a right wall
TOP_RIGHT_WALL = 3; // the cell has a top wall and a right wall
MASK = 4; // the cell is masked.
The cell data is seperated from views. You can use cell data to construct [different types of mazes](https://www.thingiverse.com/justinsdk/collections/maze-generator).
**Since:** 3.3
## Parameters
- `rows` : The number of rows.
- `columns` : The number of columns.
- `start` : The start point to travel the maze. Default to `[0, 0]`.
- `init_cells` : You can define your own initial cell data, a 2-dimension list of `[x, y, type, visited]`. `visited` means the cell is visited or not. A visited cell won't be visited when traveling the maze. If you don't provide `init_cells`, `mz_square` will generate one automatically. If you provide `init_cells`, `rows` and `columns` will be ignored.
- `x_wrapping` : Default to `false`. If you want to wrap the maze in the x direction, set it to `true`. The last column of cells will be adjacent to the first column of cells.
- `y_wrapping` : Default to `false`. If you want to wrap the maze in the y direction, set it to `true`. The last row of cells will be adjacent to the first row of cells.
- `seed` : The maze is traveling randomly. Use `seed` to initialize the pseudorandom number generator.
## Examples
use <maze/mz_square.scad>
use <line2d.scad>
rows = 10;
columns = 10;
cell_width = 5;
wall_thickness = 2;
NO_WALL = 0;
TOP_WALL = 1;
RIGHT_WALL = 2;
TOP_RIGHT_WALL = 3;
MASK = 4;
cells = mz_square(rows, columns);
for(row = cells, cell = row) {
type = cell[2];
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);
}
if(type == RIGHT_WALL || type == TOP_RIGHT_WALL) {
line2d([cell_width, cell_width], [cell_width, 0], wall_thickness);
}
}
}
line2d([0, 0], [cell_width * columns, 0], wall_thickness);
line2d([0, 0], [0, cell_width * rows], wall_thickness);
![mz_square](images/lib3x-mz_square-1.JPG)

View File

@@ -24,8 +24,8 @@ The cell data is seperated from views. You can use cell data to construct [diffe
## Examples
use <maze/mz_square_cells.scad>;
use <line2d.scad>;
use <maze/mz_square_cells.scad>
use <line2d.scad>
rows = 10;
columns = 10;

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