"use strict"
/*
* Vanilla JS doesn't have true enum support. But this gets us partially there:
* const Direction = {
* Up: 'Up',
* Down: 'Down',
* Left: 'Left',
* Right: 'Right'
* };
*/
/**
* ...
* @namespace core.specifications
*/
const planes = {
xy: { id: 0, desc: 'XY plane' },
xz: { id: 1, desc: 'XZ plane' },
yz: { id: 2, desc: 'YZ plane' },
}
const axes = {
x: { id: 0, desc: 'X axis' },
y: { id: 1, desc: 'Y axis' },
z: { id: 2, desc: 'Z axis' },
}
const axialDirections = {
posX: { id: 0, desc: 'towards +X' },
posY: { id: 1, desc: 'towards +Y' },
negX: { id: 2, desc: 'towards -X' },
negY: { id: 3, desc: 'towards -Y' },
posZ: { id: 4, desc: 'towards +Z' },
negZ: { id: 5, desc: 'towards -Z' },
}
// quadrants are numbered counter-clockwise, starting from positive X & Y
const quadrants = {
i: { id: 0, desc: '+X, +Y' },
ii: { id: 1, desc: '-X, +Y' },
iii: { id: 2, desc: '-X, -Y' },
iv: { id: 3, desc: '+X, -Y' },
}
// octants are numbered in "Gray code" order
const octants = {
i: { id: 0, desc: '+X, +Y, +Z' },
ii: { id: 1, desc: '-X, +Y, +Z' },
iii: { id: 2, desc: '+X, -Y, +Z' },
iv: { id: 3, desc: '-X, -Y, +Z' },
v: { id: 4, desc: '+X, +Y, -Z' },
vi: { id: 5, desc: '-X, +Y, -Z' },
vii: { id: 6, desc: '+X, -Y, -Z' },
viii: { id: 7, desc: '-X, -Y, -Z' },
}
// boxKeypoints: box corners, midpoints of edges, midpoints of box faces
const boxKeypoints = {
corner1: { id: 0, desc: 'corner (+X, +Y, +Z)' },
corner2: { id: 1, desc: 'corner (+X, -Y, +Z)' },
corner3: { id: 2, desc: 'corner (-X, -Y, +Z)' },
corner4: { id: 3, desc: 'corner (-X, +Y, +Z)' },
corner5: { id: 4, desc: 'corner (+X, +Y, -Z)' },
corner6: { id: 5, desc: 'corner (+X, -Y, -Z)' },
corner7: { id: 6, desc: 'corner (-X, -Y, -Z)' },
corner8: { id: 7, desc: 'corner (-X, +Y, -Z)' },
edge1: { id: 8, desc: 'midpoint of edge (X axis, +Y, +Z)' },
edge2: { id: 9, desc: 'midpoint of edge (X axis, -Y, +Z)' },
edge3: { id: 10, desc: 'midpoint of edge (X axis, +Y, -Z)' },
edge4: { id: 11, desc: 'midpoint of edge (X axis, -Y, -Z)' },
edge5: { id: 12, desc: 'midpoint of edge (Y axis, +X, +Z)' },
edge6: { id: 13, desc: 'midpoint of edge (Y axis, -X, +Z)' },
edge7: { id: 14, desc: 'midpoint of edge (Y axis, +X, -Z)' },
edge8: { id: 15, desc: 'midpoint of edge (Y axis, -X, -Z)' },
edge9: { id: 16, desc: 'midpoint of edge (Z axis, +X, +Y)' },
edge10: { id: 17, desc: 'midpoint of edge (Z axis, +X, -Y)' },
edge11: { id: 18, desc: 'midpoint of edge (Z axis, -X, -Y)' },
edge12: { id: 19, desc: 'midpoint of edge (Z axis, -X, +Y)' },
face1: { id: 20, desc: `centre of face (${axialDirections.posX.desc})` },
face2: { id: 21, desc: `centre of face (${axialDirections.posY.desc})` },
face3: { id: 22, desc: `centre of face (${axialDirections.negX.desc})` },
face4: { id: 23, desc: `centre of face (${axialDirections.negY.desc})` },
face5: { id: 24, desc: `centre of face (${axialDirections.posZ.desc})` },
face6: { id: 25, desc: `centre of face (${axialDirections.negZ.desc})` },
internal0: { id: 26, desc: 'centre' },
}
const specifications = {
planes,
axes,
axialDirections,
boxKeypoints,
quadrants,
octants,
}
module.exports = specifications;