63 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			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
 | 
						|
}
 |