update dicom viewer to support load by imageid

This commit is contained in:
Ross
2024-10-07 08:58:15 +01:00
parent 9c61068026
commit ea42f7f0c7
3 changed files with 61 additions and 35 deletions
+43 -32
View File
@@ -585,13 +585,14 @@ export function loadCornerstone(main_element, db, images, annotations_to_load, l
//}); //});
} else { } else {
let url; let url;
// This doesn't seem to have any benefit // Cornerstone needs the whole url to load? (not relative)
//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(/\/\#\/?$/, '').replace("index.html", "") + "/" + data_url
//} }
url = data_url; //url = data_url;
if (url.endsWith("dcm")) { if (url.endsWith("dcm")) {
url = "wadouri:" + url; url = "wadouri:" + url;
@@ -618,7 +619,11 @@ export function loadCornerstone(main_element, db, images, annotations_to_load, l
//console.log("LOAD and cache, then", image); //console.log("LOAD and cache, then", image);
loadCornerstoneMainImage(element, image, stack, db, load_as_stack); loadCornerstoneMainImage(element, image, stack, db, load_as_stack);
checkAnonStatus(image.data)
// We can only check dicom data if it exists (e.g. not on jpegs)
if (image.data != undefined) {
checkAnonStatus(image.data)
}
let load_annotation_image = true; let load_annotation_image = true;
if (load_annotation_image) { if (load_annotation_image) {
@@ -1215,6 +1220,12 @@ export function loadStackIndex(new_index, dicom_element) {
//c = cornerstone.getEnabledElement(dicom_element) //c = cornerstone.getEnabledElement(dicom_element)
} }
export function loadImageById(imageId, dicom_element) {
cornerstone.loadImage(imageId).then(b => {
cornerstone.displayImage(dicom_element, b);
});
}
function urltoFile(url, filename, mimeType) { function urltoFile(url, filename, mimeType) {
return fetch(url) return fetch(url)
.then(function (res) { .then(function (res) {
@@ -1277,34 +1288,34 @@ export function getNextAnnotationImage(element) {
} }
function manualScrollDicom(n, dicom_element) { function manualScrollDicom(n, dicom_element) {
// There must be a better way to do this... // There must be a better way to do this...
//dicom_element = document.getElementById("dicom-image"); //dicom_element = document.getElementById("dicom-image");
let c = cornerstone.getEnabledElement(dicom_element); let c = cornerstone.getEnabledElement(dicom_element);
let max = c.toolStateManager.toolState.stack.data[0].imageIds.length; let max = c.toolStateManager.toolState.stack.data[0].imageIds.length;
if (max < 2) { if (max < 2) {
return; return;
} }
let current_index = let current_index =
c.toolStateManager.toolState.stack.data[0].currentImageIdIndex; c.toolStateManager.toolState.stack.data[0].currentImageIdIndex;
let new_index = current_index + n let new_index = current_index + n
let corrected_index = Math.min(Math.max(new_index, 0), max)
// TODO: if loop let corrected_index = Math.min(Math.max(new_index, 0), max)
//if (new_index >= max) {
// corrected_index = new_index - max;
//} else if (new_index < 0) {
// corrected_index = new_index + max;
//}
c.toolStateManager.toolState.stack.data[0].currentImageIdIndex = corrected_index; // TODO: if loop
let id = c.toolStateManager.toolState.stack.data[0].imageIds[corrected_index]; //if (new_index >= max) {
cornerstone.loadImage(id).then((b) => { // corrected_index = new_index - max;
cornerstone.displayImage(dicom_element, b); //} else if (new_index < 0) {
}); // corrected_index = new_index + max;
// c = cornerstone.getEnabledElement(dicom_element) //}
c.toolStateManager.toolState.stack.data[0].currentImageIdIndex = corrected_index;
let id = c.toolStateManager.toolState.stack.data[0].imageIds[corrected_index];
cornerstone.loadImage(id).then((b) => {
cornerstone.displayImage(dicom_element, b);
});
// c = cornerstone.getEnabledElement(dicom_element)
} }
+5 -3
View File
@@ -215,9 +215,10 @@
$("#add-finding-button").click(() => { $("#add-finding-button").click(() => {
$("#hidden-form").show() $("#hidden-form").show()
dicom_element = $(".cornerstone-element").get(0); dicom_element = $(".cornerstone-element").get(0);
cornerstoneTools.globalImageIdSpecificToolStateManager.clear(dicom_element); //cornerstoneTools.globalImageIdSpecificToolStateManager.clear(dicom_element);
cornerstone.reset(dicom_element); //cornerstone.reset(dicom_element);
cornerstone.resize(dicom_element, true); ////cornerstone.resize(dicom_element, true);
$("#add-finding-button").hide()
//$("#finding-form").empty().append( //$("#finding-form").empty().append(
// $("#hidden-form form").clone() // $("#hidden-form form").clone()
//); //);
@@ -225,6 +226,7 @@
}); });
$("#cancel-add-finding-button").click((e) => { $("#cancel-add-finding-button").click((e) => {
$("#hidden-form").hide() $("#hidden-form").hide()
$("#add-finding-button").show()
e.preventDefault(); e.preventDefault();
}); });
+13
View File
@@ -1,6 +1,9 @@
import json import json
import pprint import pprint
from typing import Any
from dal import autocomplete from dal import autocomplete
from django.db.models.base import Model as Model
from django.db.models.query import QuerySet
from django.shortcuts import render, get_object_or_404, redirect from django.shortcuts import render, get_object_or_404, redirect
from django import forms from django import forms
from django.utils import timezone from django.utils import timezone
@@ -563,12 +566,21 @@ class CaseDelete(RevisionMixin, AuthorOrCheckerRequiredMixin, DeleteView):
template_name = "confirm_delete.html" template_name = "confirm_delete.html"
# TODO fix permissions
class SeriesFindingDelete(RevisionMixin, PermissionRequiredMixin, DeleteView): class SeriesFindingDelete(RevisionMixin, PermissionRequiredMixin, DeleteView):
permission_required = "atlas.delete_seriesfinding" permission_required = "atlas.delete_seriesfinding"
model = SeriesFinding model = SeriesFinding
template_name = "confirm_delete.html" template_name = "confirm_delete.html"
# success_url = reverse_lazy("atlas:case_view") # success_url = reverse_lazy("atlas:case_view")
def get_object(self):
series_finding = super().get_object()
series = series_finding.series
if series.check_user_can_edit(self.request.user):
return series_finding
else:
raise PermissionDenied
def get_success_url(self): def get_success_url(self):
pk = self.kwargs["pk"] pk = self.kwargs["pk"]
series_id = get_object_or_404(SeriesFinding, pk=pk).series.id series_id = get_object_or_404(SeriesFinding, pk=pk).series.id
@@ -1375,6 +1387,7 @@ class SeriesImagesZipView(SeriesImagesZipViewBase, SuperuserRequiredMixin):
series_object = Series series_object = Series
# At the moment only the series owner / author can delete findings but anyone can create
def create_series_findings(request): def create_series_findings(request):
# posts = Post.objects.all() # posts = Post.objects.all()
response_data = {} response_data = {}