One discrete stop on a CameraTour. The full Camera state (position / look / up), plus tour-level metadata (dwell time, label, source space) so playback narration and pickback to the source model work out of the box.

Waypoints alternate between two roles in a played tour:

  • In-space stopsspaceId populated, camera dwells for dwellMs so the viewer can absorb the room.
  • Portal transitsspaceId === undefined, generated automatically by the smoother on cross-portal edges so the camera threads the door instead of clipping the wall.
interface CameraTourWaypoint {
    dataObjectId?: string;
    dwellMs?: number;
    fovDeg?: number;
    label?: string;
    look: Vec3;
    position: Vec3;
    spaceId?: string;
    up: Vec3;
}

Properties

dataObjectId?: string

DataObject id of the space, e.g. an IfcSpace global id. Same provenance as SpaceGraphNode.dataObjectId.

dwellMs?: number

Milliseconds the playback engine should sit at this waypoint before moving on. Defaults to CameraTourPlanOptions.dwellMs on in-space stops; 0 on portal transits.

fovDeg?: number

Optional per-waypoint vertical field-of-view override (degrees). When undefined, playback keeps the View's current FOV.

label?: string

Human-readable label inherited from the space, for narration overlays / progress HUDs.

look: Vec3

Camera look-at point, world coords.

position: Vec3

Camera eye position, world coords.

spaceId?: string

Id of the SpaceGraphNode the waypoint sits inside, when the waypoint is an in-space stop. undefined for portal-transit waypoints inserted by the smoother.

Always present for in-space stops regardless of whether the source space has a renderable SceneObject (synthesised IfcSpaces and geometry-fallback rooms have none, but they always have a SpaceGraphNode id) — use this as the "is this a planned stop?" test in onWaypointEnter. To pick back into the source model, use dataObjectId (IFC GUID for IFC sources, undefined for geometry-fallback rooms).

up: Vec3

Camera up vector, world coords.