// 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 = -110, radius = 0.1) |> tangentialArc(angle = 40, radius = 0.6) |> tangentialArc(angle = -110, radius = 0.1) |> tangentialArc(angle = 180, radius = 0.1) |> tangentialArc(angle = -90, radius = tankDiameter / 2 - lastSegX(%), tag = $seg01) |> angledLine(angle = tangentToEnd(seg01), endAbsoluteY = 1.5, tag = $seg09) |> tangentialArc(angle = -90, radius = 2, tag = $seg02) |> angledLine(angle = tangentToEnd(seg02), endAbsoluteX = 0.001, tag = $seg08) |> yLine(length = wallThickness) |> xLine(length = segLen(seg08)) |> tangentialArc(angle = 90, radius = 2 - wallThickness) |> yLine(length = segLen(seg09)) |> tangentialArc(angle = 90, 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 = 220, 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 = 35, radius = tankDiameter / 2 + wallThickness) |> tangentialArc(angle = -135, radius = 0.25 - wallThickness, tag = $seg06) |> angledLine(angle = tangentToEnd(seg06), length = tankDiameter / 7) |> tangentialArc(angle = -80, 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 = 35, radius = tankDiameter / 2) |> tangentialArc(angle = -135, radius = 0.25, tag = $seg04) |> angledLine(angle = tangentToEnd(seg04), length = tankDiameter / 7) |> tangentialArc(angle = -80, 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], )