kcl-samples → dining-table
dining-table

KCL
// Dining Table
// Simple dining table with rectangular tabletop, aprons and four legs with square section
// ──────────────
// PARAMETERS
// ──────────────
@settings(defaultLengthUnit = mm)
tableHeight = 750
apronTopElevation = tableHeight
tableLength = 2100
tableWidth = 800
tableTopThickness = 20
legThickness = 40
legOffset = 60
apronHeight = 120
apronThickness = legThickness / 2
// ──────────────
// TABLETOP
// ──────────────
tableTopPlane = offsetPlane(XY, offset = tableHeight)
tableTopSketch = startSketchOn(tableTopPlane)
tableTopProfile = startProfile(tableTopSketch, at = [0, 0])
  |> yLine(length = tableLength)
  |> xLine(length = tableWidth)
  |> yLine(length = -tableLength)
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()
tableTopExtrude = extrude(tableTopProfile, length = -tableTopThickness)
// ──────────────
// LEGS
// ──────────────
legHeight = tableHeight - tableTopThickness
distanceBetweenLegAxisWidth = tableWidth - legThickness - (legOffset * 2)
distanceBetweenLegAxisLength = tableLength - legThickness - (legOffset * 2)
legSketch = startSketchOn(XY)
legProfile = startProfile(legSketch, at = [0, 0])
  |> yLine(length = legThickness)
  |> xLine(length = legThickness)
  |> yLine(length = -legThickness)
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()
legExtrude = extrude(legProfile, length = legHeight)
  |> translate(x = legOffset, y = legOffset, z = 0)
leg2 = clone(legExtrude)
  |> translate(x = distanceBetweenLegAxisWidth, y = 0, z = 0)
leg3 = clone(legExtrude)
  |> translate(x = 0, y = distanceBetweenLegAxisLength, z = 0)
leg4 = clone(legExtrude)
  |> translate(x = distanceBetweenLegAxisWidth, y = tableLength - legThickness - (legOffset * 2), z = 0)
  // ──────────────
  // APRONS
// ──────────────
longApronLength = tableLength - (legThickness * 2) - (legOffset * 2)
shortApronLength = tableWidth - (legThickness * 2) - (legOffset * 2)
distanceFromTableTopCornerToLegBackSide = legOffset + legThickness
distanceFromTableTopCornerToLegAxis = legOffset + legThickness / 2
distanceFromTableTopCornerToApronSide = distanceFromTableTopCornerToLegAxis - (apronThickness / 2)
stretcherPlane = offsetPlane(XY, offset = apronTopElevation - tableTopThickness)
stretcherSketch = startSketchOn(stretcherPlane)
longApronProfile = startProfile(stretcherSketch, at = [0, 0])
  |> yLine(length = longApronLength)
  |> xLine(length = apronThickness)
  |> yLine(length = -longApronLength)
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()
longApronProfileMoved = translate(
  longApronProfile,
  x = distanceFromTableTopCornerToApronSide,
  y = distanceFromTableTopCornerToLegBackSide,
  z = 0,
)
longApron1 = extrude(longApronProfileMoved, length = -apronHeight)
longApron2 = clone(longApron1)
  |> translate(x = distanceBetweenLegAxisWidth, y = 0, z = 0)
shortApronProfile = startProfile(stretcherSketch, at = [0, 0])
  |> yLine(length = apronThickness)
  |> xLine(length = shortApronLength)
  |> yLine(length = -apronThickness)
  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])
  |> close()
shortApronProfileMoved = translate(
  shortApronProfile,
  x = distanceFromTableTopCornerToLegBackSide,
  y = distanceFromTableTopCornerToApronSide,
  z = 0,
)
shortApron1 = extrude(shortApronProfileMoved, length = -apronHeight)
shortApron2 = clone(shortApron1)
  |> translate(x = 0, y = distanceBetweenLegAxisLength, z = 0)