About this calculator
This calculator estimates material quantities for a plasterboard partition on a metal CW/UW frame — but now for a room, not one wall in isolation. Enter the room as a chain of wall segments (each with its own length), a shared wall height, and whether the chain loops back into a closed room (on by default — most rooms are closed; turn it off for a free-standing partition run). Each wall's own doors and windows are entered right under that wall's own row in the form, one continuous list per wall — there is no separate "which wall" field to fill in, since adding an opening under wall 2's own row already says which wall it belongs to. The calculator deducts openings from area, counts frame studs and jamb reinforcement, and splits corner treatment into internal corners (tape and compound) and external corners (corner bead), derived from how the wall chain turns. The plan always draws clockwise and numbers each wall to match its row in the form.
Two modes. Simple (the default) asks only a rectangular room's own length, width, wall height, and how many doors and windows it has — five fields, no wall-by-wall entry, no opening position. Its own doors and windows are deducted at typical sizes (900×2100 mm for a door, 900×1200 mm with a 900 mm sill for a window) and placed evenly along the room's four walls; where exactly they sit is never asked, since it only matters for cutting. Detailed is the wall-chain model described above, for planning cuts and offcuts. Both modes return the full material list — only the questions differ.
Formula
wall area = Σ (wall length × wall height)
openings area = Σ (opening width × opening height)
net area = wall area − openings area
Openings are deducted as net area. Each opening is checked so its sill height plus its own height cannot exceed the wall height (error if it does — a door's sill is always 0, since a door has no sillHeight field to begin with). The old v1 check "total openings area cannot exceed the wall area" is gone as a separate check in v2 — it is now implied automatically by two other checks together (every opening's height ≤ wall height, and every wall's own openings fit within that wall's length), so it can no longer fail on its own.
Wall chain and corners:
Each wall has a length and, at its far end, a turn ('left' or 'right' — your own hand, walking the walls in entry order, established once and held fixed, the same convention straight-stairs/l-stair-landing/u-stair-landing already use for their own left/right inputs). Walking the chain places every wall on a plan and tells the calculator which corners are internal (an ordinary room corner) and which are external (a corner that pokes into the room, like the notch of an L-shaped room):
convex (internal) turn count − reflex (external) turn count = 4, for any closed loop
This is a discrete geometry identity (the turns around any closed rectilinear loop always sum to one full turn), not a rule this calculator invented — whichever turn direction is in the majority is always the internal one. An open run (room is not closed) has no enclosed interior for a corner to be reflex against, so every corner in an open run is simply treated as internal — a stated simplification, not a derived fact. A single wall with the room left open (the pre-v2 default shape) has zero corners at all.
Two wall lengths are derived, not entered. A wall chain's own heading always alternates between the room's two axes one wall to the next (every turn is 90°), so for any even, closed wall count, the last wall on each axis is always exactly determined by every other wall's own length and turn — the same "derive it, don't ask for it" treatment an opening's own final gap already gets. Those two walls (always the last two entered) show their length live, right in the field, styled as read-only rather than as an error, and it updates immediately as any other wall changes. A closed room therefore always needs an even number of walls — an odd count can never return to its own starting point, however the lengths are chosen, since each 90° turn alternates axis and an odd number of alternations can't land back on the first one. If the derived length for one of those two walls would need to be zero, negative, or outside the wall length field's own valid range, the room genuinely cannot close with the other walls' current lengths — that specific wall is named in the error, along with the length that would fix it.
Each of those two walls also gets its own auto length toggle (on by default). Turning it off takes that wall back under manual control: its own entered length is trusted and checked instead of overridden, so it must exactly match what closing the room requires on that wall's own axis — if it doesn't, that's a named error citing both what you entered and what's required, not a generic whole-room offset (the other, still-automatic wall keeps closing its own axis independently either way, since the two axes never affect each other).
CW studs (vertical, length = wall height), summed over every wall:
CW stud count = Σ (floor(wall length / stud spacing) + 1)
+ opening count × 2 (one extra stud at each opening edge)
CW total length = stud count × wall height
CW stock pieces = ceil(CW total length / profile stock length)
Each wall gets its own "+1" fencepost stud independently — this is a direct formula, not a "fencepost with remainder" count.
UW track (horizontal, floor + ceiling), summed over every wall: UW total length = Σ wall length × 2, with the same ceiling-divide-by-stock-length piece count.
UA reinforced profiles are placed only at door openings (an explicit item type now, not inferred from sill height 0): two profiles per door, each cut to that door's own height.
Boards:
boards per side (excl. waste) = ceil(net area / (board width × board height)) × layers per side
waste boards per side = ceil(boards per side (excl. waste) × waste% / 100)
boards per side (incl. waste) = excl. waste + waste boards
boards total = boards per side × number of sides
Consumables:
screws = ceil(net area × sides × layers per side × screws/m² / 1,000,000)
joint compound = net area × sides × compound coverage (kg/m²)
Joint tape, summed over every wall, board-to-board seams plus that wall's own ceiling/ floor edge — the wall's end edges are corners now (or absent, for a lone open-run wall), not folded into this figure any more:
board columns (per wall) = ceil(wall length / board width)
board rows = ceil(wall height / board height) (shared — one wall height for the room)
vertical seams (per wall) = (columns − 1) × wall height
horizontal seams (per wall) = (rows − 1) × wall length
ceiling/floor edge (per wall) = 2 × wall length
joint tape = Σ (vertical + horizontal + ceiling/floor edge) × sides
Corners (new in v2):
corner bead length = external corner count × wall height
corner tape length = internal corner count × wall height
corner compound = (corner tape length / 1000) × corner compound coverage (kg/m) × 1,000,000
Both are exact geometry (count × wall height) for the length figures, same shape as the UA profile length above — only the compound mass depends on a user-supplied coverage rate.
Window reveal lining (new in v2): = Σ (2 × opening height + opening width) per
window — both jambs plus the head, not the sill (a windowsill is typically its own separate
material, not reveal lining).
Acoustic sealing tape = the UW track's own real (not stock-rounded) total length.
Insulation (when enabled): area = net area; volume = net area × insulation thickness.
Build-up depth = profile width + board thickness × layers per side × number of sides.
Worked example
A closed 4 m × 3 m room (four walls, all turning the same way — an ordinary rectangle), wall height 2.6 m, one 900×2100 mm door on wall 1 and one 1200×1200 mm window (sill 900 mm) on wall 2, everything else at its default (CW/UW profile width 75 mm, stud spacing 600 mm, stock length 3000 mm, board 1200×2600 mm, thickness 12.5 mm, 2 sides, 1 layer, insulation on at 50 mm, 12 screws/m², 1.5 kg/m² joint compound, 0.3 kg/m corner compound, 10% waste). Only walls 1 and 2's own lengths (4 m, 3 m) are actually entered — walls 3 and 4 are the last-per-axis walls, so their own 4 m and 3 m are derived, not typed in.
wall area = (4000+3000+4000+3000) × 2600 = 36,400,000 mm²
openings area = 900×2100 + 1200×1200 = 3,330,000 mm²
net area = 33,070,000 mm²
4 turns, all 'left' → 4 internal corners, 0 external (an ordinary rectangle has none)
CW studs = (7+6+7+6) + 2 openings × 2 = 26 + 4 = 30. CW total = 30 × 2600 = 78,000 mm.
CW stock pieces = ceil(78,000/3000) = 26.
UW total = 14,000 × 2 = 28,000 mm. UW stock pieces = ceil(28,000/3000) = 10.
UA: 1 door × 2 × 2100 = 4,200 mm. UA stock pieces = ceil(4,200/3000) = 2.
board area = 1200×2600 = 3,120,000 mm²
boards per side (excl. waste) = ceil(33,070,000/3,120,000) = 11
waste boards = ceil(11 × 10/100) = 2. boards per side (incl. waste) = 13. boards total = 26.
screws = ceil(33,070,000 × 2 × 1 × 12 / 1,000,000) = 794
joint compound = 33,070,000 × 2 × 1.5 = 99,210,000 mg ≈ 99.2 kg
joint tape (summed per wall) = 54,000 × 2 sides = 108,000 mm = 108 m
acoustic sealing tape = 28,000 mm = 28 m
corner bead length = 0 (no external corners)
corner tape length = 4 × 2600 = 10,400 mm
corner compound = (10,400/1000) × 0.3 × 1,000,000 = 3,120,000 mg ≈ 3.1 kg
window reveal lining = 2×1200 + 1200 = 3,600 mm
insulation area = 33,070,000 mm². insulation volume = 33,070,000 × 50 = 1,653,500,000 mm³.
build-up depth = 75 + 13 × 1 × 2 = 101 mm
The calculator returns exactly this for these inputs: 26 boards total (the headline value), 30 CW studs (26 stock pieces), 10 UW stock pieces, 794 screws, ≈99.2 kg of joint compound, 108 m of joint tape, 4 internal corners with 10.4 m of corner tape and ≈3.1 kg of corner compound, 0 external corners (so 0 m of corner bead), 3.6 m of window reveal lining, and a 101 mm overall partition thickness.
FAQ
Why can't I type a length for the last two walls? For any closed room with an even wall count, those two walls (the last one on each of the room's two axes) are always exactly determined by every other wall's own length and turn — there is only one length that can possibly close the loop, so asking you to type it in and get it exactly right would just invite arithmetic mistakes the app can do for you instead. This is the same reasoning that already applies to an opening's own final gap.
Why does my room need an even number of walls? Every corner turns 90° from one of the room's two axes to the other, so returning to the same axis you started on — which a closed loop always must — takes an even number of turns. An odd wall count can never close, regardless of any length.
Why did "total openings area cannot exceed the wall area" disappear as its own error? It is now a consequence of two other checks that already have to hold: every opening's height fits under the wall height, and every wall's own openings fit within that wall's own length (measured as a real chain of gaps and openings, not a schematic guess). Together those two guarantee the old area check could never fail on its own any more — one fewer thing to separately validate, not a loosened rule.
How does the calculator know which corners are internal and which are external? From the turn ('left'/'right') entered at the far end of each wall. For any closed loop, turns in the majority direction are always internal (an ordinary room corner) and turns in the minority direction are always external (a corner poking into the room, like an L-shaped room's notch) — a fixed mathematical fact about closed rectilinear loops, not a per-room judgment call. An open run (room not closed) has no interior to be reflex against, so every one of its corners counts as internal.
Why did joint tape go down compared to v1 for the same single wall? v1's single-wall "perimeter" folded a wall's own two end edges into the joint tape figure, on top of its ceiling/floor edges. In v2 those end edges are corners (or, for a lone open-run wall, simply don't exist) and get their own dedicated tape/bead treatment instead of being counted as ordinary board-seam tape twice.
Are openings (doors, windows) deducted from the board, frame, and consumable quantities? Yes, from every area-based quantity (net area → boards, screws, compound, joint tape, insulation). CW stud count also increases: one extra stud at each opening edge (two per opening), regardless of which wall it's on.
Why are CW and UW profiles reported separately from UA? UA is a heavier-gauge, reinforced profile used only to stiffen door jambs — it is not just another CW stud, so it gets its own line. A door's own item type is what identifies it now, not a sill height of zero.
What determines the screw, joint compound, and corner compound consumption? Screw density (per m²), joint compound coverage (kg/m²), and corner compound coverage (kg per linear metre) are values you enter, with sensible defaults — not figures from a standard or a specific product's data sheet.
Assumptions and limits
No single standard fixing CW/UW stud spacing, board fixing pattern, screw density, or joint
compound coverage for a metal-frame plasterboard partition was found — these depend on each
board/frame manufacturer's own technical approval, not one universal figure, so
meta.standards is deliberately left empty. The same applies to "internal corners get tape,
external corners get corner bead" — standard drywall trade practice, but no specific
standard section was found to cite for it, or for the corner compound coverage rate.
CW/UW/UA "stock pieces" is a simple total-length division by the profile's stock length, not a cut-optimized nesting plan — actual offcuts may let you reuse material across pieces.
Screw density, joint compound coverage, corner compound coverage, and the waste percentage are user-supplied estimates with sensible defaults, not standard-derived constants.
Joint tape is calculated against a straight board grid with no offset — real installations commonly stagger boards so seams don't align across layers, which changes seam layout, not total seam length.
An open run's corners (room not closed) are all treated as internal — there is no enclosed interior for a corner to be reflex against in an open run, so this is a stated simplification rather than a derived geometric fact, unlike the closed-room classification.
Window reveal lining covers both jambs and the head, not the sill — a windowsill is typically its own separate material.
Each opening's own default size describes an ordinary example of its type, not any specific product: a door defaults to 900×2100 mm, a window to 900×1200 mm with a 900 mm sill — a window does not default to a door's own height, since the two are genuinely different things (a shop-front-height window is the exception, not the ordinary case this default should describe).
The plan diagram shows the room's own outline with each opening at its real position along
its wall, drawn with the standard architectural symbol for its own type -- a door as a gap
in the wall with its own swing (the leaf at its open position, plus the arc it sweeps to get
there; always hinged at the jamb closer to the wall's own start, since no data captures
which side a real door is hinged on, and swinging into the room rather than out of it), a
window as a doubled line across the gap -- not individual studs or boards. Both symbols are
a shared drawing capability (doorSwingSymbol/windowLineSymbol/wallLineSegments in
packages/geometry), not specific to this calculator: any other wall calculator drawing its
own wall elevation can call the same functions for the same symbols. v1's detailed elevation
view (every stud and board drawn) was dropped in favor of the room-wide plan, since a
per-wall elevation stopped making sense once a room can have many walls. Each wall gets one
length dimension, not one
per wall segment — two walls that measure the same span (the two opposite sides of a
rectangle, most commonly) are the same extent read from two sides, so only one is drawn;
a wall whose own span genuinely differs, even if its length happens to match another wall's
(two unrelated segments on an L-shaped room's separate arms, say), still gets its own.
Where more than one dimension still lands on the same side of the room, each is offset a
further step outward so their lines and labels never share the same line. The plan always
reads clockwise, whichever way the wall chain's own turns happen to wind, and every wall
carries its own number matching its row in the form.
Wall-length derivation only ever solves for the last wall on each of the room's two axes (always the last two walls entered, for any even, closed wall count) — a wall in the middle of the chain is never overridden, and a room where several walls jointly determine closure (any L/U/T-shaped room with more than 2 walls on one axis) is fully supported by this same rule, since only the last wall on each axis is ever solved for, regardless of how many others share that axis. Self-intersecting wall chains (a turn sequence that closes numerically but crosses itself, like a bowtie) are not separately detected — an unlikely input for a room entered wall by wall in walking order, but not one this version guards against.
Insulation area and volume are exact geometry (net area × thickness) when insulation is enabled — both zero when disabled. Build-up depth is likewise exact geometry.
Simple mode's own doors and windows are placed at a derived position, not an entered one: each wall's own share of the room's door/window count is spread with equal margins before, between, and after, round-robin across the four walls in the order doors then windows. This is a reasonable default layout, not a measured plan — switch to detailed mode for a specific opening position. A room whose walls are too short for its own door/window count (an unusually small room paired with a large opening count) reports the same opening-chain- exceeds-wall error detailed mode's own position-overflow case reports, naming the wall it overflowed rather than a simple-mode-specific message.