ohif-viewer/Packages/ohif-lesiontracker/client/compatibility/bidirectionalTool/moveHandle/setHandlesPosition.js
2017-12-28 08:59:25 -02:00

141 lines
4.6 KiB
JavaScript

import { cornerstoneMath } from 'meteor/ohif:cornerstone';
import perpendicularBothFixedLeft from './perpendicularBothFixedLeft';
import perpendicularBothFixedRight from './perpendicularBothFixedRight';
import perpendicularLeftFixedPoint from './perpendicularLeftFixedPoint';
import perpendicularRightFixedPoint from './perpendicularRightFixedPoint';
// Sets position of handles(start, end, perpendicularStart, perpendicularEnd)
export default function(handle, eventData, data) {
let movedPoint,
outOfBounds,
result,
intersection,
d1,
d2;
let longLine = {},
perpendicularLine = {};
if (handle.index === 0) {
// if long-axis start point is moved
result = perpendicularBothFixedLeft(eventData, data);
if (result) {
handle.x = eventData.currentPoints.image.x;
handle.y = eventData.currentPoints.image.y;
} else {
eventData.currentPoints.image.x = handle.x;
eventData.currentPoints.image.y = handle.y;
}
} else if (handle.index === 1) {
// if long-axis end point is moved
result = perpendicularBothFixedRight(eventData, data);
if (result) {
handle.x = eventData.currentPoints.image.x;
handle.y = eventData.currentPoints.image.y;
} else {
eventData.currentPoints.image.x = handle.x;
eventData.currentPoints.image.y = handle.y;
}
} else if (handle.index === 2) {
outOfBounds = false;
// if perpendicular start point is moved
longLine.start = {
x: data.handles.start.x,
y: data.handles.start.y
};
longLine.end = {
x: data.handles.end.x,
y: data.handles.end.y
};
perpendicularLine.start = {
x: data.handles.perpendicularEnd.x,
y: data.handles.perpendicularEnd.y
};
perpendicularLine.end = {
x: eventData.currentPoints.image.x,
y: eventData.currentPoints.image.y
};
intersection = cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);
if (!intersection) {
perpendicularLine.end = {
x: data.handles.perpendicularStart.x,
y: data.handles.perpendicularStart.y
};
intersection = cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);
d1 = cornerstoneMath.point.distance(intersection, data.handles.start);
d2 = cornerstoneMath.point.distance(intersection, data.handles.end);
if (!intersection || d1 < 3 || d2 < 3) {
outOfBounds = true;
}
}
movedPoint = false;
if (!outOfBounds) {
movedPoint = perpendicularLeftFixedPoint(eventData, data);
if (!movedPoint) {
eventData.currentPoints.image.x = data.handles.perpendicularStart.x;
eventData.currentPoints.image.y = data.handles.perpendicularStart.y;
}
}
} else if (handle.index === 3) {
outOfBounds = false;
// if perpendicular end point is moved
longLine.start = {
x: data.handles.start.x,
y: data.handles.start.y
};
longLine.end = {
x: data.handles.end.x,
y: data.handles.end.y
};
perpendicularLine.start = {
x: data.handles.perpendicularStart.x,
y: data.handles.perpendicularStart.y
};
perpendicularLine.end = {
x: eventData.currentPoints.image.x,
y: eventData.currentPoints.image.y
};
intersection = cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);
if (!intersection) {
perpendicularLine.end = {
x: data.handles.perpendicularEnd.x,
y: data.handles.perpendicularEnd.y
};
intersection = cornerstoneMath.lineSegment.intersectLine(longLine, perpendicularLine);
d1 = cornerstoneMath.point.distance(intersection, data.handles.start);
d2 = cornerstoneMath.point.distance(intersection, data.handles.end);
if (!intersection || d1 < 3 || d2 < 3) {
outOfBounds = true;
}
}
movedPoint = false;
if (!outOfBounds) {
movedPoint = perpendicularRightFixedPoint(eventData, data);
if (!movedPoint) {
eventData.currentPoints.image.x = data.handles.perpendicularEnd.x;
eventData.currentPoints.image.y = data.handles.perpendicularEnd.y;
}
}
}
}