image findings will now save and reload stack index

This commit is contained in:
Ross
2024-09-23 14:05:09 +01:00
parent edc9b29233
commit 5a9868a56d
8 changed files with 169 additions and 49 deletions
+11
View File
@@ -41,6 +41,7 @@
<ul id="uploaded-files"></ul>
<h5>Duplicates</h5>
<ul id="duplicate-files"></ul>
<ul id="duplicate-series"></ul>
<h5>Failed</h5>
<ul id="failed-files"></ul>
</div>
@@ -78,6 +79,7 @@
<script>
window.to_upload = [];
window.upload_count = 1;
window.duplicate_series = new Set()
function* chunks(arr, n) {
for (let i = 0; i < arr.length; i += n) {
@@ -149,6 +151,7 @@
item.textContent = JSON.parse(xhr.response)["duplicates"][i];
$("#duplicate-files").append(item);
}
window.duplicate_series.add(...JSON.parse(xhr.response)["duplicate_series"]);
for (let i = 0; i < JSON.parse(xhr.response)["failed"].length; i++) {
let item = document.createElement("li");
@@ -162,6 +165,14 @@
}
if (current_chunk + 1 == total_chunks) {
$("#loading").hide();
window.duplicate_series.forEach((element) => {
let item = document.createElement("a");
item.href = element;
item.textContent = element;
$("#duplicate-series").append(item, "<br/>");
});
//$("#duplicate-series").append([...window.duplicate_series].join("<br/>"));
alert("Uploading complete")
}
}
+34 -12
View File
@@ -1,3 +1,5 @@
{% load crispy_forms_tags %}
<div>{{ series.modality}}, {{ series.examination }}, {{ series.plane }}, {{ series.contrast }}</div>
<div>Description: {{series.description}}</div>
@@ -22,13 +24,7 @@
<div class="hide" id="hidden-form">
<form method="post" id="series_finding_form">
{% csrf_token %}
{{series_finding_form.management_form}}
<div>
<div>Description: {{ series_finding_form.description }}</div>
<div>Findings: {{ series_finding_form.findings }}</div>
<div>Structures: {{ series_finding_form.structures }}</div>
<div>Conditions: {{ series_finding_form.conditions }}</div>
</div>
{{series_finding_form|crispy}}
<input type="submit" value="Submit">
<button id="cancel-add-finding-button">Cancel</button>
</form>
@@ -45,14 +41,28 @@
{% for finding in series.findings.all %}
<div class="finding-box">
<button class="view-finding-button" data-annotationjson={{finding.annotation_json}}
data-viewportjson={{finding.viewport_json}} data-findingid={{finding.id}}>Click to view</button>
data-viewportjson={{finding.viewport_json}} data-findingid={{finding.id}} data-currentimageid={{finding.current_image_id_index}}>Click to view</button>
<span class="view-finding-details">
Finding(s): {% for f in finding.findings.all %}{{f.get_link}}{% endfor %}<br />
Structure(s): {% for s in finding.structures.all %}{{s.get_link}}{% endfor %}<br />
Condition(s): {% for s in finding.conditions.all %}{{s.get_link}}{% endfor %}<br />
Description: {{finding.description}}<br />
{% if request.user.is_superuser %}
<span _="on click toggle .hidden on next .extra-details">+</span>
<div class="hidden extra-details">
<h4>Annotation JSON</h4>
<pre>{{finding.annotation_json}}</pre>
<h4>Viewport JSON</h4>
<pre>{{finding.viewport_json}}</pre>
<h4>Image ID</h4>
<pre>{{finding.current_image_id_index}}</pre>
</div>
{% endif %}
</span>
<a href="{% url 'atlas:series_edit_finding' pk=series.pk finding_pk=finding.pk %}" class="edit-finding-link">Edit</a>
<a href="{% url 'atlas:delete_finding' pk=finding.pk %}" class="delete-finding-link">Delete</a>
</div>
@@ -195,6 +205,7 @@
})
$("#add-finding-button").click(() => {
$("#hidden-form").show()
dicom_element = $(".cornerstone-element").get(0);
cornerstoneTools.globalImageIdSpecificToolStateManager.clear(dicom_element);
cornerstone.reset(dicom_element);
@@ -202,7 +213,6 @@
//$("#finding-form").empty().append(
// $("#hidden-form form").clone()
//);
$("#hidden-form").show()
});
$("#cancel-add-finding-button").click((e) => {
@@ -225,7 +235,9 @@
dicom_element = $(".cornerstone-element").get(0);
annotationjson = JSON.parse(e.currentTarget.dataset.annotationjson);
viewport = JSON.parse(e.currentTarget.dataset.viewportjson);
loadAnnotationAndViewportOnElement(annotationjson, viewport, dicom_element);
current_image_id_index = e.currentTarget.dataset.currentimageid;
console.log(e.currentTarget, current_image_id_index)
loadAnnotationAndViewportOnElement(annotationjson, viewport, dicom_element, current_image_id_index);
});
@@ -249,17 +261,26 @@
{% endif %}
});
function loadAnnotationAndViewportOnElement(annotation, viewport, dicom_element) {
function loadAnnotationAndViewportOnElement(annotation, viewport, dicom_element, current_image_id_index) {
cornerstoneTools.globalImageIdSpecificToolStateManager.clear(dicom_element);
cornerstone.getEnabledElement(dicom_element).viewport = viewport
cornerstoneTools.globalImageIdSpecificToolStateManager.restoreToolState(
annotation);
console.log("annotation", annotation)
console.log("viewport", viewport)
//cornerstone.getEnabledElement(dicom_element).toolStateManager.restoreToolState(annotationjson)
cornerstone.resize(dicom_element);
current_image_id_index = parseInt(current_image_id_index);
dicomViewer.getNextAnnotationImage(dicom_element);
console.log(current_image_id_index, Number.isInteger(current_image_id_index))
if (Number.isInteger(current_image_id_index)) {
console.log("loading stack index")
dicomViewer.loadStackIndex(current_image_id_index, dicom_element);
} else {
console.log("loading next annotation image")
dicomViewer.getNextAnnotationImage(dicom_element);
}
}
@@ -276,6 +297,7 @@
description: $('#id_description').val(),
series: {{ series.pk }},
//annotation_json: JSON.stringify(c.toolStateManager.saveToolState()),
current_image_id_index: c.toolStateManager.toolState.stack.data[0].currentImageIdIndex,
annotation_json: JSON.stringify(cornerstoneTools.globalImageIdSpecificToolStateManager
.saveToolState()),
viewport_json: JSON.stringify(c.viewport),