kcl-samplesteapot

teapot

teapot

KCL

// Teapot
// A vessel with a spout and a handle used for serving tea and boiling water on a stovetop

// Set units
@settings(defaultLengthUnit = mm)

// Define parameters
teapotHeight = 130
beltlineDiameter = 160
wallThickness = 6
outletHeight = 26
spoutDiameter = 12

// Sketch the path of the teapot spout
spoutPath = startSketchOn(XZ)
  |> startProfile(at = [-beltlineDiameter / 2.5, outletHeight])
  |> xLine(length = -15.05)
  |> tangentialArc(angle = -110, radius = 30, tag = $seg01)
  |> angledLine(angle = tangentToEnd(seg01), length = 16.84)
  |> tangentialArc(angle = 100, radius = 30)

// Sweep a hollow spout
spout = startSketchOn(offsetPlane(YZ, offset = -beltlineDiameter / 2.5))
  |> circle(center = [0, outletHeight], diameter = spoutDiameter)
  |> subtract2d(tool = circle(center = [0, outletHeight], diameter = spoutDiameter * 0.8))
  |> sweep(path = spoutPath)

// Model the perimeter of the teapot body, to be used to trim the handle so that it fits snug to the body
tools = startSketchOn(YZ)
  |> startProfile(at = [0, 0])
  |> xLine(length = beltlineDiameter / 5)
  |> tangentialArc(endAbsolute = [
       beltlineDiameter / 2.1,
       teapotHeight / 2.5
     ])
  |> tangentialArc(endAbsolute = [
       beltlineDiameter / 3,
       teapotHeight / 1.1
     ])
  |> tangentialArc(endAbsolute = [beltlineDiameter / 4, teapotHeight])
  |> xLine(endAbsolute = profileStartX(%))
  |> line(endAbsolute = profileStart(%))
  |> close()
  |> revolve(axis = Y)

// Sketch the path of the handle
handlePath = startSketchOn(XZ)
  |> startProfile(at = [0, outletHeight])
  |> xLine(endAbsolute = 76)
  |> tangentialArc(end = [12.98, 6.64])
  |> tangentialArc(end = [28.39, 63.11])
  |> tangentialArc(end = [-10.27, 14.8])
  |> tangentialArc(end = [-48.01, 1.81], tag = $seg02)
  |> angledLine(angle = tangentToEnd(seg02), endAbsoluteX = 0)

// Sweep the handle
handle = startSketchOn(YZ)
  |> startProfile(at = [-10, outletHeight + 3.5])
  |> arc(interiorAbsolute = [0, outletHeight + 5], endAbsolute = [10, profileStartY(%)])
  |> tangentialArc(end = [0, -7])
  |> tangentialArc(end = [-20, 0])
  |> tangentialArc(endAbsolute = profileStart())
  |> close()
  |> sweep(path = handlePath)
  |> subtract(tools)

// Create a cutout in the body for the spout outlet
spoutHole = startSketchOn(YZ)
  |> circle(center = [0, outletHeight], diameter = spoutDiameter)
  |> extrude(length = -beltlineDiameter / 2)

// Model the body of the teapot
body = startSketchOn(YZ)
  |> startProfile(at = [0, 0])
  |> xLine(length = beltlineDiameter / 5)
  |> tangentialArc(endAbsolute = [
       beltlineDiameter / 2.1,
       teapotHeight / 2.5
     ])
  |> tangentialArc(endAbsolute = [
       beltlineDiameter / 3,
       teapotHeight / 1.1
     ])
  |> tangentialArc(endAbsolute = [beltlineDiameter / 4, teapotHeight])
  |> tangentialArc(angle = 190, diameter = wallThickness)
  |> tangentialArc(endAbsolute = [
       beltlineDiameter / 3 - wallThickness,
       teapotHeight / 1.1
     ])
  |> tangentialArc(endAbsolute = [
       beltlineDiameter / 2.1 - wallThickness,
       teapotHeight / 2.5
     ])
  |> tangentialArc(endAbsolute = [
       beltlineDiameter / 5,
       profileStartY() + wallThickness
     ])
  |> xLine(endAbsolute = profileStartX(%))
  |> line(endAbsolute = profileStart(%))
  |> close()
  |> revolve(axis = Y)
  |> subtract(tools = [spoutHole])

// Join each component of the teapot and add an appearance
[body, handle, spout]
  |> appearance(color = "#1f9896", metalness = 40, roughness = 30)