MedDream DICOM Viewer Viewport API

Version 2.2.160 (2022-04-29)

Initial set up

Install viewportsCore from npm:

npm install viewports-core

Update your build configuration to copy all viewportsCore generated bundle files to your output js directory. Example of how this can be done with copy webpack plugin:

const CopyWebpackPlugin = require('copy-webpack-plugin');

module.exports = {
    plugins: [
        new CopyWebpackPlugin({
            patterns: [
                {
                    from: 'node_modules/viewports-core/dist/*.bundle.js',
                    to: 'js/[name].js',
                    force: true,
                    info: {
                        minimized: true
                    }
                }
            ]
        })
    ]
};

Create initial index.html and add following styles:

<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>

Also add following HTML elements to your index.html file:

<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.

Imported viewportsCore library functions can be accessed with global viewportsCore variable.

To load study in to viewport container you should initialize viewportsCore, add your created layout container and load your desired study:

import 'viewports-core';

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);
});

If your solution needs viewportsCore only in specific cases, then you can lazy load this library when those specific cases are accessed:

import('viewports-core').then(() => {
    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

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:

Requested different orientation series has to be generated from source data. Generated virtual series receive new uid which is created from source series uid and orientation name, for example: 123.0.0.1-CORONAL. Each instance in generated virtual series receive new uid which is created from virtual series uid and instance index, for example: 123.0.0.1-CORONAL-0.

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();

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:

Measurements

Measurements controller

Set active measurement type

Sets active measurement tool type.

viewportsCore.measurementsController.setActiveMeasurementType(measurementType);

Parameter description:

Possible measurement tool types: ruler, angle, polyline, oval, area, volume, VTI, cobb-angle, roi, flexpoly, pencil and none.

Get active measurement type

Returns currently active measurement tool type.

viewportsCore.measurementsController.getActiveMeasurementType();

Create new measurement

Creates new measurement to viewport container based on provided measurement data. Measurement id is unique per viewport, new measurements with same id will not be created twice.

viewportsCore.measurementsController.createNewMeasurement(containerId, measurementData);

Parameters description:

Measurement data object example can be found in Measurement data models section.

Create new measurements

Creates new measurements to viewport container based on provided measurements data array.

viewportsCore.measurementsController.createNewMeasurements(containerId, measurementsData);

Parameters description:

Get measurements data by containerId

Returns array with measurements data based on provided viewports container id.

viewportsCore.measurementsController.getMeasurementsDataByContainerId(containerId);

Parameter description:

Get measurement data by id

Returns measurement data by provided container id and measurement id.

viewportsCore.measurementsController.getMeasurementDataById(containerId, measurementId);

Parameters description:

Delete measurement by id

In all viewports, deletes all measurements with provided measurement id.

viewportsCore.measurementsController.deleteMeasurementById(measurementId);

Parameter description:

Delete measurements by ids

In all viewports, deletes all measurements based on provided measurement ids array.

viewportsCore.measurementsController.deleteMeasurementsByIds(measurementIds);

Parameter description:

Delete selected measurements

Deletes selected measurements.

viewportsCore.measurementsController.deleteSelectedMeasurements();

Update measurement

Updates measurement in viewport container based on provided measurement data.

viewportsCore.measurementsController.updateMeasurement(containerId, measurementData);

Parameters description:

Update measurements

Updates measurements in viewport container based on provided measurements data array.

viewportsCore.measurementsController.updateMeasurements(containerId, measurementsData);

Parameters description:

Update measurement id

Updates measurement in viewport container with provided new measurement id.

viewportsCore.measurementsController.updateMeasurementId(containerId, oldMeasurementId, newMeasurementId);

Parameters description:

Mark measurement by id

Marks measurement with matching measurement id. Unmarks all measurements that does not have matching measurement id.

viewportsCore.measurementsController.markMeasurementById(measurementId);

Parameter description:

Show measurement by id

In all viewports, shows measurements with provided measurement id.

viewportsCore.measurementsController.showMeasurementById(measurementId);

Parameter description:

Hide measurement by id

In all viewports, hides measurements with provided measurement id.

viewportsCore.measurementsController.hideMeasurementById(measurementId);

Parameter description:

Is angle between intersecting rulers enabled

Returns true if angles between intersecting rulers are enabled.

viewportsCore.measurementsController.isAngleBetweenIntersectingRulersEnabled();

Toggle angle between intersecting rulers

Toggles angle between intersecting rulers.

viewportsCore.measurementsController.toggleAngleBetweenIntersectingRulers(isEnabled);

Parameter description:

Measurement settings

Get regular color

Returns regular measurements color.

viewportsCore.measurementsSettings.getRegularColor();

Set regular color

Sets regular color to measurements that will be created.

viewportsCore.measurementsSettings.setRegularColor(regularColor);

Parameter description:

Get active color

Returns active measurement color.

viewportsCore.measurementsSettings.getActiveColor();

Set active color

Sets active color to measurements that will be created.

viewportsCore.measurementsSettings.setActiveColor(activeColor);

Parameter description:

Get marked object color

Returns marked measurement color.

viewportsCore.measurementsSettings.getMarkedObjectColor();

Set marked object color

Sets marked color to measurements that will be created.

viewportsCore.measurementsSettings.setMarkedObjectColor(markedObjectColor);

Parameter description:

Get active label color

Returns active measurement label color.

viewportsCore.measurementsSettings.getActiveLabelColor();

Set active label color

Sets active label color to measurements that will be created.

viewportsCore.measurementsSettings.setActiveLabelColor(activeLabelColor);

Parameter description:

Measurement events

Measurement activated event

Triggered when measurement tool is activated. Event constant: measurement-activated or viewportsCore.getConstants().MEASUREMENT_EVENTS.MEASUREMENT_ACTIVATED.

To use this event:

viewportsCore.registerEvent('measurement-activated', (measurementType) => console.log(measurementType));

Measurement created

Triggered when measurement is created. Event constant: measurement-created or viewportsCore.getConstants().MEASUREMENT_EVENTS.MEASUREMENT_CREATED.

To use this event:

viewportsCore.registerEvent('measurement-created', (data) => console.log(data));

Measurement deleted

Triggered when measurement is deleted. Event constant: measurement-deleted or viewportsCore.getConstants().MEASUREMENT_EVENTS.MEASUREMENT_DELETED.

To use this event:

viewportsCore.registerEvent('measurement-deleted', (data) => console.log(data));

All measurements deleted

Triggered when all measurements are deleted from viewport container. Event constant: all-measurements-deleted or viewportsCore.getConstants().MEASUREMENT_EVENTS.ALL_MEASUREMENTS_DELETED.

To use this event:

viewportsCore.registerEvent('all-measurements-deleted', (containerId) => console.log(containerId));

Measurement data models

Ruler measurement data model

const measurementData = {
    id: 'ruler-id-1',
    type: 'ruler',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        startPosition: [25, 0, 0],
        endPosition: [75, 50, 0],
        length: '70.71 mm'
    }
};

Angle measurement data model

const measurementData = {
    id: 'angle-id-1',
    type: 'angle',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        startPosition: [59, 238, 42],
        middlePosition: [148, 169, 42],
        endPosition: [88, 70, 42],
        angle: '96.57°'
    }
};

Polyline measurement data model

const measurementData = {
    id: 'polyline-id-1',
    type: 'polyline',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        points: [
            [50, 31, 42],
            [10, 131, 42],
            [125, 16, 42]
        ],
        length: '270.34 mm'
    }
};

Oval measurement data model

const measurementData = {
    id: 'oval-id-1',
    type: 'oval',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        centerPosition: [106, 73, 42],
        xRadius: 45,
        yRadius: 29,
        ovalValues: 'Mean: 46.25 HU  SD: 146.88 HU\r\nMin: -164.00 HU  Max: 781.00 HU\r\nArea: 32.09 cm² (W: 7.96 cm H: 5.13 cm)'
    }
};

Area measurement data model

const measurementData = {
    id: 'area-id-1',
    type: 'area',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        points: [
            [142, 64, 42],
            [174, 114, 42],
            [69, 162, 42],
            [5, 112, 42],
            [91, 66, 42]
        ],
        area: '9441.00 mm²'
    }
};

Volume measurement data model

const measurementData = {
    id: 'volume-id-1',
    type: 'volume',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        lines: [
            {
                startPosition: [174, 46, 42],
                endPosition: [114, 65, 42]
            },
            {
                startPosition: [114, 65, 42],
                endPosition: [149, 115, 42]
            },
            {
                startPosition: [149, 115, 42],
                endPosition: [201, 90, 42]
            },
            {
                startPosition: [201, 90, 42],
                endPosition: [174, 46, 42]
            }
        ],
        separatorLine: {
            startPosition: [174, 46, 42],
            endPosition: [149, 115, 42]
        },
        volumeValues: 'Length: 232.15 mm\r\nArea: 3285.92 mm²\r\nVolume: 152438.44 mm³'
    }
};

VTI measurement data model

const measurementData = {
    id: 'vti-id-1',
    type: 'VTI',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        points: [   //Studies for VTI measurement does not have parameters to calculate 3D coordiantes
            {x: 146, y: 260},
            {x: 266, y: 218},
            {x: 386, y: 218}
        ],
        vtiValues: 'Vmax: 0.47 m/s\r\nVmean 0.34 m/s\r\nPmax: 0.89 mmHg\r\nPmean: 0.56 mmHg\r\nVTI: 60.42 cm'
    }
};

Cobb angle measurement data model

const measurementData = {
    id: 'cobb-angle-id-1',
    type: 'cobb-angle',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        lines: [
            {
                startPosition: [14, 168, 42],
                endPosition: [68, 247, 42]
            },
            {
                startPosition: [66, 128, 42],
                endPosition: [101, 262, 42]
            },
            {
                startPosition: [44, 212, 42],
                endPosition: [84, 196, 42]
            }
        ],
        angle: '19.72°',
        distance: '43.08 mm'
    }
};

Roi measurement data model

const measurementData = {
    id: 'roi-id-1',
    type: 'roi',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        points: [
            [101, 254, 42],
            [139, 281, 42],
            [120, 310, 42],
            [51, 316, 42],
            [55, 275, 42]
        ]
    }
};

Flexpoly measurement data model

const measurementData = {
    id: 'flexpoly-id-1',
    type: 'flexpoly',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        points: [
            [122, 91, 42],
            [121, 91, 42],
            [119, 90, 42],
            [116, 90, 42],
            [113, 89, 42],
        ],
        area: '3.91 mm²'
    }
};

Pencil measurement data model

const measurementData = {
    id: 'pencil-id-1',
    type: 'pencil',
    containerId: 'viewport-container-1-1',
    studyUid: 'study-uid-1',
    seriesUid: 'series-uid-1',
    instanceUid: 'instance-uid-1',
    colors: {
        regularColor: '#FFA500',
        activeColor: '#33CCFF',
        markedColor: '#009BFF',
        activeLabelColor: '#FFF'
    },
    data: {
        points: [
            [0, 112, 42],
            [1, 112, 42],
            [1, 111, 42],
            [2, 112, 42],
            [3, 113, 42],
            [4, 114, 42],
        ]
    }
};

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.2.160 (2022-04-29)

Changes

2.2.155 (2022-04-27)

Changes

2.2.151 (2022-04-21)

Changes

2.2.140 (2022-04-12)

Changes

2.2.135 (2022-04-11)

Changes

2.2.131 (2022-04-07)

Changes

2.2.129 (2022-04-07)

Changes

2.2.127 (2022-04-05)

Changes

Breaking changes

2.2.119 (2022-03-31)

Changes

Dependencies

vtk-library updated to version 1.0.15.

2.2.73 (2022-02-23)

Changes

2.2.28 (2022-02-18)

Changes

Breaking changes

2.2.7 (2021-12-06)

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