// 2x8 Lego Brick // A standard Lego brick with 2 bumps wide and 8 bumps long. // Define constants const lbumps = 10 // number of bumps long const wbumps = {{N}} // number of bumps wide const pitch = 8.0 const clearance = 0.1 const bumpDiam = 4.8 const bumpHeight = 1.8 const height = 9.6 const t = (pitch - (2 * clearance) - bumpDiam) / 2.0 const totalLength = lbumps * pitch - (2.0 * clearance) const 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. const pegFace = { plane: { 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. const tubeFace = { plane: { 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 const s = startSketchOn('XY') |> startProfileAt([-totalWidth / 2, -totalLength / 2], %) |> line([totalWidth, 0], %) |> line([0, totalLength], %) |> line([-totalWidth, 0], %) |> close(%) |> extrude(height, %) // Sketch and extrude a rectangular shape to create the shell underneath the lego. This is a hack until we have a shell function. const shellExtrude = startSketchOn(s, "start") |> startProfileAt([ -(totalWidth / 2 - t), -(totalLength / 2 - t) ], %) |> line([totalWidth - (2 * t), 0], %) |> line([0, totalLength - (2 * t)], %) |> line([-(totalWidth - (2 * t)), 0], %) |> close(%) |> extrude(-(height - t), %) fn tr = (i) => { let j = i + 1 let x = (j/wbumps) * pitch let y = (j % wbumps) * pitch return { translate: [x, y, 0], } } // Create the pegs on the top of the base const totalBumps = (wbumps * lbumps)-1 const peg = startSketchOn(s, '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(bumpHeight, %) // |> patternTransform(instances = int(totalBumps-1), transform = tr)