Bringing series into viewport when measurements are selected in lesion table (work in progress)
This commit is contained in:
parent
7c1a0c38c0
commit
a3c0048490
@ -109,6 +109,16 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo
|
|||||||
}
|
}
|
||||||
|
|
||||||
function createNewMeasurement(mouseEventData) {
|
function createNewMeasurement(mouseEventData) {
|
||||||
|
var imageId = mouseEventData.image.imageId;
|
||||||
|
|
||||||
|
// Get studyInstanceUid
|
||||||
|
var study = cornerstoneTools.metaData.get('study', imageId);
|
||||||
|
var studyInstanceUid = study.studyInstanceUid;
|
||||||
|
|
||||||
|
// Get seriesInstanceUid
|
||||||
|
var series = cornerstoneTools.metaData.get('series', imageId);
|
||||||
|
var seriesInstanceUid = series.seriesInstanceUid;
|
||||||
|
|
||||||
// Create the measurement data for this tool with the end handle activated
|
// Create the measurement data for this tool with the end handle activated
|
||||||
var measurementData = {
|
var measurementData = {
|
||||||
visible: true,
|
visible: true,
|
||||||
@ -135,7 +145,9 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo
|
|||||||
drawnIndependently: true
|
drawnIndependently: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
imageId: mouseEventData.image.imageId,
|
imageId: imageId,
|
||||||
|
seriesInstanceUid: seriesInstanceUid,
|
||||||
|
studyInstanceUid: studyInstanceUid,
|
||||||
measurementText: 0,
|
measurementText: 0,
|
||||||
lesionName: '',
|
lesionName: '',
|
||||||
isDeleted: false,
|
isDeleted: false,
|
||||||
|
|||||||
@ -119,7 +119,7 @@
|
|||||||
drawnIndependently: true
|
drawnIndependently: true
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
imageId: mouseEventData.image.imageId,
|
imageId: imageId,
|
||||||
seriesInstanceUid: seriesInstanceUid,
|
seriesInstanceUid: seriesInstanceUid,
|
||||||
studyInstanceUid: studyInstanceUid,
|
studyInstanceUid: studyInstanceUid,
|
||||||
measurementText: '',
|
measurementText: '',
|
||||||
|
|||||||
@ -1,3 +1,108 @@
|
|||||||
|
// Get enabled elements in viewport
|
||||||
|
// Returns enabled elements with associated elements as object array
|
||||||
|
function getEnabledElementsInViewport() {
|
||||||
|
var enabledElementsInViewport = [];
|
||||||
|
|
||||||
|
$(".imageViewerViewport").each(function(index, element) {
|
||||||
|
var enabledElement = cornerstone.getEnabledElement(element);
|
||||||
|
if (!enabledElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
enabledElementsInViewport.push({element: element, enabledElement: enabledElement});
|
||||||
|
});
|
||||||
|
|
||||||
|
return enabledElementsInViewport;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Switch to the image of the correct image index
|
||||||
|
// Activate the selected measurement on the switched image (color to be green)
|
||||||
|
// Deactivate all other measurements on the switched image (color to be white)
|
||||||
|
function activateMeasurementsInRelatedImages(timepoints, lesionNumber, isTarget) {
|
||||||
|
|
||||||
|
//TODO: This is a bad hack! We need to listen an event of the element and handle it when rendering of the element is completed
|
||||||
|
//TODO: we can switch to the related image and activate the selected measurement on the switched image.
|
||||||
|
var intervalListener = setInterval(function() {
|
||||||
|
window.clearInterval(intervalListener);
|
||||||
|
|
||||||
|
var enabledElementsInViewport = getEnabledElementsInViewport();
|
||||||
|
|
||||||
|
for(var i = 0; i < enabledElementsInViewport.length; i++) {
|
||||||
|
var element = enabledElementsInViewport[i].element;
|
||||||
|
var enabledElement = enabledElementsInViewport[i].enabledElement;
|
||||||
|
var timepointObject = getTimepointObject(timepoints, enabledElement);
|
||||||
|
|
||||||
|
if (timepointObject === undefined) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Defines event data
|
||||||
|
var eventData = {
|
||||||
|
enabledElement: enabledElement,
|
||||||
|
lesionData: {
|
||||||
|
isTarget: isTarget,
|
||||||
|
lesionNumber: lesionNumber,
|
||||||
|
imageId: timepointObject.imageId,
|
||||||
|
seriesInstanceUid: timepointObject.seriesInstanceUid,
|
||||||
|
studyInstanceUid: timepointObject.studyInstanceUid
|
||||||
|
},
|
||||||
|
type: "active"
|
||||||
|
};
|
||||||
|
|
||||||
|
// If isTarget = false, this measurement is nonTarget measurement
|
||||||
|
// Activate related nonTarget measurement
|
||||||
|
// Deactivate all target measurements to activate only nonTarget measurement
|
||||||
|
if (!isTarget) {
|
||||||
|
$(element).trigger("NonTargetToolSelected", eventData);
|
||||||
|
|
||||||
|
// Deactivate lesion tool measurements
|
||||||
|
eventData.type = "inactive";
|
||||||
|
|
||||||
|
$(element).trigger("LesionToolSelected", eventData);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// Trigger event for target measurements
|
||||||
|
$(element).trigger("LesionToolSelected", eventData);
|
||||||
|
|
||||||
|
// Deactivate nonTarget tool measurements
|
||||||
|
eventData.type = "inactive";
|
||||||
|
|
||||||
|
// Triggger event for nonTarget measurements
|
||||||
|
// Inactivate all nonTarget measurements if any measurement is active
|
||||||
|
$(element).trigger("NonTargetToolSelected", eventData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns timepoint object based on timepoint id of the enabled element
|
||||||
|
function getTimepointObject(timepoints, enabledElement) {
|
||||||
|
var imageId = enabledElement.image.imageId;
|
||||||
|
var study = cornerstoneTools.metaData.get('study', imageId);
|
||||||
|
var series = cornerstoneTools.metaData.get('series', imageId);
|
||||||
|
|
||||||
|
// Get the timepointID related to the image viewer viewport
|
||||||
|
// from the DOM itself. This will be changed later when a
|
||||||
|
// real association between viewports and timepoints is created.
|
||||||
|
var timepoint = Timepoints.findOne({timepointName: study.studyDate});
|
||||||
|
if (!timepoint) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
var timepointID = timepoint.timepointID;
|
||||||
|
|
||||||
|
var timepointObject = timepoints[timepointID];
|
||||||
|
|
||||||
|
if (timepointObject === undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!timepointObject ) {
|
||||||
|
timepointObject = {}
|
||||||
|
}
|
||||||
|
|
||||||
|
return timepointObject;
|
||||||
|
}
|
||||||
|
|
||||||
// Activate selected lesions when lesion table row is clicked
|
// Activate selected lesions when lesion table row is clicked
|
||||||
function updateLesions(e) {
|
function updateLesions(e) {
|
||||||
// lesionNumber of measurement = id of row
|
// lesionNumber of measurement = id of row
|
||||||
@ -19,95 +124,35 @@ function updateLesions(e) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var timepoints = measurementData.timepoints;
|
var timepoints = measurementData.timepoints;
|
||||||
|
var enabledElementsInViewport = getEnabledElementsInViewport();
|
||||||
|
|
||||||
$(".imageViewerViewport").each(function(index, element) {
|
// Render related series
|
||||||
// Get the timepointID related to the image viewer viewport
|
for(var i = 0; i < enabledElementsInViewport.length; i++) {
|
||||||
// from the DOM itself. This will be changed later when a
|
var element = enabledElementsInViewport[i].element;
|
||||||
// real association between viewports and timepoints is created.
|
var enabledElement = enabledElementsInViewport[i].enabledElement;
|
||||||
var enabledElement = cornerstone.getEnabledElement(element);
|
|
||||||
if (!enabledElement) {
|
var timepointObject = getTimepointObject(timepoints, enabledElement);
|
||||||
return;
|
|
||||||
|
if (timepointObject === undefined || timepointObject.seriesInstanceUid === "") {
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var imageId = enabledElement.image.imageId;
|
var newSeriesData = {
|
||||||
var study = cornerstoneTools.metaData.get('study', imageId);
|
seriesInstanceUid: timepointObject.seriesInstanceUid,
|
||||||
var series = cornerstoneTools.metaData.get('series', imageId);
|
studyInstanceUid: timepointObject.studyInstanceUid
|
||||||
|
|
||||||
var timepoint = Timepoints.findOne({timepointName: study.studyDate});
|
|
||||||
if (!timepoint) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var timepointID = timepoint.timepointID;
|
|
||||||
|
|
||||||
var timepointObject = timepoints[timepointID];
|
|
||||||
|
|
||||||
if (timepointObject === undefined) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!timepointObject ) {
|
|
||||||
timepointObject = {}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timepointObject.seriesInstanceUid !== "") {
|
|
||||||
|
|
||||||
var newSeriesData = {
|
|
||||||
seriesInstanceUid: timepointObject.seriesInstanceUid,
|
|
||||||
studyInstanceUid: timepointObject.studyInstanceUid
|
|
||||||
};
|
|
||||||
|
|
||||||
// Rerender the viewport using the drag and drop data
|
|
||||||
rerenderViewportWithNewSeries(element, newSeriesData);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Defines event data
|
|
||||||
console.log(element);
|
|
||||||
console.log(cornerstone.getEnabledElement(element));
|
|
||||||
var eventData = {
|
|
||||||
enabledElement: cornerstone.getEnabledElement(element),
|
|
||||||
lesionData: {
|
|
||||||
isTarget: isTarget,
|
|
||||||
lesionNumber: lesionNumber,
|
|
||||||
imageId: timepointObject.imageId,
|
|
||||||
seriesInstanceUid: timepointObject.seriesInstanceUid,
|
|
||||||
studyInstanceUid: timepointObject.studyInstanceUid
|
|
||||||
},
|
|
||||||
type: "active"
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// When measurement column is null, deactivate other measurements in the enabledElement
|
// Rerender the viewport using data for new series
|
||||||
if (timepointObject.longestDiameter === "") {
|
rerenderViewportWithNewSeries(element, newSeriesData);
|
||||||
eventData.type = "inactive";
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// If isTarget = false, this measurement is nonTarget measurement
|
// Activate selected measurements on the rendered series
|
||||||
// Activate related nonTarget measurement
|
activateMeasurementsInRelatedImages(timepoints, lesionNumber, isTarget);
|
||||||
// Deactivate all target measurements to activate only nonTarget measurement
|
|
||||||
if (!isTarget) {
|
|
||||||
$(element).trigger("NonTargetToolSelected", eventData);
|
|
||||||
|
|
||||||
// Deactivate lesion tool measurements
|
|
||||||
eventData.type = "inactive";
|
|
||||||
$(element).trigger("LesionToolSelected", eventData);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Trigger event for target measurements
|
|
||||||
$(element).trigger("LesionToolSelected", eventData);
|
|
||||||
|
|
||||||
// Deactivate nonTarget tool measurements
|
|
||||||
eventData.type = "inactive";
|
|
||||||
|
|
||||||
// Triggger event for nonTarget measurements
|
|
||||||
// Inactivate all nonTarget measurements if any measurement is active
|
|
||||||
$(element).trigger("NonTargetToolSelected", eventData);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Template.lesionTable.helpers({
|
Template.lesionTable.helpers({
|
||||||
'measurement': function() {
|
'measurement': function() {
|
||||||
return Measurements.find();
|
return Measurements.find({}, {sort: {number: 1}});
|
||||||
},
|
},
|
||||||
'timepoints': function() {
|
'timepoints': function() {
|
||||||
return Timepoints.find();
|
return Timepoints.find();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user