Skip to content

ImageViewerPlugin

2D image viewer with zoom-to-cursor and pan. Renders into a <canvas> inside a provided container. Independent of the 3D pipeline; useful for reference images and as a backdrop for MarkupPlugin.

Usage

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

const viewer = new ViewerCore(container, config);
await viewer.ready();

const imageViewer = new ImageViewerPlugin({
  container: document.getElementById("image-panel")!,
  src: "/drawings/part-001.png",
  maxZoom: 12,
});
await viewer.loadPlugin(imageViewer);

No service dependencies. The plugin owns its own canvas, pointer events, and resize observer.

Constructor

ts
new ImageViewerPlugin(config: ImageViewerConfig)

ImageViewerConfig

FieldTypeDefaultDescription
containerHTMLElementrequiredHost element. Will be set to position: relative; overflow: hidden.
srcstringundefinedInitial image URL. Loaded on activate.
zoomSensitivitynumber0.001Wheel multiplier per delta unit.
maxZoomnumber10Upper zoom limit. The minimum is computed to fit the image.
onTransformChange(transform) => voidundefinedFires on every pan, zoom, or resize.

ImageTransform

ts
interface ImageTransform {
  scale: number;
  offsetX: number;
  offsetY: number;
  minZoom: number;
  maxZoom: number;
}

Public API

MethodDescription
loadImage(src)Load a new image. Resets pan and zoom to fit.
getTransform()Returns the current ImageTransform.
getCanvas()Returns the underlying <canvas> (or null when inactive).
resetView()Reset to fit-the-container scale and center.

Events

The plugin does not use the event bus. Use onTransformChange for transform updates.

Example

ts
const imageViewer = new ImageViewerPlugin({
  container: document.getElementById("image-panel")!,
  onTransformChange: (t) => markup.syncTransform(t),
});
await viewer.loadPlugin(imageViewer);

await imageViewer.loadImage("/drawings/part-001.png");
imageViewer.resetView();

XViewr SDK and xConvert CLI documentation.