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