Hi there,
Am using the following sample code snippet to figure out the right way to add the angle tool state onto an existing image, but the lifecycle of the component does not seem to end and the angle annotation is not getting rendered at all. Please can anyone point me to the right way or the right component life cycle to update the annotation. This will be a great help.
import React from 'react';
import dicomParser from 'dicom-parser';
import * as cornerstone from 'cornerstone-core';
import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader';
import cornerstoneMath from 'cornerstone-math';
import cornerstoneTools from 'cornerstone-tools';
import Hammer from 'hammerjs';
import CornerstoneViewport from 'react-cornerstone-viewport';
cornerstoneTools.external.cornerstone = cornerstone;
cornerstoneTools.external.Hammer = Hammer;
cornerstoneTools.external.cornerstoneMath = cornerstoneMath;
cornerstoneTools.init({
globalToolSyncEnabled: true
});
// Preferences
const fontFamily =
'Work Sans, Roboto, OpenSans, HelveticaNeue-Light, Helvetica Neue Light, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif';
cornerstoneTools.textStyle.setFont(16px ${fontFamily}
);
cornerstoneTools.toolStyle.setToolWidth(2);
cornerstoneTools.toolColors.setToolColor('rgb(255, 255, 0)');
cornerstoneTools.toolColors.setActiveColor('rgb(0, 255, 0)');
cornerstoneTools.store.state.touchProximity = 40;
const OverlayTool = cornerstoneTools.OverlayTool;
cornerstoneTools.addTool(OverlayTool);
cornerstoneTools.setToolEnabled("Overlay", {});
const toolStateManager = cornerstoneTools.globalImageIdSpecificToolStateManager;
// Image Loader
cornerstoneWADOImageLoader.external.cornerstone = cornerstone;
cornerstoneWADOImageLoader.external.dicomParser = dicomParser;
cornerstoneWADOImageLoader.webWorkerManager.initialize({
maxWebWorkers: navigator.hardwareConcurrency || 1,
startWebWorkersOnDemand: true,
taskConfiguration: {
decodeTask: {
initializeCodecsOnStartup: false,
usePDFJS: false,
strict: false,
},
},
});
// Debug
window.cornerstone = cornerstone;
window.cornerstoneTools = cornerstoneTools;
class ImageViewer extends React.Component{
state = {
cornerstoneElement: undefined,
loading:'initial'
};
render(){
console.log("rendering imageviewer");
console.log(this.state.cornerstoneElement);
var testAngledata = '{"angle":{"data":[{"visible":true,"handles":{"start":{"x":92.40628941112809,"y":109.38908238107877,"highlight":true,"active":false},"end":{"x":112.40628941112809,"y":99.64666043201174,"highlight":true,"active":false,"active":false},"start2":{"x":92.40628941112809,"y":109.38908238107877,"highlight":true,"active":false},"end2":{"x":112.40628941112809,"y":119.38908238107877,"highlight":true,"active":false}}}]},"length":{"data":[{"visible":true,"handles":{"start":{"x":30.63388210486889,"y":77.14351868515968,"highlight":true,"active":false},"end":{"x":57.46755322260141,"y":154.21895700205096,"highlight":true,"active":false,"active":false}}}]}}';
var testAngleDataString = JSON.stringify(testAngledata);
console.log(testAngledata);
if( this.state.loading === false)
{
const existingToolState = toolStateManager.saveToolState();
console.log("existingToolState");
console.log(existingToolState);
var element = this.state.cornerstoneElement;
var angleToolData = JSON.parse(testAngledata);
console.log(angleToolData);
cornerstoneTools.addToolState(element, 'Angle', angleToolData);
cornerstone.updateImage(element,true);
}
return(
<div style={{ display: 'flex', flexWrap: 'wrap' }}>
<CornerstoneViewport
tools={[
{
name: 'Wwwc',
mode: 'enabled',
modeOptions: { mouseButtonMask: 1 },
},
{
name: 'Angle',
mode: 'active',
modeOptions: { mouseButtonMask: 1 }
},
// Scroll
{ name: 'StackScrollMouseWheel', mode: 'active' },
]}
imageIds={[
'dicomweb://s3.amazonaws.com/lury/PTCTStudy/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.11.dcm',
'dicomweb://s3.amazonaws.com/lury/PTCTStudy/1.3.6.1.4.1.25403.52237031786.3872.20100510032220.12.dcm',
]}
onElementEnabled={elementEnabledEvt => {
const cornerstoneElement = elementEnabledEvt.detail.element;
// Save this for later
this.setState({
cornerstoneElement
});
// Wait for image to render, then invert it
cornerstoneElement.addEventListener(
'cornerstoneimagerendered',
imageRenderedEvent => {
const viewport = imageRenderedEvent.detail.viewport;
cornerstone.setViewport(cornerstoneElement, viewport);
this.setState({ loading: 'false' });
}
);
}}
style={{ minWidth: '100%', height: '512px', flex: '1' }}
/>
</div>
);
}
}
export default ImageViewer;
regards,
Sreevani