A gable roof of site-cut rafter pairs on a ridge board, tied by ceiling joists and collar ties, with an underpurlin on each side held by struts that stand on a deep strutting beam laid across the ceiling joists. Length, span, pitch and overhang, Rafter, joist, ridge board and collar tie sections, Roof weight, underpurlin and strut sections, Strutting beam depth and strut spacing
Category: Roof Framing › Timber Roof Framing › Gable and Skillion Roofs
By Huu Khanh Nguyen · Updated November 5, 2026
| Name | Default | Unit |
|---|---|---|
| Length | 6000 | mm |
| Span | 7000 | mm |
| Pitch | 25 | ° |
| Maximum Rafter Spacing | 600 | mm |
| Overhang | 450 | mm |
| Rafter Thickness | 45 | mm |
| Rafter Depth | 190 | mm |
| Wall Plate Width | 88.9 | mm |
| Ceiling Joist Thickness | 45 | mm |
| Ceiling Joist Depth | 140 | mm |
| Ridge Board Thickness | 19 | mm |
| Collar Tie Depth | 140 | mm |
| Roof Weight | 0 | |
| Underpurlin Thickness | 45 | mm |
| Underpurlin Depth | 190 | mm |
| Strut Thickness | 45 | mm |
| Strut Spacing Limit | 1500 | mm |
| Strutting Beam Depth | 190 | mm |
| Maximum Beam Span | beamSpans[beamDepth == 140 ? 0 : 1] | mm |
| Underpurlin Height | (strutBase + strutDepth + underpurlinDepth + Math.min(atticHeight - collarDepth, (strutBase + strutDepth + underpurlinDepth) + (strutThickness == 45 ? 1600 : 3450) - strutDepth)) / 2 | mm |
| Width | span + 2 * overhang | mm |
| Depth | length | mm |
| Height | Math.max(atticHeight + bandHeight, joistDepth) - (overhang > 0 ? -notch - overhang * slope : 0) | mm |
| Slope | Math.tan(pitch * Math.PI / 180) | |
| Rafter Run | (span - ridgeThickness) / 2 | mm |
| Notch Height | seatWidth * slope | mm |
| Band Height | rafterDepth * Math.sqrt(1 + slope * slope) | mm |
| Attic Height | slope * run - notch | mm |
| Collar Tie Thickness | collarDepth == 140 ? 19 : 45 | mm |
| Strut Depth | 90 | mm |
| Intervals | Math.ceil((length - rafterThickness - joistThickness) / maximumSpacing) | |
| Unit Spacing | (length - rafterThickness - joistThickness) / intervals | mm |
| Collar Tie Stride | Math.min(intervals, Math.max(1, Math.min(3, Math.floor(1800 / pitchStep)))) | |
| Underpurlin Setback | seatWidth + underpurlinHeight / slope | mm |
| Strut Length | underpurlinHeight - underpurlinDepth - strutBase | mm |
| Strut Intervals | Math.ceil((length - strutDepth) / Math.min(strutSpacing, [[[[1100,1000,900],[1800,1500,1400],[2200,1900,1700],[2400,2100,1900],[2600,2300,2100]],[[1300,1200,1100],[2100,1900,1700],[2900,2600,2400],[4600,4100,3800],[5100,4500,4100]],[[4000,3500,3200],[5000,4500,4100],[6100,5400,5000]]],[[[1000,800,700],[1500,1300,1100],[2100,1700,1500],[2500,2100,1900],[2700,2400,2200]],[[1100,1000,900],[1800,1600,1400],[2400,2200,2000],[3900,3500,3200],[4700,4200,3800]],[[3300,3000,2700],[4200,3800,3500],[5100,4600,4200]]]][roofWeight][underpurlinThickness == 45 ? 0 : underpurlinThickness == 70 ? 1 : 2][[[90,140,190,240,290],[90,140,190,240,290],[190,240,290]][underpurlinThickness == 45 ? 0 : underpurlinThickness == 70 ? 1 : 2].indexOf(underpurlinDepth)][loadedColumn])) | |
| Strut Spacing | (length - strutDepth) / strutIntervals | mm |
| Strutting Beam Thickness | 90 | mm |
| Strutting Beam Underside | joistDepth + 25 | mm |
| Strut Base Height | beamBottom + beamDepth | mm |
| Loaded Dimension Column | run * Math.sqrt(1 + slope * slope) <= 3000 ? 0 : run * Math.sqrt(1 + slope * slope) <= 4200 ? 1 : 2 |