README
Installation and usage
The easiest way to use viewportsCore is to install it from npm.
npm install viewports-core
Functionality of framework you can achieve using viewportsCore
object.
To create simple viewer first of all you should create html file like this:
<!--index.html file-->
<style>
#viewer {
width: 100%;
height: 100%;
}
</style>
...
<body>
<div id="viewer"></div>
</body>
Then use it in your app:
viewportsCore.create(`viewer`, {});
Features
Here you will find description about viewportsCore features.
Layout
To create viewports layout use this function:
viewportsCore.create(containerId, properties);
Parameters description:
containerId
- ID of HTML DOM element where will be store viewports.properties
- object which setup parameters of viewports (not required). Possible options:position
- this object describes absolute position of viewports layout. Default value:{top: 0, right: 0, bottom: 0, left: 0}
.layout
- this object defines layout of viewports. Default value:{columns: 1, rows: 1}
.enabledScrollBetweenSeries
- this parameter allows scrolling between series. Default value:false
.autoOpenImageType
- parameter defines which way to use for the study auto open. Possible values:none
,first
,always
. Default values:none
.features
- this parameter enables features which is described in the object as parameter. This is for presentation states, key object, patient history.
To delete viewport by container id:
viewportsCore.deleteViewportByContainerId(containerId);
Parameters description:
containerId
- Id of DOM element were viewport is stored (For example:container-1-1
).
To delete all viewports:
viewportsCore.deleteAllViewports();
Data loading
Receive and store study data you can use this function (Study will load in active viewport):
viewportsCore.loadStudyWithHIS(studyUid, seriesUid, instanceUid);
Parameters description:
studyUid
- study unique identification (string).seriesUid
- series unique identification (string). Optional parameter, if not provided - first series from study is loaded.instanceUid
- instance unique identification (string). Optional parameter, if not provided - first instance from series is loaded.
Load few studies in one call:
viewportsCore.loadStudiesWithHIS(studiesToLoad);
Example:
const studiesToLoad = [
{
studyUid: '1.2.840.113619.2.55.3.4271045733.996.1449464144.595',
seriesUid: '1.2.840.113619.2.55.3.4271045733.996.1449464144.156',
instanceUid: '1.2.840.113619.2.55.3.4271045733.996.1449464144.111',
containerId: 'container-1-1',
callback: (viewport) => {viewport.applyInvert(true)}
},
{
studyUid: '1.2.840.113619.2.55.3.4271045733.996.1449464144.595',
containerId: 'container-1-2',
callback: (viewport, study) => {console.log(study)}
},
];
Parameters description:
studyUid
- study unique identification (string).seriesUid
- series unique identification (string). Optional parameter, if not provided - first series from study is loaded.instanceUid
- instance unique identification (string). Optional parameter, if not provided - first instance from series is loaded.containerId
- ID of HTML DOM element where will be store viewports.callback
- loaded study callback (function). Callback parameters are:viewport
- current viewport data where study is loaded.study
- loaded study data object.
Use this function to load instance in specific container:
viewportsCore.layout.loadInstanceToContainer(instanceUid, viewportColumn, viewportRow);
Parameters description:
instanceUid
- instance unique identification (string).viewportColumn
- number of column.viewportRow
- number of row.
Actions with layout
Supported layout types: 1x1
, 1x2
, 1x3
, 2x1
, 2x2
, 2x3
, 3x1
, 3x2
, 3x3
To change layout of viewports uses this:
viewportsCore.setLayout(columns, rows);
To get active viewport container:
viewportsCore.layout.getActiveContainerId();
To remove selected active viewport container:
viewportsCore.layout.removeActiveViewportContainer();
Actions with measurements
Measurements id: none
, ruler
, angle
, polyline
, oval
, volume
, VTI
, cobb angle
, roi
;
viewportsCore.getActiveViewport().deleteMeasurements();
viewportsCore.setActiveMeasurementId(`ruler`);
viewportsCore.getActiveMeasurementId();
viewportsCore.enableAngleBetweenIntersectingRulers();
viewportsCore.disableAngleBetweenIntersectingRulers();
viewportsCore.isEnableAngleBetweenIntersectingRulers();
viewportsCore.enableIntensity();
viewportsCore.disableIntensity();
viewportsCore.isEnableIntensity();
Binding mouse button
To bind function on mouse button you need to give number of 1|2|3 and function name of VIEWPORT_FUNCTIONS 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);
Synchronization
To enable synchronization you need to use this:
viewportsCore.enableSync(yourCallback);
Disable:
viewportsCore.disableSync(yourCallback);
For example:
viewportsCore.enableSync((functionName, parameters) => console.log(functionName, parameters));
- functionName have these event names:
image-position-changed
,zoom-changed
,container-size-changed
. - parameters have function arguments and containerId.
Example of parameters:
image-position-changed
: {"imagePosition": {"x": 0.03176011108489626, "y": 0.09775284633952291}, "containerId": "container-1-1"};zoom-changed
: {"scale": 1.2529411185263977, "point": { "x": 253.15625", "y": 389}, "containerId": "container-1-1"};container-size-changed
: {"width": 531, "height": 883, "scale": 1.037109375, "containerId": "container-1-1"}.
On these events you can manipulate sync functionality.
This function can add desired containers to the list:
viewportsCore.addToSync(containersId);
containersId
- array of strings. Example: (['container-1-1', 'container-1-2']).
Function to remove containers from the list:
viewportsCore.removeFromSync(containersId);
containersId
- array of strings. Example: (['container-1-1', 'container-1-2']).
Get all containers from the list:
viewportsCore.getLockedViewportContainers();
When sync is enabled you can use zoom function on locked containers:
viewportsCore.applyZoomForLockedViews(containerId, scale, point);
containerId
- container id from which zoom operation was performed (to ignore provided container).scale
- scale number.point
- point object with x and y coordinates. For example: {x: 242, y: 236}.
When sync is enabled you can use pan function on locked containers:
viewportsCore.applyPanForLockedViews(containerId, positionX, positionY);
containerId
- container id from which pan operation was performed (to ignore provided container).positionX
- position x coordinates.positionY
- position y coordinates.
Landmark
To enable event which is triggered on landmark creation, use this:
viewportsCore.landmarksController.enable(yourCallback);
Disable:
viewportsCore.landmarksController.disable(yourCallback);
For example:
viewportsCore.landmarksController.enable((landmarkData) => console.log(landmarkData));
landmarkData
- object contains information about added landmark. Landmark information:studyUid
: study unique identification (string);frameOfReferenceUid
: frame of reference unique identification (string);points
: 3 landmark points array with x, y, z coordinates. Array example: [[-7.2, 1.8, -2.5], [-6.5, -1.5, -282.5], [5.5, 8.3, -29.5]].
To enable landmark tool and start drawing landmark, use this:
viewportsCore.landmarksController.createLandmark();
Function to create landmark in viewports by stored landmark data:
viewportsCore.landmarksController.addLandmark(landmarkData);
landmarkData
- object with landmark data information:studyUid
: study unique identification (string);frameOfReferenceUid
: frame of reference unique identification (string);points
: 3 landmark points array with x, y, z coordinates. Array example: [[-7.2, 1.8, -2.5], [-6.5, -1.5, -282.5], [5.5, 8.3, -29.5]].
Function to remove created or added landmark:
viewportsCore.landmarksController.removeLandmark(referenceUid);
referenceUid
- frame of reference uid.
Function to get landmark data by frame of reference uid:
viewportsCore.landmarksController.getLandmarkData(referenceUid);
referenceUid
- frame of reference uid.
MPR actions
Orientations: CORONAL
, AXIAL
, SAGITTAL
.
viewportsCore.changeActiveViewportOrientation(`CORONAL`);
Fusion
Fusion with Hot Iron
palette.
viewportsCore.getActiveViewport().enableFusion(seriesId);
Window leveling actions
viewportsCore.getActiveViewport().applyWL(w,l);
viewportsCore.getActiveViewport().applyDefaultWL();
viewportsCore.getActiveViewport().applyAutoWL();
viewportsCore.getActiveViewport().applyInvert(true|false);
viewportsCore.getActiveViewport().isInverted();
Transformations of view
viewportsCore.getActiveViewport().applyRightRotation();
viewportsCore.getActiveViewport().applyLeftRotation();
viewportsCore.getActiveViewport().applyHorizontalFlip();
viewportsCore.getActiveViewport().applyVerticalFlip();
viewportsCore.getActiveViewport().applyTransformationCleanup();
Zoom operations
viewportsCore.getActiveViewport().applyFitToScreen();
viewportsCore.getActiveViewport().applyOriginalResolution();
viewportsCore.applyZoom(containerId, scale, point);
containerId
- container id string.scale
- scale number.point
- point object with x and y coordinates. For example: {x: 242, y: 236}.
Pan operations
viewportsCore.applyPan(containerId, positionX, positionY);
containerId
- container id string.positionX
- position x coordinates.positionY
- position y coordinates.
Reference lines
viewportsCore.enableReferenceLines();
viewportsCore.disableReferenceLines();
viewportsCore.isEnableReferenceLines();
viewportsCore.getActiveViewport().resetRender();
viewportsCore.resetAllViewportsRenders();
Study cache
viewportsCore.cacheStudy(viewportsCore.getActiveViewportStudy().uid, storageId);
Main data objects
Study object
To get study data use this command:
viewportsCore.getStudy(studyUid, storageId);
Series object
To get series data use this command:
viewportsCore.getSeries(seriesUid);
Instance object
To get instance data use this command:
viewportsCore.getInstance(instanceUid);
Events
To register event use:
viewportsCore.registerEvent(`event-constant`, callback);
To remove:
viewportsCore.removeEvent(`event-constant`, callback);
Selected viewport container event
Event constant: selected-viewport-container
.
To use the event:
viewportsCore.registerEvent(`selected-viewport-container`, (containerId) => console.log(containerId));
Callback parameter:
containerId
- selected viewport container id.
Rotate instance event
Event constant: image-rotation-changed
.
To use the event:
viewportsCore.registerEvent(`image-rotation-changed`, ({angle, containerId}) => console.log(angle, containerId));
Callback parameter:
angle
- instance rotation angle.containerId
- selected viewport container id.
Pan instance event
Event constant: image-position-changed
.
To use the event:
viewportsCore.registerEvent(`image-position-changed`, ({imagePosition, containerId}) => console.log(imagePosition, containerId));
Callback parameter:
imagePosition
- instance position coordinates.containerId
- selected viewport container id.
Zoom instance event
Event constant: zoom-changed
.
To use the event:
viewportsCore.registerEvent(`zoom-changed`, ({scale, point, containerId}) => console.log(scale, point, containerId));
Callback parameter:
scale
- scale size.point
- the point coordinates from which to zoom in or out.containerId
- selected viewport container id.
Delete viewports event
Event gives callback when the viewport is deleted and also gives callback when the viewport disappears on layout change.
Event constant: container-cleaned
.
To use the event:
viewportsCore.registerEvent(`container-cleaned`, (container) => console.log(container));
Callback parameter:
container
- object with container information:containerId
- container id from which viewport will be cleaned;viewportId
- cleaned viewport id.