Add legacy DICOM viewer setup and update HTML element ID for legacy images

This commit is contained in:
Ross
2025-11-10 11:43:31 +00:00
parent 65a68b6605
commit 6d03e81e77
2 changed files with 163 additions and 155 deletions
+162 -154
View File
@@ -82,6 +82,14 @@ $(document).ready(function () {
} }
} }
let dicom_images_legacy = document.getElementsByClassName("dicom-image-legacy");
if (dicom_images_legacy.length) {
for (let element of dicom_images_legacy) {
setUpDicomLegacy(element)
}
}
loadDicomViewer(); loadDicomViewer();
@@ -333,160 +341,160 @@ function loadJsonToolStateOnCurrentImage(json) {
} }
//async function setUpDicom(element) { async function setUpDicomLegacy(element) {
// console.log("setUpDicom (original)", element); console.log("setUpDicom (original)", element);
//
// $(element).bind('contextmenu', function (e) { $(element).bind('contextmenu', function (e) {
// return false; return false;
// }); });
//
// $(element).dblclick((evt) => { $(element).dblclick((evt) => {
// element.requestFullscreen(); element.requestFullscreen();
// }) })
//
// cornerstoneBase64ImageLoader.external.cornerstone = cornerstone; cornerstoneBase64ImageLoader.external.cornerstone = cornerstone;
// cornerstoneWebImageLoader.external.cornerstone = cornerstone; cornerstoneWebImageLoader.external.cornerstone = cornerstone;
// cornerstoneWADOImageLoader.external.cornerstone = cornerstone; cornerstoneWADOImageLoader.external.cornerstone = cornerstone;
//
// cornerstoneTools.init(); cornerstoneTools.init();
// const PanTool = cornerstoneTools.PanTool; const PanTool = cornerstoneTools.PanTool;
// const ZoomTool = cornerstoneTools.ZoomTool; const ZoomTool = cornerstoneTools.ZoomTool;
// const ZoomMouseWheelTool = cornerstoneTools.ZoomMouseWheelTool; const ZoomMouseWheelTool = cornerstoneTools.ZoomMouseWheelTool;
// const WwwcTool = cornerstoneTools.WwwcTool; const WwwcTool = cornerstoneTools.WwwcTool;
// const WwwcRegionTool = cornerstoneTools.WwwcRegionTool; const WwwcRegionTool = cornerstoneTools.WwwcRegionTool;
// const RotateTool = cornerstoneTools.RotateTool; const RotateTool = cornerstoneTools.RotateTool;
// const StackScrollTool = cornerstoneTools.StackScrollTool; const StackScrollTool = cornerstoneTools.StackScrollTool;
// const MagnifyTool = cornerstoneTools.MagnifyTool; const MagnifyTool = cornerstoneTools.MagnifyTool;
// const ArrowAnnotateTool = cornerstoneTools.ArrowAnnotateTool; const ArrowAnnotateTool = cornerstoneTools.ArrowAnnotateTool;
//
//
// const images = element.dataset.url.split(","); const images = element.dataset.url.split(",");
//
// //console.log("Dicom - load imageId: ", imageIds); //console.log("Dicom - load imageId: ", imageIds);
// //for (let index = 0; index < imageIds.length; index++) { //for (let index = 0; index < imageIds.length; index++) {
// // if (imageIds[index].endsWith("dcm")) { // if (imageIds[index].endsWith("dcm")) {
// // imageIds[index] = "wadouri:" + imageIds[index]; // imageIds[index] = "wadouri:" + imageIds[index];
// // } // }
//
// //} //}
// let imageIds = []; let imageIds = [];
// for (let i = 0; i < images.length; i++) { for (let i = 0; i < images.length; i++) {
// let data_url = images[i]; let data_url = images[i];
// // check stack type // check stack type
// if (data_url.startsWith("data:image")) { if (data_url.startsWith("data:image")) {
// let imageId = "base64://" + data_url.split(",")[1]; let imageId = "base64://" + data_url.split(",")[1];
//
// imageIds.push(imageId); imageIds.push(imageId);
// } else if (data_url.startsWith("base64://") || data_url.startsWith("wadouri:")) { } else if (data_url.startsWith("base64://") || data_url.startsWith("wadouri:")) {
//
// imageIds.push(data_url); imageIds.push(data_url);
//
// // Treat application/octet-stream as if they are dicoms // Treat application/octet-stream as if they are dicoms
// } else if (data_url.startsWith("data:application/dicom") || data_url.startsWith("data:application/octet-stream")) { } else if (data_url.startsWith("data:application/dicom") || data_url.startsWith("data:application/octet-stream")) {
// //stack = stack.split(";")[1]; //stack = stack.split(";")[1];
//
// let dfile = await urltoFile(data_url, "dicom", "application/dicom"); let dfile = await urltoFile(data_url, "dicom", "application/dicom");
//
// const imageId = cornerstoneWADOImageLoader.wadouri.fileManager.add( const imageId = cornerstoneWADOImageLoader.wadouri.fileManager.add(
// dfile dfile
// ); );
//
// loadAnnotation(imageId, annotation); loadAnnotation(imageId, annotation);
//
// imageIds.push(imageId); imageIds.push(imageId);
// //cornerstone.loadImage(imageId).then(function(image) { //cornerstone.loadImage(imageId).then(function(image) {
// // tempFunction(image); // tempFunction(image);
// //}); //});
// } else { } else {
// let url; let url;
// // This doesn't seem to have any benefit // This doesn't seem to have any benefit
// //if (data_url.startsWith("http")) { //if (data_url.startsWith("http")) {
// // url = data_url; // url = data_url;
// //} else { //} else {
// // url = window.location.href.replace(/\/\#\/?$/, '') + "/" + data_url // url = window.location.href.replace(/\/\#\/?$/, '') + "/" + data_url
// //} //}
// url = data_url; url = data_url;
//
// if (url.endsWith("dcm")) { if (url.endsWith("dcm")) {
// url = "wadouri:" + url; url = "wadouri:" + url;
// } }
//
// // if there is no extension treat it as a dicom // if there is no extension treat it as a dicom
// if (/(?:\/|^)[^.\/]+$/.test(url)) { if (/(?:\/|^)[^.\/]+$/.test(url)) {
// url = "wadouri:" + url; url = "wadouri:" + url;
// } }
//
// imageIds.push(url); imageIds.push(url);
//
//
// } }
// } }
//
// cornerstone.enable(element); cornerstone.enable(element);
// cornerstone.loadAndCacheImage(imageIds[0]).then(function (image) { cornerstone.loadAndCacheImage(imageIds[0]).then(function (image) {
// cornerstone.displayImage(element, image); cornerstone.displayImage(element, image);
//
// cornerstoneTools.addToolForElement(element, PanTool); cornerstoneTools.addToolForElement(element, PanTool);
// cornerstoneTools.addToolForElement(element, ZoomTool); cornerstoneTools.addToolForElement(element, ZoomTool);
// cornerstoneTools.addToolForElement(element, ZoomMouseWheelTool); cornerstoneTools.addToolForElement(element, ZoomMouseWheelTool);
// cornerstoneTools.addToolForElement(element, WwwcTool); cornerstoneTools.addToolForElement(element, WwwcTool);
// cornerstoneTools.addToolForElement(element, WwwcRegionTool); cornerstoneTools.addToolForElement(element, WwwcRegionTool);
// cornerstoneTools.addToolForElement(element, RotateTool); cornerstoneTools.addToolForElement(element, RotateTool);
// cornerstoneTools.addToolForElement(element, StackScrollTool); cornerstoneTools.addToolForElement(element, StackScrollTool);
// cornerstoneTools.addToolForElement(element, MagnifyTool); cornerstoneTools.addToolForElement(element, MagnifyTool);
//
// cornerstoneTools.addToolForElement(element, ArrowAnnotateTool, { cornerstoneTools.addToolForElement(element, ArrowAnnotateTool, {
// configuration: { configuration: {
// getTextCallback: () => {}, getTextCallback: () => {},
// changeTextCallback: () => {}, changeTextCallback: () => {},
// allowEmptyLabel: true, allowEmptyLabel: true,
// renderDashed: false, renderDashed: false,
// drawHandles: false, drawHandles: false,
// drawHandlesOnHover: true, drawHandlesOnHover: true,
// }, },
// }); });
//
//
//
// // Enable our tools // Enable our tools
// // Avoid incorrect aspect ratio // Avoid incorrect aspect ratio
// cornerstoneTools.setToolActiveForElement(element, "Pan", { cornerstoneTools.setToolActiveForElement(element, "Pan", {
// mouseButtonMask: 1 mouseButtonMask: 1
// }); });
// cornerstoneTools.setToolActiveForElement(element, "Wwwc", { cornerstoneTools.setToolActiveForElement(element, "Wwwc", {
// mouseButtonMask: 2 mouseButtonMask: 2
// }); });
// cornerstoneTools.setToolActiveForElement(element, "ZoomMouseWheel", { cornerstoneTools.setToolActiveForElement(element, "ZoomMouseWheel", {
// mouseButtonMask: 3 mouseButtonMask: 3
// }); });
// cornerstoneTools.setToolActiveForElement(element, "Zoom", { cornerstoneTools.setToolActiveForElement(element, "Zoom", {
// mouseButtonMask: 4 mouseButtonMask: 4
// }); });
//
// if (element.dataset.edit_annotation == "true") { if (element.dataset.edit_annotation == "true") {
// cornerstoneTools.setToolActiveForElement(element, "ArrowAnnotate", { cornerstoneTools.setToolActiveForElement(element, "ArrowAnnotate", {
// mouseButtonMask: 2 mouseButtonMask: 2
// }); });
// } else { } else {
// cornerstoneTools.setToolEnabledForElement(element, "ArrowAnnotate"); cornerstoneTools.setToolEnabledForElement(element, "ArrowAnnotate");
// } }
//
// if (element.dataset.annotations) { if (element.dataset.annotations) {
// loadJsonToolStateOnCurrentImage(element.dataset.annotations) loadJsonToolStateOnCurrentImage(element.dataset.annotations)
// } }
//
// cornerstone.resize(element); cornerstone.resize(element);
//
//
// }).catch((err, err2) => { }).catch((err, err2) => {
// console.log(err); console.log(err);
// }); });
//
//} }
//console.log("setUpDicom defined"); console.log("setUpDicom defined");
//
//// keep reference to the existing 2D setup // keep reference to the existing 2D setup
//window.setUpDicomClassic = setUpDicom; window.setUpDicomLegacy = setUpDicomLegacy;
async function setUpDicom3d(element) { async function setUpDicom3d(element) {
console.log("setUpDicom3d (cornerstone3d) for", element); console.log("setUpDicom3d (cornerstone3d) for", element);
@@ -3,7 +3,7 @@
{% block content %} {% block content %}
{% load static %} {% load static %}
{% include 'anatomy/question_link_header.html' %} {% include 'anatomy/question_link_header.html' %}
<div id="single-dicom-viewer" class="" data-url="{{ remote_url }}{{ question.image.url}}" <div id="dicom-image" class="dicom-image-legacy" data-url="{{ remote_url }}{{ question.image.url}}"
data-annotations='{{question.image_annotations}}' data-edit_annotation=true> data-annotations='{{question.image_annotations}}' data-edit_annotation=true>
<details class="help-text"> <details class="help-text">
<summary><i class="bi bi-info-circle"></i> Help</summary> <summary><i class="bi bi-info-circle"></i> Help</summary>