# Banding & Stringing

*Inlaid border bands, strung lines, and sunburst veneer, as generated parts*

**Names:** `banding` `stringing` `lay` `pattern`

## When to use

Use `banding` or `stringing` when a design needs a strip of contrasting wood let flush into
a face: a line of holly round a walnut top, a herringbone or cross-banded border on a
Federal, Hepplewhite or Sheraton panel, a flush edge band. One node cuts the groove in the
host and generates the filler part that fills it exactly, so the two cannot disagree.
Use `veneer match=sunburst` for a fan of veneer leaves radiating from a point. Do not use any
of these for a pictorial motif (patera, bellflower, marquetry): out of scope (RFC-0141).

## Syntax

```kdl grammar
banding   face=pos_z material=<Species> width=<mm> depth=<mm> offset=<mm>
          [lay=inlay|surface] [thickness=<mm>] [pattern=plain|herringbone] [angle=<deg>]
          [{ edges <neighbour face>... }]
stringing face=pos_z material=<Species> offset=<mm> [width=<mm>] [depth=<mm>] [angle=<deg>]
veneer    face=pos_z material=<Species> match=sunburst leaves=<n>
          [center_u=<mm> center_v=<mm>] [start_angle=<deg> end_angle=<deg>]
```

- `offset=` is the distance from the face's edge to the strip's near side. Required for
  `stringing`; `0` on a `banding` opens the groove through the side.
- Defaults: banding 12mm wide, 3mm deep; stringing 1.5mm wide, 2mm deep. `lay=surface`
  bonds the strip on the face instead (`thickness=`, default 0.6; no groove, no `depth=`).
- `pattern=herringbone` splits each strip into two halves at `+angle` and `-angle` (default
  45). `angle=90` is cross-banding. The figure is a grain angle, never geometry.
- `{ edges pos_x pos_y }` limits the banding to edges named by their neighbouring faces.
  Strips mitre only where two selected edges meet; the others end square.
- Strips are mitred at 45 degrees where two neighbouring edges are both banded.
- `repeat i count=3 { stringing ... offset="10.0 + i * 6.0" }` makes concentric lines.
- `match=sunburst`: `leaves` wedges (default 8) tile the face from the centre point; each
  leaf must span under 180 degrees, so a full circle needs at least 3 leaves.

## Example

```kdl
project name="Inlaid Panel" units=mm schema_version=1 {
    materials {
        material Poplar type=hardwood
        material Walnut type=hardwood
        material Holly type=hardwood
    }
    assembly InlaidPanel {
        part Panel role=panel {
            stock Poplar 300.0 200.0 22.0 lengthwise
            by top_sw
            pos x=0.0 y=0.0 z=0.0
            banding face=pos_z material=Walnut width=10.0 depth=3.0 offset=10.0 pattern=herringbone
            repeat i count=2 {
                stringing face=pos_z material=Holly offset="6.0 + i * 16.0"
            }
        }
        part Fan role=panel {
            stock Poplar 160.0 160.0 16.0 lengthwise
            by top_sw
            pos x=330.0 y=0.0 z=0.0
            veneer face=pos_z material=Walnut thickness=0.6 match=sunburst leaves=8
        }
    }
}
```

The full worked fixture is `examples/inlaid_tray.kdl`.

## Pitfalls and diagnostics

- A bad property or an impossible section is a **named skip** on both the groove and the
  filler, never a silent no-op: `stringing` without `offset=`, `depth=` that reaches through
  the part, `width=0`, a missing `material=`, `lay=` other than `inlay`/`surface`, `pattern=`
  other than `plain`/`herringbone`, a strip wider than the face allows, `thickness=` on an
  inlay, `depth=` on a surface strip, an `edges` word that is not a neighbour of the face.
- Strips must not meet their opposite strip: `2 * (offset + width)` must stay under the
  face's extent.
- The filler sits flush with no gap, touching its groove: expected, never a clash.
- Cut list: strips are ordinary strip stock, `L` the outer edge's length (the mitre is cut
  from it), the grain angle in the component name (`Walnut herringbone banding (+45°)`).
  A flush inlay does not change the host's thickness.
- Do not put an inlay groove on a face that also carries `veneer`; surface banding likewise
  is not meant to share a face with a veneer leaf.
- Ids: `Host@banding_<n>/Strip_<j>` and `Host@stringing_<n>/Strip_<j>`, `n` numbering the
  unrolled banding/stringing nodes of that host in document order.
- Not built: curved banding, stopped bands, the pictorial motifs, the chevron figure itself.

## See also

- `docs/KDL_AUTHORING.md` §7, *Banding and stringing* and *Veneer and laminate*
- `docs/rfc/0141-banding-stringing-sunburst.md`, `docs/adr/0025-banding-stringing-inlay.md`
- `examples/inlaid_tray.kdl`
- `docs/agent-reference/nodes.md`, `docs/agent-reference/tasks.md`

## Names

Every name this page declares, how the example library uses it, and the shortest real use.

### `banding`

feature; node in 6 of 116 examples (12 uses).

Shortest real use, from `serpentine_sideboard.kdl`:

```kdl
banding face=neg_x material=Tulipwood width=band_w depth=3.0 offset=band_off
```

### `stringing`

feature; node in 12 of 116 examples (20 uses).

Shortest real use, from `deco_console_table.kdl`:

```kdl
stringing face=neg_y material=Ivory offset=8.0
```

### `lay`

word-valued property; not used by any example yet.

### `pattern`

word-valued property; property in 4 of 116 examples (6 uses).

Shortest real use, from `william_and_mary_lowboy.kdl`:

```kdl
banding face=pos_z material=Maple width=7.0 depth=3.0 offset=29.0 pattern=herringbone
```

## Related terms

- [Banding](/almanac/techniques#banding)
- [Cross-banding](/almanac/techniques#cross-banding)
- [Herringbone banding](/almanac/techniques#herringbone-banding)
- [Stringing](/almanac/techniques#stringing)
