143 lines
6.4 KiB
Plaintext
143 lines
6.4 KiB
Plaintext
// 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)
|
|
|
|
// Create a function to make the 80-20 rail
|
|
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)
|
|
|> angledLine(angle = 45, endAbsoluteY = (1 - 0.356) / 2 * railHeight + originStart[1], tag = $edge4)
|
|
|> xLine(length = 0.232 * railHeight, tag = $edge5)
|
|
|> angledLine(angle = -45, endAbsoluteY = 0.087 * railHeight + originStart[1], tag = $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
|
|
|> angledLine(angle = 135, endAbsoluteX = ((1 - 0.356) / 2 + 0.356) * railHeight + originStart[0], tag = $edge12) // edge12
|
|
|> yLine(length = 0.232 * railHeight, tag = $edge13) // 13
|
|
|> angledLine(angle = 45, endAbsoluteX = (1 - 0.087) * railHeight + originStart[0], tag = $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)
|
|
|> angledLine(angle = 45, endAbsoluteY = ((1 - 0.356) / 2 + 0.356) * railHeight + originStart[1], tag = $edge20)
|
|
|> xLine(length = -0.232 * railHeight, tag = $edge21)
|
|
|> angledLine(angle = 135, endAbsoluteY = (1 - 0.087) * railHeight + originStart[1], tag = $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)
|
|
|> angledLine(angle = 135, endAbsoluteX = (1 - 0.356) / 2 * railHeight + originStart[0], tag = $edge28)
|
|
|> yLine(length = -0.232 * railHeight, tag = $edge29)
|
|
|> angledLine(angle = 45, endAbsoluteX = 0.087 * railHeight + originStart[0], tag = $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)
|