Bringing series into viewport when measurements are selected in lesion table (work in progress)

This commit is contained in:
Evren Ozkan 2015-11-21 22:10:43 -05:00
parent 7c1a0c38c0
commit a3c0048490
3 changed files with 138 additions and 81 deletions

View File

@ -109,6 +109,16 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo
}
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
var measurementData = {
visible: true,
@ -135,7 +145,9 @@ var cornerstoneTools = (function($, cornerstone, cornerstoneMath, cornerstoneToo
drawnIndependently: true
}
},
imageId: mouseEventData.image.imageId,
imageId: imageId,
seriesInstanceUid: seriesInstanceUid,
studyInstanceUid: studyInstanceUid,
measurementText: 0,
lesionName: '',
isDeleted: false,

View File

@ -119,7 +119,7 @@
drawnIndependently: true
}
},
imageId: mouseEventData.image.imageId,
imageId: imageId,
seriesInstanceUid: seriesInstanceUid,
studyInstanceUid: studyInstanceUid,
measurementText: '',

View File

@ -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
function updateLesions(e) {
// lesionNumber of measurement = id of row
@ -19,95 +124,35 @@ function updateLesions(e) {
}
var timepoints = measurementData.timepoints;
var enabledElementsInViewport = getEnabledElementsInViewport();
$(".imageViewerViewport").each(function(index, element) {
// 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 enabledElement = cornerstone.getEnabledElement(element);
if (!enabledElement) {
return;
// Render related series
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 || timepointObject.seriesInstanceUid === "") {
continue;
}
var imageId = enabledElement.image.imageId;
var study = cornerstoneTools.metaData.get('study', imageId);
var series = cornerstoneTools.metaData.get('series', imageId);
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"
var newSeriesData = {
seriesInstanceUid: timepointObject.seriesInstanceUid,
studyInstanceUid: timepointObject.studyInstanceUid
};
// When measurement column is null, deactivate other measurements in the enabledElement
if (timepointObject.longestDiameter === "") {
eventData.type = "inactive";
}
// Rerender the viewport using data for new series
rerenderViewportWithNewSeries(element, newSeriesData);
}
// 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);
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);
});
// Activate selected measurements on the rendered series
activateMeasurementsInRelatedImages(timepoints, lesionNumber, isTarget);
}
Template.lesionTable.helpers({
'measurement': function() {
return Measurements.find();
return Measurements.find({}, {sort: {number: 1}});
},
'timepoints': function() {
return Timepoints.find();