From 5bf2d75d4f824d60c13b1e79f7b1c638d1fe22b6 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Tue, 21 Nov 2017 19:37:13 -0200 Subject: [PATCH] Fixing duplicated overlays and zero-sized measurements --- .../client/compatibility/bidirectionalTool.js | 33 +++++++++++++++---- .../compatibility/deleteLesionKeyboardTool.js | 4 +-- .../imageViewerViewport.js | 7 +++- 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js b/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js index de7ac3d63..000b661ee 100644 --- a/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js +++ b/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js @@ -122,12 +122,16 @@ function addNewMeasurement(mouseEventData) { // associate this data with this imageId so we can render it and manipulate it cornerstoneTools.addToolState(element, toolType, measurementData); - // since we are dragging to another place to drop the end point, we can just activate - // the end point and let the moveHandle move it for us. - $element.off('CornerstoneToolsMouseMove', mouseMoveCallback); - $element.off('CornerstoneToolsMouseDown', mouseDownCallback); - $element.off('CornerstoneToolsMouseDownActivate', cornerstoneTools.bidirectional.mouseDownActivateCallback); - $element.off('CornerstoneToolsMouseDoubleClick', doubleClickCallback); + const disableDefaultHandlers = () => { + // since we are dragging to another place to drop the end point, we can just activate + // the end point and let the moveHandle move it for us. + $element.off('CornerstoneToolsMouseMove', mouseMoveCallback); + $element.off('CornerstoneToolsMouseDown', mouseDownCallback); + $element.off('CornerstoneToolsMouseDownActivate', cornerstoneTools.bidirectional.mouseDownActivateCallback); + $element.off('CornerstoneToolsMouseDoubleClick', doubleClickCallback); + }; + + disableDefaultHandlers(); // Update the perpendicular line handles position const updateHandler = (event, eventData) => updatePerpendicularLineHandles(eventData, measurementData); @@ -155,6 +159,17 @@ function addNewMeasurement(mouseEventData) { // Bind a one-time event listener for the Esc key $element.one('keydown', keyDownHandler); + // Bind a mousedown handler to cancel the measurement if it's zero-sized + const mousedownHandler = () => { + const { start, end } = measurementData.handles; + if (!cornerstoneMath.point.distance(start, end)) { + cancelAction(); + } + }; + + // Bind a one-time event listener for mouse down + $element.one('mousedown', mousedownHandler); + // Keep the current image and create a handler for new rendered images const currentImage = cornerstone.getImage(element); const currentViewport = cornerstone.getViewport(element); @@ -198,6 +213,9 @@ function addNewMeasurement(mouseEventData) { // Unbind the Esc keydown hook $element.off('keydown', keyDownHandler); + // Unbind the mouse down hook + $element.off('mousedown', mousedownHandler); + // Unbind the event listener for image rendering $element.off('CornerstoneImageRendered', imageRenderedHandler); @@ -212,10 +230,13 @@ function addNewMeasurement(mouseEventData) { $element.off('CornerstoneToolsMouseDrag', updateHandler); $element.off('CornerstoneToolsMouseUp', updateHandler); + // Disable the default handlers and re-enable again + disableDefaultHandlers(); $element.on('CornerstoneToolsMouseMove', eventData, mouseMoveCallback); $element.on('CornerstoneToolsMouseDown', eventData, mouseDownCallback); $element.on('CornerstoneToolsMouseDownActivate', eventData, cornerstoneTools.bidirectional.mouseDownActivateCallback); $element.on('CornerstoneToolsMouseDoubleClick', eventData, doubleClickCallback); + cornerstone.updateImage(element); }); } diff --git a/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js b/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js index 9ffc9bd0e..15dd9cb0d 100644 --- a/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js +++ b/Packages/ohif-lesiontracker/client/compatibility/deleteLesionKeyboardTool.js @@ -78,9 +78,7 @@ function keyDownCallback(event, eventData) { const nearbyToolData = getNearbyToolData(eventData.element, eventData.currentPoints.canvas); - if (!nearbyToolData) { - return; - } + if (!nearbyToolData || nearbyToolData.tool.isCreating) return; const dialogSettings = { class: 'themed', diff --git a/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js b/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js index 314c66893..64d004e54 100644 --- a/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js +++ b/Packages/ohif-viewerbase/client/components/viewer/imageViewerViewport/imageViewerViewport.js @@ -578,13 +578,18 @@ Template.imageViewerViewport.onRendered(function() { // Double click event handlers to handle viewport enlargement this.$element.on('CornerstoneToolsMouseDoubleClick CornerstoneToolsDoubleTap', event => { + const { layoutManager } = OHIF.viewerbase; + const $viewports = $('.imageViewerViewport'); + this.$element.trigger('ohif.viewer.viewport.toggleEnlargement'); // Get the double clicked viewport index const viewportIndex = $('.imageViewerViewport').index(event.currentTarget); + // Stop here if there's only one viewport + if (!layoutManager.isZoomed && $viewports.length <= 1) return; + // Enlarge the double clicked viewport - const layoutManager = OHIF.viewerbase.layoutManager; layoutManager.toggleEnlargement(viewportIndex); // Wait for DOM re-rendering and update the active viewport