Mitred frame and panel¶
frames.mitred_frame_and_panel
A frame mitred at the corners, a panel glued up from boards boards
tongued into a groove along its inside edges; outside sizes.
The members are mitred as in a picture frame; the grooves run through
them and out at the mitres, where they meet and are hidden. The boards
run along the width, butt-joined edge to edge; the ends of all of them
and the outer edges of the outer ones are tongued into the grooves. The
panel's design size is the opening of the frame, the tongues add to it;
it is centered in the frame's thickness and not glued in, the grooves
clearance deeper than the tongues so that it can swell.
Parameters¶
| Parameter | Default |
|---|---|
width |
600 |
height |
450 |
member_width |
60 |
boards |
3 |
tongue_length |
10 |
clearance |
2 |
stock |
20 mm board, oak |
panel_stock |
12 mm board, oak |
Change them in a design file (see Change an example):
Drawings¶
The plans in one PDF: plans.pdf.
Cut list¶
left_right 450 x 60 x 20 mm oak, 2 pieces: left, right
- mitre 45 deg on right_end, back_edge inside
- mitre 45 deg on left_end, back_edge inside
- groove 6 mm, 12 deep, in back_edge
top_bottom 600 x 60 x 20 mm oak, 2 pieces: top, bottom
- mitre 45 deg on left_end, back_edge inside
- mitre 45 deg on right_end, back_edge inside
- groove 6 mm, 12 deep, in back_edge
panel 500 x 120 x 12 mm oak, 2 pieces: panel_1, panel_3
- tongue 6 mm thick, 10 long, on left_end
- tongue 6 mm thick, 10 long, on right_end
- tongue 6 mm thick, 10 long, on back_edge
panel_2 500 x 110 x 12 mm oak
- tongue 6 mm thick, 10 long, on left_end
- tongue 6 mm thick, 10 long, on right_end
Code¶
From woodwright/examples/frames.py, which imports the names it uses (see From an example to your own design):
def mitred_frame_and_panel(
width: float = 600,
height: float = 450,
member_width: float = 60,
boards: int = 3,
tongue_length: float = 10,
clearance: float = 2,
stock: Stock = OAK,
panel_stock: Stock = SIDE_OAK,
) -> Assembly:
"""A frame mitred at the corners, a panel glued up from `boards` boards
tongued into a groove along its inside edges; outside sizes.
The members are mitred as in a picture frame; the grooves run through
them and out at the mitres, where they meet and are hidden. The boards
run along the width, butt-joined edge to edge; the ends of all of them
and the outer edges of the outer ones are tongued into the grooves. The
panel's design size is the opening of the frame, the tongues add to it;
it is centered in the frame's thickness and not glued in, the grooves
`clearance` deeper than the tongues so that it can swell.
"""
asm = Assembly("mitred_frame_and_panel", root_location=STANDING)
left = asm.add(Board("left", stock, length=height, width=member_width))
top = asm.add(Board("top", stock, length=width, width=member_width))
right = asm.add(Board("right", stock, length=height, width=member_width))
bottom = asm.add(Board("bottom", stock, length=width, width=member_width))
members = [left, top, right, bottom]
# Going round from the bottom of the left member, the back edges inside.
for a, b in zip(members, members[1:] + members[:1], strict=True):
asm.join(MitreCorner(a.right_end, b.left_end, a.back_edge, b.back_edge))
board_width = (height - 2 * member_width) / boards
panel = [
asm.add(
Board(f"panel_{i + 1}", panel_stock, length=width - 2 * member_width, width=board_width)
)
for i in range(boards)
]
# The boards' front edges up (their reference faces are at the back).
for a, b in itertools.pairwise(panel):
asm.join(Butt(a.front_edge, b.back_edge))
def tongue(edge: SideRef, groove: SideRef, position: Position = CENTERED) -> None:
asm.join(
TongueAndGroove(
tongue=edge,
groove=groove,
tongue_length=tongue_length,
position=position,
across=CENTERED,
clearance=clearance,
)
)
# From the bottom up; the left member's left end is at the bottom, the
# right member's right end.
for i, board in enumerate(panel):
below = member_width + i * board_width
tongue(board.left_end, left.back_edge, offset(below, left.left_end))
tongue(board.right_end, right.back_edge, offset(below, right.right_end))
tongue(panel[0].back_edge, bottom.back_edge)
tongue(panel[-1].front_edge, top.back_edge)
return asm
Exported with woodwright 0.9.0 on 2026-10-25.