diff --git a/README.md b/README.md index 03ec47b05..c3ada712f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## Dicom Image Toolkit for CornestoneJS -### Current version: 0.5.2 +### Current version: 0.5.3 This library provides common dicom functionalities to be used in web-applications. Multiplanar reformat on axial, sagittal and coronal viewports is included as well as custom loader/exporter for nrrd files and orthogonal reslice. diff --git a/docs/image_layers.js.html b/docs/image_layers.js.html index 0077062e1..10a8b641d 100644 --- a/docs/image_layers.js.html +++ b/docs/image_layers.js.html @@ -85,7 +85,7 @@

image_layers.js

* @param {String} mainSeriesName - Tag for mask series * @param {String} elementId - target HTML element id */ -export const loadImageLayers = function( +export const loadImageLayers = function ( mainSeries, mainSeriesName, maskSeries, @@ -105,7 +105,7 @@

image_layers.js

maskSeriesName ); loadLayers(element, layers); - setTimeout(function() { + setTimeout(function () { updateImageLayer( mainSeries, maskSeries, @@ -123,7 +123,7 @@

image_layers.js

* @param {String} layerName - Target layer name * @param {Number} opacity - New opacity value [0-1] */ -export const changeOpacityLayer = function(elementId, layerName, opacity) { +export const changeOpacityLayer = function (elementId, layerName, opacity) { let element = document.getElementById(elementId); if (!element) { console.error("invalid html element: " + elementId); @@ -135,7 +135,7 @@

image_layers.js

return; } let activeLayerId; - each(layers, function(layer) { + each(layers, function (layer) { if (layer.options.name == layerName) { layer.options.opacity = opacity; } else { @@ -156,7 +156,7 @@

image_layers.js

* @param {HTMLElement} element - Target html element * @param {Number} imageIndex - index of the image to load */ -export const updateImageLayer = function( +export const updateImageLayer = function ( mainSeries, mainSeriesName, maskSeries, @@ -168,12 +168,14 @@

image_layers.js

console.error("Invalid layers in active element"); return; } - each(layers, function(layer) { + each(layers, function (layer) { let series = layer.options.name == mainSeriesName ? mainSeries : maskSeries; - cornerstone.loadImage(series.imageIds[imageIndex]).then(function(image) { - cornerstone.setActiveLayer(element, layer.layerId); - cornerstone.displayImage(element, image); - }); + cornerstone + .loadImage(series.imageIds[imageIndex - 1]) + .then(function (image) { + cornerstone.setActiveLayer(element, layer.layerId); + cornerstone.displayImage(element, image); + }); }); }; @@ -183,7 +185,7 @@

image_layers.js

* @function getMainLayer * @returns {String} Name of the main layer */ -export const getMainLayer = function() { +export const getMainLayer = function () { return mainLayer; }; @@ -199,7 +201,7 @@

image_layers.js

* @param {String} maskSeriesName - Name of the mask layer * @returns {Object} Cornerstone layers object */ -let buildLayers = function( +let buildLayers = function ( mainSeries, mainSeriesName, maskSeries, @@ -236,13 +238,13 @@

image_layers.js

* @param {HTMLElement} element - Target HTML element * @param {Object} layers - Cornerstone layers object */ -let loadLayers = function(element, layers) { +let loadLayers = function (element, layers) { cornerstone.imageCache.purgeCache(); - each(layers, function(layer) { + each(layers, function (layer) { let imageIndex = Math.floor(layer.imageIds.length / 2); let currentImageId = layer.imageIds[imageIndex]; - each(layer.imageIds, function(imageId) { - cornerstone.loadAndCacheImage(imageId).then(function(image) { + each(layer.imageIds, function (imageId) { + cornerstone.loadAndCacheImage(imageId).then(function (image) { if (currentImageId == imageId) { cornerstone.displayImage(element, image); cornerstone.addLayer(element, image, layer.options); diff --git a/docs/image_rendering.js.html b/docs/image_rendering.js.html index 6435fbe4f..2643cd473 100644 --- a/docs/image_rendering.js.html +++ b/docs/image_rendering.js.html @@ -68,7 +68,7 @@

image_rendering.js

/* * This module provides the following functions to be exported: * clearImageCache() - * loadImage(series, elementId) + * loadImage(series, elementId, defaultImageIndex) * updateImage(series, elementId, imageIndex) * resetViewports([elementIds]) */ @@ -78,7 +78,7 @@

image_rendering.js

* @instance * @function clearImageCache */ -export const clearImageCache = function() { +export const clearImageCache = function () { cornerstone.imageCache.purgeCache(); }; @@ -89,7 +89,7 @@

image_rendering.js

* @param {Object} series - The original series data object * @param {String} elementId - The html div id used for rendering */ -export const reloadImage = function(series, elementId) { +export const reloadImage = function (series, elementId) { let element = document.getElementById(elementId); if (!element) { console.error("invalid html element: " + elementId); @@ -100,8 +100,8 @@

image_rendering.js

let sliceId = store.get(viewer, elementId, "sliceId"); let currentImageId = series.imageIds[sliceId]; - each(series.imageIds, function(imageId) { - cornerstone.loadAndCacheImage(imageId).then(function(image) { + each(series.imageIds, function (imageId) { + cornerstone.loadAndCacheImage(imageId).then(function (image) { if (currentImageId == imageId) { cornerstone.displayImage(element, image); let viewport = cornerstone.getViewport(element); @@ -135,7 +135,7 @@

image_rendering.js

* @param {Object} series - The original series data object * @param {String} elementId - The html div id used for rendering */ -export const loadImage = function(series, elementId) { +export const loadImage = function (series, elementId, defaultImageIndex) { let element = document.getElementById(elementId); if (!element) { console.error("invalid html element: " + elementId); @@ -143,9 +143,12 @@

image_rendering.js

} cornerstone.enable(element); - let imageIndex = Math.floor(series.imageIds.length / 2); - let currentImageId = series.imageIds[imageIndex]; - let numberOfSlices = series.imageIds.length - 1; + let numberOfSlices = series.imageIds.length; + let imageIndex = + defaultImageIndex && defaultImageIndex <= series.imageIds.length + ? defaultImageIndex + : Math.floor(series.imageIds.length / 2); + let currentImageId = series.imageIds[imageIndex - 1]; let rows = series.instances[series.imageIds[0]].metadata["x00280010"]; let cols = series.instances[series.imageIds[0]].metadata["x00280011"]; let thickness = series.instances[series.imageIds[0]].metadata["x00180050"]; @@ -170,8 +173,8 @@

image_rendering.js

store.set(null, "errorLog", ""); } - each(series.imageIds, function(imageId) { - cornerstone.loadAndCacheImage(imageId).then(function(image) { + each(series.imageIds, function (imageId) { + cornerstone.loadAndCacheImage(imageId).then(function (image) { // HACK to force render re-evaluation (otherwise it remains stuck on GrayScaleRenderer) image.render = null; @@ -210,11 +213,11 @@

image_rendering.js

* @param {String} elementId - The html div id used for rendering * @param {Number} imageIndex - The index of the image to be rendered */ -export const updateImage = function(series, element, imageIndex) { +export const updateImage = function (series, element, imageIndex) { if (!element) { return; } - cornerstone.loadImage(series.imageIds[imageIndex]).then(function(image) { + cornerstone.loadImage(series.imageIds[imageIndex - 1]).then(function (image) { cornerstone.displayImage(element, image); }); }; @@ -225,8 +228,8 @@

image_rendering.js

* @function resetViewports * @param {Array} elementIds - The array of hmtl div ids */ -export const resetViewports = function(elementIds) { - each(elementIds, function(elementId) { +export const resetViewports = function (elementIds) { + each(elementIds, function (elementId) { let element = document.getElementById(elementId); if (!element) { console.error("invalid html element: " + elementId); @@ -290,7 +293,7 @@

image_rendering.js

* @function enableMouseHandlers * @param {String} elementId - The html div id used for rendering */ -export const enableMouseHandlers = function(elementId) { +export const enableMouseHandlers = function (elementId) { let element = document.getElementById(elementId); if (!element) { console.error("invalid html element: " + elementId); @@ -308,7 +311,7 @@

image_rendering.js

let viewport = cornerstone.getViewport(element); let viewportNames = store.get("viewports"); let viewer = store.get("viewer"); - each(viewportNames, function(viewportName) { + each(viewportNames, function (viewportName) { // sync ww and wc values in store store.set(viewer, "contrast", [ viewportName, @@ -331,20 +334,24 @@

image_rendering.js

document.removeEventListener("mousemove", mouseMoveHandler); document.removeEventListener("mouseup", mouseUpHandler); } + document.removeEventListener("mousemove", mouseMoveHandler); + document.removeEventListener("mouseup", mouseUpHandler); document.addEventListener("mousemove", mouseMoveHandler); document.addEventListener("mouseup", mouseUpHandler); } element.addEventListener("mousedown", mouseDownHandler); // cornerstoneTools wheel tool listener (update sliceId) - element.addEventListener("cornerstonetoolsmousewheel", evt => { + function mouseWheelHandler(evt) { let viewer = store.get("viewer"); let enabledElement = cornerstone.getEnabledElement(element); let cix = enabledElement.toolStateManager.toolState.stack.data[0] .currentImageIdIndex; store.set(viewer, "currentSliceNumber", [evt.target.id, cix]); - }); + } + element.removeEventListener("cornerstonetoolsmousewheel", mouseWheelHandler); + element.addEventListener("cornerstonetoolsmousewheel", mouseWheelHandler); }; /** @@ -362,7 +369,7 @@

image_rendering.js

* @param {Number} thickness - The thickness value between slices * @param {String} viewport - The viewport tag name */ -export const storeViewportData = function( +export const storeViewportData = function ( image, elementId, imageIndex, diff --git a/docs/index.html b/docs/index.html index 9bf3d9748..58490f9be 100644 --- a/docs/index.html +++ b/docs/index.html @@ -67,7 +67,7 @@

Larvitar

Dicom Image Toolkit for CornestoneJS

-

Current version: 0.5.1

+

Current version: 0.5.3

This library provides common dicom functionalities to be used in web-applications. Multiplanar reformat on axial, sagittal and coronal viewports is included as well as custom loader/exporter for nrrd files and orthogonal reslice.