From 351eb6164c07ab4e99c98e3f7091a32e67e670bb Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Thu, 2 Mar 2017 20:57:54 -0300 Subject: [PATCH] Fixing PDF report measurements rendering --- .../ohif-measurements/client/lib/exportPdf.js | 135 ++++++++++-------- 1 file changed, 76 insertions(+), 59 deletions(-) diff --git a/Packages/ohif-measurements/client/lib/exportPdf.js b/Packages/ohif-measurements/client/lib/exportPdf.js index c8e22cdcb..b231e99a5 100644 --- a/Packages/ohif-measurements/client/lib/exportPdf.js +++ b/Packages/ohif-measurements/client/lib/exportPdf.js @@ -17,27 +17,76 @@ OHIF.measurements.exportPdf = (measurementApi, timepointApi) => { } }); - const $element = $('
').css({ - height: 800, - left: 0, - position: 'fixed', - top: 0, - visibility: 'hidden', - width: 800, - 'z-index': -1 - }); - const element = $element[0]; - $element.appendTo(document.body); - cornerstone.enable(element, { renderer: 'webgl' }); - const enabledElement = cornerstone.getEnabledElement(element); - enabledElement.toolStateManager = cornerstoneTools.newImageIdSpecificToolStateManager(); + const createEnabledElement = () => { + const $element = $('
').css({ + height: 512, + left: 0, + position: 'fixed', + top: 0, + visibility: 'hidden', + width: 512, + 'z-index': -1 + }); - const targets = measurementApi.fetch('targets', { timepointId }); - const nonTargets = measurementApi.fetch('nonTargets', { timepointId }); - const measurements = targets.concat(nonTargets); + const element = $element[0]; + $element.appendTo(document.body); + cornerstone.enable(element, { renderer: 'webgl' }); - const iterator = measurements[Symbol.iterator](); - const printMeasurements = callback => { + const enabledElement = cornerstone.getEnabledElement(element); + enabledElement.toolStateManager = cornerstoneTools.newImageIdSpecificToolStateManager(); + + return enabledElement; + }; + + const destroyEnabledElement = enabledElement => { + cornerstone.disable(enabledElement.element); + $(enabledElement.element).remove(); + }; + + const printMeasurement = (measurement, image, callback) => { + const enabledElement = createEnabledElement(); + const element = enabledElement.element; + const series = cornerstoneTools.metaData.get('series', measurement.imageId); + const instance = cornerstoneTools.metaData.get('instance', measurement.imageId); + let info = measurement.response; + if (!info) { + info = measurement.longestDiameter; + if (measurement.shortestDiameter) { + info += ` × ${measurement.shortestDiameter}`; + } + + info += ' mm'; + } + + info += ` (S:${series.seriesNumber}, I:${instance.instanceNumber})`; + + let type = measurementApi.toolsGroupsMap[measurement.toolType]; + type = type === 'targets' ? 'Target' : 'Non-target'; + + const state = Object.assign({}, measurement, { active: true }); + cornerstone.displayImage(element, image); + cornerstoneTools.addToolState(element, measurement.toolType, state); + cornerstoneTools[measurement.toolType].enable(element); + + $(element).one('CornerstoneImageRendered', () => { + report.printMeasurement({ + type, + number: measurement.measurementNumber, + location: OHIF.measurements.getLocationLabel(measurement.location) || '', + info, + image: enabledElement.canvas.toDataURL('image/jpeg', 0.85) + }); + + cornerstoneTools[measurement.toolType].disable(element); + cornerstoneTools.clearToolState(element, measurement.toolType); + + destroyEnabledElement(enabledElement); + + processMeasurements(callback); + }); + }; + + const processMeasurements = callback => { const current = iterator.next(); if (current.done) { callback(); @@ -45,46 +94,14 @@ OHIF.measurements.exportPdf = (measurementApi, timepointApi) => { } const measurement = current.value; - cornerstone.loadImage(measurement.imageId).then(image => { - const state = Object.assign({}, measurement, { active: true }); - cornerstoneTools.clearToolState(element, measurement.toolType); - cornerstone.displayImage(element, image); - cornerstoneTools.addToolState(element, measurement.toolType, state); - cornerstoneTools[measurement.toolType].enable(element); - - const series = cornerstoneTools.metaData.get('series', measurement.imageId); - const instance = cornerstoneTools.metaData.get('instance', measurement.imageId); - let info = measurement.response; - if (!info) { - info = measurement.longestDiameter; - if (measurement.shortestDiameter) { - info += ` × ${measurement.shortestDiameter}`; - } - - info += ' mm'; - } - - info += ` (S:${series.seriesNumber}, I:${instance.instanceNumber})`; - - let type = measurementApi.toolsGroupsMap[measurement.toolType]; - type = type === 'targets' ? 'Target' : 'Non-target'; - - $element.one('CornerstoneImageRendered', () => { - report.printMeasurement({ - type, - number: measurement.measurementNumber, - location: OHIF.measurements.getLocationLabel(measurement.location) || '', - info, - image: enabledElement.canvas.toDataURL('image/jpeg', 0.85) - }); - }); - - setTimeout(() => printMeasurements(callback)); - }); + cornerstone.loadImage(measurement.imageId) + .then(image => printMeasurement(measurement, image, callback)); }; - printMeasurements(() => { - $element.remove(); - report.save('measurements.pdf'); - }); + const targets = measurementApi.fetch('targets', { timepointId }); + const nonTargets = measurementApi.fetch('nonTargets', { timepointId }); + const measurements = targets.concat(nonTargets); + const iterator = measurements[Symbol.iterator](); + + processMeasurements(() => report.save('measurements.pdf')); };