63 lines
1.9 KiB
Plaintext
63 lines
1.9 KiB
Plaintext
import * as cornerstoneTools from 'cornerstone-tools'
|
|
const external = cornerstoneTools.external
|
|
const convertToVector3 = cornerstoneTools.import('util/convertToVector3')
|
|
// import convertToVector3 from '../util/convertToVector3.js';
|
|
|
|
/**
|
|
* Returns the orientation of the vector in the patient coordinate system.
|
|
* @public
|
|
* @function getOrientationString
|
|
*
|
|
* @param {Array|cornerstoneMath.Vector3} vector Input array or Vector3
|
|
* @returns {string} The orientation in the patient coordinate system.
|
|
*/
|
|
export default function(vector) {
|
|
const vec3 = convertToVector3(vector)
|
|
|
|
// Thanks to David Clunie
|
|
// https://sites.google.com/site/dicomnotes/
|
|
|
|
let orientation = ''
|
|
const orientationX = vec3.x < 0 ? 'R' : 'L'
|
|
const orientationY = vec3.y < 0 ? 'A' : 'P'
|
|
const orientationZ = vec3.z < 0 ? 'F' : 'H'
|
|
|
|
// Should probably make this a function vector3.abs
|
|
const abs = new external.cornerstoneMath.Vector3(
|
|
Math.abs(vec3.x),
|
|
Math.abs(vec3.y),
|
|
Math.abs(vec3.z)
|
|
)
|
|
|
|
const MIN = 0.0001
|
|
|
|
for (let i = 0; i < 3; i++) {
|
|
if (abs.x > MIN && abs.x > abs.y && abs.x > abs.z) {
|
|
orientation += orientationX
|
|
abs.x = 0
|
|
} else if (abs.y > MIN && abs.y > abs.x && abs.y > abs.z) {
|
|
orientation += orientationY
|
|
abs.y = 0
|
|
} else if (abs.z > MIN && abs.z > abs.x && abs.z > abs.y) {
|
|
orientation += orientationZ
|
|
abs.z = 0
|
|
} else if (abs.x > MIN && abs.y > MIN && abs.x === abs.y) {
|
|
orientation += orientationX + orientationY
|
|
abs.x = 0
|
|
abs.y = 0
|
|
} else if (abs.x > MIN && abs.z > MIN && abs.x === abs.z) {
|
|
orientation += orientationX + orientationZ
|
|
abs.x = 0
|
|
abs.z = 0
|
|
} else if (abs.y > MIN && abs.z > MIN && abs.y === abs.z) {
|
|
orientation += orientationY + orientationZ
|
|
abs.y = 0
|
|
abs.z = 0
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
|
|
return orientation
|
|
}
|