kcl-samples → helium-tank

helium-tank

helium-tank

KCL

// Helium Tank // A helium tank is a portable pressure vessel used to store and dispense helium gas for a variety of commercial and entertainment purposes  // Set units @settings(defaultLengthUnit = in)  // Define parameters tankHeight = 2.5ft tankDiameter = 9 wallThickness = 0.125 portDiameter = 1.25 bracketThickness = 0.090 boltSize = 1 / 4  // Sketch the perimeter of the gas tank- inside and out, then revolve around the vertical axis. tankSketch = startSketchOn(YZ)  |> startProfile(at = [portDiameter / 2, tankHeight])  |> yLine(length = -0.6)  |> xLine(length = 0.1)  |> tangentialArc(angle = -110deg, radius = 0.1)  |> tangentialArc(angle = 40deg, radius = 0.6)  |> tangentialArc(angle = -110deg, radius = 0.1)  |> tangentialArc(angle = 180deg, radius = 0.1)  |> tangentialArc(angle = -90deg, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01)  |> angledLine(angle = tangentToEnd(seg01), endAbsoluteY = 1.5, tag = $seg09)  |> tangentialArc(angle = -90deg, radius = 2, tag = $seg02)  |> angledLine(angle = tangentToEnd(seg02), endAbsoluteX = 0.001, tag = $seg08)  |> yLine(length = wallThickness)  |> xLine(length = segLen(seg08))  |> tangentialArc(angle = 90deg, radius = 2 - wallThickness)  |> yLine(length = segLen(seg09))  |> tangentialArc(angle = 90deg, radius = tankDiameter / 2 - wallThickness - 1.3)  |> xLine(endAbsolute = profileStartX(%) - .1)  |> yLine(endAbsolute = profileStartY(%))  |> line(endAbsolute = [profileStartX(%), profileStartY(%)])  |> close()  // Only revolving to 220deg so that the interior of the tank is visible. It should ultimately be closed at 360deg tankRevolve = revolve(tankSketch, angle = 220deg, axis = Y)  // Model the brass valve on top of the tank port valveBody = startSketchOn(offsetPlane(XY, offset = tankHeight - 0.5))  |> circle(center = [0, 0], radius = portDiameter / 1.9, tag = $seg03)  |> extrude(length = 1.5, tagEnd = $capEnd001)  |> fillet(  radius = 0.1,  tags = [  getCommonEdge(faces = [seg03, capEnd001])  ],  )  // Model the outlet port of the valve, then union it all together valvePort = startSketchOn(YZ)  |> circle(center = [0, tankHeight + 0.3], radius = portDiameter / 3)  |> subtract2d(tool = circle(center = [0, tankHeight + 0.3], radius = portDiameter / 3.25))  |> extrude(length = 1.3) valve = union([valveBody, valvePort])  |> appearance(color = "#9a4618")  // Sketch the offset profile of the mounting bracket bracketOffsetProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))  |> startProfile(at = [0, tankDiameter / 2 + wallThickness])  |> xLine(length = -0.1)  |> tangentialArc(angle = 35deg, radius = tankDiameter / 2 + wallThickness)  |> tangentialArc(angle = -135deg, radius = 0.25 - wallThickness, tag = $seg06)  |> angledLine(angle = tangentToEnd(seg06), length = tankDiameter / 7)  |> tangentialArc(angle = -80deg, radius = 0.25 - wallThickness, tag = $seg07)  |> angledLine(angle = tangentToEnd(seg07), endAbsoluteX = 0)  |> mirror2d(axis = Y)  |> close()  // Sketch the outer perimeter of the offset bracket, then subtract the inner offset to create a constant thickness sheet metal hoop bracketProfile = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))  |> startProfile(at = [0, tankDiameter / 2])  |> xLine(length = -0.1)  |> tangentialArc(angle = 35deg, radius = tankDiameter / 2)  |> tangentialArc(angle = -135deg, radius = 0.25, tag = $seg04)  |> angledLine(angle = tangentToEnd(seg04), length = tankDiameter / 7)  |> tangentialArc(angle = -80deg, radius = 0.25, tag = $seg05)  |> angledLine(angle = tangentToEnd(seg05), endAbsoluteX = 0)  |> mirror2d(axis = Y)  |> close()  |> subtract2d(tool = bracketOffsetProfile)  |> extrude(length = 1, symmetric = true)  // Cut holes in the bracket for a mounting strap strapSleeve = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))  |> circle(center = [0, .125 / 2], radius = 4.75)  |> subtract2d(tool = circle(center = [0, .125 / 2], radius = 4.65))  |> extrude(length = .8, symmetric = true) bracketSleeve = subtract([bracketProfile], tools = [strapSleeve])  // Create holes in the bracket for anchor mounts to secure the bracket to a wall mountingHoles = startSketchOn(offsetPlane(XZ, offset = -tankDiameter / 1.9))  |> circle(center = [tankDiameter / 4.5, tankHeight * 0.67], radius = boltSize / 2)  |> extrude(length = -5)  bracket = subtract(  [bracketSleeve],  tools = union(patternLinear3d(  mountingHoles,  instances = 2,  distance = tankDiameter / 2.25,  axis = [-1, 0, 0],  )),  )  |> appearance(color = "#cd0404")  // Model a circular strap to secure the tank to the bracket mountingStrap = startSketchOn(offsetPlane(XY, offset = tankHeight * 0.67))  |> circle(center = [0, .155 / 2], radius = tankDiameter / 1.9)  |> subtract2d(tool = circle(center = [0, .155 / 2], radius = tankDiameter / 1.9 - 0.1))  |> extrude(length = .75, symmetric = true)  |> appearance(color = "#210d03")  // Create a second instance of the bracket and strap at a lower point on the tank [bracket, mountingStrap]  |> patternLinear3d(instances = 2, distance = tankHeight * 0.33, axis = [0, 0, -1])