From c89c440bdaf08e07cc7854e5057737518d884357 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Tue, 18 Feb 2020 17:18:11 +0800 Subject: [PATCH] add sf_square --- src/experimental/sf_square.scad | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/experimental/sf_square.scad diff --git a/src/experimental/sf_square.scad b/src/experimental/sf_square.scad new file mode 100644 index 00000000..6a332d7c --- /dev/null +++ b/src/experimental/sf_square.scad @@ -0,0 +1,52 @@ +use ; +use ; + +/* + levels : A list of numbers (0 ~ 255). + thickness: square thickness + invert: inverts how the gray levels are translated into height values. +*/ +module sf_square(levels, thickness, invert = false) { + columns = len(levels); + rows = len(levels[0]); + + size = [columns - 1, rows - 1]; + + surface1 = [ + for(r = [0:rows - 1]) + [ + for(c = [0:columns - 1]) + let(lv = invert ? 255 - levels[c][r] : levels[c][r]) + [c, r, lv / 255 * thickness] + ] + ]; + + surface2 = [ + for(r = [0:rows - 1]) + [ + for(c = [0:columns - 1]) + [c, r, 0] + ] + ]; + + sf_solidify( + [ + for(r = [0:rows - 1]) + [ + for(c = [0:columns - 1]) + let( + lv = invert ? 255 - levels[c][r] : levels[c][r], + offset_z = invert ? thickness : 0 + ) + [c, r, lv / 255 * thickness + offset_z] + ] + ], + [ + for(r = [0:rows - 1]) + [ + for(c = [0:columns - 1]) + [c, r, 0] + ] + ] + ); +} \ No newline at end of file