Fixing PDF report measurements rendering

This commit is contained in:
Bruno Alves de Faria 2017-03-02 20:57:54 -03:00
parent f91fc1c897
commit 351eb6164c

View File

@ -17,41 +17,35 @@ OHIF.measurements.exportPdf = (measurementApi, timepointApi) => {
} }
}); });
const createEnabledElement = () => {
const $element = $('<div></div>').css({ const $element = $('<div></div>').css({
height: 800, height: 512,
left: 0, left: 0,
position: 'fixed', position: 'fixed',
top: 0, top: 0,
visibility: 'hidden', visibility: 'hidden',
width: 800, width: 512,
'z-index': -1 'z-index': -1
}); });
const element = $element[0]; const element = $element[0];
$element.appendTo(document.body); $element.appendTo(document.body);
cornerstone.enable(element, { renderer: 'webgl' }); cornerstone.enable(element, { renderer: 'webgl' });
const enabledElement = cornerstone.getEnabledElement(element); const enabledElement = cornerstone.getEnabledElement(element);
enabledElement.toolStateManager = cornerstoneTools.newImageIdSpecificToolStateManager(); enabledElement.toolStateManager = cornerstoneTools.newImageIdSpecificToolStateManager();
const targets = measurementApi.fetch('targets', { timepointId }); return enabledElement;
const nonTargets = measurementApi.fetch('nonTargets', { timepointId }); };
const measurements = targets.concat(nonTargets);
const iterator = measurements[Symbol.iterator](); const destroyEnabledElement = enabledElement => {
const printMeasurements = callback => { cornerstone.disable(enabledElement.element);
const current = iterator.next(); $(enabledElement.element).remove();
if (current.done) { };
callback();
return;
}
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 printMeasurement = (measurement, image, callback) => {
const enabledElement = createEnabledElement();
const element = enabledElement.element;
const series = cornerstoneTools.metaData.get('series', measurement.imageId); const series = cornerstoneTools.metaData.get('series', measurement.imageId);
const instance = cornerstoneTools.metaData.get('instance', measurement.imageId); const instance = cornerstoneTools.metaData.get('instance', measurement.imageId);
let info = measurement.response; let info = measurement.response;
@ -69,7 +63,12 @@ OHIF.measurements.exportPdf = (measurementApi, timepointApi) => {
let type = measurementApi.toolsGroupsMap[measurement.toolType]; let type = measurementApi.toolsGroupsMap[measurement.toolType];
type = type === 'targets' ? 'Target' : 'Non-target'; type = type === 'targets' ? 'Target' : 'Non-target';
$element.one('CornerstoneImageRendered', () => { 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({ report.printMeasurement({
type, type,
number: measurement.measurementNumber, number: measurement.measurementNumber,
@ -77,14 +76,32 @@ OHIF.measurements.exportPdf = (measurementApi, timepointApi) => {
info, info,
image: enabledElement.canvas.toDataURL('image/jpeg', 0.85) image: enabledElement.canvas.toDataURL('image/jpeg', 0.85)
}); });
});
setTimeout(() => printMeasurements(callback)); cornerstoneTools[measurement.toolType].disable(element);
cornerstoneTools.clearToolState(element, measurement.toolType);
destroyEnabledElement(enabledElement);
processMeasurements(callback);
}); });
}; };
printMeasurements(() => { const processMeasurements = callback => {
$element.remove(); const current = iterator.next();
report.save('measurements.pdf'); if (current.done) {
}); callback();
return;
}
const measurement = current.value;
cornerstone.loadImage(measurement.imageId)
.then(image => printMeasurement(measurement, image, callback));
};
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'));
}; };