143 lines
4.9 KiB
Plaintext
143 lines
4.9 KiB
Plaintext
// Truss Structure
|
|
// A truss structure is a framework composed of triangular units made from straight members connected at joints, often called nodes. Trusses are widely used in architecture, civil engineering, and construction for their ability to support large loads with minimal material.
|
|
|
|
|
|
|
|
|
|
@settings(defaultLengthUnit = in)
|
|
|
|
// Define parameters
|
|
thickness = 4
|
|
totalLength = 180
|
|
totalWidth = 120
|
|
totalHeight = 120
|
|
legHeight = 48
|
|
topTrussAngle = 25
|
|
beamWidth = 4
|
|
beamLength = 2
|
|
sparAngle = 30
|
|
nFrames = 3
|
|
crossBeamLength = 82
|
|
|
|
// Sketch the top frame
|
|
topFrameSketch = startSketchOn(YZ)
|
|
profile001 = startProfile(topFrameSketch, at = [totalWidth / 2, 0])
|
|
|> xLine(length = -totalWidth, tag = $bottomFace)
|
|
|> yLine(length = 12)
|
|
|> angledLine(angle = topTrussAngle, endAbsoluteX = 0, tag = $tag001)
|
|
|> angledLine(angle = -topTrussAngle, endAbsoluteX = totalWidth / 2, tag = $tag002)
|
|
|> close()
|
|
|
|
// Create two holes in the top frame sketch to create the center beam
|
|
profile002 = startProfile(topFrameSketch, at = [totalWidth / 2 - thickness, thickness])
|
|
|> xLine(endAbsolute = thickness / 2)
|
|
|> yLine(endAbsolute = segEndY(tag001) - thickness)
|
|
|> angledLine(endAbsoluteX = profileStartX(%), angle = -topTrussAngle)
|
|
|> close(%)
|
|
|
|
profile003 = startProfile(topFrameSketch, at = [-totalWidth / 2 + thickness, thickness])
|
|
|> xLine(endAbsolute = -thickness / 2)
|
|
|> yLine(endAbsolute = segEndY(tag001) - thickness)
|
|
|> angledLine(endAbsoluteX = profileStartX(%), angle = 180 + topTrussAngle)
|
|
|> close(%)
|
|
profile004 = subtract2d(profile001, tool = profile002)
|
|
subtract2d(profile001, tool = profile003)
|
|
|
|
// Extrude the sketch to make the top frame
|
|
topFrame = extrude(profile001, length = beamLength)
|
|
|
|
// Spar 1
|
|
sketch002 = startSketchOn(offsetPlane(YZ, offset = .1))
|
|
profile006 = startProfile(sketch002, at = [thickness / 2 - 1, 14])
|
|
|> angledLine(angle = sparAngle, length = 25)
|
|
|> angledLine(angle = -topTrussAngle, length = 5)
|
|
|> angledLine(angle = 180 + sparAngle, endAbsoluteX = profileStartX(%))
|
|
|> close(%)
|
|
|
|
spar001 = extrude(profile006, length = 1.8)
|
|
|
|
// Spar2
|
|
profile007 = startProfile(sketch002, at = [-thickness / 2 + 1, 14])
|
|
|> angledLine(angle = 180 - sparAngle, length = 25)
|
|
|> angledLine(angle = 180 + topTrussAngle, length = 5)
|
|
|> angledLine(angle = -sparAngle, endAbsoluteX = profileStartX(%))
|
|
|> close(%)
|
|
|
|
spar002 = extrude(profile007, length = 1.8)
|
|
|
|
// Combine the top frame with the intermediate support beams
|
|
newFrame = topFrame + spar001 + spar002
|
|
|
|
// Create the two legs on the frame
|
|
leg001Sketch = startSketchOn(offsetPlane(XY, offset = .1))
|
|
legProfile001 = startProfile(leg001Sketch, at = [0, -totalWidth / 2])
|
|
|> xLine(%, length = beamLength - .1)
|
|
|> yLine(%, length = beamWidth - 1)
|
|
|> xLine(%, endAbsolute = profileStartX(%))
|
|
|> close(%)
|
|
|
|
legProfile002 = startProfile(leg001Sketch, at = [0, totalWidth / 2])
|
|
|> xLine(%, length = beamLength - .1)
|
|
|> yLine(%, length = -(beamWidth - 1))
|
|
|> xLine(%, endAbsolute = profileStartX(%))
|
|
|> close(%)
|
|
leg001 = extrude(legProfile001, length = -legHeight - .1)
|
|
leg002 = extrude(legProfile002, length = -legHeight - .1)
|
|
|
|
// Combine the top frame with the legs and pattern
|
|
fullFrame = newFrame + leg001 + leg002
|
|
|> patternLinear3d(
|
|
%,
|
|
instances = nFrames,
|
|
distance = crossBeamLength + beamLength,
|
|
axis = [-1, 0, 0],
|
|
)
|
|
|
|
// Create the center cross beam
|
|
centerCrossBeamSketch = startSketchOn(YZ)
|
|
profile005 = startProfile(centerCrossBeamSketch, at = [0, segEndY(tag001) - 1])
|
|
|> angledLine(%, angle = -topTrussAngle, length = beamWidth * 3 / 8)
|
|
|> yLine(length = -beamWidth * 3 / 8)
|
|
|> angledLine(%, angle = 180 - topTrussAngle, length = beamWidth * 3 / 8)
|
|
|> angledLine(%, angle = 180 + topTrussAngle, length = beamWidth * 3 / 8)
|
|
|> yLine(length = beamWidth * 3 / 8)
|
|
|> line(endAbsolute = [profileStartX(%), profileStartY(%)])
|
|
|> close()
|
|
|
|
// Extrude the center cross beam and pattern to every frame
|
|
centerCrossBeam = extrude(profile005, length = -crossBeamLength)
|
|
|> patternLinear3d(
|
|
%,
|
|
instances = nFrames - 1,
|
|
distance = crossBeamLength + beamLength,
|
|
axis = [-1, 0, 0],
|
|
)
|
|
|
|
// Create the two side cross beams
|
|
sideCrossBeamSketch = startSketchOn(-YZ)
|
|
profile008 = startProfile(
|
|
sideCrossBeamSketch,
|
|
at = [
|
|
-totalWidth / 2 + 0.5,
|
|
segEndY(tag002) - .5
|
|
],
|
|
)
|
|
|> yLine(length = -beamLength)
|
|
|> xLine(length = 3 / 4 * beamWidth)
|
|
|> yLine(length = beamLength)
|
|
|> close()
|
|
profile009 = startProfile(sideCrossBeamSketch, at = [totalWidth / 2, segEndY(tag002) - .5])
|
|
|> yLine(length = -beamLength)
|
|
|> xLine(%, length = -3 / 4 * beamWidth)
|
|
|> yLine(%, length = beamLength)
|
|
|> close(%)
|
|
|
|
// Extrude the side cross beams and pattern to every frame.
|
|
extrude([profile008, profile009], length = crossBeamLength)
|
|
|> patternLinear3d(
|
|
%,
|
|
instances = nFrames - 1,
|
|
distance = crossBeamLength + beamLength,
|
|
axis = [-1, 0, 0],
|
|
)
|