Optionaloptions: ThreeInitializerOptionsAdd caller-owned geometry (lines, annotations, construction aids) to the scene. The object is
tagged userData.source = 'user' so it persists across updateScene solves instead of being
cleared with compute content. It is treated as normal content for fit-to-view framing.
Attach edge overlays to the meshes under root (no-op unless edges.enabled). Call after
loading meshes via updateScene, since meshes arrive after init.
Remove and dispose all user-added geometry (every object tagged source === 'user').
Two-click distance measurement tool. Null unless measure.enabled; setEnabled(true) to use.
Remove a single user-added object and dispose its geometry/materials.
Toggle ambient occlusion at runtime — builds or tears down the postprocessing pipeline.
Refit the sun's shadow frustum to the current scene content for crisp shadows. Call after
loading or replacing geometry (e.g. after updateScene). No-op when sunlight/shadows are off.
Initializes a Three.js environment with scene, camera, renderer, and event handling.