Glossary
Terms the docs and API comments use without re-explaining. One paragraph each.
Door
A public API function that crosses the JS↔wasm boundary. Doors parse and validate on entry and return fresh results — "rejected at the door" means invalid input fails on the way in, never halfway through a computation. Every Brep.* function is a door.
Fold
How a ModelJSON node list runs: a single top-down fold over an entity stream. Each operation takes the stream so far, runs one registry method against it, and appends its output; a key names the stream after that step. A container runs its own operations[] from an empty stream and contributes its fold result. There is no separate graph scheduler — the order in the document is the execution order.
Lane
A named section of a ModelJSON document (parameters, objects, materials, textures, …). Lanes group nodes by role; at runtime they collapse to four — parameters, scene (stored as objects), component, flat. See Parametric authoring.
Catalog
The registry of node implementations a parametric model evaluates against — the methods an operation's method string can name. The default catalog ships as nodeRegistry from @huukhanhnguyen/model/nodes, documented in packages/model/REFERENCE.md and ENTITIES.md.
Wire
OCCT's word for a face boundary loop. It survives only in historical names: B-Rep document version 1 spelled face boundaries as wires / outerWire / innerWires. Version 2 renamed the concept to loops, and v1 documents are rejected at the door. When you read "wire" in old material, think "loop".
Unit H / Unit N
Two API conventions referenced in doc comments. Unit H ("handle-free"): the function returns a JSON document and parks nothing in the wasm arena — no handle alias, no free. Solid-root multi-shell documents live under Brep.*; one-shell documents under Shell.* — e.g. Brep.tessellate vs Shell.tessellate.
The four curve kinds
Every curve in a B-Rep document is exactly one of four kinds, and each exists because of a closure law — the operations under which the kind stays the same kind:
- line — degree 1, a bounded segment (
LineCurve = { start, end }). The only curve closed under affine maps and offset: offsetting a line gives a line; offsetting anything else leaves its family. Not to be confused withAxis, the infinite carrier (there is noLinetype) — see Curves and surfaces. - arc — a circular arc (
startAngle+sweepAngle). The one conic whose offset is again a conic — a concentric circle. Every other conic offsets to a degree-8 algebraic curve. - ellipse — an elliptical arc (
majorRadius+minorRadius). Closed under affine maps where an arc is not: scale a circle non-uniformly and you get exactly an ellipse, so the arc cannot absorb it. - nurbs — a rational B-spline. The closure of the whole family: every conic and every Bézier is a NURBS exactly, so nothing else needs a kind of its own. Curves that survive offsets, projections, and imports land here.
Other recurring words
- Document — a JSON string (or its parsed object) exchanged with the kernel. See B-Rep documents.
- Handle — a
numberarena id you mustfree. See Memory model. - Deflection — max surface-to-triangle distance in tessellation. See Tessellate for display.
- Entity — a plain JSON record in an evaluated scene stream (
{ id, geometry, … }), kind sniffed withentityTypeOf. BoundingBox2d— the canonical 2D axis-aligned box,{ minX, minY, maxX, maxY }(types package Core2d).BoundingBox— the 3D twin,{ min: Point, max: Point }(types package Core; geometry ops namespace shares the stem).