diff --git a/Packages/ohif-core/client/lib/cornerstone.js b/Packages/ohif-core/client/lib/cornerstone.js index 3e50d2ae0..1ce58a4aa 100644 --- a/Packages/ohif-core/client/lib/cornerstone.js +++ b/Packages/ohif-core/client/lib/cornerstone.js @@ -1,4 +1,5 @@ import { OHIF } from 'meteor/ohif:core'; +import { _ } from 'meteor/underscore'; OHIF.cornerstone = {}; @@ -26,3 +27,63 @@ OHIF.cornerstone.pixelToPage = (element, position) => { return result; }; + +OHIF.cornerstone.repositionTextBoxWhileDragging = (eventData, measurementData) => { + const element = eventData.element; + const enabledElement = cornerstone.getEnabledElement(element); + const $element = $(element); + const image = enabledElement.image; + + const modifiedCallback = () => { + const handles = measurementData.handles; + const textBox = handles.textBox; + + const getHandlePosition = key => _.pick(handles[key], ['x', 'y']); + const start = getHandlePosition('start'); + const end = getHandlePosition('end'); + + const calculateAxisCenter = axis => { + const a = start[axis]; + const b = end[axis]; + const lowest = Math.min(a, b); + const highest = Math.max(a, b); + return lowest + ((highest - lowest) / 2); + }; + + const tool = {}; + tool.x = calculateAxisCenter('x'); + tool.y = calculateAxisCenter('y'); + + const mid = {}; + mid.x = image.width / 2; + mid.y = image.height / 2; + + const directions = {}; + directions.x = tool.x < mid.x ? -1 : 1; + directions.y = tool.y < mid.y ? -1 : 1; + + const points = {}; + points.x = directions.x < 0 ? 0 : image.width; + points.y = directions.y < 0 ? 0 : image.height; + + const diffX = directions.x < 0 ? tool.x : image.width - tool.x; + const diffY = directions.y < 0 ? tool.y : image.height - tool.y; + + const cornerAxis = diffY < diffX ? 'y' : 'x'; + const toolAxis = diffY < diffX ? 'x' : 'y'; + + textBox[cornerAxis] = points[cornerAxis]; + textBox[toolAxis] = tool[toolAxis]; + }; + + const mouseUpCallback = () => { + $element.off('CornerstoneToolsMeasurementModified', modifiedCallback); + }; + + $element.one('CornerstoneToolsMouseDrag', () => { + $element.on('CornerstoneToolsMeasurementModified', modifiedCallback); + }); + + // Using mouseup because sometimes the CornerstoneToolsMouseUp event is not triggered + $element.one('mouseup', mouseUpCallback); +}; diff --git a/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js b/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js index 1f0134ee4..a2e73e9d4 100644 --- a/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js +++ b/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool.js @@ -1,4 +1,5 @@ import { toolManager } from 'meteor/ohif:viewerbase'; +import { OHIF } from 'meteor/ohif:core'; (function($, cornerstone, cornerstoneMath, cornerstoneTools) { @@ -42,7 +43,7 @@ import { toolManager } from 'meteor/ohif:viewerbase'; function createNewMeasurement(mouseEventData) { // Create the measurement data for this tool with the end handle activated - var measurementData = { + const measurementData = { visible: true, active: true, handles: { @@ -98,6 +99,9 @@ import { toolManager } from 'meteor/ohif:viewerbase'; isDeleted: false, toolType: 'bidirectional' }; + + OHIF.cornerstone.repositionTextBoxWhileDragging(mouseEventData, measurementData); + return measurementData; } diff --git a/Packages/ohif-measurements/client/components/measureFlow/measureFlow.html b/Packages/ohif-measurements/client/components/measureFlow/measureFlow.html index 16ff41b56..f9b1a8f4e 100644 --- a/Packages/ohif-measurements/client/components/measureFlow/measureFlow.html +++ b/Packages/ohif-measurements/client/components/measureFlow/measureFlow.html @@ -2,7 +2,7 @@
- {{#if eq instance.state.get 'selected'}} diff --git a/Packages/ohif-measurements/client/components/measureFlow/measureFlow.js b/Packages/ohif-measurements/client/components/measureFlow/measureFlow.js index aa746fec3..0b237c022 100644 --- a/Packages/ohif-measurements/client/components/measureFlow/measureFlow.js +++ b/Packages/ohif-measurements/client/components/measureFlow/measureFlow.js @@ -108,7 +108,7 @@ Template.measureFlow.onRendered(() => { } // Display the button after reposition it - $btnAdd.css('visibility', ''); + $btnAdd.css('opacity', 1); } });