Shoji frame¶
frames.shoji_frame
A small shoji lattice of three vertical and three horizontal bars, crossing in nine cross laps; outside sizes.
The bars reach overhang beyond the outer ones. They are bar_width
wide in the lattice and the stock thick across it; each lap takes half
of that. Where they cross, the vertical bars keep their front halves and
the horizontal ones their back halves (the reference faces are at the back).
Parameters¶
| Parameter | Default |
|---|---|
width |
200 |
height |
300 |
bar_width |
5 |
overhang |
20 |
stock |
20 mm board, oak |
Change them in a design file (see Change an example):
Drawings¶
The plans in one PDF: plans.pdf.
Cut list¶
vertical 300 x 5 x 20 mm oak, 3 pieces: vertical_1, vertical_2, vertical_3
- 3 x dado 5 mm, 10 deep, in top_face
horizontal 200 x 5 x 20 mm oak, 3 pieces: horizontal_1, horizontal_2, horizontal_3
- 3 x dado 5 mm, 10 deep, in bottom_face
Code¶
From woodwright/examples/frames.py, which imports the names it uses (see From an example to your own design):
def shoji_frame(
width: float = 200,
height: float = 300,
bar_width: float = 5,
overhang: float = 20,
stock: Stock = KUMIKO,
) -> Assembly:
"""A small shoji lattice of three vertical and three horizontal bars,
crossing in nine cross laps; outside sizes.
The bars reach `overhang` beyond the outer ones. They are `bar_width`
wide in the lattice and the stock thick across it; each lap takes half
of that. Where they cross, the vertical bars keep their front halves and
the horizontal ones their back halves (the reference faces are at the back).
"""
asm = Assembly("shoji_frame", root_location=STANDING)
verticals = [asm.add(Board(f"vertical_{i + 1}", stock, height, bar_width)) for i in range(3)]
horizontals = [asm.add(Board(f"horizontal_{i + 1}", stock, width, bar_width)) for i in range(3)]
def starts(length: float) -> list[float]:
"""Where the three bars crossing a bar of this length start along it."""
return [overhang, (length - bar_width) / 2, length - overhang - bar_width]
# The horizontal bars run to the right, so their left ends cross each
# vertical bar from its back edge.
for vertical, x in zip(verticals, starts(width), strict=True):
for horizontal, y in zip(horizontals, starts(height), strict=True):
asm.join(
CrossLap(
vertical.back_edge,
horizontal.left_end,
position=offset(y, vertical.left_end),
overhang=x,
)
)
return asm
Exported with woodwright 0.9.0 on 2026-10-25.