From 83497795ca2ab096debf8d058450169faaabd376 Mon Sep 17 00:00:00 2001 From: "James A. Petts" Date: Fri, 5 Jun 2020 17:59:07 +0100 Subject: [PATCH] Finish render tool other than rotated ellipse and clean up. --- .../dicom-sr/src/getSopClassHandlerModule.js | 17 +++++++++++++++++ .../dicom-sr/src/tools/DICOMSRDisplayTool.js | 17 +++++++++++------ .../dicom-sr/src/utils/addMeasurement.js | 18 +++++++++++------- 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/extensions/dicom-sr/src/getSopClassHandlerModule.js b/extensions/dicom-sr/src/getSopClassHandlerModule.js index c8ff65d73..79e27edac 100644 --- a/extensions/dicom-sr/src/getSopClassHandlerModule.js +++ b/extensions/dicom-sr/src/getSopClassHandlerModule.js @@ -6,6 +6,11 @@ const { ImageSet } = classes; const sopClassHandlerName = 'dicom-sr'; +// TODO -> +// Add SR thumbnail +// Make viewport +// Get stacks from referenced displayInstanceUID and load into wrapped CornerStone viewport. + const sopClassUids = [ '1.2.840.10008.5.1.4.1.1.88.11', //BASIC_TEXT_SR: '1.2.840.10008.5.1.4.1.1.88.22', //ENHANCED_SR: @@ -327,6 +332,10 @@ function _processTID1410Measurement(mergedContentSequence) { group => group.ValueType === 'SCOORD' ); + const UIDREFContentItem = mergedContentSequence.find( + group => group.ValueType === 'UIDREF' + ); + if (!graphicItem) { console.warn( `graphic ValueType ${graphicItem.ValueType} not currently supported, skipping annotation.` @@ -342,6 +351,7 @@ function _processTID1410Measurement(mergedContentSequence) { loaded: false, labels: [], coords: [_getCoordsFromSCOORDOrSCOORD3D(graphicItem)], + TrackingUniqueIdentifier: UIDREFContentItem.UID, }; NUMContentItems.forEach(item => { @@ -365,12 +375,19 @@ function _processNonGeometricallyDefinedMeasurement(mergedContentSequence) { group => group.ValueType === 'NUM' ); + const UIDREFContentItem = mergedContentSequence.find( + group => group.ValueType === 'UIDREF' + ); + const measurement = { loaded: false, labels: [], coords: [], + TrackingUniqueIdentifier: UIDREFContentItem.UID, }; + debugger; + NUMContentItems.forEach(item => { const { ConceptNameCodeSequence, diff --git a/extensions/dicom-sr/src/tools/DICOMSRDisplayTool.js b/extensions/dicom-sr/src/tools/DICOMSRDisplayTool.js index ff0a2eab6..bc36c2dcf 100644 --- a/extensions/dicom-sr/src/tools/DICOMSRDisplayTool.js +++ b/extensions/dicom-sr/src/tools/DICOMSRDisplayTool.js @@ -45,23 +45,28 @@ export default class DICOMSRDisplayTool extends BaseTool { for (let i = 0; i < toolState.data.length; i++) { const data = toolState.data[i]; + const { renderableData } = data; - Object.keys(data).forEach(GraphicType => { - const renderableData = data[GraphicType]; + Object.keys(renderableData).forEach(GraphicType => { + const renderableDataForGraphicType = renderableData[GraphicType]; switch (GraphicType) { case SCOORD_TYPES.POINT: case SCOORD_TYPES.MULTIPOINT: - renderPointOrMultipoint(renderableData, eventData, options); + renderPointOrMultipoint( + renderableDataForGraphicType, + eventData, + options + ); break; case SCOORD_TYPES.POLYLINE: - renderPolyLine(renderableData, eventData, options); + renderPolyLine(renderableDataForGraphicType, eventData, options); break; case SCOORD_TYPES.CIRCLE: - renderCircle(renderableData, eventData, options); + renderCircle(renderableDataForGraphicType, eventData, options); break; case SCOORD_TYPES.ELLIPSE: - renderEllipse(renderableData, eventData, options); + renderEllipse(renderableDataForGraphicType, eventData, options); break; } }); diff --git a/extensions/dicom-sr/src/utils/addMeasurement.js b/extensions/dicom-sr/src/utils/addMeasurement.js index 402082113..d42858543 100644 --- a/extensions/dicom-sr/src/utils/addMeasurement.js +++ b/extensions/dicom-sr/src/utils/addMeasurement.js @@ -16,25 +16,27 @@ export default function addMeasurement( console.log(imageId); console.log('============================'); - // TODO -> GET TRACKING UID AND ADD IT TO TOOL DATA AND ALSO THE MEASUREMENT ENTRY. // TODO -> Render rotated ellipse . debugger; const toolName = TOOL_NAMES.DICOM_SR_DISPLAY_TOOL; - const measurementData = {}; + const measurementData = { + TrackingUniqueIdentifier: measurement.TrackingUniqueIdentifier, + renderableData: {}, + }; measurement.coords.forEach(coord => { const { GraphicType, GraphicData } = coord; - if (measurementData[GraphicType] === undefined) { - measurementData[GraphicType] = []; + if (measurementData.renderableData[GraphicType] === undefined) { + measurementData.renderableData[GraphicType] = []; } - const renderableData = _getRenderableData(GraphicType, GraphicData); - - measurementData[GraphicType].push(renderableData); + measurementData.renderableData[GraphicType].push( + _getRenderableData(GraphicType, GraphicData) + ); }); const toolState = globalImageIdSpecificToolStateManager.saveToolState(); @@ -59,6 +61,8 @@ export default function addMeasurement( measurement.loaded = true; measurement.imageId = imageId; measurement.displaySetInstanceUID = displaySetInstanceUID; + delete measurement.coords; + debugger; }