export interface FrontEndPayload { Interface: FrontEndInterfaces; Action: FrontEndInterfaces; Message: string; } export enum FrontEndInterfaces { scan_loading = 'scan_loading', file_management = 'file_management', view_selection = 'view_selection', layout = 'layout', presets = 'presets', sliders = 'sliders', scan_orientation = 'scan_orientation', scan_movement = 'scan_movement', interactivity = 'interactivity', } export enum FrontEndActions { pong = 'pong', announcement = 'announcement', fm02 = 'fm_02', } export enum FileManagementActions { fm01 = 'fm_01', fm02 = 'fm_02', } export enum NotificationActions { no01 = 'no_01', no02 = 'no_02', no03 = 'no_03', } export enum ScanOrientationActions { so01 = 'so_01', } export enum PresetActions { pr01 = 'pr_01', pr02 = 'pr_02', } export enum ScanMovementActions { sm01 = 'sm_01', sm02 = 'sm_02', sm03 = 'sm_03', sm04 = 'sm_04', sm05 = 'sm_05', sm06 = 'sm_06', sm07 = 'sm_07', sm08 = 'sm_08', sm09 = 'sm_09', sm10 = 'sm_10', sm11 = 'sm_11', sm12 = 'sm_12', } export enum SliderActions { sl01 = 'sl_01', sl02 = 'sl_02', sl03 = 'sl_03', sl04 = 'sl_04', sl05 = 'sl_05', sl06 = 'sl_06', sl07 = 'sl_07', sl08 = 'sl_08', sl09 = 'sl_09', sl10 = 'sl_10', sl11 = 'sl_11', sl12 = 'sl_12', sl13 = 'sl_13', sl14 = 'sl_14', sl15 = 'sl_15', sl16 = 'sl_16', } export interface CurrentScanState { Version?: string; CurrentView: ScanView; Display: DisplaySettings; Slice: SlicerData; InteractionSettings: SettingsData; Orientations: ViewOrientations; Layout: LayoutData; NavigationCube: NavigationCubeData; } export interface DisplaySettings { Version?: string; WindowLower: number; WindowUpper: number; ThresholdLower: number; ThresholdUpper: number; Brightness: number; Contrast: number; Opacity: number; } export interface NavigationCubeData { Version?: string; Transform: NavigationCubeTransform; Visibility: InteractivityState; Interactivity: InteractivityState; } export interface SettingsData { Version?: string; PanSensivitity: number; ZoomSensitivity: number; RotateSensitivity: number; CameraRotateSensitivity: number; } export interface SlicerData { Version?: string; TransverseLower: number; TransverseUpper: number; SagittalLower: number; SagittalUpper: number; CoronalLower: number; CoronalUpper: number; } export interface ViewOrientations { Version?: string; Transverse: ViewOrientation; Sagittal: ViewOrientation; Coronal: ViewOrientation; } export interface LayoutData { Version?: string; SwitchOnViewChange: boolean; PositionData: PositionData[]; } export interface PositionData { Version?: string; ActiveView: boolean; DefaultView: ScanView; Anchor: AnchorPoint; Offset: Vector2Data; AspectRatio: number; MaxSize: Vector2Data; Priority: number; } export interface ViewOrientation { Version?: string; View: ScanView; VerticalFlip: boolean; HorizontalFlip: boolean; PlaneInverse: number; Slice: number; } export interface Vector2Data { Version?: string; X: number; Y: number; } export enum AnchorPoint { DEFAULT = 0, TOP_LEFT = 1, TOP = 2, TOP_RIGHT = 3, LEFT = 4, CENTER = 5, RIGHT = 6, BOTTOM_LEFT = 7, BOTTOM = 8, BOTTOM_RIGHT = 9, } export interface NavigationCubeTransform { Version?: string; AnchorPoint: AnchorPoint; Position: Vector2Data; Size: Vector2Data; } export interface InteractivityState { Version?: string; Value: boolean; } export enum ScanView { Coronal = 3, Sagittal = 2, Transverse = 1, Volume = 0, } export interface InitialScanState { Version?: string; XSlices: number; YSlices: number; ZSlices: number; Modality: string; HuUpper: number; HuLower: number; DefaultDisplaySettings?: CurrentScanState; GreyscalePresets: GreyscalePresetData[]; ColourPresets: ColourPresetData[]; } export interface GreyscalePresetData { Version?: string; Name: string; Lower: number; Upper: number; } export interface ColourPresetData { Version?: string; Name: string; ColourGradient: GradientKeys[]; AlphaGradient: AlphaKeys[]; } export interface GradientKeys { Version?: string; R: number; G: number; B: number; Time: number; } export interface AlphaKeys { Version?: string; Alpha: number; Time: number; } export function inflateScanState(): CurrentScanState { return { Display: { Brightness: 50, Contrast: 50, Opacity: 50, WindowLower: 0, WindowUpper: 100, ThresholdLower: 0, ThresholdUpper: 100, }, CurrentView: ScanView.Volume, Slice: { TransverseLower: 0, TransverseUpper: 0, SagittalLower: 0, SagittalUpper: 0, CoronalLower: 0, CoronalUpper: 0, }, InteractionSettings: { PanSensivitity: 0, ZoomSensitivity: 0, RotateSensitivity: 0, CameraRotateSensitivity: 0, }, Orientations: { Transverse: { View: ScanView.Transverse, VerticalFlip: false, HorizontalFlip: false, PlaneInverse: 0, Slice: 0, }, Sagittal: { View: ScanView.Transverse, VerticalFlip: false, HorizontalFlip: false, PlaneInverse: 0, Slice: 0, }, Coronal: { View: ScanView.Transverse, VerticalFlip: false, HorizontalFlip: false, PlaneInverse: 0, Slice: 0, }, }, Layout: { SwitchOnViewChange: false, PositionData: [], }, NavigationCube: { Transform: { AnchorPoint: AnchorPoint.DEFAULT, Position: { X: 0, Y: 0, }, Size: { X: 0, Y: 0, }, }, Visibility: { Value: false, }, Interactivity: { Value: false, }, }, }; } export function inflateInitialScanState(): InitialScanState { return { XSlices: 0, YSlices: 0, ZSlices: 0, Modality: 'CT', HuUpper: 0, HuLower: 0, GreyscalePresets: [], ColourPresets: [], }; } export const ENCAPSULATED_PDF = '1.2.840.10008.5.1.4.1.1.104.1'; export enum UsefulTags { PatientId = 'x00100020', PatientName = 'x00100010', PatientDOB = 'x00100030', PatientSex = 'x00100040', StudyInstanceId = 'x0020000d', StudyId = 'x00200010', StudyDate = 'x00080020', StudyDescription = 'x00081030', SeriesInstanceId = 'x0020000e', SeriesSliceCount = 'x00540081', SeriesNumber = 'x00200011', SeriesModality = 'x00080060', SeriesDescription = 'x0008103e', SopUid = 'x00080016', SliceLocation = 'x00201041', }