custom-cornerstone-tools
Version:
Medical imaging tools for the Cornerstone library - customized for DrNuvem
212 lines (175 loc) • 7.58 kB
HTML
<html>
<head>
<!-- support for mobile touch devices -->
<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1, maximum-scale=1">
<!-- twitter bootstrap CSS stylesheet - not required by cornerstoneTools -->
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet">
<link href="../cornerstone.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="page-header">
<h1>
Stack Scroll Tools Example
</h1>
<p>
This page contains an example of the stackScroll tool, the play/stopClip tools, and integration with an HTML5 "range" input.
Scroll by left click dragging or using the mouse wheel
</p>
<a href="../index.html">Go back to the Examples page</a>
</div>
<div class="row">
<div class="col-xs-2">
<ul class="list-group">
<a href="#" id="playClip" class="list-group-item">Play Clip</a>
<a href="#" id="stopClip" class="list-group-item">Stop Clip</a>
</ul>
<label>Loop</label>
<input type="checkbox" id="loop" checked />
<input type="range" id="slice-range">
</div>
<div class="col-xs-6">
<div style="width:512px;height:512px;position:relative;display:inline-block;color:white;"
oncontextmenu="return false"
class='cornerstone-enabled-image'
unselectable='on'
onselectstart='return false;'
onmousedown='return false;'>
<div id="dicomImage"
style="width:512px;height:512px;top:0px;left:0px; position:absolute;">
</div>
<div id="mrtopleft" style="position: absolute;top:3px; left:3px">
Patient Name
</div>
<div id="mrtopright" style="position: absolute;top:3px; right:3px">
Hospital
</div>
<div id="mrbottomright" style="position: absolute;bottom:6px; right:3px">
<div id="frameRate"></div>
<div id="zoomText">Zoom: </div>
<div id="sliceText">Image: </div>
</div>
<div id="mrbottomleft" style="position: absolute;bottom:3px; left:3px">
WW/WC:
</div>
</div>
</div>
</div>
</body>
<!-- jquery - included to make things easier to demo, not needed or used by the cornerstone library but
is used by our example image loader-->
<script src="../jquery.min.js"></script>
<!-- include the cornerstone library -->
<script src="../cornerstone.min.js"></script>
<script src="../cornerstoneMath.min.js"></script>
<!-- include the cornerstone tools library -->
<script src="../../dist/cornerstoneTools.js"></script>
<!-- include special code for these examples which provides images -->
<script src="../exampleImageLoader.js"></script>
<script>
var element = $('#dicomImage').get(0);
function onImageRendered(e) {
var eventData = e.detail;
var viewport = eventData.viewport;
$('#mrbottomleft').text("WW/WC: " + Math.round(viewport.voi.windowWidth) + "/" + Math.round(viewport.voi.windowCenter));
$('#zoomText').text("Zoom: " + viewport.scale.toFixed(2));
};
element.addEventListener('cornerstoneimagerendered', onImageRendered);
function onNewImage(e) {
var eventData = e.detail;
var newImageIdIndex = stack.currentImageIdIndex;
// Update the slider value
var slider = document.getElementById('slice-range');
slider.value = newImageIdIndex;
// Populate the current slice span
var currentValueSpan = document.getElementById("sliceText");
currentValueSpan.textContent = "Image " + (newImageIdIndex + 1) + "/" + imageIds.length;
// if we are currently playing a clip then update the FPS
var playClipToolData = cornerstoneTools.getToolState(element, 'playClip');
if (playClipToolData !== undefined && !$.isEmptyObject(playClipToolData.data)) {
$("#frameRate").text("FPS: " + Math.round(eventData.frameRate));
} else {
if ($("#frameRate").text().length > 0) {
$("#frameRate").text("");
}
}
}
element.addEventListener('cornerstonenewimage', onNewImage);
var loopCheckbox = $("#loop");
loopCheckbox.on('change', function() {
var playClipToolData = cornerstoneTools.getToolState(element, 'playClip');
playClipToolData.data[0].loop = loopCheckbox.is(":checked");
})
var imageIds = [
'example://1',
'example://2',
'example://3'
];
var stack = {
currentImageIdIndex : 0,
imageIds: imageIds
};
// Initialize range input
var range, max, slice, currentValueSpan;
range = document.getElementById('slice-range');
// Set minimum and maximum value
range.min = 0;
range.step = 1;
range.max = imageIds.length - 1;
// Set current value
range.value = stack.currentImageIdIndex;
function selectImage(event){
var targetElement = document.getElementById("dicomImage");
// Get the range input value
var newImageIdIndex = parseInt(event.currentTarget.value, 10);
// Get the stack data
var stackToolDataSource = cornerstoneTools.getToolState(targetElement, 'stack');
if (stackToolDataSource === undefined) {
return;
}
var stackData = stackToolDataSource.data[0];
// Switch images, if necessary
if(newImageIdIndex !== stackData.currentImageIdIndex && stackData.imageIds[newImageIdIndex] !== undefined) {
cornerstone.loadAndCacheImage(stackData.imageIds[newImageIdIndex]).then(function(image) {
var viewport = cornerstone.getViewport(targetElement);
stackData.currentImageIdIndex = newImageIdIndex;
cornerstone.displayImage(targetElement, image, viewport);
});
}
}
// Bind the range slider events
$("#slice-range").on("input", selectImage);
// Enable the dicomImage element and the mouse inputs
cornerstone.enable(element);
cornerstoneTools.mouseInput.enable(element);
cornerstoneTools.mouseWheelInput.enable(element);
cornerstone.loadImage(imageIds[0]).then(function(image) {
// Display the image
cornerstone.displayImage(element, image);
// Set the stack as tool state
cornerstoneTools.addStackStateManager(element, ['stack', 'playClip']);
cornerstoneTools.addToolState(element, 'stack', stack);
// Enable all tools we want to use with this element
cornerstoneTools.stackScroll.activate(element, 1);
cornerstoneTools.stackScrollWheel.activate(element);
cornerstoneTools.scrollIndicator.enable(element);
function activate(id)
{
$('a').removeClass('active');
$(id).addClass('active');
}
$('#playClip').click(function() {
activate("#playClip");
cornerstoneTools.playClip(element, 31);
return false;
});
$('#stopClip').click(function() {
activate("#stopClip");
cornerstoneTools.stopClip(element);
$("#frameRate").text("");
return false;
});
});
</script>
</html>