91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
| import { Enums } from '@cornerstonejs/core'
 | |
| 
 | |
| const { CalibrationTypes } = Enums
 | |
| const PIXEL_UNITS = 'px'
 | |
| 
 | |
| /**
 | |
|  * Extracts the length units and the type of calibration for those units
 | |
|  * into the response.  The length units will typically be either mm or px
 | |
|  * while the calibration type can be any of a number of different calibraiton types.
 | |
|  *
 | |
|  * Volumetric images have no calibration type, so are just the raw mm.
 | |
|  *
 | |
|  * TODO: Handle region calibration
 | |
|  *
 | |
|  * @param handles - used to detect if the spacing information is different
 | |
|  *   between various points (eg angled ERMF or US Region).
 | |
|  *   Currently unused, but needed for correct US Region handling
 | |
|  * @param image - to extract the calibration from
 | |
|  *        image.calibration - calibration value to extract units form
 | |
|  * @returns String containing the units and type of calibration
 | |
|  */
 | |
| const getCalibratedLengthUnits = (handles, image) => {
 | |
|   const { calibration, hasPixelSpacing } = image
 | |
|   // Anachronistic - moving to using calibration consistently, but not completed yet
 | |
|   const units = hasPixelSpacing ? 'mm' : PIXEL_UNITS
 | |
|   if (!calibration || !calibration.type) {
 | |
|     return units
 | |
|   }
 | |
|   if (calibration.type === CalibrationTypes.UNCALIBRATED) {
 | |
|     return PIXEL_UNITS
 | |
|   }
 | |
|   // TODO - handle US regions properly
 | |
|   if (calibration.SequenceOfUltrasoundRegions) {
 | |
|     return 'US Region'
 | |
|   }
 | |
|   return `${units} ${calibration.type}`
 | |
| }
 | |
| 
 | |
| const SQUARE = '\xb2'
 | |
| /**
 | |
|  *  Extracts the area units, including the squared sign plus calibration type.
 | |
|  */
 | |
| const getCalibratedAreaUnits = (handles, image) => {
 | |
|   const { calibration, hasPixelSpacing } = image
 | |
|   const units = (hasPixelSpacing ? 'mm' : PIXEL_UNITS) + SQUARE
 | |
|   if (!calibration || !calibration.type) {
 | |
|     return units
 | |
|   }
 | |
|   if (calibration.SequenceOfUltrasoundRegions) {
 | |
|     return 'US Region'
 | |
|   }
 | |
|   return `${units} ${calibration.type}`
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Gets the scale divisor for converting from internal spacing to
 | |
|  * image spacing for calibrated images.
 | |
|  */
 | |
| 
 | |
| const getCalibratedScale = (image) => {
 | |
|   let scale = null
 | |
|   if (image.calibration && image.calibration.scale) {
 | |
|     scale = image.calibration.scale
 | |
|   }
 | |
|   return scale || 1
 | |
| }
 | |
| 
 | |
| /** Gets the aspect ratio of the screen display relative to the image
 | |
|  * display in order to square up measurement values.
 | |
|  * That is, suppose the spacing on the image is 1, 0.5 (x,y spacing)
 | |
|  * This is displayed at 1, 1 spacing on screen, then the
 | |
|  * aspect value will be 1/0.5 = 2
 | |
|  */
 | |
| 
 | |
| const getCalibratedAspect = (image) => {
 | |
|   let aspect = null
 | |
|   if (image.calibration && image.calibration.aspect) {
 | |
|     aspect = image.calibration.aspect
 | |
|   }
 | |
|   return aspect || 1
 | |
| }
 | |
| 
 | |
| export default getCalibratedLengthUnits
 | |
| 
 | |
| export {
 | |
|   getCalibratedAreaUnits,
 | |
|   getCalibratedLengthUnits,
 | |
|   getCalibratedScale,
 | |
|   getCalibratedAspect
 | |
| }
 |