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
 | |
| }
 |