@cornerstonejs/core 0.30.1 → 0.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/cjs/RenderingEngine/BaseVolumeViewport.d.ts +5 -1
  2. package/dist/cjs/RenderingEngine/BaseVolumeViewport.js +55 -5
  3. package/dist/cjs/RenderingEngine/BaseVolumeViewport.js.map +1 -1
  4. package/dist/cjs/RenderingEngine/StackViewport.d.ts +3 -1
  5. package/dist/cjs/RenderingEngine/StackViewport.js +53 -21
  6. package/dist/cjs/RenderingEngine/StackViewport.js.map +1 -1
  7. package/dist/cjs/enums/VOILUTFunctionType.d.ts +5 -0
  8. package/dist/cjs/enums/VOILUTFunctionType.js +9 -0
  9. package/dist/cjs/enums/VOILUTFunctionType.js.map +1 -0
  10. package/dist/cjs/enums/index.d.ts +2 -1
  11. package/dist/cjs/enums/index.js +3 -1
  12. package/dist/cjs/enums/index.js.map +1 -1
  13. package/dist/cjs/types/EventTypes.d.ts +2 -0
  14. package/dist/cjs/types/IImage.d.ts +1 -0
  15. package/dist/cjs/types/IVolumeViewport.d.ts +1 -1
  16. package/dist/cjs/types/Metadata.d.ts +1 -0
  17. package/dist/cjs/types/StackViewportProperties.d.ts +2 -0
  18. package/dist/cjs/types/VolumeViewportProperties.d.ts +2 -0
  19. package/dist/cjs/utilities/createLinearRGBTransferFunction.d.ts +3 -0
  20. package/dist/cjs/utilities/createLinearRGBTransferFunction.js +22 -0
  21. package/dist/cjs/utilities/createLinearRGBTransferFunction.js.map +1 -0
  22. package/dist/cjs/utilities/createSigmoidRGBTransferFunction.d.ts +3 -0
  23. package/dist/cjs/utilities/createSigmoidRGBTransferFunction.js +29 -0
  24. package/dist/cjs/utilities/createSigmoidRGBTransferFunction.js.map +1 -0
  25. package/dist/cjs/utilities/getVoiFromSigmoidRGBTransferFunction.d.ts +2 -0
  26. package/dist/cjs/utilities/getVoiFromSigmoidRGBTransferFunction.js +22 -0
  27. package/dist/cjs/utilities/getVoiFromSigmoidRGBTransferFunction.js.map +1 -0
  28. package/dist/cjs/utilities/index.d.ts +4 -1
  29. package/dist/cjs/utilities/index.js +7 -1
  30. package/dist/cjs/utilities/index.js.map +1 -1
  31. package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +5 -1
  32. package/dist/esm/RenderingEngine/BaseVolumeViewport.js +57 -7
  33. package/dist/esm/RenderingEngine/BaseVolumeViewport.js.map +1 -1
  34. package/dist/esm/RenderingEngine/StackViewport.d.ts +3 -1
  35. package/dist/esm/RenderingEngine/StackViewport.js +54 -22
  36. package/dist/esm/RenderingEngine/StackViewport.js.map +1 -1
  37. package/dist/esm/enums/VOILUTFunctionType.d.ts +5 -0
  38. package/dist/esm/enums/VOILUTFunctionType.js +7 -0
  39. package/dist/esm/enums/VOILUTFunctionType.js.map +1 -0
  40. package/dist/esm/enums/index.d.ts +2 -1
  41. package/dist/esm/enums/index.js +2 -1
  42. package/dist/esm/enums/index.js.map +1 -1
  43. package/dist/esm/types/EventTypes.d.ts +2 -0
  44. package/dist/esm/types/IImage.d.ts +1 -0
  45. package/dist/esm/types/IVolumeViewport.d.ts +1 -1
  46. package/dist/esm/types/Metadata.d.ts +1 -0
  47. package/dist/esm/types/StackViewportProperties.d.ts +2 -0
  48. package/dist/esm/types/VolumeViewportProperties.d.ts +2 -0
  49. package/dist/esm/utilities/createLinearRGBTransferFunction.d.ts +3 -0
  50. package/dist/esm/utilities/createLinearRGBTransferFunction.js +16 -0
  51. package/dist/esm/utilities/createLinearRGBTransferFunction.js.map +1 -0
  52. package/dist/esm/utilities/createSigmoidRGBTransferFunction.d.ts +3 -0
  53. package/dist/esm/utilities/createSigmoidRGBTransferFunction.js +23 -0
  54. package/dist/esm/utilities/createSigmoidRGBTransferFunction.js.map +1 -0
  55. package/dist/esm/utilities/getVoiFromSigmoidRGBTransferFunction.d.ts +2 -0
  56. package/dist/esm/utilities/getVoiFromSigmoidRGBTransferFunction.js +19 -0
  57. package/dist/esm/utilities/getVoiFromSigmoidRGBTransferFunction.js.map +1 -0
  58. package/dist/esm/utilities/index.d.ts +4 -1
  59. package/dist/esm/utilities/index.js +4 -1
  60. package/dist/esm/utilities/index.js.map +1 -1
  61. package/dist/umd/index.js +1 -1
  62. package/dist/umd/index.js.map +1 -1
  63. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enums/index.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAW5B,iBAXK,gBAAM,CAWL;AAVR,gEAAwC;AAatC,sBAbK,qBAAW,CAaL;AAZb,kEAA0C;AAaxC,uBAbK,sBAAY,CAaL;AAZd,4EAAoD;AAUlD,4BAVK,2BAAiB,CAUL;AATnB,8DAAsC;AAQpC,qBARK,oBAAU,CAQL;AAPZ,wEAAgD;AAW9C,0BAXK,yBAAe,CAWL;AAVjB,sFAA8D;AAW5D,iCAXK,gCAAsB,CAWL;AAVxB,kEAA0C;AAWxC,uBAXK,sBAAY,CAWL;AAVd,gEAAwC;AAWtC,sBAXK,qBAAW,CAWL"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/enums/index.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAY5B,iBAZK,gBAAM,CAYL;AAXR,gEAAwC;AActC,sBAdK,qBAAW,CAcL;AAbb,kEAA0C;AAcxC,uBAdK,sBAAY,CAcL;AAbd,4EAAoD;AAWlD,4BAXK,2BAAiB,CAWL;AAVnB,8DAAsC;AASpC,qBATK,oBAAU,CASL;AARZ,wEAAgD;AAY9C,0BAZK,yBAAe,CAYL;AAXjB,sFAA8D;AAY5D,iCAZK,gCAAsB,CAYL;AAXxB,kEAA0C;AAYxC,uBAZK,sBAAY,CAYL;AAXd,gEAAwC;AAYtC,sBAZK,qBAAW,CAYL;AAXb,8EAAsD;AAYpD,6BAZK,4BAAkB,CAYL"}
@@ -7,6 +7,7 @@ import type ICamera from './ICamera';
7
7
  import type IImage from './IImage';
8
8
  import type IImageVolume from './IImageVolume';
9
9
  import type { VOIRange } from './voi';
10
+ import type VOILUTFunctionType from '../enums/VOILUTFunctionType';
10
11
  declare type CameraModifiedEventDetail = {
11
12
  previousCamera: ICamera;
12
13
  camera: ICamera;
@@ -19,6 +20,7 @@ declare type VoiModifiedEventDetail = {
19
20
  viewportId: string;
20
21
  range: VOIRange;
21
22
  volumeId?: string;
23
+ VOILUTFunction?: VOILUTFunctionType;
22
24
  };
23
25
  declare type ElementDisabledEventDetail = {
24
26
  element: HTMLDivElement;
@@ -20,6 +20,7 @@ interface IImage {
20
20
  intercept: number;
21
21
  windowCenter: number[] | number;
22
22
  windowWidth: number[] | number;
23
+ voiLUTFunction: string;
23
24
  getPixelData: () => Array<number>;
24
25
  getCanvas: () => HTMLCanvasElement;
25
26
  rows: number;
@@ -9,7 +9,7 @@ import { VolumeViewportProperties } from '.';
9
9
  export default interface IVolumeViewport extends IViewport {
10
10
  useCPURendering: boolean;
11
11
  getFrameOfReferenceUID: () => string;
12
- getProperties: () => any;
12
+ getProperties: () => VolumeViewportProperties;
13
13
  canvasToWorld: (canvasPos: Point2) => Point3;
14
14
  worldToCanvas: (worldPos: Point3) => Point2;
15
15
  getCurrentImageIdIndex: () => number;
@@ -14,5 +14,6 @@ declare type Metadata = {
14
14
  Columns: number;
15
15
  Rows: number;
16
16
  voiLut: Array<VOI>;
17
+ VOILUTFunction: string;
17
18
  };
18
19
  export default Metadata;
@@ -1,7 +1,9 @@
1
1
  import InterpolationType from '../enums/InterpolationType';
2
+ import VOILUTFunctionType from '../enums/VOILUTFunctionType';
2
3
  import { VOIRange } from './voi';
3
4
  declare type StackViewportProperties = {
4
5
  voiRange?: VOIRange;
6
+ VOILUTFunction?: VOILUTFunctionType;
5
7
  invert?: boolean;
6
8
  interpolationType?: InterpolationType;
7
9
  rotation?: number;
@@ -1,5 +1,7 @@
1
1
  import { VOIRange } from './voi';
2
+ import VOILUTFunctionType from '../enums/VOILUTFunctionType';
2
3
  declare type VolumeViewportProperties = {
3
4
  voiRange?: VOIRange;
5
+ VOILUTFunction?: VOILUTFunctionType;
4
6
  };
5
7
  export default VolumeViewportProperties;
@@ -0,0 +1,3 @@
1
+ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
2
+ import { VOIRange } from '../types';
3
+ export default function createLinearRGBTransferFunction(voiRange: VOIRange): vtkColorTransferFunction;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ColorTransferFunction_1 = __importDefault(require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"));
7
+ function createLinearRGBTransferFunction(voiRange) {
8
+ const cfun = ColorTransferFunction_1.default.newInstance();
9
+ let lower = 0;
10
+ let upper = 1024;
11
+ if (voiRange &&
12
+ voiRange.lower !== undefined &&
13
+ voiRange.upper !== undefined) {
14
+ lower = voiRange.lower;
15
+ upper = voiRange.upper;
16
+ }
17
+ cfun.addRGBPoint(lower, 0.0, 0.0, 0.0);
18
+ cfun.addRGBPoint(upper, 1.0, 1.0, 1.0);
19
+ return cfun;
20
+ }
21
+ exports.default = createLinearRGBTransferFunction;
22
+ //# sourceMappingURL=createLinearRGBTransferFunction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createLinearRGBTransferFunction.js","sourceRoot":"","sources":["../../../src/utilities/createLinearRGBTransferFunction.ts"],"names":[],"mappings":";;;;;AAAA,iHAA4F;AAG5F,SAAwB,+BAA+B,CACrD,QAAkB;IAElB,MAAM,IAAI,GAAG,+BAAwB,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,IACE,QAAQ;QACR,QAAQ,CAAC,KAAK,KAAK,SAAS;QAC5B,QAAQ,CAAC,KAAK,KAAK,SAAS,EAC5B;QACA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QACvB,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;KACxB;IACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACvC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAEvC,OAAO,IAAI,CAAC;AACd,CAAC;AAlBD,kDAkBC"}
@@ -0,0 +1,3 @@
1
+ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
2
+ import { VOIRange } from '../types';
3
+ export default function createSigmoidRGBTransferFunction(voiRange: VOIRange, approximationNodes?: number): vtkColorTransferFunction;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ColorTransferFunction_1 = __importDefault(require("@kitware/vtk.js/Rendering/Core/ColorTransferFunction"));
7
+ const DataArray_1 = __importDefault(require("@kitware/vtk.js/Common/Core/DataArray"));
8
+ const _1 = require(".");
9
+ function createSigmoidRGBTransferFunction(voiRange, approximationNodes = 1024) {
10
+ const { windowWidth, windowCenter } = _1.windowLevel.toWindowLevel(voiRange.lower, voiRange.upper);
11
+ const sigmoid = (x, wc, ww) => {
12
+ return 1 / (1 + Math.exp((-4 * (x - wc)) / ww));
13
+ };
14
+ const logit = (y, wc, ww) => {
15
+ return wc - (ww / 4) * Math.log((1 - y) / y);
16
+ };
17
+ const range = [...Array(approximationNodes + 2).keys()]
18
+ .map((v) => v / (approximationNodes + 2))
19
+ .slice(1, -1);
20
+ const table = range.reduce((res, y) => {
21
+ const x = logit(y, windowCenter, windowWidth);
22
+ return res.concat(x, y, y, y, 0.5, 0.0);
23
+ }, []);
24
+ const cfun = ColorTransferFunction_1.default.newInstance();
25
+ cfun.buildFunctionFromArray(DataArray_1.default.newInstance({ values: table, numberOfComponents: 6 }));
26
+ return cfun;
27
+ }
28
+ exports.default = createSigmoidRGBTransferFunction;
29
+ //# sourceMappingURL=createSigmoidRGBTransferFunction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSigmoidRGBTransferFunction.js","sourceRoot":"","sources":["../../../src/utilities/createSigmoidRGBTransferFunction.ts"],"names":[],"mappings":";;;;;AAAA,iHAA4F;AAC5F,sFAAiE;AAEjE,wBAAmD;AAoBnD,SAAwB,gCAAgC,CACtD,QAAkB,EAClB,kBAAkB,GAAG,IAAI;IAEzB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,cAAe,CAAC,aAAa,CACjE,QAAQ,CAAC,KAAK,EACd,QAAQ,CAAC,KAAK,CACf,CAAC;IAIF,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE;QACpD,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC;IAQF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE;QAClD,OAAO,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC;IAGF,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAC;SACxC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;QAC9C,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,IAAI,GAAG,+BAAwB,CAAC,WAAW,EAAE,CAAC;IACpD,IAAI,CAAC,sBAAsB,CACzB,mBAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC,CACnE,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAvCD,mDAuCC"}
@@ -0,0 +1,2 @@
1
+ import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
2
+ export default function getVoiFromSigmoidRGBTransferFunction(cfun: vtkColorTransferFunction): [number, number];
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function getVoiFromSigmoidRGBTransferFunction(cfun) {
4
+ let cfunRange = [];
5
+ const [lower, upper] = cfun.getRange();
6
+ cfun.getTable(lower, upper, 1024, cfunRange);
7
+ cfunRange = cfunRange.filter((v, k) => k % 3 === 0);
8
+ const cfunDomain = [...Array(1024).keys()].map((v, k) => {
9
+ return lower + ((upper - lower) / (1024 - 1)) * k;
10
+ });
11
+ const y1 = cfunRange[256];
12
+ const logy1 = Math.log((1 - y1) / y1);
13
+ const x1 = cfunDomain[256];
14
+ const y2 = cfunRange[256 * 3];
15
+ const logy2 = Math.log((1 - y2) / y2);
16
+ const x2 = cfunDomain[256 * 3];
17
+ const ww = Math.round((4 * (x2 - x1)) / (logy1 - logy2));
18
+ const wc = Math.round(x1 + (ww * logy1) / 4);
19
+ return [Math.round(wc - ww / 2), Math.round(wc + ww / 2)];
20
+ }
21
+ exports.default = getVoiFromSigmoidRGBTransferFunction;
22
+ //# sourceMappingURL=getVoiFromSigmoidRGBTransferFunction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVoiFromSigmoidRGBTransferFunction.js","sourceRoot":"","sources":["../../../src/utilities/getVoiFromSigmoidRGBTransferFunction.ts"],"names":[],"mappings":";;AAEA,SAAwB,oCAAoC,CAC1D,IAA8B;IAE9B,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtD,OAAO,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC;IACzD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AApBD,uDAoBC"}
@@ -1,4 +1,7 @@
1
1
  import csUtils from './invertRgbTransferFunction';
2
+ import createSigmoidRGBTransferFunction from './createSigmoidRGBTransferFunction';
3
+ import getVoiFromSigmoidRGBTransferFunction from './getVoiFromSigmoidRGBTransferFunction';
4
+ import createLinearRGBTransferFunction from './createLinearRGBTransferFunction';
2
5
  import scaleRgbTransferFunction from './scaleRgbTransferFunction';
3
6
  import triggerEvent from './triggerEvent';
4
7
  import uuidv4 from './uuidv4';
@@ -35,4 +38,4 @@ import hasNaNValues from './hasNaNValues';
35
38
  import applyPreset from './applyPreset';
36
39
  import * as planar from './planar';
37
40
  import * as windowLevel from './windowLevel';
38
- export { csUtils as invertRgbTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, calibratedPixelSpacingMetadataProvider, uuidv4, planar, getMinMax, getRuntimeId, isEqual, isOpposite, createFloat32SharedArray, createUint8SharedArray, windowLevel, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, loadImageToCanvas, renderToCanvas, worldToImageCoords, imageToWorldCoords, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, };
41
+ export { csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, calibratedPixelSpacingMetadataProvider, uuidv4, planar, getMinMax, getRuntimeId, isEqual, isOpposite, createFloat32SharedArray, createUint8SharedArray, windowLevel, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, loadImageToCanvas, renderToCanvas, worldToImageCoords, imageToWorldCoords, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, };
@@ -26,9 +26,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.applyPreset = exports.hasNaNValues = exports.getViewportImageCornersInWorld = exports.spatialRegistrationMetadataProvider = exports.calculateViewportsSpatialRegistration = exports.getClosestStackImageIndexForPoint = exports.getViewportsWithImageURI = exports.actorIsA = exports.isImageActor = exports.getImageSliceDataForVolumeViewport = exports.snapFocalPointToSlice = exports.getSliceRange = exports.imageToWorldCoords = exports.worldToImageCoords = exports.renderToCanvas = exports.loadImageToCanvas = exports.transformWorldToIndex = exports.getViewportsWithVolumeId = exports.getVolumeViewportsContainingSameVolumes = exports.indexWithinDimensions = exports.getVolumeActorCorners = exports.getTargetVolumeAndSpacingInNormalDir = exports.getSpacingInNormalDirection = exports.getClosestImageId = exports.windowLevel = exports.createUint8SharedArray = exports.createFloat32SharedArray = exports.isOpposite = exports.isEqual = exports.getRuntimeId = exports.getMinMax = exports.planar = exports.uuidv4 = exports.calibratedPixelSpacingMetadataProvider = exports.imageIdToURI = exports.triggerEvent = exports.scaleRgbTransferFunction = exports.invertRgbTransferFunction = void 0;
29
+ exports.applyPreset = exports.hasNaNValues = exports.getViewportImageCornersInWorld = exports.spatialRegistrationMetadataProvider = exports.calculateViewportsSpatialRegistration = exports.getClosestStackImageIndexForPoint = exports.getViewportsWithImageURI = exports.actorIsA = exports.isImageActor = exports.getImageSliceDataForVolumeViewport = exports.snapFocalPointToSlice = exports.getSliceRange = exports.imageToWorldCoords = exports.worldToImageCoords = exports.renderToCanvas = exports.loadImageToCanvas = exports.transformWorldToIndex = exports.getViewportsWithVolumeId = exports.getVolumeViewportsContainingSameVolumes = exports.indexWithinDimensions = exports.getVolumeActorCorners = exports.getTargetVolumeAndSpacingInNormalDir = exports.getSpacingInNormalDirection = exports.getClosestImageId = exports.windowLevel = exports.createUint8SharedArray = exports.createFloat32SharedArray = exports.isOpposite = exports.isEqual = exports.getRuntimeId = exports.getMinMax = exports.planar = exports.uuidv4 = exports.calibratedPixelSpacingMetadataProvider = exports.imageIdToURI = exports.triggerEvent = exports.scaleRgbTransferFunction = exports.createLinearRGBTransferFunction = exports.getVoiFromSigmoidRGBTransferFunction = exports.createSigmoidRGBTransferFunction = exports.invertRgbTransferFunction = void 0;
30
30
  const invertRgbTransferFunction_1 = __importDefault(require("./invertRgbTransferFunction"));
31
31
  exports.invertRgbTransferFunction = invertRgbTransferFunction_1.default;
32
+ const createSigmoidRGBTransferFunction_1 = __importDefault(require("./createSigmoidRGBTransferFunction"));
33
+ exports.createSigmoidRGBTransferFunction = createSigmoidRGBTransferFunction_1.default;
34
+ const getVoiFromSigmoidRGBTransferFunction_1 = __importDefault(require("./getVoiFromSigmoidRGBTransferFunction"));
35
+ exports.getVoiFromSigmoidRGBTransferFunction = getVoiFromSigmoidRGBTransferFunction_1.default;
36
+ const createLinearRGBTransferFunction_1 = __importDefault(require("./createLinearRGBTransferFunction"));
37
+ exports.createLinearRGBTransferFunction = createLinearRGBTransferFunction_1.default;
32
38
  const scaleRgbTransferFunction_1 = __importDefault(require("./scaleRgbTransferFunction"));
33
39
  exports.scaleRgbTransferFunction = scaleRgbTransferFunction_1.default;
34
40
  const triggerEvent_1 = __importDefault(require("./triggerEvent"));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4FAAkD;AAyCrC,oCAzCN,mCAAO,CAyCwB;AAxCtC,0FAAkE;AAyChE,mCAzCK,kCAAwB,CAyCL;AAxC1B,kEAA0C;AAyCxC,uBAzCK,sBAAY,CAyCL;AAxCd,sDAA8B;AA2C5B,iBA3CK,gBAAM,CA2CL;AA1CR,4DAAoC;AA4ClC,oBA5CK,mBAAS,CA4CL;AA3CX,kEAA0C;AA4CxC,uBA5CK,sBAAY,CA4CL;AA3Cd,kEAA0C;AAsCxC,uBAtCK,sBAAY,CAsCL;AArCd,sHAA8F;AAsC5F,iDAtCK,gDAAsC,CAsCL;AArCxC,wDAAgC;AA0C9B,kBA1CK,iBAAO,CA0CL;AAzCT,8DAAsC;AA0CpC,qBA1CK,oBAAU,CA0CL;AAzCZ,sFAA8D;AA2C5D,iCA3CK,gCAAsB,CA2CL;AA1CxB,0FAAkE;AAyChE,mCAzCK,kCAAwB,CAyCL;AAxC1B,4EAAoD;AA2ClD,4BA3CK,2BAAiB,CA2CL;AA1CnB,gGAAwE;AA2CtE,sCA3CK,qCAA2B,CA2CL;AA1C7B,kHAA0F;AA2CxF,+CA3CK,8CAAoC,CA2CL;AA1CtC,oFAA4D;AA2C1D,gCA3CK,+BAAqB,CA2CL;AA1CvB,oFAA4D;AA2C1D,gCA3CK,+BAAqB,CA2CL;AA1CvB,wHAAgG;AA2C9F,kDA3CK,iDAAuC,CA2CL;AA1CzC,0FAAkE;AA2ChE,mCA3CK,kCAAwB,CA2CL;AA1C1B,oFAA4D;AA2C1D,gCA3CK,+BAAqB,CA2CL;AA1CvB,4EAAoD;AA2ClD,4BA3CK,2BAAiB,CA2CL;AA1CnB,sEAA8C;AA2C5C,yBA3CK,wBAAc,CA2CL;AA1ChB,8EAAsD;AA2CpD,6BA3CK,4BAAkB,CA2CL;AA1CpB,8EAAsD;AA2CpD,6BA3CK,4BAAkB,CA2CL;AA1CpB,oEAA4C;AA2C1C,wBA3CK,uBAAa,CA2CL;AA1Cf,oFAA4D;AA2C1D,gCA3CK,+BAAqB,CA2CL;AA1CvB,8GAAsF;AA2CpF,6CA3CK,4CAAkC,CA2CL;AA1CpC,6CAAsD;AA2CpD,6FA3CO,yBAAY,OA2CP;AACZ,yFA5CqB,qBAAQ,OA4CrB;AA3CV,0FAAkE;AA4ChE,mCA5CK,kCAAwB,CA4CL;AA3C1B,4GAAoF;AA4ClF,4CA5CK,2CAAiC,CA4CL;AA3CnC,oHAA4F;AA4C1F,gDA5CK,+CAAqC,CA4CL;AA3CvC,gHAAwF;AA4CtF,8CA5CK,6CAAmC,CA4CL;AA3CrC,sGAA8E;AA4C5E,yCA5CK,wCAA8B,CA4CL;AA3ChC,kEAA0C;AA4CxC,uBA5CK,sBAAY,CA4CL;AA3Cd,gEAAwC;AA4CtC,sBA5CK,qBAAW,CA4CL;AAzCb,iDAAmC;AAUjC,wBAAM;AATR,2DAA6C;AAgB3C,kCAAW"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4FAAkD;AA4CrC,oCA5CN,mCAAO,CA4CwB;AA3CtC,0GAAkF;AA4ChF,2CA5CK,0CAAgC,CA4CL;AA3ClC,kHAA0F;AA4CxF,+CA5CK,8CAAoC,CA4CL;AA3CtC,wGAAgF;AA4C9E,0CA5CK,yCAA+B,CA4CL;AA3CjC,0FAAkE;AA4ChE,mCA5CK,kCAAwB,CA4CL;AA3C1B,kEAA0C;AA4CxC,uBA5CK,sBAAY,CA4CL;AA3Cd,sDAA8B;AA8C5B,iBA9CK,gBAAM,CA8CL;AA7CR,4DAAoC;AA+ClC,oBA/CK,mBAAS,CA+CL;AA9CX,kEAA0C;AA+CxC,uBA/CK,sBAAY,CA+CL;AA9Cd,kEAA0C;AAyCxC,uBAzCK,sBAAY,CAyCL;AAxCd,sHAA8F;AAyC5F,iDAzCK,gDAAsC,CAyCL;AAxCxC,wDAAgC;AA6C9B,kBA7CK,iBAAO,CA6CL;AA5CT,8DAAsC;AA6CpC,qBA7CK,oBAAU,CA6CL;AA5CZ,sFAA8D;AA8C5D,iCA9CK,gCAAsB,CA8CL;AA7CxB,0FAAkE;AA4ChE,mCA5CK,kCAAwB,CA4CL;AA3C1B,4EAAoD;AA8ClD,4BA9CK,2BAAiB,CA8CL;AA7CnB,gGAAwE;AA8CtE,sCA9CK,qCAA2B,CA8CL;AA7C7B,kHAA0F;AA8CxF,+CA9CK,8CAAoC,CA8CL;AA7CtC,oFAA4D;AA8C1D,gCA9CK,+BAAqB,CA8CL;AA7CvB,oFAA4D;AA8C1D,gCA9CK,+BAAqB,CA8CL;AA7CvB,wHAAgG;AA8C9F,kDA9CK,iDAAuC,CA8CL;AA7CzC,0FAAkE;AA8ChE,mCA9CK,kCAAwB,CA8CL;AA7C1B,oFAA4D;AA8C1D,gCA9CK,+BAAqB,CA8CL;AA7CvB,4EAAoD;AA8ClD,4BA9CK,2BAAiB,CA8CL;AA7CnB,sEAA8C;AA8C5C,yBA9CK,wBAAc,CA8CL;AA7ChB,8EAAsD;AA8CpD,6BA9CK,4BAAkB,CA8CL;AA7CpB,8EAAsD;AA8CpD,6BA9CK,4BAAkB,CA8CL;AA7CpB,oEAA4C;AA8C1C,wBA9CK,uBAAa,CA8CL;AA7Cf,oFAA4D;AA8C1D,gCA9CK,+BAAqB,CA8CL;AA7CvB,8GAAsF;AA8CpF,6CA9CK,4CAAkC,CA8CL;AA7CpC,6CAAsD;AA8CpD,6FA9CO,yBAAY,OA8CP;AACZ,yFA/CqB,qBAAQ,OA+CrB;AA9CV,0FAAkE;AA+ChE,mCA/CK,kCAAwB,CA+CL;AA9C1B,4GAAoF;AA+ClF,4CA/CK,2CAAiC,CA+CL;AA9CnC,oHAA4F;AA+C1F,gDA/CK,+CAAqC,CA+CL;AA9CvC,gHAAwF;AA+CtF,8CA/CK,6CAAmC,CA+CL;AA9CrC,sGAA8E;AA+C5E,yCA/CK,wCAA8B,CA+CL;AA9ChC,kEAA0C;AA+CxC,uBA/CK,sBAAY,CA+CL;AA9Cd,gEAAwC;AA+CtC,sBA/CK,qBAAW,CA+CL;AA5Cb,iDAAmC;AAajC,wBAAM;AAZR,2DAA6C;AAmB3C,kCAAW"}
@@ -6,11 +6,15 @@ import { BlendModes, OrientationAxis } from '../enums';
6
6
  declare abstract class BaseVolumeViewport extends Viewport implements IVolumeViewport {
7
7
  useCPURendering: boolean;
8
8
  private _FrameOfReferenceUID;
9
+ private VOILUTFunction;
9
10
  constructor(props: ViewportInput);
10
11
  static get useCustomRenderingPipeline(): boolean;
11
12
  private initializeVolumeNewImageEventDispatcher;
12
13
  protected resetVolumeViewportClippingRange(): void;
13
- setProperties({ voiRange }?: VolumeViewportProperties, volumeId?: string, suppressEvents?: boolean): void;
14
+ private setVOILUTFunction;
15
+ private setVOI;
16
+ setProperties({ voiRange, VOILUTFunction }?: VolumeViewportProperties, volumeId?: string, suppressEvents?: boolean): void;
17
+ getProperties: () => VolumeViewportProperties;
14
18
  setVolumes(volumeInputArray: Array<IVolumeInput>, immediate?: boolean, suppressEvents?: boolean): Promise<void>;
15
19
  addVolumes(volumeInputArray: Array<IVolumeInput>, immediate?: boolean, suppressEvents?: boolean): Promise<void>;
16
20
  removeVolumeActors(actorUIDs: Array<string>, immediate?: boolean): void;
@@ -6,14 +6,37 @@ import volumeNewImageEventDispatcher, { resetVolumeNewImageState, } from './help
6
6
  import { loadVolume } from '../loaders/volumeLoader';
7
7
  import vtkSlabCamera from './vtkClasses/vtkSlabCamera';
8
8
  import { getShouldUseCPURendering } from '../init';
9
- import { Events } from '../enums';
9
+ import { Events, VOILUTFunctionType, } from '../enums';
10
10
  import eventTarget from '../eventTarget';
11
- import { actorIsA, imageIdToURI, triggerEvent } from '../utilities';
11
+ import { actorIsA, imageIdToURI, triggerEvent, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, } from '../utilities';
12
12
  import { RENDERING_DEFAULTS } from '../constants';
13
13
  class BaseVolumeViewport extends Viewport {
14
14
  constructor(props) {
15
15
  super(props);
16
16
  this.useCPURendering = false;
17
+ this.getProperties = () => {
18
+ const actorEntries = this.getActors();
19
+ const voiRanges = actorEntries.map((actorEntry) => {
20
+ const volumeActor = actorEntry.actor;
21
+ const volumeId = actorEntry.uid;
22
+ const cfun = volumeActor.getProperty().getRGBTransferFunction(0);
23
+ let lower, upper;
24
+ if (this.VOILUTFunction === 'SIGMOID') {
25
+ [lower, upper] = getVoiFromSigmoidRGBTransferFunction(cfun);
26
+ }
27
+ else {
28
+ [lower, upper] = cfun.getRange();
29
+ }
30
+ return {
31
+ volumeId,
32
+ voiRange: { lower, upper },
33
+ };
34
+ });
35
+ return {
36
+ voiRange: voiRanges[0].voiRange,
37
+ VOILUTFunction: this.VOILUTFunction,
38
+ };
39
+ };
17
40
  this.getFrameOfReferenceUID = () => {
18
41
  return this._FrameOfReferenceUID;
19
42
  };
@@ -137,7 +160,15 @@ class BaseVolumeViewport extends Viewport {
137
160
  activeCamera.setClippingRange(RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS, RENDERING_DEFAULTS.MAXIMUM_RAY_DISTANCE);
138
161
  }
139
162
  }
140
- setProperties({ voiRange } = {}, volumeId, suppressEvents = false) {
163
+ setVOILUTFunction(voiLUTFunction, volumeId, suppressEvents) {
164
+ if (Object.values(VOILUTFunctionType).indexOf(voiLUTFunction) === -1) {
165
+ voiLUTFunction = VOILUTFunctionType.LINEAR;
166
+ }
167
+ const { voiRange } = this.getProperties();
168
+ this.VOILUTFunction = voiLUTFunction;
169
+ this.setVOI(voiRange, volumeId, suppressEvents);
170
+ }
171
+ setVOI(voiRange, volumeId, suppressEvents = false) {
141
172
  if (volumeId !== undefined && !this.getActor(volumeId)) {
142
173
  return;
143
174
  }
@@ -156,20 +187,39 @@ class BaseVolumeViewport extends Viewport {
156
187
  volumeActor = actorEntries[0].actor;
157
188
  volumeId = actorEntries[0].uid;
158
189
  }
159
- if (!voiRange) {
160
- return;
190
+ let voiRangeToUse = voiRange;
191
+ if (typeof voiRangeToUse === 'undefined') {
192
+ const imageData = volumeActor.getMapper().getInputData();
193
+ const range = imageData.getPointData().getScalars().getRange();
194
+ const maxVoiRange = { lower: range[0], upper: range[1] };
195
+ voiRangeToUse = maxVoiRange;
196
+ }
197
+ if (this.VOILUTFunction === VOILUTFunctionType.SAMPLED_SIGMOID) {
198
+ const cfun = createSigmoidRGBTransferFunction(voiRangeToUse);
199
+ volumeActor.getProperty().setRGBTransferFunction(0, cfun);
200
+ }
201
+ else {
202
+ const cfun = createLinearRGBTransferFunction(voiRangeToUse);
203
+ volumeActor.getProperty().setRGBTransferFunction(0, cfun);
161
204
  }
162
- const { lower, upper } = voiRange;
163
- volumeActor.getProperty().getRGBTransferFunction(0).setRange(lower, upper);
164
205
  if (!suppressEvents) {
165
206
  const eventDetail = {
166
207
  viewportId: this.id,
167
208
  range: voiRange,
168
209
  volumeId: volumeId,
210
+ VOILUTFunction: this.VOILUTFunction,
169
211
  };
170
212
  triggerEvent(this.element, Events.VOI_MODIFIED, eventDetail);
171
213
  }
172
214
  }
215
+ setProperties({ voiRange, VOILUTFunction } = {}, volumeId, suppressEvents = false) {
216
+ if (voiRange) {
217
+ this.setVOI(voiRange, volumeId, suppressEvents);
218
+ }
219
+ if (VOILUTFunction) {
220
+ this.setVOILUTFunction(VOILUTFunction, volumeId, suppressEvents);
221
+ }
222
+ }
173
223
  async setVolumes(volumeInputArray, immediate = false, suppressEvents = false) {
174
224
  const firstImageVolume = cache.getVolume(volumeInputArray[0].volumeId);
175
225
  if (!firstImageVolume) {
@@ -1 +1 @@
1
- {"version":3,"file":"BaseVolumeViewport.js","sourceRoot":"","sources":["../../../src/RenderingEngine/BaseVolumeViewport.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseVolumeViewport.js","sourceRoot":"","sources":["../../../src/RenderingEngine/BaseVolumeViewport.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@ declare class StackViewport extends Viewport implements IStackViewport {
7
7
  private targetImageIdIndex;
8
8
  private debouncedTimeout;
9
9
  private voiRange;
10
+ private VOILUTFunction;
10
11
  private initialVOIRange;
11
12
  private invert;
12
13
  private interpolationType;
@@ -36,7 +37,7 @@ declare class StackViewport extends Viewport implements IStackViewport {
36
37
  private createActorMapper;
37
38
  private buildMetadata;
38
39
  private calibrateIfNecessary;
39
- setProperties({ voiRange, invert, interpolationType, rotation, }?: StackViewportProperties, suppressEvents?: boolean): void;
40
+ setProperties({ voiRange, VOILUTFunction, invert, interpolationType, rotation, }?: StackViewportProperties, suppressEvents?: boolean): void;
40
41
  getProperties: () => StackViewportProperties;
41
42
  resetProperties(): void;
42
43
  getCamera(): ICamera;
@@ -51,6 +52,7 @@ declare class StackViewport extends Viewport implements IStackViewport {
51
52
  private getRotationCPU;
52
53
  private getRotationGPU;
53
54
  private setRotation;
55
+ private setVOILUTFunction;
54
56
  private setInterpolationType;
55
57
  private setInvertColor;
56
58
  private setRotationCPU;
@@ -5,17 +5,17 @@ import vtkCamera from '@kitware/vtk.js/Rendering/Core/Camera';
5
5
  import { vec2, vec3, mat4 } from 'gl-matrix';
6
6
  import vtkImageMapper from '@kitware/vtk.js/Rendering/Core/ImageMapper';
7
7
  import vtkImageSlice from '@kitware/vtk.js/Rendering/Core/ImageSlice';
8
- import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction';
9
8
  import * as metaData from '../metaData';
10
9
  import Viewport from './Viewport';
11
10
  import eventTarget from '../eventTarget';
12
11
  import Events from '../enums/Events';
13
- import { triggerEvent, isEqual, invertRgbTransferFunction, windowLevel as windowLevelUtil, imageIdToURI, isImageActor, actorIsA, } from '../utilities';
12
+ import { triggerEvent, isEqual, invertRgbTransferFunction, createSigmoidRGBTransferFunction, windowLevel as windowLevelUtil, imageIdToURI, isImageActor, actorIsA, } from '../utilities';
14
13
  import drawImageSync from './helpers/cpuFallback/drawImageSync';
15
14
  import { getColormap } from './helpers/cpuFallback/colors/index';
16
15
  import { loadAndCacheImage } from '../loaders/imageLoader';
17
16
  import imageLoadPoolManager from '../requestPool/imageLoadPoolManager';
18
17
  import InterpolationType from '../enums/InterpolationType';
18
+ import VOILUTFunctionType from '../enums/VOILUTFunctionType';
19
19
  import canvasToPixel from './helpers/cpuFallback/rendering/canvasToPixel';
20
20
  import pixelToCanvas from './helpers/cpuFallback/rendering/pixelToCanvas';
21
21
  import getDefaultViewport from './helpers/cpuFallback/rendering/getDefaultViewport';
@@ -28,6 +28,7 @@ import RequestType from '../enums/RequestType';
28
28
  import cache from '../cache';
29
29
  import correctShift from './helpers/cpuFallback/rendering/correctShift';
30
30
  import isRgbaSourceRgbDest from './helpers/isRgbaSourceRgbDest';
31
+ import createLinearRGBTransferFunction from '../utilities/createLinearRGBTransferFunction';
31
32
  const EPSILON = 1;
32
33
  class StackViewport extends Viewport {
33
34
  constructor(props) {
@@ -71,6 +72,7 @@ class StackViewport extends Viewport {
71
72
  return {
72
73
  voiRange: this.voiRange,
73
74
  rotation: this.getRotation(),
75
+ VOILUTFunction: this.VOILUTFunction,
74
76
  interpolationType: this.interpolationType,
75
77
  invert: this.invert,
76
78
  };
@@ -333,15 +335,18 @@ class StackViewport extends Viewport {
333
335
  buildMetadata(imageId) {
334
336
  const { pixelRepresentation, bitsAllocated, bitsStored, highBit, photometricInterpretation, samplesPerPixel, } = metaData.get('imagePixelModule', imageId);
335
337
  const voiLutModule = metaData.get('voiLutModule', imageId);
336
- let windowWidth, windowCenter;
338
+ let windowWidth, windowCenter, voiLUTFunction;
337
339
  if (voiLutModule) {
338
- ({ windowWidth, windowCenter } = voiLutModule);
340
+ ({ windowWidth, windowCenter, voiLUTFunction } = voiLutModule);
339
341
  if (Array.isArray(windowWidth)) {
340
342
  windowWidth = windowWidth[0];
341
343
  }
342
344
  if (Array.isArray(windowCenter)) {
343
345
  windowCenter = windowCenter[0];
344
346
  }
347
+ if (Object.values(VOILUTFunctionType).indexOf(voiLUTFunction) === -1) {
348
+ voiLUTFunction = VOILUTFunctionType.LINEAR;
349
+ }
345
350
  }
346
351
  const { modality } = metaData.get('generalSeriesModule', imageId);
347
352
  const imageIdScalingFactor = metaData.get('scalingModule', imageId);
@@ -364,6 +369,7 @@ class StackViewport extends Viewport {
364
369
  pixelRepresentation,
365
370
  windowWidth,
366
371
  windowCenter,
372
+ voiLUTFunction,
367
373
  modality,
368
374
  },
369
375
  };
@@ -411,10 +417,13 @@ class StackViewport extends Viewport {
411
417
  };
412
418
  return imagePlaneModule;
413
419
  }
414
- setProperties({ voiRange, invert, interpolationType, rotation, } = {}, suppressEvents = false) {
420
+ setProperties({ voiRange, VOILUTFunction, invert, interpolationType, rotation, } = {}, suppressEvents = false) {
415
421
  if (typeof voiRange !== 'undefined' || !this.voiApplied) {
416
422
  this.setVOI(voiRange, suppressEvents);
417
423
  }
424
+ if (typeof VOILUTFunction !== 'undefined') {
425
+ this.setVOILUTFunction(VOILUTFunction, suppressEvents);
426
+ }
418
427
  if (typeof invert !== 'undefined') {
419
428
  this.setInvertColor(invert);
420
429
  }
@@ -580,6 +589,17 @@ class StackViewport extends Viewport {
580
589
  };
581
590
  triggerEvent(this.element, Events.CAMERA_MODIFIED, eventDetail);
582
591
  }
592
+ setVOILUTFunction(voiLUTFunction, suppressEvents) {
593
+ if (this.useCPURendering) {
594
+ throw new Error('VOI LUT function is not supported in CPU rendering');
595
+ }
596
+ if (Object.values(VOILUTFunctionType).indexOf(voiLUTFunction) === -1) {
597
+ voiLUTFunction = VOILUTFunctionType.LINEAR;
598
+ }
599
+ this.VOILUTFunction = voiLUTFunction;
600
+ const { voiRange } = this.getProperties();
601
+ this.setVOI(voiRange, suppressEvents);
602
+ }
583
603
  setInterpolationType(interpolationType) {
584
604
  if (this.useCPURendering) {
585
605
  this.setInterpolationTypeCPU(interpolationType);
@@ -716,17 +736,31 @@ class StackViewport extends Viewport {
716
736
  if (typeof voiRangeToUse === 'undefined') {
717
737
  const imageData = imageActor.getMapper().getInputData();
718
738
  const range = imageData.getPointData().getScalars().getRange();
719
- voiRangeToUse = { lower: range[0], upper: range[1] };
739
+ const maxVoiRange = { lower: range[0], upper: range[1] };
740
+ voiRangeToUse = maxVoiRange;
741
+ }
742
+ imageActor.getProperty().setUseLookupTableScalarRange(true);
743
+ if (this.VOILUTFunction === VOILUTFunctionType.SAMPLED_SIGMOID) {
744
+ const cfun = createSigmoidRGBTransferFunction(voiRangeToUse);
745
+ if (this.invert) {
746
+ invertRgbTransferFunction(cfun);
747
+ }
748
+ imageActor.getProperty().setRGBTransferFunction(0, cfun);
749
+ }
750
+ else {
751
+ const cfun = createLinearRGBTransferFunction(voiRangeToUse);
752
+ if (this.invert) {
753
+ invertRgbTransferFunction(cfun);
754
+ }
755
+ imageActor.getProperty().setRGBTransferFunction(0, cfun);
720
756
  }
721
- const { windowWidth, windowCenter } = windowLevelUtil.toWindowLevel(voiRangeToUse.lower, voiRangeToUse.upper);
722
- imageActor.getProperty().setColorWindow(windowWidth);
723
- imageActor.getProperty().setColorLevel(windowCenter);
724
757
  this.voiApplied = true;
725
758
  this.voiRange = voiRangeToUse;
726
759
  if (!suppressEvents) {
727
760
  const eventDetail = {
728
761
  viewportId: this.id,
729
762
  range: voiRangeToUse,
763
+ VOILUTFunction: this.VOILUTFunction,
730
764
  };
731
765
  triggerEvent(this.element, Events.VOI_MODIFIED, eventDetail);
732
766
  }
@@ -1083,7 +1117,7 @@ class StackViewport extends Viewport {
1083
1117
  this.resetCameraNoEvent();
1084
1118
  this.triggerCameraEvent(this.getCamera(), previousCameraProps);
1085
1119
  activeCamera.setFreezeFocalPoint(true);
1086
- const { windowCenter, windowWidth } = imagePixelModule;
1120
+ const { windowCenter, windowWidth, voiLUTFunction } = imagePixelModule;
1087
1121
  let voiRange = typeof windowCenter === 'number' && typeof windowWidth === 'number'
1088
1122
  ? windowLevelUtil.toLowHighRange(windowWidth, windowCenter)
1089
1123
  : undefined;
@@ -1095,19 +1129,17 @@ class StackViewport extends Viewport {
1095
1129
  if (this.voiApplied && typeof voiRange === 'undefined') {
1096
1130
  voiRange = this.voiRange;
1097
1131
  }
1132
+ if (Object.values(VOILUTFunctionType).indexOf(voiLUTFunction) === -1) {
1133
+ this.VOILUTFunction = VOILUTFunctionType.LINEAR;
1134
+ }
1135
+ else {
1136
+ this.VOILUTFunction = voiLUTFunction;
1137
+ }
1098
1138
  this.setProperties({ voiRange });
1099
- const cfun = vtkColorTransferFunction.newInstance();
1100
- let lower = 0;
1101
- let upper = 1024;
1102
- if (voiRange &&
1103
- voiRange.lower !== undefined &&
1104
- voiRange.upper !== undefined) {
1105
- lower = voiRange.lower;
1106
- upper = voiRange.upper;
1107
- }
1108
- cfun.addRGBPoint(lower, 0.0, 0.0, 0.0);
1109
- cfun.addRGBPoint(upper, 1.0, 1.0, 1.0);
1110
- actor.getProperty().setRGBTransferFunction(0, cfun);
1139
+ if (actor.getProperty().getRGBTransferFunction(0) === null) {
1140
+ const cfun = createLinearRGBTransferFunction(voiRange);
1141
+ actor.getProperty().setRGBTransferFunction(0, cfun);
1142
+ }
1111
1143
  let invert = false;
1112
1144
  if (imagePixelModule.photometricInterpretation === 'MONOCHROME1') {
1113
1145
  invert = true;