|
| 1 | +// Hand Trolley Axle |
| 2 | + |
| 3 | +// Set units |
| 4 | +@settings(defaultLengthUnit = in) |
| 5 | + |
| 6 | +// Import parameters |
| 7 | +import * from "parameters.kcl" |
| 8 | + |
| 9 | +// Model the lifting grate as a sheet metal part |
| 10 | +grate = startSketchOn(-YZ) |
| 11 | + |> startProfile(at = [-grateDepth, 0]) |
| 12 | + |> yLine(length = grateThickness, tag = $seg11) |
| 13 | + |> xLine(endAbsolute = tubeDiameter) |
| 14 | + |> tangentialArc(angle = 90deg, radius = bendRadius) |
| 15 | + |> yLine(length = 1.5, tag = $seg01) |
| 16 | + |> xLine(length = grateThickness, tag = $seg10) |
| 17 | + |> yLine(length = -segLen(seg01)) |
| 18 | + |> tangentialArc(angle = -90deg, radius = bendRadius + grateThickness) |
| 19 | + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |
| 20 | + |> close() |
| 21 | + |> extrude( |
| 22 | + length = frameWidth + tubeDiameter, |
| 23 | + symmetric = true, |
| 24 | + tagStart = $capStart001, |
| 25 | + tagEnd = $capEnd001, |
| 26 | + ) |
| 27 | + |> fillet( |
| 28 | + radius = 1, |
| 29 | + tags = [ |
| 30 | + getCommonEdge(faces = [seg10, capStart001]), |
| 31 | + getCommonEdge(faces = [seg11, capEnd001]), |
| 32 | + getCommonEdge(faces = [seg10, capEnd001]), |
| 33 | + getCommonEdge(faces = [seg11, capStart001]) |
| 34 | + ], |
| 35 | + ) |
| 36 | + |
| 37 | +// Model the path of the outer rail of the trolley frame |
| 38 | +outerRail = startSketchOn(offsetPlane(XZ, offset = tubeDiameter / 2)) |
| 39 | + |> startProfile(at = [-frameWidth / 2, grateThickness]) |
| 40 | + |> yLine(endAbsolute = height - tubeBend) |
| 41 | + |> tangentialArc(angle = -90deg, radius = tubeBend) |
| 42 | + |> xLine(endAbsolute = 0, tag = $seg02) |
| 43 | + |> xLine(length = segLen(seg02)) |
| 44 | + |> tangentialArc(angle = -90deg, radius = tubeBend) |
| 45 | + |> yLine(endAbsolute = profileStartY()) |
| 46 | + |
| 47 | +// Sweep the tube profile around the outer rail path to give it a thickness |
| 48 | +outerRailThicken = startSketchOn(offsetPlane(XY, offset = grateThickness)) |
| 49 | + |> circle(center = [-frameWidth / 2, -tubeDiameter / 2], diameter = tubeDiameter) |
| 50 | + |> sweep(path = outerRail) |
| 51 | + |
| 52 | +// The minimum allowable straight length should equal double the bend radius |
| 53 | +centerRail = startSketchOn(YZ) |
| 54 | + |> startProfile(at = [-tubeDiameter / 2, grateThickness]) |
| 55 | + |> yLine(length = tubeBend * 2) |
| 56 | + |> tangentialArc(angle = 30deg, radius = tubeBend, tag = $seg03) |
| 57 | + |> angledLine(angle = tangentToEnd(seg03), length = tubeBend * 2) |
| 58 | + |> tangentialArc(angle = -30deg, radius = tubeBend, tag = $seg04) |
| 59 | + |> angledLine(angle = tangentToEnd(seg04), endAbsoluteY = height - (tubeBend * 3.835), tag = $seg27) |
| 60 | + |> tangentialArc(angle = 45deg, radius = tubeBend, tag = $seg05) |
| 61 | + |> angledLine(angle = tangentToEnd(seg05), length = tubeBend * 2) |
| 62 | + |> tangentialArc(angle = -135deg, radius = tubeBend, tag = $seg06) |
| 63 | + |> angledLine(angle = tangentToEnd(seg06), endAbsoluteX = -tubeDiameter / 2) |
| 64 | + |
| 65 | +// Sweep the tube profile around the center rail path to give it a thickness |
| 66 | +centerRailThicken = startSketchOn(XY) |
| 67 | + |> circle(center = [0, -tubeDiameter / 2], diameter = tubeDiameter) |
| 68 | + |> sweep(path = centerRail) |
| 69 | + |
| 70 | +// Model supporting ribs for the trolley frame |
| 71 | +rib = startSketchOn(offsetPlane(XY, offset = 14)) |
| 72 | + |> startProfile(at = [ |
| 73 | + -(frameWidth - tubeDiameter) / 2 - .05, |
| 74 | + -.6 |
| 75 | + ]) |
| 76 | + |> arc(interiorAbsolute = [0, -3.15], endAbsolute = [-profileStartX(), profileStartY()], tag = $seg14) |
| 77 | + |> angledLine(angle = tangentToEnd(seg14) + 90, length = grateThickness) |
| 78 | + |> arc(interiorAbsolute = [0, -3.15 + grateThickness], endAbsolute = [-lastSegX(), lastSegY()]) |
| 79 | + |> line(endAbsolute = [profileStartX(), profileStartY()]) |
| 80 | + |> close() |
| 81 | + |> extrude(length = 1) |
| 82 | + |> patternLinear3d(instances = 3, distance = segLen(seg27) / 3, axis = [0, 0, 1]) |
| 83 | + |
| 84 | +// Create welded brackets to support the axle |
| 85 | +brackets = startSketchOn(offsetPlane(YZ, offset = frameWidth / 2)) |
| 86 | + |> startProfile(at = [-tubeDiameter, wheelDiameter / 2 - 3]) |
| 87 | + |> yLine(length = 0.54, tag = $seg16) |
| 88 | + |> tangentialArc(angle = 60deg, radius = bendRadius, tag = $seg07) |
| 89 | + |> angledLine(angle = tangentToEnd(seg07), length = 2.58, tag = $seg15) |
| 90 | + |> tangentialArc(angle = -90deg, radius = bendRadius + grateThickness) |
| 91 | + |> tangentialArc(angle = 60deg, radius = 1.5) |
| 92 | + |> tangentialArc(angle = -90deg, radius = bendRadius + grateThickness, tag = $seg08) |
| 93 | + |> angledLine(angle = tangentToEnd(seg08), length = segLen(seg15)) |
| 94 | + |> tangentialArc(angle = 60deg, radius = bendRadius, tag = $seg09) |
| 95 | + |> yLine(length = segLen(seg16)) |
| 96 | + |> xLine(length = grateThickness) |
| 97 | + |> yLine(length = -segLen(seg16)) |
| 98 | + |> tangentialArc(angle = -60deg, radius = bendRadius + grateThickness, tag = $seg17) |
| 99 | + |> angledLine(angle = tangentToEnd(seg17), length = segLen(seg15)) |
| 100 | + |> tangentialArc(angle = 90deg, radius = bendRadius) |
| 101 | + |> tangentialArc(angle = -60deg, radius = 1.5 + grateThickness) |
| 102 | + |> tangentialArc(angle = 90deg, radius = bendRadius, tag = $seg18) |
| 103 | + |> angledLine(angle = tangentToEnd(seg18), length = segLen(seg15)) |
| 104 | + |> tangentialArc(angle = -60deg, radius = bendRadius + grateThickness, tag = $seg19) |
| 105 | + |> yLine(length = -segLen(seg16)) |
| 106 | + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |
| 107 | + |> close() |
| 108 | + |> extrude(length = 0.75 * tubeDiameter, symmetric = true) |
| 109 | + |
| 110 | +// Model a bearing for the axle on each bracket |
| 111 | +axlebearing = startSketchOn(offsetPlane(YZ, offset = frameWidth / 2)) |
| 112 | + |> circle(center = [-3.67, wheelDiameter / 2], diameter = 1) |
| 113 | + |> subtract2d(tool = circle(center = [-3.67, wheelDiameter / 2], diameter = .75)) |
| 114 | + |> extrude(length = tubeDiameter, symmetric = true) |
| 115 | + |
| 116 | +patternLinear3d( |
| 117 | + [brackets, axlebearing], |
| 118 | + instances = 2, |
| 119 | + distance = frameWidth, |
| 120 | + axis = [-1, 0, 0], |
| 121 | +) |
| 122 | + |
| 123 | +axle = startSketchOn(-YZ) |
| 124 | + |> circle(center = [3.67, wheelDiameter / 2], diameter = 0.75) |
| 125 | + |> extrude(length = frameWidth + 4, symmetric = true) |
| 126 | + |
| 127 | +// Revolve a wheel that mounts to the trolley axle |
| 128 | +wheel = startSketchOn(offsetPlane(XY, offset = wheelDiameter / 2)) |
| 129 | + |> startProfile(at = [ |
| 130 | + -frameWidth / 2 - 0.65, |
| 131 | + -3.67 + 0.75 / 2 |
| 132 | + ]) |
| 133 | + |> xLine(length = -2.7) |
| 134 | + |> yLine(endAbsolute = -3.67) |
| 135 | + |> xLine(length = -0.5) |
| 136 | + |> yLine(length = 0.44) |
| 137 | + |> tangentialArc(angle = -85deg, radius = 0.2, tag = $seg21) |
| 138 | + |> angledLine(angle = tangentToEnd(seg21), length = 1.14) |
| 139 | + |> tangentialArc(angle = 85deg, radius = 0.1, tag = $seg22) |
| 140 | + |> angledLine(angle = tangentToEnd(seg22), length = 1.28) |
| 141 | + |> tangentialArc(angle = 85deg, radius = 0.1, tag = $seg23) |
| 142 | + |> angledLine(angle = tangentToEnd(seg23), length = 0.95) |
| 143 | + |> tangentialArc(angle = -80deg, radius = 0.2, tag = $seg24) |
| 144 | + |> angledLine(angle = tangentToEnd(seg24), length = 0.77) |
| 145 | + |> xLine(length = 0.15) |
| 146 | + |> angledLine(angle = tangentToEnd(seg24), length = -0.7) |
| 147 | + |> xLine(length = 2) |
| 148 | + |> angledLine(angle = -tangentToEnd(seg24), length = -0.7) |
| 149 | + |> xLine(length = 0.12) |
| 150 | + |> angledLine(angle = -tangentToEnd(seg24), length = 0.77) |
| 151 | + |> tangentialArc(angle = -80deg, radius = 0.2, tag = $seg25) |
| 152 | + |> angledLine(angle = tangentToEnd(seg25), length = 0.43) |
| 153 | + |> tangentialArc(angle = 85deg, radius = 0.1) |
| 154 | + |> yLine(length = -0.91) |
| 155 | + |> tangentialArc(angle = 85deg, radius = 0.1) |
| 156 | + |> angledLine(angle = -tangentToEnd(seg25), endAbsoluteX = profileStartX()) |
| 157 | + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |
| 158 | + |> close() |
| 159 | + |> revolve(axis = { |
| 160 | + direction = [1.0, 0.0], |
| 161 | + origin = [0.0, -3.67] |
| 162 | + }) |
| 163 | + |
| 164 | +tire = startSketchOn(offsetPlane(XY, offset = wheelDiameter / 2)) |
| 165 | + |> startProfile(at = [-frameWidth / 2 - 3.55, -1.05]) |
| 166 | + |> angledLine(angle = 100, length = 0.73, tag = $seg26) |
| 167 | + |> tangentialArc(endAbsolute = [lastSegX(), wheelDiameter / 2.1 - 3.67]) |
| 168 | + |> tangentialArc(angle = 10deg, radius = 1) |
| 169 | + |> tangentialArc(angle = -90deg, radius = wheelDiameter / 100, tag = $seg12) |
| 170 | + |> angledLine(angle = tangentToEnd(seg12), length = 2.25) |
| 171 | + |> tangentialArc(angle = -90deg, radius = wheelDiameter / 100) |
| 172 | + |> tangentialArc(angle = 10deg, radius = 1) |
| 173 | + |> tangentialArc(endAbsolute = [lastSegX(), segEndY(seg26)], tag = $seg13) |
| 174 | + |> angledLine(angle = -100deg, length = segLen(seg26)) |
| 175 | + |> line(endAbsolute = [profileStartX(%), profileStartY(%)]) |
| 176 | + |> close() |
| 177 | + |> revolve(axis = { |
| 178 | + direction = [1.0, 0.0], |
| 179 | + origin = [0.0, -3.67] |
| 180 | + }) |
| 181 | + |> appearance(color = "#010101", metalness = 10, roughness = 70) |
| 182 | + |
| 183 | +patternCircular3d( |
| 184 | + [wheel, tire], |
| 185 | + instances = 2, |
| 186 | + axis = [0, 0, 1], |
| 187 | + center = [0, -3.67, 0], |
| 188 | +) |
| 189 | + |
| 190 | +appearance( |
| 191 | + [ |
| 192 | + grate, |
| 193 | + brackets, |
| 194 | + axlebearing, |
| 195 | + outerRailThicken, |
| 196 | + centerRailThicken, |
| 197 | + rib, |
| 198 | + wheel |
| 199 | + ], |
| 200 | + color, |
| 201 | + metalness = 40, |
| 202 | + roughness, |
| 203 | +) |
0 commit comments