From ba797ddbc40faedeb148dd4bce79c40ada75b663 Mon Sep 17 00:00:00 2001 From: Erik Ziegler Date: Thu, 8 Feb 2018 16:20:17 +0100 Subject: [PATCH] Add Crosshairs tool to OHIF Viewer / Standalone Viewer --- .../toolbarSection/toolbarSection.js | 7 ++ .../ohif-viewerbase/client/lib/hotkeyUtils.js | 3 +- .../ohif-viewerbase/client/lib/toolManager.js | 64 +++++++++++++------ .../toolbarSection/toolbarSection.js | 7 ++ 4 files changed, 60 insertions(+), 21 deletions(-) diff --git a/OHIFViewer/client/components/toolbarSection/toolbarSection.js b/OHIFViewer/client/components/toolbarSection/toolbarSection.js index 204a18e30..2f835cf97 100644 --- a/OHIFViewer/client/components/toolbarSection/toolbarSection.js +++ b/OHIFViewer/client/components/toolbarSection/toolbarSection.js @@ -62,6 +62,13 @@ Template.toolbarSection.helpers({ toolbarButtons() { const extraTools = []; + extraTools.push({ + id: 'crosshairs', + title: 'Crosshairs', + classes: 'imageViewerTool', + iconClasses: 'fa fa-crosshairs' + }); + extraTools.push({ id: 'stackScroll', title: 'Stack Scroll', diff --git a/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js b/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js index c4a28a061..8b7ba3045 100644 --- a/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js +++ b/Packages/ohif-viewerbase/client/lib/hotkeyUtils.js @@ -118,7 +118,8 @@ Meteor.startup(function() { stackScroll: 'Scroll Stack', pan: 'Pan', length: 'Length Measurement', - wwwcRegion: 'W/L by Region' + wwwcRegion: 'W/L by Region', + crosshairs: 'Crosshairs' }); // Functions to register the viewport commands diff --git a/Packages/ohif-viewerbase/client/lib/toolManager.js b/Packages/ohif-viewerbase/client/lib/toolManager.js index 1833e28be..6b0f4d2c9 100644 --- a/Packages/ohif-viewerbase/client/lib/toolManager.js +++ b/Packages/ohif-viewerbase/client/lib/toolManager.js @@ -390,34 +390,58 @@ export const toolManager = { cornerstoneTools.panMultiTouch.setConfiguration(multiTouchPanConfig); } + // TODO: Remove this messy approach for adding synchronizer when necessary. + let leftToolSynchronizer; if (newToolIdLeft === 'crosshairs') { const currentFrameOfReferenceUID = getFrameOfReferenceUID(element); if (currentFrameOfReferenceUID) { updateCrosshairsSynchronizer(currentFrameOfReferenceUID); - const synchronizer = crosshairsSynchronizers.synchronizers[currentFrameOfReferenceUID]; + leftToolSynchronizer = crosshairsSynchronizers.synchronizers[currentFrameOfReferenceUID]; + } + + if (newToolIdLeft === newToolIdMiddle && newToolIdMiddle === newToolIdRight) { + newCornerstoneToolRight.activate(element, 7); // 7 means left mouse button, right mouse button and middle mouse button + } else if (newToolIdLeft === newToolIdMiddle) { + newCornerstoneToolMiddle.activate(element, 3); // 3 means left mouse button and middle mouse button + newCornerstoneToolRight.activate(element, 4); // 4 means right mouse button + } else if (newToolIdMiddle === newToolIdRight) { + newCornerstoneToolRight.activate(element, 6); // 6 means right mouse button and middle mouse button + newCornerstoneToolLeft.mouse.activate(element, 1, leftToolSynchronizer); // 1 means left mouse button + } else if (newToolIdLeft === newToolIdRight) { + newCornerstoneToolMiddle.activate(element, 2); // 2 means middle mouse button + newCornerstoneToolRight.activate(element, 5); // 5 means left mouse button and right mouse button + } else { + newCornerstoneToolLeft.mouse.activate(element, 1, leftToolSynchronizer); // 1 means left mouse button + newCornerstoneToolMiddle.activate(element, 2); // 2 means middle mouse button + newCornerstoneToolRight.activate(element, 4); // 4 means right mouse button + } + } else { + // This block ensures that all mouse button tools keep working + if (newToolIdLeft === newToolIdMiddle && newToolIdMiddle === newToolIdRight) { + newCornerstoneToolRight.activate(element, 7); // 7 means left mouse button, right mouse button and middle mouse button + } else if (newToolIdLeft === newToolIdMiddle) { + newCornerstoneToolMiddle.activate(element, 3); // 3 means left mouse button and middle mouse button + newCornerstoneToolRight.activate(element, 4); // 4 means right mouse button + } else if (newToolIdMiddle === newToolIdRight) { + newCornerstoneToolRight.activate(element, 6); // 6 means right mouse button and middle mouse button + newCornerstoneToolLeft.mouse.activate(element, 1); // 1 means left mouse button + } else if (newToolIdLeft === newToolIdRight) { + newCornerstoneToolMiddle.activate(element, 2); // 2 means middle mouse button + newCornerstoneToolRight.activate(element, 5); // 5 means left mouse button and right mouse button + } else { + newCornerstoneToolLeft.mouse.activate(element, 1); // 1 means left mouse button + newCornerstoneToolMiddle.activate(element, 2); // 2 means middle mouse button + newCornerstoneToolRight.activate(element, 4); // 4 means right mouse button } } - // This block ensures that all mouse button tools keep working - if (newToolIdLeft === newToolIdMiddle && newToolIdMiddle === newToolIdRight) { - newCornerstoneToolRight.activate(element, 7); // 7 means left mouse button, right mouse button and middle mouse button - } else if (newToolIdLeft === newToolIdMiddle) { - newCornerstoneToolMiddle.activate(element, 3); // 3 means left mouse button and middle mouse button - newCornerstoneToolRight.activate(element, 4); // 4 means right mouse button - } else if (newToolIdMiddle === newToolIdRight) { - newCornerstoneToolRight.activate(element, 6); // 6 means right mouse button and middle mouse button - newCornerstoneToolLeft.mouse.activate(element, 1); // 1 means left mouse button - } else if (newToolIdLeft === newToolIdRight) { - newCornerstoneToolMiddle.activate(element, 2); // 2 means middle mouse button - newCornerstoneToolRight.activate(element, 5); // 5 means left mouse button and right mouse button - } else { - newCornerstoneToolLeft.mouse.activate(element, 1); // 1 means left mouse button - newCornerstoneToolMiddle.activate(element, 2); // 2 means middle mouse button - newCornerstoneToolRight.activate(element, 4); // 4 means right mouse button - } - if (newCornerstoneToolLeft.touch) { - newCornerstoneToolLeft.touch.activate(element); + if (leftToolSynchronizer) { + newCornerstoneToolLeft.touch.activate(element, leftToolSynchronizer); + } else { + newCornerstoneToolLeft.touch.activate(element); + } + } if (gestures.zoomTouchPinch.enabled === true) { diff --git a/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js b/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js index 2238a6f74..f4ca9c8ec 100644 --- a/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js +++ b/StandaloneViewer/StandaloneViewer/client/components/toolbarSection/toolbarSection.js @@ -30,6 +30,13 @@ Template.toolbarSection.helpers({ toolbarButtons() { const extraTools = []; + extraTools.push({ + id: 'crosshairs', + title: 'Crosshairs', + classes: 'imageViewerTool', + iconClasses: 'fa fa-crosshairs' + }); + extraTools.push({ id: 'stackScroll', title: 'Stack Scroll',