72 lines
2.6 KiB
JavaScript
72 lines
2.6 KiB
JavaScript
import { cornerstone } from 'meteor/ohif:cornerstone';
|
|
import setHandlesPosition from './setHandlesPosition';
|
|
|
|
export default function (mouseEventData, toolType, data, handle, doneMovingCallback, preventHandleOutsideImage) {
|
|
const element = mouseEventData.element;
|
|
const distanceFromTool = {
|
|
x: handle.x - mouseEventData.currentPoints.image.x,
|
|
y: handle.y - mouseEventData.currentPoints.image.y
|
|
};
|
|
|
|
const mouseDragCallback = event => {
|
|
const eventData = event.detail;
|
|
handle.active = true;
|
|
|
|
if (handle.index === undefined || handle.index === null) {
|
|
handle.x = eventData.currentPoints.image.x + distanceFromTool.x;
|
|
handle.y = eventData.currentPoints.image.y + distanceFromTool.y;
|
|
} else {
|
|
setHandlesPosition(handle, eventData, data);
|
|
}
|
|
|
|
if (preventHandleOutsideImage) {
|
|
handle.x = Math.max(handle.x, 0);
|
|
handle.x = Math.min(handle.x, eventData.image.width);
|
|
|
|
handle.y = Math.max(handle.y, 0);
|
|
handle.y = Math.min(handle.y, eventData.image.height);
|
|
}
|
|
|
|
cornerstone.updateImage(element);
|
|
|
|
const eventType = 'cornerstonetoolsmeasurementmodified';
|
|
const modifiedEventData = {
|
|
toolType,
|
|
element,
|
|
measurementData: data
|
|
};
|
|
|
|
cornerstone.triggerEvent(element, eventType, modifiedEventData);
|
|
};
|
|
|
|
element.addEventListener('cornerstonetoolsmousedrag', mouseDragCallback);
|
|
|
|
const currentImage = cornerstone.getImage(element);
|
|
const imageRenderedHandler = () => {
|
|
const newImage = cornerstone.getImage(element);
|
|
|
|
// Check if the rendered image changed during measurement modifying and stop it if so
|
|
if (newImage.imageId !== currentImage.imageId) {
|
|
mouseUpCallback();
|
|
}
|
|
};
|
|
|
|
// Bind the event listener for image rendering
|
|
element.addEventListener('cornerstoneimagerendered', imageRenderedHandler);
|
|
|
|
const mouseUpCallback = () => {
|
|
element.removeEventListener('cornerstonetoolsmousedrag', mouseDragCallback);
|
|
element.removeEventListener('cornerstonetoolsmouseup', mouseUpCallback);
|
|
element.removeEventListener('cornerstonetoolsmouseclick', mouseUpCallback);
|
|
element.removeEventListener('cornerstoneimagerendered', imageRenderedHandler);
|
|
cornerstone.updateImage(element);
|
|
|
|
if (typeof doneMovingCallback === 'function') {
|
|
doneMovingCallback();
|
|
}
|
|
};
|
|
|
|
element.addEventListener('cornerstonetoolsmouseup', mouseUpCallback);
|
|
element.addEventListener('cornerstonetoolsmouseclick', mouseUpCallback);
|
|
}
|