diff --git a/README.md b/README.md index ce904a5a..ff0594de 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ See [examples](examples). - [bezier_smooth](https://openhome.cc/eGossip/OpenSCAD/lib2x-bezier_smooth.html) - [midpt_smooth](https://openhome.cc/eGossip/OpenSCAD/lib2x-midpt_smooth.html) - [in_polyline](https://openhome.cc/eGossip/OpenSCAD/lib2x-in_polyline.html) -- contours (2.3 Preview) +- [contours](https://openhome.cc/eGossip/OpenSCAD/lib2x-contours.html) (2.3 Preview) ### Path - [arc_path](https://openhome.cc/eGossip/OpenSCAD/lib2x-arc_path.html) diff --git a/docs/images/lib2x-contours-1.JPG b/docs/images/lib2x-contours-1.JPG new file mode 100644 index 00000000..cccc1ec9 Binary files /dev/null and b/docs/images/lib2x-contours-1.JPG differ diff --git a/docs/lib2x-contours.md b/docs/lib2x-contours.md new file mode 100644 index 00000000..c291166a --- /dev/null +++ b/docs/lib2x-contours.md @@ -0,0 +1,51 @@ +# contours + +Computes contour polygons by applying [marching squares](https://en.wikipedia.org/wiki/Marching_squares) to a rectangular list of numeric values. + +**Since:** 2.3 + +## Parameters + +- `points` : 2 value array `[x, y]`, rectangle with dimensions `x` and `y`. +- `threshold` : When applying a threshold value, the function returns isolines. When applying upper and lower threshold values, it returns isobands. + +## Examples + + use ; + use ; + use ; + + min_value = 1; + max_value = 360; + resolution = 10; + + function f(x, y) = sin(x) * cos(y) * 30; + + points = [ + for(y = [min_value:resolution:max_value]) + [ + for(x = [min_value:resolution:max_value]) + [x, y, f(x, y)] + ] + ]; + + function_grapher(points, 1); + + translate([max_value, 0, 0]) + for(z = [-30:5:30]) { + translate([0, 0, z]) + linear_extrude(1) + for(isoline = contours(points, z)) { + hull_polyline2d(isoline, width = 1); + } + } + + translate([0, max_value]) + for(z = [-30:5:30]) { + linear_extrude(35 + z) + for(isoband = contours(points, [z, z + 5])) { + polygon([for(p = isoband) [p[0], p[1]]]); + } + } + +![contours](images/lib2x-contours-1.JPG) diff --git a/src/contours.scad b/src/contours.scad index 95949ece..281ff381 100644 --- a/src/contours.scad +++ b/src/contours.scad @@ -1,3 +1,13 @@ +/** +* contours.scad +* +* @copyright Justin Lin, 2020 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib2x-contours.html +* +**/ + use <_impl/_contours_impl.scad>; function contours(points, threshold) =