diff --git a/fcad/cube.scad b/fcad/cube.scad index 99ea116..ce843bd 100644 --- a/fcad/cube.scad +++ b/fcad/cube.scad @@ -2,15 +2,15 @@ function fCube(dims) = ( let(x = fIsVector(dims) ? dims[0] : dims, y = fIsVector(dims) ? dims[1] : dims, z = fIsVector(dims) ? dims[2] : dims) - [ - [fKeyPoints, fCartesianProduct([[0, x], [0, y], [0, z]])], - [fKeyFaces, [ + fModel( + points=fCartesianProduct([[0, x], [0, y], [0, z]]), + faces=[ [0, 2, 3, 1], // -x [0, 1, 5, 4], // -y [0, 4, 6, 2], // -z [4, 5, 7, 6], // +x [2, 6, 7, 3], // +y [1, 3, 7, 5], // +z - ]], - ] + ] + ) ); diff --git a/fcad/cylinder.scad b/fcad/cylinder.scad index 30b1604..4efba0a 100644 --- a/fcad/cylinder.scad +++ b/fcad/cylinder.scad @@ -3,16 +3,15 @@ function fCylinder(h, r, r1=undef, r2=undef, sides=36) = ( side_range = [0 : sides - 1], int_r1 = (r1 == undef) ? r : r1, int_r2 = (r2 == undef) ? r : r2) - [ - [fKeyPoints, + fModel( + points= [for (side = side_range) for (params = [[int_r1, 0], [int_r2, h]]) let (angle = side * degrees_per_side, radius = params[0], height = params[1]) [radius * sin(angle), radius * cos(angle), height]], - ], - [fKeyFaces, concat( + faces=concat( // bottom [[for (side = [sides : -1 : 0]) side * 2]], // top @@ -20,7 +19,6 @@ function fCylinder(h, r, r1=undef, r2=undef, sides=36) = ( // sides [for (side = side_range) [for (vertex = [2, 3, 1, 0]) (side * 2 + vertex) % (sides * 2)]] - )], - ] + ) + ) ); - diff --git a/fcad/sphere.scad b/fcad/sphere.scad index d5c537c..3f14ae8 100644 --- a/fcad/sphere.scad +++ b/fcad/sphere.scad @@ -2,8 +2,8 @@ function fSphere(r, sides=36, stripes=18) = ( let(degrees_per_slice = 180 / stripes, degrees_per_side = 360 / sides, top_index = (stripes - 1) * sides) - [ - [fKeyPoints, concat( + fModel( + points=concat( [for (stripe_index = [1 : stripes - 1]) for (side_index = [0 : sides - 1]) let (stripe_angle = stripe_index * degrees_per_slice, @@ -18,8 +18,8 @@ function fSphere(r, sides=36, stripes=18) = ( [0, 0, r], // top [0, 0, -r], // bottom ] - )], - [fKeyFaces, concat( + ), + faces=concat( // side squares [for (stripe_index = [2 : stripes - 1]) for (side_index = [0 : sides - 1]) @@ -49,6 +49,6 @@ function fSphere(r, sides=36, stripes=18) = ( side_base + side_index, ] ] - )], - ] + ) + ) ); diff --git a/fcad/struct.scad b/fcad/struct.scad index f6c1202..d13e0e1 100644 --- a/fcad/struct.scad +++ b/fcad/struct.scad @@ -5,6 +5,13 @@ fKeyPoints = "points"; fKeyFaces = "faces"; +function fModel(points, faces) = ( + [ + [fKeyPoints, points], + [fKeyFaces, faces], + ] +); + function fPoints(model) = ( fMapLookup(fKeyPoints, model) );