diff --git a/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js b/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js index 12a71340e..d5f542bb9 100644 --- a/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js +++ b/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js @@ -111,6 +111,7 @@ } var measurementData = createNewMeasurement(mouseEventData); + measurementData.viewport = cornerstone.getViewport(element); var eventData = { mouseButtonMask: mouseEventData.which diff --git a/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js b/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js index edd519fc6..d64e7aaf1 100644 --- a/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js +++ b/Packages/ohif-lesiontracker/client/compatibility/nonTargetTool.js @@ -59,6 +59,7 @@ import { OHIF } from 'meteor/ohif:core'; } const measurementData = createNewMeasurement(mouseEventData); + measurementData.viewport = cornerstone.getViewport(element); const eventData = { mouseButtonMask: mouseEventData.which diff --git a/Packages/ohif-measurements/both/schema/measurements.js b/Packages/ohif-measurements/both/schema/measurements.js index 8c180abf8..fc199acad 100644 --- a/Packages/ohif-measurements/both/schema/measurements.js +++ b/Packages/ohif-measurements/both/schema/measurements.js @@ -74,6 +74,81 @@ const SeriesLevelMeasurement = new SimpleSchema([ } ]); +const CornerstoneVOI = new SimpleSchema({ + windowWidth: { + type: Number, + label: 'Window Width', + decimal: true, + optional: true + }, + windowCenter: { + type: Number, + label: 'Window Center', + decimal: true, + optional: true + }, +}); + +const CornerstoneViewportTranslation = new SimpleSchema({ + x: { + type: Number, + label: 'X', + decimal: true, + optional: true + }, + y: { + type: Number, + label: 'Y', + decimal: true, + optional: true + }, +}); + +const CornerstoneViewport = new SimpleSchema({ + scale: { + type: Number, + label: 'Scale', + decimal: true, + optional: true + }, + translation: { + type: CornerstoneViewportTranslation, + label: 'Translation', + optional: true + }, + voi: { + type: CornerstoneVOI, + label: 'VOI', + optional: true + }, + invert: { + type: Boolean, + label: 'Invert', + optional: true + }, + pixelReplication: { + type: Boolean, + label: 'Pixel Replication', + optional: true + }, + hFlip: { + type: Boolean, + label: 'Horizontal Flip', + optional: true + }, + vFlip: { + type: Boolean, + label: 'Vertical Flip', + optional: true + }, + rotation: { + type: Number, + label: 'Rotation (degrees)', + decimal: true, + optional: true + } +}) + const InstanceLevelMeasurement = new SimpleSchema([ StudyLevelMeasurement, SeriesLevelMeasurement, @@ -81,6 +156,11 @@ const InstanceLevelMeasurement = new SimpleSchema([ sopInstanceUid: { type: String, label: 'SOP Instance UID' + }, + viewport: { + type: CornerstoneViewport, + label: 'Viewport Parameters', + optional: true } } ]); diff --git a/Packages/ohif-measurements/client/lib/activateMeasurements.js b/Packages/ohif-measurements/client/lib/activateMeasurements.js index d4c0f7808..4b405ae25 100644 --- a/Packages/ohif-measurements/client/lib/activateMeasurements.js +++ b/Packages/ohif-measurements/client/lib/activateMeasurements.js @@ -31,6 +31,32 @@ function activateTool(measurementData) { OHIF.measurements.activateMeasurements = (element, measurementData) => { console.log('activateMeasurements'); + // If Cornerstone Viewport information was stored while the measurement was created, + // we should re-apply this data when activating the measurement. + const viewport = cornerstone.getViewport(element); + + // TODO: Make this an option somewhere? For now we only want to apply windowWidth and + // windowCenter + const viewportPropertiesToUpdate = ['voi']; + + // Check to make sure we actually stored viewport data before trying to apply it + if (measurementData.viewport) { + + // For each property which is not undefined, update it's value from the stored + // measurement data + viewportPropertiesToUpdate.forEach(prop => { + const storedPropertyValue = measurementData.viewport[prop]; + if (storedPropertyValue === undefined) { + return; + } + + viewport[prop] = storedPropertyValue; + }); + + // Apply the updated viewport parameters to the element + cornerstone.setViewport(element, viewport); + } + // Activate the tool in the tool data activateTool(measurementData);