A node in the extracted STEP product / assembly structure.

The structure is occurrence-keyed, not product-keyed: STEP instancing lets one product_definition (a part type) appear many times in an assembly via distinct next_assembly_usage_occurrence (NAUO) edges. A scalar express id of the product cannot tell two visual instances apart, so each occurrence node carries both its NAUO express id (expressID) and the ordered occurrencePath (root→node, NAUO ids) that is the stable selection / permalink token. See design/new/step-metadata-nist.md §"Occurrence identity".

This is the forcing function for Share's goal of generalizing its scalar expressID selection key into a format-agnostic occurrence path — flag it wherever this tree is consumed Share-side.

interface ProductStructureNode {
    children: ProductStructureNode[];
    droppedSolids?: number;
    ephemeral?: boolean;
    expressID: number;
    name: string;
    occurrenceExpressID?: number;
    occurrencePath: number[];
    productDefinitionExpressID: number;
    shapeRepresentationIds: number[];
    type: string;
}

Properties

Child occurrence nodes (and, when opted in, ephemeral solid nodes).

droppedSolids?: number

Number of this node's solids suppressed by the ephemeral-layer limits (unnamed-soup suppression or the per-product cap), so a consumer can render an "N more…" affordance instead of silently truncating.

ephemeral?: boolean

True for ephemeral (non-product) nodes — pickable geometry that carries identity in the file but has no product semantics, e.g. one named solid of a multibody part. Consumers should render these lighter-weight, selectable-but-not-product. See design/new/step-nonproduct-semantics.md.

expressID: number

Node selection key. For an occurrence node this is the NAUO express id; for a root (single-part files have no NAUO) it falls back to the product_definition express id.

name: string

Display label: product.name, falling back to the NAUO name / reference designator.

occurrenceExpressID?: number

NAUO express id for occurrence nodes; undefined for roots.

occurrencePath: number[]

Ordered occurrence path (NAUO express ids) from the top-level occurrence to this node. Empty for roots. Disambiguates instances of the same part — e.g. [3810, 1921, 1910] vs [6217, 1921, 1910] for the two bolts in as1.

productDefinitionExpressID: number

Express id of the underlying product_definition (the part type).

shapeRepresentationIds: number[]

Shape representation express ids linked to this part (via product_definition_shapeshape_definition_representation). The seam to scene geometry for NavTree-click ⇄ viewport-pick round-tripping.

type: string

Readable node kind: 'product' for roots, 'product_occurrence' for NAUO nodes, 'solid' for ephemeral sub-product solid nodes.