kcl-samples → pergola

pergola

pergola

KCL

// Stylized Pergola // A parametric modern pergola with vertical posts, surrounding beams, and evenly spaced roof slats. Designed for garden, patio, or backyard use. Ideal for architectural visualization and parametric prototyping.     @settings(defaultLengthUnit = mm, kclVersion = 1.0)  // Overall dimensions pergolaLength = 4000 // length along the main axis pergolaWidth = 3000 // width across the short axis pergolaHeight = 2400 // total height to top of beams   // Structural sizes beamHeight = 250 // vertical size of beams beamWidth = 120 // horizontal thickness of beams postSize = beamWidth // square posts postLength = pergolaHeight - beamHeight  // Roof slats slatCount = 16 slatHeight = beamHeight // same as beam for a solid top edge slatThickness = 50 slatSpacing = (pergolaLength - (beamWidth * 2)) / (slatCount + 1) // spacing between slats   // Post profile postSketch = startSketchOn(XY) postProfile = startProfile(postSketch, at = [-postSize / 2, -postSize / 2])  |> xLine(length = postSize)  |> yLine(length = postSize)  |> xLine(length = -postSize)  |> close() post = extrude(postProfile, length = postLength)  |> appearance(%, color = "#a0825c")  // Corner posts posts = translate(post, x = (pergolaLength - postSize) / 2, y = (pergolaWidth - postSize) / 2)  |> patternLinear3d(  %,  instances = 2,  distance = pergolaLength - postSize,  axis = [-1, 0, 0],  )  |> patternLinear3d(  %,  instances = 2,  distance = pergolaWidth - postSize,  axis = [0, -1, 0],  )  // Long beams (front and back) longBeamSketch = startSketchOn(XY) longBeamProfile = startProfile(longBeamSketch, at = [-pergolaLength / 2, -beamWidth / 2])  |> xLine(length = pergolaLength)  |> yLine(length = beamWidth)  |> xLine(length = -pergolaLength)  |> close() longBeam = extrude(longBeamProfile, length = beamHeight)  |> translate(z = postLength)  |> appearance(%, color = "#a0825c")  longBeams = translate(longBeam, y = pergolaWidth / 2 - (beamWidth / 2))  |> patternLinear3d(  %,  instances = 2,  distance = pergolaWidth - beamWidth,  axis = [0, -1, 0],  )  // Side beams (left and right) sideBeamSketch = startSketchOn(XY) sideBeamProfile = startProfile(  sideBeamSketch,  at = [  -beamWidth / 2,  -(pergolaWidth - (beamWidth * 2)) / 2  ],  )  |> xLine(length = beamWidth)  |> yLine(length = pergolaWidth - (beamWidth * 2))  |> xLine(length = -beamWidth)  |> close() sideBeam = extrude(sideBeamProfile, length = beamHeight)  |> translate(z = postLength)  |> appearance(%, color = "#a0825c")  sideBeams = translate(sideBeam, x = pergolaLength / 2 - (beamWidth / 2))  |> patternLinear3d(  %,  instances = 2,  distance = pergolaLength - beamWidth,  axis = [-1, 0, 0],  )  // Slat profile (crosswise) slatSketch = startSketchOn(XY) slatProfile = startProfile(  slatSketch,  at = [  -slatThickness / 2,  -(pergolaWidth - (beamWidth * 2)) / 2  ],  )  |> xLine(length = slatThickness)  |> yLine(length = pergolaWidth - (beamWidth * 2))  |> xLine(length = -slatThickness)  |> close() slat = extrude(slatProfile, length = slatHeight)  |> translate(z = postLength)  |> appearance(%, color = "#a0825c")  slats = translate(slat, x = -pergolaLength / 2 + beamWidth + slatSpacing)  |> patternLinear3d(  %,  instances = slatCount,  distance = slatSpacing,  axis = [1, 0, 0],  )