Skip to content
Shapemetry

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 with Axis, the infinite carrier (there is no Line type) — 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 number arena id you must free. 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 with entityTypeOf.
  • 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).
Last updated: 📖 3 min readEdit on GitHub