Bevels & Rabbets#
Stopped mouldings on any edge, straight or vertical
Names: bevel rabbet moulding trim
When to use#
- A flat slope across an edge at a chosen angle (a bevelled shelf front, a hopper side's
mitred edge):
bevel angle=. For a 45° corner break usechamfer. - A step cut into an edge, including a vertical edge (the back rabbet on a standing
carcass side, a notch at a shelf's front corner, a lipped drawer front's ends):
rabbet face= edge=. - A profile (
ovolo,cove,ogee, ...) that starts and ends part-way along an edge:moulding ... stopped=#true. trimaligns a raked end to a plane fixed in world space (reference=world) or in the nearest enclosing assembly's own frame (reference=assembly, #458).
Syntax#
bevel angle=<deg 1..<90> [depth=<mm>] { edges <edge>... } // or:
bevel face=<face> edge=<adjacent face> angle=<deg> [depth=<mm>]
rabbet width=<mm> depth=<mm> { edges <edge>... } // or:
rabbet face=<face> edge=<adjacent face> width=<mm> depth=<mm>
[stopped=#true start=<mm> run_length=<mm>]
moulding section=<ovolo|cove|ogee|thumbnail|half_round|cockbead> size=<mm>
[stopped=#true start=<mm> run_length=<mm> stop=square|ramp] { edges <edge>... }
face=is the face the cut goes into and the angle or width is measured on;edge=is an adjacent face (notface, not its opposite). Faces arepos_x neg_x pos_y neg_y pos_z neg_z. Useface=/edge=or{ edges }, never both.- Bevel
depth=defaults to the whole thickness acrossface; the facet isdepth / tan(angle)wide onface. - Rabbet
widthis measured onfacefromedge;depthgoes intoface. - Stops:
start=defaults to 10 mm in;start=0.0reaches the end of the edge; omitrun_length=to run out through the far end.beveltakesstop=square|ramp|lambs_tongue,mouldingtakessquare|ramp,rabbetis square-ended only.
Example#
project name="Bevel and rabbet" units=mm schema_version=1 {
materials { material Oak type=hardwood }
component Side {
stock Oak 20.0 300.0 600.0
// Back rabbet on the standing side: the vertical edge where pos_x meets pos_y.
rabbet face=pos_x edge=pos_y width=18.0 depth=6.0
}
component Shelf {
stock Oak 400.0 250.0 20.0
// A 35 degree bevel across the front edge, the whole thickness.
bevel angle=35.0 {
edges top_s
}
// A cove that stops 50mm in from each end of the back edge.
moulding section=cove size=5.0 stopped=#true start=50.0 run_length=300.0 {
edges top_n
}
}
assembly Piece {
part Side instance=Side { pos x=0.0 y=0.0 z=0.0 }
part Shelf instance=Shelf { pos x=40.0 y=0.0 z=0.0 }
}
}
Pitfalls and diagnostics#
angleoutside[1, 90)isww::build::bad_value, a missingangleis a missing-property error. A facet wider than the face, adepththicker than the board,face=withoutedge=(error) or with{ edges }(skip, "not both"), non-adjacent faces ("adjacent"), andstop=withoutstopped=are skips naming the cause: the built part simply has no such cut, so read the skipped list, not just the green tick.upright_*in{ edges }is skipped forbevelandrabbet. Useface=/edge=.stop=rampon arabbetis a skip ("square");stop=lambs_tongueis forchamferandbevelonly.- A stopped
mouldingis a 32-layer staircase: it never removes more than the true section and falls under 7% short of its volume. Do not expect a smooth curve at the run's ends. - A through
rabbet face= edge=that a dovetail socket or other join opens into is understood by the join (it is lowered as a housing onface); write it, rather than a groove at the edge of the face. trim reference=assemblyis built (#458): the nearest enclosinginstance=-placed assembly's own frame, identity (same asreference=world) when there is none. Areference=naming neitherworldnorassemblyis a named skip.
See also#
docs/KDL_AUTHORING.mdsection 7, "Bevel, and a rabbet on any edge" and "Moulding profiles"docs/rfc/0143-bevel-and-stopped-mouldings.md,docs/adr/0024-bevel-rabbet-stopped-mouldings.md- RFC-0051 (rabbet on any edge), RFC-0126 (mouldings), RFC-0025 (stopped chamfers), RFC-0024
(
trim) - Examples:
examples/bedside_cabinet.kdl,examples/welsh_dresser.kdl,examples/wall_shelf.kdl,examples/dining_chair.kdl;docs/styles/models/bevel.kdl
Names#
Every name this page declares, how the example library uses it, and the shortest real use.
bevel#
feature; node in 6 of 116 examples (16 uses).
Shortest real use, from jacobean_joined_chest.kdl:
bevel face=pos_y edge=pos_z angle=10.0 depth=bevel_depth
rabbet#
feature; node in 24 of 116 examples (56 uses).
Shortest real use, from tall_white_cutout_cabinet.kdl:
rabbet face=pos_x edge=pos_y width=back_th depth=rd
moulding#
feature; node in 18 of 116 examples (36 uses); value in 2 of 116 examples (4 uses).
Shortest real use, from farmhouse_harvest_table.kdl:
moulding section=thumbnail size=6.0 {
edges top_s
}
trim#
feature; node in 5 of 116 examples (7 uses); value in 1 of 116 examples (1 uses).
Shortest real use, from mid_century_credenza.kdl:
trim reference=world normal=pos_z at=floor_z {
faces pos_x
}