// 80/20 Rail // An 80/20 extruded aluminum linear rail. T-slot profile adjustable by profile height, rail length, and origin position // Set units @settings(defaultLengthUnit = in) // Define function fn rail8020(originStart, railHeight, railLength) { // Sketch side 1 of profile sketch001 = startSketchOn(-XZ) |> startProfileAt([ originStart[0], 0.1 * railHeight + originStart[1] ], %) |> arc({ angleStart = 180, angleEnd = 270, radius = 0.1 * railHeight }, %) |> arc({ angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight }, %) |> xLine(length = 0.1 * railHeight) |> arc({ angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight }, %) |> xLine(length = 0.06 * railHeight, tag = $edge1) |> yLine(length = 0.087 * railHeight, tag = $edge2) |> xLine(length = -0.183 * railHeight, tag = $edge3) |> angledLineToY({ angle = 45, to = (1 - 0.356) / 2 * railHeight + originStart[1] }, %, $edge4) |> xLine(length = 0.232 * railHeight, tag = $edge5) |> angledLineToY({ angle = -45, to = 0.087 * railHeight + originStart[1] }, %, $edge6) |> xLine(length = -0.183 * railHeight, tag = $edge7) |> yLine(length = -0.087 * railHeight, tag = $edge8) |> xLine(length = 0.06 * railHeight) |> arc({ angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight }, %) |> xLine(length = 0.1 * railHeight) |> arc({ angleStart = 180, angleEnd = 0, radius = 0.072 / 4 * railHeight }, %) |> arc({ angleStart = -90, angleEnd = 0, radius = 0.1 * railHeight }, %) // Sketch side 2 of profile |> arc({ angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight }, %) |> yLine(length = 0.1 * railHeight) |> arc({ angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight }, %) |> yLine(length = 0.06 * railHeight, tag = $edge9) |> xLine(length = -0.087 * railHeight, tag = $edge10) |> yLine(length = -0.183 * railHeight, tag = $edge11) // edge11 |> angledLineToX({ angle = 135, to = ((1 - 0.356) / 2 + 0.356) * railHeight + originStart[0] }, %, $edge12) // edge12 |> yLine(length = 0.232 * railHeight, tag = $edge13) // 13 |> angledLineToX({ angle = 45, to = (1 - 0.087) * railHeight + originStart[0] }, %, $edge14) // 14 |> yLine(length = -0.183 * railHeight, tag = $edge15) // 15 |> xLine(length = 0.087 * railHeight, tag = $edge16) |> yLine(length = 0.06 * railHeight) |> arc({ angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight }, %) |> yLine(length = 0.1 * railHeight) |> arc({ angleStart = 270, angleEnd = 90, radius = 0.072 / 4 * railHeight }, %) // Sketch side 3 of profile |> arc({ angleStart = 0, angleEnd = 90, radius = 0.1 * railHeight }, %) |> arc({ angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight }, %) |> xLine(length = -0.1 * railHeight) |> arc({ angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight }, %) |> xLine(length = -0.06 * railHeight, tag = $edge17) |> yLine(length = -0.087 * railHeight, tag = $edge18) |> xLine(length = 0.183 * railHeight, tag = $edge19) |> angledLineToY({ angle = 45, to = ((1 - 0.356) / 2 + 0.356) * railHeight + originStart[1] }, %, $edge20) |> xLine(length = -0.232 * railHeight, tag = $edge21) |> angledLineToY({ angle = 135, to = (1 - 0.087) * railHeight + originStart[1] }, %, $edge22) |> xLine(length = 0.183 * railHeight, tag = $edge23) |> yLine(length = 0.087 * railHeight, tag = $edge24) |> xLine(length = -0.06 * railHeight) |> arc({ angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight }, %) |> xLine(length = -0.1 * railHeight) |> arc({ angleStart = 0, angleEnd = -180, radius = 0.072 / 4 * railHeight }, %) |> arc({ angleStart = 90, angleEnd = 180, radius = 0.1 * railHeight }, %) // Sketch side 4 of profile |> arc({ angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight }, %) |> yLine(length = -0.1 * railHeight) |> arc({ angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight }, %) |> yLine(length = -0.06 * railHeight, tag = $edge25) |> xLine(length = 0.087 * railHeight, tag = $edge26) |> yLine(length = 0.183 * railHeight, tag = $edge27) |> angledLineToX({ angle = 135, to = (1 - 0.356) / 2 * railHeight + originStart[0] }, %, $edge28) |> yLine(length = -0.232 * railHeight, tag = $edge29) |> angledLineToX({ angle = 45, to = 0.087 * railHeight + originStart[0] }, %, $edge30) |> yLine(length = 0.183 * railHeight, tag = $edge31) |> xLine(length = -0.087 * railHeight, tag = $edge32) |> yLine(length = -0.06 * railHeight) |> arc({ angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight }, %) |> yLine(length = -0.1 * railHeight) |> arc({ angleStart = 90, angleEnd = -90, radius = 0.072 / 4 * railHeight }, %) |> close() // Sketch center hole of profile |> hole(circle( center = [ .5 * railHeight + originStart[0], .5 * railHeight + originStart[1] ], radius = .205 * railHeight / 2, ), %) |> extrude(length = railLength) |> fillet( radius = 0.06, tags = [ getNextAdjacentEdge(edge3), getNextAdjacentEdge(edge4), getNextAdjacentEdge(edge5), getNextAdjacentEdge(edge6), getNextAdjacentEdge(edge11), getNextAdjacentEdge(edge12), getNextAdjacentEdge(edge13), getNextAdjacentEdge(edge14), getNextAdjacentEdge(edge19), getNextAdjacentEdge(edge20), getNextAdjacentEdge(edge21), getNextAdjacentEdge(edge22), getNextAdjacentEdge(edge27), getNextAdjacentEdge(edge28), getNextAdjacentEdge(edge29), getNextAdjacentEdge(edge30) ], ) |> fillet( radius = 0.03, tags = [ getNextAdjacentEdge(edge1), getNextAdjacentEdge(edge2), getNextAdjacentEdge(edge7), getNextAdjacentEdge(edge8), getNextAdjacentEdge(edge9), getNextAdjacentEdge(edge10), getNextAdjacentEdge(edge15), getNextAdjacentEdge(edge16), getNextAdjacentEdge(edge17), getNextAdjacentEdge(edge18), getNextAdjacentEdge(edge23), getNextAdjacentEdge(edge24), getNextAdjacentEdge(edge25), getNextAdjacentEdge(edge26), getNextAdjacentEdge(edge31), getNextAdjacentEdge(edge32) ], ) return sketch001 } // Generate one adjustable rail of 80/20 rail8020([0, 0], 1.5, 48)