Skip to content

ViewerCore

Main entry class for the XViewer SDK. Owns the Three.js scene, camera, renderer, and the plugin/service/event/config subsystems.

Usage

ts
import { ViewerCore } from "@optellix/xviewr-sdk";

const viewer = new ViewerCore(container, {
  viewer: {
    camera: { type: "perspective", fov: 75, position: { x: 5, y: 5, z: 5 } },
    licensing: { key: "YOUR_LICENSE_KEY" },
  },
  rendering: { antialias: true },
  plugins: [],
});

await viewer.ready();

const loader = viewer.getService("loader");
await viewer.loadPlugin(new MyPlugin());

// later
await viewer.dispose();

ready() resolves once the license is validated, built-in services are initialized, core plugins are loaded, and the config-driven plugins are loaded. Most runtime APIs throw LicenseError if called before ready() resolves.

Constructor

ts
new ViewerCore(container: HTMLElement, config: XViewerConfig)

The viewer attaches its renderer.domElement to container during initialization and listens for window resize events.

Public properties

PropertyTypeDescription
sceneTHREE.SceneRoot Three.js scene.
cameraTHREE.CameraActive camera (perspective or orthographic).
rendererTHREE.WebGLRendererWebGL renderer. Local clipping is enabled.
rootTHREE.Object3DGroup inside scene for loaded content.
containerHTMLElementHost element passed to the constructor.
pluginManagerIPluginManagerSee plugins.md.
eventBusIEventBusSee event-bus.md.
serviceRegistryIServiceRegistrySee services.md.
configManagerIConfigManagerSee config-manager.md.

Public methods

MethodReturnsDescription
ready(timeoutMs?: number)Promise<void>Resolves when initialization completes. Default timeout is 10000 ms. Pass 0 to disable.
loadPlugin(plugin: IPlugin)Promise<void>Register and load a plugin.
unloadPlugin(name: string)Promise<void>Unload a previously loaded plugin.
getService<T extends IService>(name: string)T | nullLook up a service by name.
registerService(service: IService)voidRegister an additional service.
getServiceContext(){ viewer, eventBus, configManager }Context object useful when wiring custom services.
render()voidRender a single frame. Called by the internal animation loop.
resize(width, height)voidResize renderer and update camera projection. Emits viewer:resize.
addFrameCallback(cb)stringRegister a callback invoked every frame. Returns an id for removal.
removeFrameCallback(id)booleanRemove a frame callback.
addPostRenderCallback(cb)stringRegister a callback invoked after each render.
removePostRenderCallback(id)booleanRemove a post-render callback.
getSceneMetrics()SceneMetricsCounts of objects, meshes, vertices, and triangles under root.
updateConfig(config: Partial<XViewerConfig>)voidMerge new values into the config.
dispose()Promise<void>Tear down plugins, services, renderer, and DOM.
destroy()Promise<void>Alias for dispose().

SceneMetrics

ts
interface SceneMetrics {
  objectCount: number;
  meshCount: number;
  visibleMeshCount: number;
  vertexCount: number;
  triangleCount: number;
  visibleTriangleCount: number;
}

Lifecycle events

Emitted on eventBus during the viewer lifetime:

  • viewer:initializing { viewer }
  • viewer:ready { viewer }
  • viewer:resize { width, height }
  • viewer:disposing { viewer }
  • viewer:disposed { viewer }
  • viewer:error { error }

Notes

  • The constructor starts initialization synchronously. Always await ready() before calling loadPlugin, getService, registerService, or updateConfig.
  • dispose() is idempotent.
  • Window resize handling is installed automatically and removed on dispose.

XViewr SDK and xConvert CLI documentation.