A gable roof framed with site-cut rafters in pairs that meet at a ridge board, each pair tied by a ceiling joist and a collar tie, with an underpurlin under the rafters on each side held by struts that stand on a plate laid over the ceiling joists. Plan length and span over the wall plates, Pitch, largest rafter spacing and overhang, Rafter, ceiling joist, ridge board and collar tie sections, Roof weight, underpurlin section and height, strut section
Category: Roof Framing › Timber Roof Framing › Purlin and Strut Roofs
By Huu Khanh Nguyen · Updated November 4, 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 |
| Underpurlin Height | joistDepth + plateThickness + strutDepth + underpurlinDepth | 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 |
| Strut Plate Thickness | 45 | 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 - joistDepth - plateThickness | mm |
| Strut Intervals | Math.ceil((length - strutDepth) / [[[[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)][run * Math.sqrt(1 + slope * slope) <= 3000 ? 0 : run * Math.sqrt(1 + slope * slope) <= 4200 ? 1 : 2]) | |
| Strut Spacing | (length - strutDepth) / strutIntervals | mm |