diff --git a/Packages/lesiontracker/compatibility/lesionTool.js b/Packages/lesiontracker/compatibility/lesionTool.js index 88e16911b..6058eedfb 100644 --- a/Packages/lesiontracker/compatibility/lesionTool.js +++ b/Packages/lesiontracker/compatibility/lesionTool.js @@ -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, diff --git a/Packages/lesiontracker/compatibility/nonTargetTool.js b/Packages/lesiontracker/compatibility/nonTargetTool.js index 0732f7d0f..3bc2a75a1 100644 --- a/Packages/lesiontracker/compatibility/nonTargetTool.js +++ b/Packages/lesiontracker/compatibility/nonTargetTool.js @@ -119,7 +119,7 @@ drawnIndependently: true } }, - imageId: mouseEventData.image.imageId, + imageId: imageId, seriesInstanceUid: seriesInstanceUid, studyInstanceUid: studyInstanceUid, measurementText: '', diff --git a/Packages/lesiontracker/components/lesionTable/lesionTable.js b/Packages/lesiontracker/components/lesionTable/lesionTable.js index bdc8083bf..5f49cb33b 100644 --- a/Packages/lesiontracker/components/lesionTable/lesionTable.js +++ b/Packages/lesiontracker/components/lesionTable/lesionTable.js @@ -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();