- Rename lesion tool as bidirectional tool

- Remove measurementType property and use toolType property in the parts that uses measurementType
- Add toolType in syncMeasurementAndToolData method
- Hide Convert to Non-Target option in lesionLocationDialog for CRUNEX tools
This commit is contained in:
Aysel Afsar 2016-03-04 19:03:16 -05:00
parent 0b6776f777
commit b51628cc9f
16 changed files with 60 additions and 45 deletions

View File

@ -1,7 +1,7 @@
Meteor.startup(function() { Meteor.startup(function() {
toolManager.addTool('lesion', { toolManager.addTool('bidirectional', {
mouse: cornerstoneTools.lesion, mouse: cornerstoneTools.bidirectional,
touch: cornerstoneTools.lesionTouch touch: cornerstoneTools.bidirectionalTouch
}); });
toolManager.addTool('nonTarget', { toolManager.addTool('nonTarget', {
@ -36,7 +36,7 @@ Meteor.startup(function() {
var states = toolManager.getToolDefaultStates(); var states = toolManager.getToolDefaultStates();
states.deactivate.push('lesion'); states.deactivate.push('bidirectional');
states.deactivate.push('nonTarget'); states.deactivate.push('nonTarget');
states.deactivate.push('length'); states.deactivate.push('length');
states.deactivate.push('crTool'); states.deactivate.push('crTool');

View File

@ -41,9 +41,9 @@ Template.viewer.onCreated(function() {
}, },
toggleLesionTrackerTools: toggleLesionTrackerTools, toggleLesionTrackerTools: toggleLesionTrackerTools,
clearTools: clearTools, clearTools: clearTools,
lesion: function() { bidirectional: function() {
// Used for hotkeys // Used for hotkeys
toolManager.setActiveTool('lesion'); toolManager.setActiveTool('bidirectional');
}, },
nonTarget: function() { nonTarget: function() {
// Used for hotkeys // Used for hotkeys
@ -54,7 +54,7 @@ Template.viewer.onCreated(function() {
// The hotkey can also be an array (e.g. ["NUMPAD0", "0"]) // The hotkey can also be an array (e.g. ["NUMPAD0", "0"])
OHIF.viewer.defaultHotkeys = OHIF.viewer.defaultHotkeys || {}; OHIF.viewer.defaultHotkeys = OHIF.viewer.defaultHotkeys || {};
OHIF.viewer.defaultHotkeys.toggleLesionTrackerTools = 'O'; OHIF.viewer.defaultHotkeys.toggleLesionTrackerTools = 'O';
OHIF.viewer.defaultHotkeys.lesion = 'T'; // Target OHIF.viewer.defaultHotkeys.bidirectional = 'T'; // Target
OHIF.viewer.defaultHotkeys.nonTarget = 'N'; // Non-target OHIF.viewer.defaultHotkeys.nonTarget = 'N'; // Non-target
if (isTouchDevice()) { if (isTouchDevice()) {

View File

@ -56,7 +56,7 @@ Template.viewerMain.helpers({
}); });
buttonData.push({ buttonData.push({
id: 'lesion', id: 'bidirectional',
title: 'Target Tool', title: 'Target Tool',
classes: 'imageViewerTool', classes: 'imageViewerTool',
iconClasses: 'fa fa-arrows-alt' iconClasses: 'fa fa-arrows-alt'

View File

@ -2,7 +2,7 @@
'use strict'; 'use strict';
var toolType = 'lesion'; var toolType = 'bidirectional';
var configuration = { var configuration = {
setLesionNumberCallback: setLesionNumberCallback, setLesionNumberCallback: setLesionNumberCallback,
@ -100,8 +100,7 @@
shortestDiameter: 0, shortestDiameter: 0,
isDeleted: false, isDeleted: false,
isTarget: true, isTarget: true,
measurementType: 'bidirectional', toolType: 'bidirectional'
toolType: 'lesion'
}; };
return measurementData; return measurementData;
} }
@ -127,7 +126,7 @@
}; };
// Set lesion number and lesion name // Set lesion number and lesion name
var config = cornerstoneTools.lesion.getConfiguration(); var config = cornerstoneTools.bidirectional.getConfiguration();
if (measurementData.lesionNumber === undefined) { if (measurementData.lesionNumber === undefined) {
config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback); config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback);
} }
@ -139,7 +138,7 @@
// the end point and let the moveHandle move it for us. // the end point and let the moveHandle move it for us.
$(element).off('CornerstoneToolsMouseMove', mouseMoveCallback); $(element).off('CornerstoneToolsMouseMove', mouseMoveCallback);
$(element).off('CornerstoneToolsMouseDown', mouseDownCallback); $(element).off('CornerstoneToolsMouseDown', mouseDownCallback);
$(element).off('CornerstoneToolsMouseDownActivate', cornerstoneTools.lesion.mouseDownActivateCallback); $(element).off('CornerstoneToolsMouseDownActivate', cornerstoneTools.bidirectional.mouseDownActivateCallback);
$(element).off('CornerstoneToolsMouseDoubleClick', doubleClickCallback); $(element).off('CornerstoneToolsMouseDoubleClick', doubleClickCallback);
// Add a flag for using Esc to cancel tool placement // Add a flag for using Esc to cancel tool placement
@ -178,7 +177,7 @@
$(element).on('CornerstoneToolsMouseMove', eventData, mouseMoveCallback); $(element).on('CornerstoneToolsMouseMove', eventData, mouseMoveCallback);
$(element).on('CornerstoneToolsMouseDown', eventData, mouseDownCallback); $(element).on('CornerstoneToolsMouseDown', eventData, mouseDownCallback);
$(element).on('CornerstoneToolsMouseDownActivate', eventData, cornerstoneTools.lesion.mouseDownActivateCallback); $(element).on('CornerstoneToolsMouseDownActivate', eventData, cornerstoneTools.bidirectional.mouseDownActivateCallback);
$(element).on('CornerstoneToolsMouseDoubleClick', eventData, doubleClickCallback); $(element).on('CornerstoneToolsMouseDoubleClick', eventData, doubleClickCallback);
cornerstone.updateImage(element); cornerstone.updateImage(element);
}); });
@ -201,7 +200,7 @@
var measurementData = createNewMeasurement(touchEventData); var measurementData = createNewMeasurement(touchEventData);
// Set lesion number and lesion name // Set lesion number and lesion name
var config = cornerstoneTools.lesion.getConfiguration(); var config = cornerstoneTools.bidirectional.getConfiguration();
if (measurementData.lesionNumber === undefined) { if (measurementData.lesionNumber === undefined) {
config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback); config.setLesionNumberCallback(measurementData, mouseEventData, doneCallback);
} }
@ -211,9 +210,9 @@
// since we are dragging to another place to drop the end point, we can just activate // since we are dragging to another place to drop the end point, we can just activate
// the end point and let the moveHandle move it for us. // the end point and let the moveHandle move it for us.
$(element).off('CornerstoneToolsTouchDrag', cornerstoneTools.lesion.touchMoveHandle); $(element).off('CornerstoneToolsTouchDrag', cornerstoneTools.bidirectional.touchMoveHandle);
$(element).off('CornerstoneToolsTap', cornerstoneTools.lesion.tapCallback); $(element).off('CornerstoneToolsTap', cornerstoneTools.bidirectional.tapCallback);
$(element).off('CornerstoneToolsDragStartActive', cornerstoneTools.lesion.touchDownActivateCallback); $(element).off('CornerstoneToolsDragStartActive', cornerstoneTools.bidirectional.touchDownActivateCallback);
cornerstone.updateImage(element); cornerstone.updateImage(element);
cornerstoneTools.moveNewHandleTouch(touchEventData, toolType, measurementData, measurementData.handles.end, function() { cornerstoneTools.moveNewHandleTouch(touchEventData, toolType, measurementData, measurementData.handles.end, function() {
@ -228,9 +227,9 @@
// perpendicular line is not connected to long-line // perpendicular line is not connected to long-line
measurementData.handles.perpendicularStart.locked = false; measurementData.handles.perpendicularStart.locked = false;
$(element).on('CornerstoneToolsTouchDrag', cornerstoneTools.lesion.touchMoveHandle); $(element).on('CornerstoneToolsTouchDrag', cornerstoneTools.bidirectional.touchMoveHandle);
$(element).on('CornerstoneToolsTap', cornerstoneTools.lesion.tapCallback); $(element).on('CornerstoneToolsTap', cornerstoneTools.bidirectional.tapCallback);
$(element).on('CornerstoneToolsDragStartActive', cornerstoneTools.lesion.touchDownActivateCallback); $(element).on('CornerstoneToolsDragStartActive', cornerstoneTools.bidirectional.touchDownActivateCallback);
cornerstone.updateImage(element); cornerstone.updateImage(element);
}); });
} }
@ -963,7 +962,7 @@
var color; var color;
var element = eventData.element; var element = eventData.element;
var lineWidth = cornerstoneTools.toolStyle.getToolWidth(); var lineWidth = cornerstoneTools.toolStyle.getToolWidth();
var config = cornerstoneTools.lesion.getConfiguration(); var config = cornerstoneTools.bidirectional.getConfiguration();
for (var i = 0; i < toolData.data.length; i++) { for (var i = 0; i < toolData.data.length; i++) {
var data = toolData.data[i]; var data = toolData.data[i];
@ -1076,7 +1075,7 @@
return false; return false;
} }
var config = cornerstoneTools.lesion.getConfiguration(); var config = cornerstoneTools.bidirectional.getConfiguration();
var coords = eventData.currentPoints.canvas; var coords = eventData.currentPoints.canvas;
var toolData = cornerstoneTools.getToolState(element, toolType); var toolData = cornerstoneTools.getToolState(element, toolType);
@ -1103,7 +1102,7 @@
} }
// module exports // module exports
cornerstoneTools.lesion = cornerstoneTools.mouseButtonTool({ cornerstoneTools.bidirectional = cornerstoneTools.mouseButtonTool({
createNewMeasurement: createNewMeasurement, createNewMeasurement: createNewMeasurement,
addNewMeasurement: addNewMeasurement, addNewMeasurement: addNewMeasurement,
onImageRendered: onImageRendered, onImageRendered: onImageRendered,
@ -1114,7 +1113,7 @@
toolType: toolType toolType: toolType
}); });
cornerstoneTools.lesionTouch = cornerstoneTools.touchTool({ cornerstoneTools.bidirectionalTouch = cornerstoneTools.touchTool({
createNewMeasurement: createNewMeasurement, createNewMeasurement: createNewMeasurement,
addNewMeasurement: addNewMeasurementTouch, addNewMeasurement: addNewMeasurementTouch,
onImageRendered: onImageRendered, onImageRendered: onImageRendered,
@ -1122,6 +1121,6 @@
toolType: toolType toolType: toolType
}); });
cornerstoneTools.lesion.setConfiguration(configuration); cornerstoneTools.bidirectional.setConfiguration(configuration);
})($, cornerstone, cornerstoneMath, cornerstoneTools); })($, cornerstone, cornerstoneMath, cornerstoneTools);

View File

@ -172,7 +172,6 @@
patientId: patientId, patientId: patientId,
response: response, response: response,
isTarget: true, isTarget: true,
measurementType: 'nonTarget',
toolType: toolType toolType: toolType
}; };

View File

@ -154,7 +154,6 @@
patientId: patientId, patientId: patientId,
response: '', response: '',
isTarget: false, isTarget: false,
measurementType: 'nonTarget',
toolType: 'nonTarget' toolType: 'nonTarget'
}; };

View File

@ -115,6 +115,14 @@ changeLesionLocationCallback = function(measurementData, eventData, doneCallback
// Get the lesion location dialog // Get the lesion location dialog
var dialog = $('#lesionLocationRelabelDialog'); var dialog = $('#lesionLocationRelabelDialog');
// Show/Hide Convert To NonTarget option in lesionLocationRelabelDialog
if (measurementData.toolType === 'bidirectional') {
dialog.find("#convertToNonTarget").css("visibility", "visible");
} else {
dialog.find("#convertToNonTarget").css("visibility", "hidden");
}
Template.lesionLocationDialog.dialog = dialog; Template.lesionLocationDialog.dialog = dialog;
// Show the backdrop // Show the backdrop
@ -183,7 +191,7 @@ var config = {
changeLesionLocationCallback: changeLesionLocationCallback changeLesionLocationCallback: changeLesionLocationCallback
}; };
cornerstoneTools.lesion.setConfiguration(config); cornerstoneTools.bidirectional.setConfiguration(config);
// Set CR-Tool, UN-Tool, EX-Tool configurations // Set CR-Tool, UN-Tool, EX-Tool configurations
// Config for CR Tool // Config for CR Tool

View File

@ -18,7 +18,7 @@ Template.lesionTableTimepointCell.helpers({
var data = lesionData.timepoints[this.timepointId]; var data = lesionData.timepoints[this.timepointId];
if (lesionData.measurementType === 'bidirectional') { if (lesionData.toolType === 'bidirectional') {
if (data.shortestDiameter) { if (data.shortestDiameter) {
return data.longestDiameter + ' x ' + data.shortestDiameter; return data.longestDiameter + ' x ' + data.shortestDiameter;
} }
@ -35,7 +35,7 @@ Template.lesionTableTimepointCell.helpers({
isBidirectional: function() { isBidirectional: function() {
var lesionData = Template.parentData(1); var lesionData = Template.parentData(1);
if (lesionData.measurementType === 'bidirectional') { if (lesionData.toolType === 'bidirectional') {
return true; return true;
} }
return false return false

View File

@ -4,12 +4,16 @@ measurementValuesByType = {
'longestDiameter' 'longestDiameter'
], ],
nonTarget: ['response'], nonTarget: ['response'],
crTool: ['response'],
exTool: ['response'],
unTool: ['response'],
length: ['length'], length: ['length'],
ellipticalRoi: [ ellipticalRoi: [
'area', 'area',
'mean', 'mean',
'stdev' 'stdev'
] ]
}; };
/** /**
@ -60,14 +64,14 @@ function updateLesionData(lesionData) {
imageId: lesionData.imageId imageId: lesionData.imageId
}; };
if (!lesionData.measurementType) { if (!lesionData.toolType) {
// For debugging, might want to switch to measurement types later // For debugging, might want to switch to measurement types later
lesionData.measurementType = lesionData.isTarget ? 'bidirectional' : 'nonTarget'; lesionData.toolType = lesionData.isTarget ? 'bidirectional' : 'nonTarget';
} }
// Populate this timepoint's data with whichever values // Populate this timepoint's data with whichever values
// are stored for this Measurement type // are stored for this Measurement type
var values = measurementValuesByType[lesionData.measurementType]; var values = measurementValuesByType[lesionData.toolType];
values.forEach(function(valueName) { values.forEach(function(valueName) {
timepointData[valueName] = lesionData[valueName]; timepointData[valueName] = lesionData[valueName];
}); });
@ -81,7 +85,7 @@ function updateLesionData(lesionData) {
isTarget: lesionData.isTarget, isTarget: lesionData.isTarget,
patientId: lesionData.patientId, patientId: lesionData.patientId,
id: lesionData.id, id: lesionData.id,
measurementType: lesionData.measurementType toolType: lesionData.toolType
}; };
if (lesionData.toolType) { if (lesionData.toolType) {
measurement.toolType = lesionData.toolType; measurement.toolType = lesionData.toolType;

View File

@ -21,7 +21,7 @@ convertToNonTarget = function(measurementData) {
studyInstanceUid: measurementData.studyInstanceUid, studyInstanceUid: measurementData.studyInstanceUid,
patientId: measurementData.patientId, patientId: measurementData.patientId,
isTarget: false, isTarget: false,
measurementType: toolType toolType: toolType
}; };
if (timepoint && timepoint.timepointType === 'baseline') { if (timepoint && timepoint.timepointType === 'baseline') {

View File

@ -1,10 +1,12 @@
handleMeasurementAdded = function(e, eventData) { handleMeasurementAdded = function(e, eventData) {
var measurementData = eventData.measurementData; var measurementData = eventData.measurementData;
switch (measurementData.measurementType) { switch (measurementData.toolType) {
case 'nonTarget': case 'nonTarget':
case 'bidirectional': case 'bidirectional':
case 'lesion': case 'crTool':
case 'unTool':
case 'exTool':
log.info('CornerstoneToolsMeasurementAdded'); log.info('CornerstoneToolsMeasurementAdded');
LesionManager.updateLesionData(measurementData); LesionManager.updateLesionData(measurementData);
TrialResponseCriteria.validateDelayed(measurementData); TrialResponseCriteria.validateDelayed(measurementData);
@ -21,7 +23,7 @@ handleMeasurementAdded = function(e, eventData) {
// Add the relevant metaData to this ImageMeasurement's toolData // Add the relevant metaData to this ImageMeasurement's toolData
measurementData.clientId = ClientId; measurementData.clientId = ClientId;
measurementData.imageId = imageId; measurementData.imageId = imageId;
measurementData.measurementType = eventData.toolType; measurementData.toolType = eventData.toolType;
measurementData.patientId = study.patientId; measurementData.patientId = study.patientId;
measurementData.studyInstanceUid = study.studyInstanceUid; measurementData.studyInstanceUid = study.studyInstanceUid;
measurementData.seriesInstanceUid = series.seriesInstanceUid; measurementData.seriesInstanceUid = series.seriesInstanceUid;

View File

@ -1,9 +1,11 @@
handleMeasurementModified = function(e, eventData) { handleMeasurementModified = function(e, eventData) {
var measurementData = eventData.measurementData; var measurementData = eventData.measurementData;
switch (measurementData.measurementType) { switch (measurementData.toolType) {
case 'nonTarget': case 'nonTarget':
case 'lesion':
case 'bidirectional': case 'bidirectional':
case 'crTool':
case 'unTool':
case 'exTool':
log.info('CornerstoneToolsMeasurementModified'); log.info('CornerstoneToolsMeasurementModified');
LesionManager.updateLesionData(measurementData); LesionManager.updateLesionData(measurementData);
TrialResponseCriteria.validateDelayed(measurementData); TrialResponseCriteria.validateDelayed(measurementData);
@ -20,7 +22,7 @@ handleMeasurementModified = function(e, eventData) {
// Add the relevant metaData to this ImageMeasurement's toolData // Add the relevant metaData to this ImageMeasurement's toolData
measurementData.clientId = ClientId; measurementData.clientId = ClientId;
measurementData.imageId = imageId; measurementData.imageId = imageId;
measurementData.measurementType = eventData.toolType; measurementData.toolType = eventData.toolType;
measurementData.patientId = study.patientId; measurementData.patientId = study.patientId;
measurementData.studyInstanceUid = study.studyInstanceUid; measurementData.studyInstanceUid = study.studyInstanceUid;
measurementData.seriesInstanceUid = series.seriesInstanceUid; measurementData.seriesInstanceUid = series.seriesInstanceUid;

View File

@ -5,7 +5,7 @@ syncImageMeasurementAndToolData = function(measurement) {
var toolState = cornerstoneTools.globalImageIdSpecificToolStateManager.toolState; var toolState = cornerstoneTools.globalImageIdSpecificToolStateManager.toolState;
var imageId = measurement.imageId; var imageId = measurement.imageId;
var toolType = measurement.measurementType; var toolType = measurement.toolType;
// If no tool state exists for this imageId, create an empty object to store it // If no tool state exists for this imageId, create an empty object to store it
if (!toolState[imageId]) { if (!toolState[imageId]) {

View File

@ -56,6 +56,7 @@ function syncTimepointDataWithToolData(measurement, timepointData, imageId, tool
tool.visible = timepointData.visible; tool.visible = timepointData.visible;
tool.isDeleted = timepointData.isDeleted; tool.isDeleted = timepointData.isDeleted;
tool.handles = timepointData.handles; tool.handles = timepointData.handles;
tool.toolType = measurement.toolType;
return false; return false;
}); });
@ -82,6 +83,7 @@ function syncTimepointDataWithToolData(measurement, timepointData, imageId, tool
tool.locationUID = measurement.locationUID; tool.locationUID = measurement.locationUID;
tool.patientId = measurement.patientId; tool.patientId = measurement.patientId;
tool.id = measurement._id; tool.id = measurement._id;
tool.toolType = measurement.toolType;
// Add the measurementData into the toolData for this imageId // Add the measurementData into the toolData for this imageId
toolState[imageId][toolType].data.push(tool); toolState[imageId][toolType].data.push(tool);

View File

@ -5,7 +5,7 @@ setTimepointTools = function(timepoint) {
var fuTools = ["button#crunexTools"]; var fuTools = ["button#crunexTools"];
if ((timepoint.timepointType).toLowerCase() === "baseline") { if ((timepoint.timepointType).toLowerCase() === "baseline") {
// Set active tool as lesion tool // Set active tool as lesion tool
toolManager.setActiveTool('lesion'); toolManager.setActiveTool('bidirectional');
toolManager.addDisabledTool({tools: fuTools, status: true}); toolManager.addDisabledTool({tools: fuTools, status: true});
} else { } else {
toolManager.setActiveTool(toolManager.getDefaultTool()); toolManager.setActiveTool(toolManager.getDefaultTool());

View File

@ -31,7 +31,7 @@ Package.onUse(function(api) {
api.addFiles('client/collections/LocationResponses.js', 'client'); api.addFiles('client/collections/LocationResponses.js', 'client');
// Additional Custom Cornerstone Tools for Lesion Tracker // Additional Custom Cornerstone Tools for Lesion Tracker
api.addFiles('client/compatibility/lesionTool.js', 'client', { api.addFiles('client/compatibility/bidirectionalTool.js', 'client', {
bare: true bare: true
}); });
api.addFiles('client/compatibility/nonTargetTool.js', 'client', { api.addFiles('client/compatibility/nonTargetTool.js', 'client', {