// 2x8 Lego Brick // A standard Lego brick with 2 bumps wide and 8 bumps long. // Define constants lbumps = 10 // number of bumps long wbumps = {{N}} // number of bumps wide pitch = 8.0 clearance = 0.1 bumpDiam = 4.8 bumpHeight = 1.8 height = 9.6 t = (pitch - (2 * clearance) - bumpDiam) / 2.0 totalLength = lbumps * pitch - (2.0 * clearance) totalWidth = wbumps * pitch - (2.0 * clearance) // Create the plane for the pegs. This is a hack so that the pegs can be patterned along the face of the lego base. pegFace = { origin = { x = 0, y = 0, z = height }, xAxis = { x = 1, y = 0, z = 0 }, yAxis = { x = 0, y = 1, z = 0 }, zAxis = { x = 0, y = 0, z = 1 } } // Create the plane for the tubes underneath the lego. This is a hack so that the tubes can be patterned underneath the lego. tubeFace = { origin = { x = 0, y = 0, z = height - t }, xAxis = { x = 1, y = 0, z = 0 }, yAxis = { x = 0, y = 1, z = 0 }, zAxis = { x = 0, y = 0, z = 1 } } // Make the base s = startSketchOn(XY) |> startProfile(at = [-totalWidth / 2, -totalLength / 2]) |> line(end = [totalWidth, 0]) |> line(end = [0, totalLength]) |> line(end = [-totalWidth, 0]) |> close() |> extrude(length = height) // Sketch and extrude a rectangular shape to create the shell underneath the lego. This is a hack until we have a shell function. shellExtrude = startSketchOn(s, "start") |> startProfile(at = [ -(totalWidth / 2 - t), -(totalLength / 2 - t) ]) |> line(end = [totalWidth - (2 * t), 0]) |> line(end = [0, totalLength - (2 * t)]) |> line(end = [-(totalWidth - (2 * t)), 0]) |> close() |> extrude(length = -(height - t)) fn tr(@i) { j = i + 1 x = (j/wbumps) * pitch y = (j % wbumps) * pitch return { translate = [x, y, 0], } } // Create the pegs on the top of the base totalBumps = (wbumps * lbumps)-1 peg = startSketchOn(s, face = END) |> circle( center = [ -(pitch*(wbumps-1)/2), -(pitch*(lbumps-1)/2) ], radius = bumpDiam / 2) |> patternLinear2d( axis = [1, 0], instances = wbumps, distance = pitch ) |> patternLinear2d( axis = [0, 1], instances = lbumps, distance = pitch ) |> extrude(length = bumpHeight) // |> patternTransform(instances = totalBumps-1, transform = tr)