From 8b8dd5bbf3f43eda35563580162161fec669f4db Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sun, 5 Apr 2020 11:07:07 +0800 Subject: [PATCH] add doc --- README.md | 2 +- docs/images/lib2x-loft-1.JPG | Bin 0 -> 40539 bytes docs/lib2x-loft.md | 50 +++++++++++++++++++++++++++ src/experimental/demo/loft_demo.scad | 31 ----------------- src/loft.scad | 10 ++++++ 5 files changed, 61 insertions(+), 32 deletions(-) create mode 100644 docs/images/lib2x-loft-1.JPG create mode 100644 docs/lib2x-loft.md delete mode 100644 src/experimental/demo/loft_demo.scad diff --git a/README.md b/README.md index c3371847..ce904a5a 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ See [examples](examples). - [function_grapher](https://openhome.cc/eGossip/OpenSCAD/lib2x-function_grapher.html) - [polysections](https://openhome.cc/eGossip/OpenSCAD/lib2x-polysections.html) (It'll be deprecated from 2.3. Use `sweep` instead.) - [sweep](https://openhome.cc/eGossip/OpenSCAD/lib2x-sweep.html) (2.3 Preview) -- loft (2.3 Preview) +- [loft](https://openhome.cc/eGossip/OpenSCAD/lib2x-loft.html) (2.3 Preview) - [starburst](https://openhome.cc/eGossip/OpenSCAD/lib2x-starburst.html) - [voronoi3d](https://openhome.cc/eGossip/OpenSCAD/lib2x-voronoi3d.html) diff --git a/docs/images/lib2x-loft-1.JPG b/docs/images/lib2x-loft-1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..7963bddd84f04f261418f40dd2c28a1f2eb7d05d GIT binary patch literal 40539 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 nMIgr|agfXS{|p-Zzxr&lKTH1uY}q0I literal 0 HcmV?d00001 diff --git a/docs/lib2x-loft.md b/docs/lib2x-loft.md new file mode 100644 index 00000000..0bae16ab --- /dev/null +++ b/docs/lib2x-loft.md @@ -0,0 +1,50 @@ +# loft + +When having uniform cross sections, you can use [sweep](https://openhome.cc/eGossip/OpenSCAD/lib2x-sweep.html) to create a module. The `loft` here is best when you have a body with multiple crosssections with different geometries. + +**Since:** 2.3 + +## Parameters + +- `sections` : A list of cross-sections, The points must be count-clockwise indexes. +- `slices` : Defines the number of intermediate points between two sections. Default to 1. + +## Examples + + use ; + use ; + use ; + use ; + + 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) + ] + ]; + loft(sects, slices = 3); + + translate([30, 0, 0]) + 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]] + ], + 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]] + ], + slices = 4 + ); + } + +![loft](images/lib2x-loft-1.JPG) + + + + diff --git a/src/experimental/demo/loft_demo.scad b/src/experimental/demo/loft_demo.scad deleted file mode 100644 index c62895fb..00000000 --- a/src/experimental/demo/loft_demo.scad +++ /dev/null @@ -1,31 +0,0 @@ -use ; -use ; -use ; -use ; - -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) - ] -]; -loft(sects, slices = 3); - -translate([30, 0, 0]) -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]] - ], - 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]] - ], - slices = 4 - ); -} \ No newline at end of file diff --git a/src/loft.scad b/src/loft.scad index 030dd8ad..2d82441d 100644 --- a/src/loft.scad +++ b/src/loft.scad @@ -1,3 +1,13 @@ +/** +* loft.scad +* +* @copyright Justin Lin, 2020 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2x-loft.html +* +**/ + use ; module loft(sections, slices = 1) {