diff --git a/src/experimental/sf_sphere.scad b/src/experimental/sf_sphere.scad index a3b92c85..d7f13b91 100644 --- a/src/experimental/sf_sphere.scad +++ b/src/experimental/sf_sphere.scad @@ -1,3 +1,4 @@ +use ; use ; use ; @@ -9,38 +10,22 @@ use ; invert: inverts how the gray levels are translated into height values. */ module sf_sphere(levels, radius, thickness, angle = [180, 360], invert = false) { + surface = _sf_square_surfaces(levels, thickness, invert); rows = len(levels); columns = len(levels[0]); size = [columns - 1, rows - 1]; - surface1 = [ - for(r = [0:rows - 1]) - [ - for(c = [0:columns - 1]) - let(lv = invert ? 255 - levels[rows - r - 1][c] : levels[rows - r - 1][c]) - [c, r, lv / 255 * thickness] - ] - ]; - - surface2 = [ - for(r = [0:rows - 1]) - [ - for(c = [0:columns - 1]) - [c, r, 0] - ] - ]; - offset_z = invert ? thickness : 0; sf_solidify( [ - for(row = surface1) + for(row = surface[0]) [ for(p = row) tf_sphere(size, p, radius + offset_z, angle) ] ] , [ - for(row = surface2) + for(row = surface[1]) [ for(p = row) tf_sphere(size, p, radius, angle) ]