irc_web/.svn/pristine/77/772a9186d4a2fa41f13235b9186...

63 lines
1.8 KiB
Plaintext

import getLineVector from './getLineVector'
/**
* Update the perpendicular line handles when the measurement is being created.
* This method will make the perpendicular line intersect in the middle of the
* long line and assume half the size of the long line.
*
* @param {*} eventData Data object associated with the event
* @param {*} measurementData Data from current bidirectional tool measurement
*
* @returns {boolean} False in case the handle is not locked or true when moved
*/
export default function updatePerpendicularLineHandles(
eventData,
measurementData
) {
if (!measurementData.handles.perpendicularStart.locked) {
return false
}
let startX, startY, endX, endY
const { start, end } = measurementData.handles
const { columnPixelSpacing = 1, rowPixelSpacing = 1 } = eventData.image
if (start.x === end.x && start.y === end.y) {
startX = start.x
startY = start.y
endX = end.x
endY = end.y
} else {
// Mid point of long-axis line
const mid = {
x: (start.x + end.x) / 2,
y: (start.y + end.y) / 2
}
// Inclination of the perpendicular line
const vector = getLineVector(
columnPixelSpacing,
rowPixelSpacing,
start,
end
)
const perpendicularLineLength = vector.length / 2
const rowMultiplier = perpendicularLineLength / (2 * rowPixelSpacing)
const columnMultiplier = perpendicularLineLength / (2 * columnPixelSpacing)
startX = mid.x + columnMultiplier * vector.y
startY = mid.y - rowMultiplier * vector.x
endX = mid.x - columnMultiplier * vector.y
endY = mid.y + rowMultiplier * vector.x
}
measurementData.handles.perpendicularStart.x = startX
measurementData.handles.perpendicularStart.y = startY
measurementData.handles.perpendicularEnd.x = endX
measurementData.handles.perpendicularEnd.y = endY
return true
}