Set up

Install viewportsCore from npm:

npm install viewports-core

To access viewports core functions you will need to use global viewportsCore variable.

To create simple viewer first of all you should create html file like this:

<!--index.html file-->
<style>
    * {
        box-sizing: border-box;
    }
    html {
        height: 100%;
    }
    body {
        width: 100%;
        height: 100%;
        margin: 0;
    }
    .viewports-layout {
        width: 100%;
        height: 100%;
    }
    .viewport-container {
        display: flex;
        width: 100%;
        height: 100%;
        position: absolute;
        background: #000;
        border: 1px solid #323237;
    }
    .viewport-container.active {
        border: 1px solid #e51b48;
    }
</style>
...
<body>
    <div id="viewports-layout" class="viewports-layout">
        <div id="viewport-container-1-1" class="viewport-container"/>
    </div>
</body>

In this example viewports layout container has optional .viewports-layout class. Each viewport container must have required .viewport-container class.

Then you need to initialize viewportsCore, add your created layout container and load your desired study:

viewportsCore.create();
viewportsCore.layoutController.addLayoutContainer('viewport-container-1-1', true);

viewportsCore.loadStudyWithHIS('study-to-load-uid', 'study').then((studyData) => {
    const instanceUid = studyData.series[0].instances[0].uid;
    viewportsCore.layoutController.openInstanceToViewportContainer('viewport-container-1-1', instanceUid);
});

Viewports core functions

Here you will find description about viewportsCore functions.

Viewports core

Create

To create viewportsCore use this function:

viewportsCore.create(properties);

Parameter description:

Load study with HIS

Load study with HIS to memory.

viewportsCore.loadStudyWithHIS(study, integrationType);

Parameters description:

Load studies with HIS

Load multiple studies with HIS to memory.

viewportsCore.loadStudiesWithHIS(studiesToLoad, integrationType);

Parameter description:

Example of studiesToLoad array and function usage:

const studiesToLoad = [
    {
        study: '1.2.840.113619.2.55.3.4271045733.996.1449464144.595',
        callback: (studyData) => {console.log(studyData)}
    },
    {
        study: '1.2.840.113619.2.55.3.4271045733.996.1449464144.595',
        callback: (studyData) => {console.log(studyData)}
    },
];
viewportsCore.loadStudiesWithHIS(studiesToLoad, 'study');

Reference lines

Reference line actions.

viewportsCore.enableReferenceLines();
viewportsCore.disableReferenceLines();
viewportsCore.isEnableReferenceLines();

Cache study

Cache study information to the viewportsCore.

viewportsCore.cacheStudy(studyUid, storageId);

Enable/Disable loaders

Enable or disable loader and progress bar visibility.

viewportsCore.enableViewportLoaders();
viewportsCore.disableViewportLoaders();

Layout controller

Add layout container

Add layout container to viewportsCore and register needed container events.

viewportsCore.layoutController.addLayoutContainer(containerId, selectContainer);

Parameters description:

Remove layout container

Remove layout container from viewportsCore.

viewportsCore.layoutController.removeLayoutContainer(containerId);

Parameter description:

Select layout container

Select layout container as active.

viewportsCore.layoutController.selectLayoutContainer(containerId);

Parameter description:

Deselect active layout container

Deselect layout container.

viewportsCore.layoutController.deselectActiveLayoutContainer();

Get layout containers

Get list of registered layout containers.

viewportsCore.layoutController.getLayoutContainers();

Is layout container available

Returns if layout container is available for viewportsCore usage.

viewportsCore.layoutController.isLayoutContainerAvailable(containerId);

Parameter description:

Get active container

Returns active container information.

viewportsCore.layoutController.getActiveContainer();

Get active container id

Returns active layout container id.

viewportsCore.layoutController.getActiveContainerId();

Get active viewport

Returns active viewport.

viewportsCore.layoutController.getActiveViewport();

Get active viewport id

Returns active viewport id.

viewportsCore.layoutController.getActiveViewportId();

Open instance to active viewport container

Opens instance to currently active viewport container.

viewportsCore.layoutController.openInstanceToActiveViewportContainer(instanceUid);

Parameter description:

Open instance to viewport container

Opens instance to provided layout container.

viewportsCore.layoutController.openInstanceToViewportContainer(containerId, instanceUid);

Parameters description:

Viewports controller

Delete viewport

Deletes viewport container by viewport id.

viewportsCore.controller.deleteViewport(viewportId);

Parameter description:

Delete viewport by container id

Deletes viewport container by layout container id.

viewportsCore.controller.deleteViewportByContainerId(containerId);

Parameter description:

Get viewport

Returns viewport by viewport id.

viewportsCore.controller.getViewport(viewportId);

Parameter description:

Get viewport by container id

Returns viewport by layout container id.

viewportsCore.controller.getViewportByContainerId(containerId);

Parameter description:

Reset all viewports renders

Resets all viewports to original state.

viewportsCore.controller.resetAllViewportsRenders();

MPR

Change viewport orientation

Changes viewport Mpr orientation.

viewportsCore.changeViewportOrientation(containerId, orientation);

Parameters description:

Generate Orthogonal Mpr

Generates 3 Mpr projections to provided layout containers.

viewportsCore.generateMpr(containerId, layoutContainers);

Parameters description:

Generate oblique MPR

Generates 2x2 sub-layout with oblique MPR and 3d viewport inside provided source container.

viewportsCore.generateObliqueMPR(containerId);

Parameter description:

Create MPR viewport

Create MPR viewport with desired orientation in provided container.

viewportsCore.createMPRViewport(containerId, orientation);

Parameters description:

Create MPR viewport 3D

Create MPR viewport 3D in provided container.

viewportsCore.createMPRViewport3D(containerId);

Parameter description:

Oblique MPR functions

Show/Hide Axes

Toggle viewport Axes.

viewportsCore.getActiveViewport().toggleAxis(true|false);

Move Axes to center

Moves all viewport container axes to container center.

viewportsCore.getActiveViewport().axisToCenter();

Reset render

Reset all viewport manipulations.

viewportsCore.getActiveViewport().resetRender();

MPR layout

Change MPR layout type (It is only changes in the MPR container).

viewportsCore.getActiveViewport().changeSubLayoutType(type);

Parameter description:

Possible layout types names: 2-and-1, 2-and-2, 3-in-column, 3-in-row, 3-and-1, 3d, 1, switch-order.

Selecting the switch-order type changes the container orders.

Viewport actions

Fusion

Enables fusion with default Hot Iron palette.

viewportsCore.getActiveViewport().enableFusion(seriesId);

Changes color palette.

viewportsCore.getActiveViewport().applyFusionClut(name);

Parameter description:

Possible color palettes names: HOT_IRON, PET, HOT_METAL_BLUE, PET_20_STEP, RAINBOW.

Fusion opacity

Fusion opacity from CT (0%) to PT (100%)

viewportsCore.getActiveViewport().applyFusionOpacity(value);
viewportsCore.getActiveViewport().getFusionOpacity();

Parameter description:

Window leveling

Window leveling actions.

viewportsCore.getActiveViewport().applyWL(w,l);
viewportsCore.getActiveViewport().applyDefaultWL();
viewportsCore.getActiveViewport().applyAutoWL();
viewportsCore.getActiveViewport().applyInvert(true|false);
viewportsCore.getActiveViewport().isInverted();

Transformations of viewport

Viewport transformation actions.

viewportsCore.getActiveViewport().applyRotation(degrees);
viewportsCore.getActiveViewport().applyRightRotation();
viewportsCore.getActiveViewport().applyLeftRotation();
viewportsCore.getActiveViewport().applyHorizontalFlip();
viewportsCore.getActiveViewport().applyVerticalFlip();
viewportsCore.getActiveViewport().applyTransformationCleanup();

Parameter description:

Zoom operations

Zoom related operation actions.

viewportsCore.getActiveViewport().applyFitToScreen();
viewportsCore.getActiveViewport().applyOriginalResolution();
viewportsCore.getActiveViewport().applyZoom(scale, point);

Parameters description:

Scale range restriction actions.

viewportsCore.getActiveViewport().setScaleRange(min, max);
viewportsCore.getActiveViewport().getScaleRange();
viewportsCore.getActiveViewport().clearScaleRange();

Parameters description:

To receive current viewport get fit to screen scale value:

viewportsCore.getActiveViewport().getFitToScreenScaleValue();

Pan operation

Pan operation action.

viewportsCore.getActiveViewport().applyPan(position);

Parameter description:

Reset render

Reset active viewport render to original state.

viewportsCore.getActiveViewport().resetRender();

Actions with measurements

Measurements id: none, ruler, angle, polyline, oval, volume, VTI, cobb-angle, roi; Measurements related functions:

viewportsCore.setActiveMeasurementId(`ruler`);
viewportsCore.getActiveMeasurementId();
viewportsCore.getActiveViewport().deleteMeasurements();

viewportsCore.enableAngleBetweenIntersectingRulers();
viewportsCore.disableAngleBetweenIntersectingRulers();
viewportsCore.isEnableAngleBetweenIntersectingRulers();

viewportsCore.enableIntensity();
viewportsCore.disableIntensity();
viewportsCore.isEnableIntensity();

Mouse actions

To bind action to mouse button, your need to provide button number and mouse action constant:

VIEWPORT_FUNCTIONS = {
    NONE: 0,
    WL: 1,
    ZOOM: 2,
    PAN: 3,
    SCROLL: 4,
    MEASURE: 5,
    ROTATE: 6,
    CROSSHAIR: 8,
};

viewportsCore.setMouseButtonFunction(1|2|3, VIEWPORT_FUNCTIONS.WL);

Main data objects

Study data object

To get study data use this function:

viewportsCore.getStudy(studyUid);

Series data object

To get series data use this function:

viewportsCore.getSeries(seriesUid);

Instance object

To get instance data use this function:

viewportsCore.getInstance(instanceUid);

Synchronization

Enable synchronization

Enables synchronization.

viewportsCore.enableSync(yourCallback);

Synchronization example

viewportsCore.enableSync((functionName, parameters) => console.log(functionName, parameters));

Parameters description:

Example of parameters object:

- `image-position-changed`: {"imagePosition": {"x": 0.031, "y": 0.097}, "containerId": "viewport-container-1-1"};
- `zoom-changed`: {"scale": 1.2529411185263977, "point": { "x": 253.15", "y": 389}, "containerId": "viewport-container-1-1"};
- `container-size-changed`: {"width": 531, "height": 883, "scale": 1.09375, "containerId": "viewport-container-1-1"}.

Disable synchronization

Disables synchronization.

viewportsCore.disableSync(yourCallback);

Add to synchronization

This function can be used to add desired containers to the synced containers list.

viewportsCore.addToSync(containersId);

Parameter description:

Remove from synchronization

This function can be used to remove desired containers from the synced containers list.

viewportsCore.removeFromSync(containersId);

Parameters description:

Get locked viewport containers

Returns list of synced viewport containers.

viewportsCore.getLockedViewportContainers();

Apply zoom for locked views

When sync is enabled you can use zoom function on locked containers.

viewportsCore.applyZoomForLockedViews(containerId, scale, point);

Parameters description:

Apply pan for locked views

When sync is enabled you can use pan function on locked containers:

viewportsCore.applyPanForLockedViews(containerId, positionX, positionY);

Parameters description:

Custom measurements

Landmark

Enable landmark

Enables landmark functionality and add callback event.

viewportsCore.landmarksController.enable(yourCallback);

Enable landmark example

viewportsCore.landmarksController.enable((landmarkData) => console.log(landmarkData));

Parameter description:

Disable landmark

Disables landmark.

viewportsCore.landmarksController.disable(yourCallback);

Create landmark

Enables landmark tool and starts drawing landmark.

viewportsCore.landmarksController.createLandmark();

Add landmark

Creates landmark in viewports by stored landmark data.

viewportsCore.landmarksController.addLandmark(landmarkData);

Parameter description:

Remove landmark

Removes created or added landmark.

viewportsCore.landmarksController.removeLandmark(referenceUid);

Parameter description:

Get landmark data

Returns landmark data by frame of reference uid.

viewportsCore.landmarksController.getLandmarkData(referenceUid);

Parameter description:

MG lesion AI

MG lesion findings object

Findings object description:

Create MG lesion

Creates MG lesion in to provided layout container.

viewportsCore.mgLesionsController.createMGLesion(containerId, findings);

Parameters description:

Remove MG lesion

Removes created MG lesion from provided layout container and instance.

viewportsCore.mgLesionsController.removeMGLesion(containerId, instanceUid);

Parameters description:

Get MG lesion

Returns created MG lesion measurement tool.

viewportsCore.mgLesionsController.getMGLesion(containerId, instanceUid);

Parameters description:

Get MG lesions

Returns created MG lesions.

viewportsCore.mgLesionsController.getMGLesions();

Confirm selected lesion

Confirms selected lesion with provided center point.

viewportsCore.mgLesionsController.confirmSelectedLesion(centerPoint);

Parameter description:

Delete selected lesion

Deletes selected lesion.

viewportsCore.mgLesionsController.deleteSelectedLesion();

Change mamilla isEditable status

Changes mamilla isEditable status.

viewportsCore.mgLesionsController.changeMamillaIsEditableStatus(containerId, isEditable);

Parameters description:

Change muscle line isEditable status

Changes muscle line isEditable status.

viewportsCore.mgLesionsController.changeMuscleLineIsEditableStatus(containerId, isEditable);

Parameters description:

Change region line IsEditable status

Changes desired region line isEditable status.

viewportsCore.mgLesionsController.changeRegionLineIsEditableStatus(containerId, regionLineUid, isEditable);

Parameters description:

Change lesion IsEditable status

Changes desired lesion isEditable status.

viewportsCore.mgLesionsController.changeLesionIsEditableStatus(containerId, lesionUid, isEditable);

Parameters description:

Change mamilla isVisible status

Changes mamilla isVisible status.

viewportsCore.mgLesionsController.changeMamillaIsVisibleStatus(containerId, isVisible);

Parameters description:

Change muscle line isVisible status

Changes muscle line isVisible status.

viewportsCore.mgLesionsController.changeMuscleLineIsVisibleStatus(containerId, isVisible);

Parameters description:

Change region line isVisible status

Changes desired region line isVisible status.

viewportsCore.mgLesionsController.changeRegionLineIsVisibleStatus(containerId, regionLineUid, isVisible);

Parameters description:

Change lesion isVisible status

Changes desired lesion isVisible status.

viewportsCore.mgLesionsController.changeLesionIsVisibleStatus(containerId, lesionUid, isVisible);

Parameters description:

Update mamilla data

Updates mamilla data based on provided mamilla data object.

viewportsCore.mgLesionsController.updateMamillaData(containerId, mamillaData);

Parameters description:

Update muscle line data

Updates muscle line data based on provided muscle line data object.

viewportsCore.mgLesionsController.updateMuscleLineData(containerId, muscleLineData);

Parameters description:

Update region line data

Updates region line data based on provided region line data object.

viewportsCore.mgLesionsController.updateRegionLineData(containerId, regionLineData);

Parameters description:

Update lesion data

Updates lesion data based on provided lesion data object.

viewportsCore.mgLesionsController.updateLesionData(containerId, lesionData);

Parameters description:

MG Lesion events

MG lesion selected event

Triggered when mg lesion is selected. Event constant: mg-lesion-selected or viewportsCore.getConstants().MG_LESION_EVENTS.MG_LESION_SELECTED.

To use this event:

viewportsCore.registerEvent(`mg-lesion-selected`, (data) => console.log(data));

MG lesion deselected event

Triggered when mg lesion is deselected. Event constant: mg-lesion-deselected or viewportsCore.getConstants().MG_LESION_EVENTS.MG_LESION_DESELECTED.

To use this event:

viewportsCore.registerEvent(`mg-lesion-deselected`, (data) => console.log(data));

MG lesion confirmed event

Triggered when mg lesion is confirmed. Event constant: mg-lesion-confirmed or viewportsCore.getConstants().MG_LESION_EVENTS.MG_LESION_CONFIRMED.

To use this event:

viewportsCore.registerEvent(`mg-lesion-confirmed`, (data) => console.log(data));

MG lesion deleted event

Triggered when mg lesion is deleted. Event constant: mg-lesion-deleted or viewportsCore.getConstants().MG_LESION_EVENTS.MG_LESION_DELETED.

To use this event:

viewportsCore.registerEvent(`mg-lesion-deleted`, (data) => console.log(data));

MG lesion element edited event

Triggered when mg lesion element is edited. Event constant: mg-lesion-element-edited or viewportsCore.getConstants().MG_LESION_EVENTS.MG_LESION_ELEMENT_EDITED.

To use this event:

viewportsCore.registerEvent(`mg-lesion-element-edited`, (data) => console.log(data));

Viewports core Events

Register event

To register event use:

viewportsCore.registerEvent(`event-constant`, callback);

Remove event

To remove remove:

viewportsCore.removeEvent(`event-constant`, callback);

Active container changed event

Triggered when active container has changed. Event constant: active-container-changed or viewportsCore.getConstants().CORE_EVENTS.ACTIVE_CONTAINER_CHANGED.

To use this event:

viewportsCore.registerEvent(`active-container-changed`, (containerId) => console.log(containerId));

Callback parameter:

Active viewport changed event

Triggered when active viewport has changed. Event constant: active-viewport-changed or viewportsCore.getConstants().CORE_EVENTS.ACTIVE_VIEWPORT_CHANGED.

To use this event:

viewportsCore.registerEvent(`active-viewport-changed`, (viewportId) => console.log(viewportId));

Callback parameter:

Viewport instance changed event

Triggered when new instance has opened to viewport. Event constant: viewport-instance-changed or viewportsCore.getConstants().CORE_EVENTS.VIEWPORT_INSTANCE_CHANGED.

To use this event:

viewportsCore.registerEvent(`viewport-instance-changed`, (viewportId, instanceUid) => console.log(viewportId, instanceUid));

Callback parameters:

Set fullscreen container event

Triggered when fullscreen container has been set. Event constant: set-fullscreen-container or viewportsCore.getConstants().CORE_EVENTS.SET_FULLSCREEN_CONTAINER.

To use this event:

viewportsCore.registerEvent(`set-fullscreen-container`, (containerId) => console.log(containerId));

Callback parameter:

Image rotation changed event

Triggered when image rotation has changed. Event constant: image-rotation-changed or viewportsCore.getConstants().CORE_EVENTS.IMAGE_ROTATION_CHANGED.

To use this event:

viewportsCore.registerEvent(`image-rotation-changed`, ({degrees, containerId}) => console.log(degrees, containerId));

Callback parameters:

Image position changed event

Triggered when image position has changed. Event constant: image-position-changed or viewportsCore.getConstants().CORE_EVENTS.IMAGE_POSITION_CHANGED.

To use this event:

viewportsCore.registerEvent(`image-position-changed`, ({imagePosition, containerId}) => console.log(imagePosition, containerId));

Callback parameters:

Zoom changed event

Triggered when synced images zoom has changed. Event constant: zoom-changed or viewportsCore.getConstants().CORE_EVENTS.ZOOM_CHANGED.

To use this event:

viewportsCore.registerEvent(`zoom-changed`, ({scale, point, containerId}) => console.log(scale, point, containerId));

Callback parameters:

Viewport scale changed event

Triggered when viewport scale has changed. Event constant: viewport-scale-changed or viewportsCore.getConstants().CORE_EVENTS.VIEWPORT_SCALE_CHANGED.

To use this event:

viewportsCore.registerEvent(`viewport-scale-changed`, ({scale, containerId}) => console.log(scale, containerId));

Callback parameters:

Delete viewports event

Event gives callback when the viewport is deleted or when the viewport disappears on layout change. Event constant: container-cleaned or viewportsCore.getConstants().CORE_EVENTS.CONTAINER_CLEANED.

To use this event:

viewportsCore.registerEvent(`container-cleaned`, (container) => console.log(container));

Callback parameter:

Viewport loader event

Triggered on viewport loader change. Event constant: viewport-loader or viewportsCore.getConstants().CORE_EVENTS.VIEWPORT_PRELOADER.

To use this event:

viewportsCore.registerEvent(`viewport-loader`, (object) => console.log(object));

Callback parameter:

Viewport progress loader event

Triggered on viewport progress loader change. Event constant: progress-loader or viewportsCore.getConstants().CORE_EVENTS.PROGRESS_LOADER.

To use the event:

viewportsCore.registerEvent(`progress-loader`, (object) => console.log(object));

Callback parameter:

Viewport resized event

Triggered when viewport container size changed and viewport had to be resized. Event constant: viewport-resized or viewportsCore.getConstants().CORE_EVENTS.VIEWPORT_RESIZED.

To use this event:

viewportsCore.registerEvent(`viewport-resized`, (containerId, viewportId) => console.log(containerId, viewportId));

Callback parameters:

Additional viewports core configuration

List of additional configuration options for viewports core.

Image pixel requests grouping

Parameter batchImageRequests enables grouping of multiple image pixel download requests into one batch request.

Usage example:

const configuration = {
    features: {
        batchImageRequests: true
    }
};
viewportsCore.create(configuration);

Requests configuration

Configuration object requestsConfiguration allows customisation of maximum number active downloads and desired batch request sizes.

Object requestsConfiguration parameters description:

Usage example:

const configuration = {
    requestsConfiguration: {
        maximumMetadataStreams: 5,
        maximumPixelStreams: 15,
        maximumMultiFrameStreams: 4,
        batchSizeMb: 5,
        multiFrameBatchSizeMb: 2
    }
};
viewportsCore.create(configuration);

Recommended configuration example with enabled image pixel request grouping and requestsConfiguration object:

const configuration = {
    features: {
        batchImageRequests: true
    },
    requestsConfiguration: {
        maximumMetadataStreams: 5,
        maximumPixelStreams: 15,
        maximumMultiFrameStreams: 4,
        batchSizeMb: 5,
        multiFrameBatchSizeMb: 2
    }
};
viewportsCore.create(configuration);

Change log

List of viewports-core integration changes.

2.1.76 (2021-10-15)

Changes

2.1.75 (2021-10-14)

Changes

2.1.73 (2021-10-07)

Changes

2.1.52 (2021-09-14)

Changes

2.1.48 (2021-09-10)

Changes

Dependencies

vtk-library updated to version 1.0.6.

2.1.46 (2021-09-01)

Changes

2.1.43 (2021-08-16)

Changes

2.1.30 (2021-08-02)

Changes

2.1.23 (2021-07-16)

Changes

Dependencies

vtk-library updated to version 1.0.4.

2.1.22 (2021-07-09)

Changes

Dependencies

vtk-library updated to version 1.0.3.

2.1.21 (2021-07-08)

Changes

Breaking changes

2.0.48 (2021-04-28)

Changes