@cornerstonejs/core 0.33.1 → 0.34.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 (27) hide show
  1. package/dist/cjs/utilities/getTargetVolumeAndSpacingInNormalDir.d.ts +1 -0
  2. package/dist/cjs/utilities/getTargetVolumeAndSpacingInNormalDir.js +22 -7
  3. package/dist/cjs/utilities/getTargetVolumeAndSpacingInNormalDir.js.map +1 -1
  4. package/dist/cjs/utilities/getVolumeSliceRangeInfo.d.ts +7 -0
  5. package/dist/cjs/utilities/getVolumeSliceRangeInfo.js +29 -0
  6. package/dist/cjs/utilities/getVolumeSliceRangeInfo.js.map +1 -0
  7. package/dist/cjs/utilities/getVolumeViewportScrollInfo.d.ts +6 -0
  8. package/dist/cjs/utilities/getVolumeViewportScrollInfo.js +17 -0
  9. package/dist/cjs/utilities/getVolumeViewportScrollInfo.js.map +1 -0
  10. package/dist/cjs/utilities/index.d.ts +3 -1
  11. package/dist/cjs/utilities/index.js +5 -1
  12. package/dist/cjs/utilities/index.js.map +1 -1
  13. package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.d.ts +1 -0
  14. package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.js +22 -7
  15. package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.js.map +1 -1
  16. package/dist/esm/utilities/getVolumeSliceRangeInfo.d.ts +7 -0
  17. package/dist/esm/utilities/getVolumeSliceRangeInfo.js +24 -0
  18. package/dist/esm/utilities/getVolumeSliceRangeInfo.js.map +1 -0
  19. package/dist/esm/utilities/getVolumeViewportScrollInfo.d.ts +6 -0
  20. package/dist/esm/utilities/getVolumeViewportScrollInfo.js +12 -0
  21. package/dist/esm/utilities/getVolumeViewportScrollInfo.js.map +1 -0
  22. package/dist/esm/utilities/index.d.ts +3 -1
  23. package/dist/esm/utilities/index.js +3 -1
  24. package/dist/esm/utilities/index.js.map +1 -1
  25. package/dist/umd/index.js +1 -1
  26. package/dist/umd/index.js.map +1 -1
  27. package/package.json +2 -2
@@ -2,4 +2,5 @@ import { ICamera, IImageVolume, IVolumeViewport } from '../types';
2
2
  export default function getTargetVolumeAndSpacingInNormalDir(viewport: IVolumeViewport, camera: ICamera, targetVolumeId?: string): {
3
3
  imageVolume: IImageVolume;
4
4
  spacingInNormalDirection: number;
5
+ actorUID: string;
5
6
  };
@@ -4,38 +4,53 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const cache_1 = __importDefault(require("../cache/cache"));
7
+ const constants_1 = require("../constants");
7
8
  const getSpacingInNormalDirection_1 = __importDefault(require("./getSpacingInNormalDirection"));
9
+ const EPSILON_PART = 1 + constants_1.EPSILON;
8
10
  function getTargetVolumeAndSpacingInNormalDir(viewport, camera, targetVolumeId) {
9
11
  const { viewPlaneNormal } = camera;
10
12
  const volumeActors = viewport.getActors();
11
13
  if (!volumeActors || !volumeActors.length) {
12
- return { spacingInNormalDirection: null, imageVolume: null };
14
+ return {
15
+ spacingInNormalDirection: null,
16
+ imageVolume: null,
17
+ actorUID: null,
18
+ };
13
19
  }
14
20
  const imageVolumes = volumeActors
15
21
  .map((va) => {
16
22
  var _a;
17
- const uid = (_a = va.referenceId) !== null && _a !== void 0 ? _a : va.uid;
18
- return cache_1.default.getVolume(uid);
23
+ const actorUID = (_a = va.referenceId) !== null && _a !== void 0 ? _a : va.uid;
24
+ return cache_1.default.getVolume(actorUID);
19
25
  })
20
26
  .filter((iv) => !!iv);
21
27
  if (targetVolumeId) {
22
- const imageVolume = imageVolumes.find((iv) => iv.volumeId === targetVolumeId);
28
+ const imageVolumeIndex = imageVolumes.findIndex((iv) => iv.volumeId === targetVolumeId);
29
+ const imageVolume = imageVolumes[imageVolumeIndex];
30
+ const { uid: actorUID } = volumeActors[imageVolumeIndex];
23
31
  const spacingInNormalDirection = (0, getSpacingInNormalDirection_1.default)(imageVolume, viewPlaneNormal);
24
- return { imageVolume, spacingInNormalDirection };
32
+ return { imageVolume, spacingInNormalDirection, actorUID };
25
33
  }
26
34
  if (!imageVolumes.length) {
27
- return { spacingInNormalDirection: null, imageVolume: null };
35
+ return {
36
+ spacingInNormalDirection: null,
37
+ imageVolume: null,
38
+ actorUID: null,
39
+ };
28
40
  }
29
41
  const smallest = {
30
42
  spacingInNormalDirection: Infinity,
31
43
  imageVolume: null,
44
+ actorUID: null,
32
45
  };
33
46
  for (let i = 0; i < imageVolumes.length; i++) {
34
47
  const imageVolume = imageVolumes[i];
35
48
  const spacingInNormalDirection = (0, getSpacingInNormalDirection_1.default)(imageVolume, viewPlaneNormal);
36
- if (spacingInNormalDirection < smallest.spacingInNormalDirection) {
49
+ if (spacingInNormalDirection * EPSILON_PART <
50
+ smallest.spacingInNormalDirection) {
37
51
  smallest.spacingInNormalDirection = spacingInNormalDirection;
38
52
  smallest.imageVolume = imageVolume;
53
+ smallest.actorUID = volumeActors[i].uid;
39
54
  }
40
55
  }
41
56
  return smallest;
@@ -1 +1 @@
1
- {"version":3,"file":"getTargetVolumeAndSpacingInNormalDir.js","sourceRoot":"","sources":["../../../src/utilities/getTargetVolumeAndSpacingInNormalDir.ts"],"names":[],"mappings":";;;;;AAAA,2DAAmC;AAGnC,gGAAwE;AAiBxE,SAAwB,oCAAoC,CAC1D,QAAyB,EACzB,MAAe,EACf,cAAuB;IAKvB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAE1C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACzC,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;KAC9D;IAED,MAAM,YAAY,GAAG,YAAY;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;;QAGV,MAAM,GAAG,GAAG,MAAA,EAAE,CAAC,WAAW,mCAAI,EAAE,CAAC,GAAG,CAAC;QACrC,OAAO,eAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAGxB,IAAI,cAAc,EAAE;QAClB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CACnC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,cAAc,CACvC,CAAC;QAEF,MAAM,wBAAwB,GAAG,IAAA,qCAA2B,EAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAEF,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;KAClD;IAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;KAC9D;IAGD,MAAM,QAAQ,GAAG;QACf,wBAAwB,EAAE,QAAQ;QAClC,WAAW,EAAE,IAAI;KAClB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,wBAAwB,GAAG,IAAA,qCAA2B,EAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAEF,IAAI,wBAAwB,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YAChE,QAAQ,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;YAC7D,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;SACpC;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AA/DD,uDA+DC"}
1
+ {"version":3,"file":"getTargetVolumeAndSpacingInNormalDir.js","sourceRoot":"","sources":["../../../src/utilities/getTargetVolumeAndSpacingInNormalDir.ts"],"names":[],"mappings":";;;;;AAAA,2DAAmC;AACnC,4CAAuC;AAGvC,gGAAwE;AAGxE,MAAM,YAAY,GAAG,CAAC,GAAG,mBAAO,CAAC;AAiBjC,SAAwB,oCAAoC,CAC1D,QAAyB,EACzB,MAAe,EACf,cAAuB;IAMvB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAE1C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACzC,OAAO;YACL,wBAAwB,EAAE,IAAI;YAC9B,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IAED,MAAM,YAAY,GAAG,YAAY;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;;QAGV,MAAM,QAAQ,GAAG,MAAA,EAAE,CAAC,WAAW,mCAAI,EAAE,CAAC,GAAG,CAAC;QAC1C,OAAO,eAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAGxB,IAAI,cAAc,EAAE;QAClB,MAAM,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAC7C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,cAAc,CACvC,CAAC;QAEF,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,wBAAwB,GAAG,IAAA,qCAA2B,EAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAEF,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAC;KAC5D;IAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACxB,OAAO;YACL,wBAAwB,EAAE,IAAI;YAC9B,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IAGD,MAAM,QAAQ,GAAG;QACf,wBAAwB,EAAE,QAAQ;QAClC,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,wBAAwB,GAAG,IAAA,qCAA2B,EAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAKF,IACE,wBAAwB,GAAG,YAAY;YACvC,QAAQ,CAAC,wBAAwB,EACjC;YACA,QAAQ,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;YAC7D,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;YACnC,QAAQ,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SACzC;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAlFD,uDAkFC"}
@@ -0,0 +1,7 @@
1
+ import { ActorSliceRange, IVolumeViewport, ICamera } from '../types';
2
+ declare function getVolumeSliceRangeInfo(viewport: IVolumeViewport, volumeId: string): {
3
+ sliceRange: ActorSliceRange;
4
+ spacingInNormalDirection: number;
5
+ camera: ICamera;
6
+ };
7
+ export default getVolumeSliceRangeInfo;
@@ -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 getSliceRange_1 = __importDefault(require("./getSliceRange"));
7
+ const getTargetVolumeAndSpacingInNormalDir_1 = __importDefault(require("./getTargetVolumeAndSpacingInNormalDir"));
8
+ function getVolumeSliceRangeInfo(viewport, volumeId) {
9
+ const camera = viewport.getCamera();
10
+ const { focalPoint, viewPlaneNormal } = camera;
11
+ const { spacingInNormalDirection, actorUID } = (0, getTargetVolumeAndSpacingInNormalDir_1.default)(viewport, camera, volumeId);
12
+ if (!actorUID) {
13
+ throw new Error(`Could not find image volume with id ${volumeId} in the viewport`);
14
+ }
15
+ const actorEntry = viewport.getActor(actorUID);
16
+ if (!actorEntry) {
17
+ console.warn('No actor found for with actorUID of', actorUID);
18
+ return null;
19
+ }
20
+ const volumeActor = actorEntry.actor;
21
+ const sliceRange = (0, getSliceRange_1.default)(volumeActor, viewPlaneNormal, focalPoint);
22
+ return {
23
+ sliceRange,
24
+ spacingInNormalDirection,
25
+ camera,
26
+ };
27
+ }
28
+ exports.default = getVolumeSliceRangeInfo;
29
+ //# sourceMappingURL=getVolumeSliceRangeInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVolumeSliceRangeInfo.js","sourceRoot":"","sources":["../../../src/utilities/getVolumeSliceRangeInfo.ts"],"names":[],"mappings":";;;;;AAAA,oEAA4C;AAC5C,kHAA0F;AAc1F,SAAS,uBAAuB,CAC9B,QAAyB,EACzB,QAAgB;IAMhB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAC/C,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,GAC1C,IAAA,8CAAoC,EAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEnE,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,kBAAkB,CAClE,CAAC;KACH;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;KACb;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,KAAoB,CAAC;IACpD,MAAM,UAAU,GAAG,IAAA,uBAAa,EAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAE3E,OAAO;QACL,UAAU;QACV,wBAAwB;QACxB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,kBAAe,uBAAuB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { IVolumeViewport } from '../types';
2
+ declare function getVolumeViewportScrollInfo(viewport: IVolumeViewport, volumeId: string): {
3
+ numScrollSteps: number;
4
+ currentStepIndex: number;
5
+ };
6
+ export default getVolumeViewportScrollInfo;
@@ -0,0 +1,17 @@
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 getVolumeSliceRangeInfo_1 = __importDefault(require("./getVolumeSliceRangeInfo"));
7
+ function getVolumeViewportScrollInfo(viewport, volumeId) {
8
+ const { sliceRange, spacingInNormalDirection } = (0, getVolumeSliceRangeInfo_1.default)(viewport, volumeId);
9
+ const { min, max, current } = sliceRange;
10
+ const numScrollSteps = Math.round((max - min) / spacingInNormalDirection);
11
+ const fraction = (current - min) / (max - min);
12
+ const floatingStepNumber = fraction * numScrollSteps;
13
+ const currentStepIndex = Math.round(floatingStepNumber);
14
+ return { numScrollSteps, currentStepIndex };
15
+ }
16
+ exports.default = getVolumeViewportScrollInfo;
17
+ //# sourceMappingURL=getVolumeViewportScrollInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVolumeViewportScrollInfo.js","sourceRoot":"","sources":["../../../src/utilities/getVolumeViewportScrollInfo.ts"],"names":[],"mappings":";;;;;AACA,wFAAgE;AAQhE,SAAS,2BAA2B,CAClC,QAAyB,EACzB,QAAgB;IAEhB,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAE,GAAG,IAAA,iCAAuB,EACtE,QAAQ,EACR,QAAQ,CACT,CAAC;IAEF,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAGzC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,wBAAwB,CAAC,CAAC;IAG1E,MAAM,QAAQ,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAC/C,MAAM,kBAAkB,GAAG,QAAQ,GAAG,cAAc,CAAC;IACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAExD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAC9C,CAAC;AAED,kBAAe,2BAA2B,CAAC"}
@@ -25,6 +25,8 @@ import loadImageToCanvas from './loadImageToCanvas';
25
25
  import renderToCanvas from './renderToCanvas';
26
26
  import worldToImageCoords from './worldToImageCoords';
27
27
  import imageToWorldCoords from './imageToWorldCoords';
28
+ import getVolumeSliceRangeInfo from './getVolumeSliceRangeInfo';
29
+ import getVolumeViewportScrollInfo from './getVolumeViewportScrollInfo';
28
30
  import getSliceRange from './getSliceRange';
29
31
  import snapFocalPointToSlice from './snapFocalPointToSlice';
30
32
  import getImageSliceDataForVolumeViewport from './getImageSliceDataForVolumeViewport';
@@ -38,4 +40,4 @@ import hasNaNValues from './hasNaNValues';
38
40
  import applyPreset from './applyPreset';
39
41
  import * as planar from './planar';
40
42
  import * as windowLevel from './windowLevel';
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, };
43
+ 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, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, };
@@ -26,7 +26,7 @@ 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.createLinearRGBTransferFunction = exports.getVoiFromSigmoidRGBTransferFunction = exports.createSigmoidRGBTransferFunction = 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.getVolumeViewportScrollInfo = exports.getVolumeSliceRangeInfo = 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
32
  const createSigmoidRGBTransferFunction_1 = __importDefault(require("./createSigmoidRGBTransferFunction"));
@@ -81,6 +81,10 @@ const worldToImageCoords_1 = __importDefault(require("./worldToImageCoords"));
81
81
  exports.worldToImageCoords = worldToImageCoords_1.default;
82
82
  const imageToWorldCoords_1 = __importDefault(require("./imageToWorldCoords"));
83
83
  exports.imageToWorldCoords = imageToWorldCoords_1.default;
84
+ const getVolumeSliceRangeInfo_1 = __importDefault(require("./getVolumeSliceRangeInfo"));
85
+ exports.getVolumeSliceRangeInfo = getVolumeSliceRangeInfo_1.default;
86
+ const getVolumeViewportScrollInfo_1 = __importDefault(require("./getVolumeViewportScrollInfo"));
87
+ exports.getVolumeViewportScrollInfo = getVolumeViewportScrollInfo_1.default;
84
88
  const getSliceRange_1 = __importDefault(require("./getSliceRange"));
85
89
  exports.getSliceRange = getSliceRange_1.default;
86
90
  const snapFocalPointToSlice_1 = __importDefault(require("./snapFocalPointToSlice"));
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4FAAkD;AA8CrC,oCA9CN,mCAAO,CA8CwB;AA7CtC,0GAAkF;AA8ChF,2CA9CK,0CAAgC,CA8CL;AA7ClC,kHAA0F;AA8CxF,+CA9CK,8CAAoC,CA8CL;AA7CtC,wGAAgF;AA8C9E,0CA9CK,yCAA+B,CA8CL;AA7CjC,0FAAkE;AA8ChE,mCA9CK,kCAAwB,CA8CL;AA7C1B,kEAA0C;AA8CxC,uBA9CK,sBAAY,CA8CL;AA7Cd,sDAA8B;AAgD5B,iBAhDK,gBAAM,CAgDL;AA/CR,4DAAoC;AAiDlC,oBAjDK,mBAAS,CAiDL;AAhDX,kEAA0C;AAiDxC,uBAjDK,sBAAY,CAiDL;AAhDd,kEAA0C;AA2CxC,uBA3CK,sBAAY,CA2CL;AA1Cd,sHAA8F;AA2C5F,iDA3CK,gDAAsC,CA2CL;AA1CxC,wDAAgC;AA+C9B,kBA/CK,iBAAO,CA+CL;AA9CT,8DAAsC;AA+CpC,qBA/CK,oBAAU,CA+CL;AA9CZ,sFAA8D;AAgD5D,iCAhDK,gCAAsB,CAgDL;AA/CxB,0FAAkE;AA8ChE,mCA9CK,kCAAwB,CA8CL;AA7C1B,4EAAoD;AAgDlD,4BAhDK,2BAAiB,CAgDL;AA/CnB,gGAAwE;AAgDtE,sCAhDK,qCAA2B,CAgDL;AA/C7B,kHAA0F;AAgDxF,+CAhDK,8CAAoC,CAgDL;AA/CtC,oFAA4D;AAgD1D,gCAhDK,+BAAqB,CAgDL;AA/CvB,oFAA4D;AAgD1D,gCAhDK,+BAAqB,CAgDL;AA/CvB,wHAAgG;AAgD9F,kDAhDK,iDAAuC,CAgDL;AA/CzC,0FAAkE;AAgDhE,mCAhDK,kCAAwB,CAgDL;AA/C1B,oFAA4D;AAgD1D,gCAhDK,+BAAqB,CAgDL;AA/CvB,4EAAoD;AAgDlD,4BAhDK,2BAAiB,CAgDL;AA/CnB,sEAA8C;AAgD5C,yBAhDK,wBAAc,CAgDL;AA/ChB,8EAAsD;AAgDpD,6BAhDK,4BAAkB,CAgDL;AA/CpB,8EAAsD;AAgDpD,6BAhDK,4BAAkB,CAgDL;AA/CpB,wFAAgE;AAgD9D,kCAhDK,iCAAuB,CAgDL;AA/CzB,gGAAwE;AAgDtE,sCAhDK,qCAA2B,CAgDL;AA/C7B,oEAA4C;AAgD1C,wBAhDK,uBAAa,CAgDL;AA/Cf,oFAA4D;AAgD1D,gCAhDK,+BAAqB,CAgDL;AA/CvB,8GAAsF;AAgDpF,6CAhDK,4CAAkC,CAgDL;AA/CpC,6CAAsD;AAgDpD,6FAhDO,yBAAY,OAgDP;AACZ,yFAjDqB,qBAAQ,OAiDrB;AAhDV,0FAAkE;AAiDhE,mCAjDK,kCAAwB,CAiDL;AAhD1B,4GAAoF;AAiDlF,4CAjDK,2CAAiC,CAiDL;AAhDnC,oHAA4F;AAiD1F,gDAjDK,+CAAqC,CAiDL;AAhDvC,gHAAwF;AAiDtF,8CAjDK,6CAAmC,CAiDL;AAhDrC,sGAA8E;AAiD5E,yCAjDK,wCAA8B,CAiDL;AAhDhC,kEAA0C;AAiDxC,uBAjDK,sBAAY,CAiDL;AAhDd,gEAAwC;AAiDtC,sBAjDK,qBAAW,CAiDL;AA9Cb,iDAAmC;AAajC,wBAAM;AAZR,2DAA6C;AAmB3C,kCAAW"}
@@ -2,4 +2,5 @@ import { ICamera, IImageVolume, IVolumeViewport } from '../types';
2
2
  export default function getTargetVolumeAndSpacingInNormalDir(viewport: IVolumeViewport, camera: ICamera, targetVolumeId?: string): {
3
3
  imageVolume: IImageVolume;
4
4
  spacingInNormalDirection: number;
5
+ actorUID: string;
5
6
  };
@@ -1,35 +1,50 @@
1
1
  import cache from '../cache/cache';
2
+ import { EPSILON } from '../constants';
2
3
  import getSpacingInNormalDirection from './getSpacingInNormalDirection';
4
+ const EPSILON_PART = 1 + EPSILON;
3
5
  export default function getTargetVolumeAndSpacingInNormalDir(viewport, camera, targetVolumeId) {
4
6
  const { viewPlaneNormal } = camera;
5
7
  const volumeActors = viewport.getActors();
6
8
  if (!volumeActors || !volumeActors.length) {
7
- return { spacingInNormalDirection: null, imageVolume: null };
9
+ return {
10
+ spacingInNormalDirection: null,
11
+ imageVolume: null,
12
+ actorUID: null,
13
+ };
8
14
  }
9
15
  const imageVolumes = volumeActors
10
16
  .map((va) => {
11
- const uid = va.referenceId ?? va.uid;
12
- return cache.getVolume(uid);
17
+ const actorUID = va.referenceId ?? va.uid;
18
+ return cache.getVolume(actorUID);
13
19
  })
14
20
  .filter((iv) => !!iv);
15
21
  if (targetVolumeId) {
16
- const imageVolume = imageVolumes.find((iv) => iv.volumeId === targetVolumeId);
22
+ const imageVolumeIndex = imageVolumes.findIndex((iv) => iv.volumeId === targetVolumeId);
23
+ const imageVolume = imageVolumes[imageVolumeIndex];
24
+ const { uid: actorUID } = volumeActors[imageVolumeIndex];
17
25
  const spacingInNormalDirection = getSpacingInNormalDirection(imageVolume, viewPlaneNormal);
18
- return { imageVolume, spacingInNormalDirection };
26
+ return { imageVolume, spacingInNormalDirection, actorUID };
19
27
  }
20
28
  if (!imageVolumes.length) {
21
- return { spacingInNormalDirection: null, imageVolume: null };
29
+ return {
30
+ spacingInNormalDirection: null,
31
+ imageVolume: null,
32
+ actorUID: null,
33
+ };
22
34
  }
23
35
  const smallest = {
24
36
  spacingInNormalDirection: Infinity,
25
37
  imageVolume: null,
38
+ actorUID: null,
26
39
  };
27
40
  for (let i = 0; i < imageVolumes.length; i++) {
28
41
  const imageVolume = imageVolumes[i];
29
42
  const spacingInNormalDirection = getSpacingInNormalDirection(imageVolume, viewPlaneNormal);
30
- if (spacingInNormalDirection < smallest.spacingInNormalDirection) {
43
+ if (spacingInNormalDirection * EPSILON_PART <
44
+ smallest.spacingInNormalDirection) {
31
45
  smallest.spacingInNormalDirection = spacingInNormalDirection;
32
46
  smallest.imageVolume = imageVolume;
47
+ smallest.actorUID = volumeActors[i].uid;
33
48
  }
34
49
  }
35
50
  return smallest;
@@ -1 +1 @@
1
- {"version":3,"file":"getTargetVolumeAndSpacingInNormalDir.js","sourceRoot":"","sources":["../../../src/utilities/getTargetVolumeAndSpacingInNormalDir.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAGnC,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AAiBxE,MAAM,CAAC,OAAO,UAAU,oCAAoC,CAC1D,QAAyB,EACzB,MAAe,EACf,cAAuB;IAKvB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAE1C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACzC,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;KAC9D;IAED,MAAM,YAAY,GAAG,YAAY;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAGV,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,CAAC;QACrC,OAAO,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAGxB,IAAI,cAAc,EAAE;QAClB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CACnC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,cAAc,CACvC,CAAC;QAEF,MAAM,wBAAwB,GAAG,2BAA2B,CAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAEF,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,CAAC;KAClD;IAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACxB,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;KAC9D;IAGD,MAAM,QAAQ,GAAG;QACf,wBAAwB,EAAE,QAAQ;QAClC,WAAW,EAAE,IAAI;KAClB,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,wBAAwB,GAAG,2BAA2B,CAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAEF,IAAI,wBAAwB,GAAG,QAAQ,CAAC,wBAAwB,EAAE;YAChE,QAAQ,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;YAC7D,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;SACpC;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"getTargetVolumeAndSpacingInNormalDir.js","sourceRoot":"","sources":["../../../src/utilities/getTargetVolumeAndSpacingInNormalDir.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AAGxE,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,CAAC;AAiBjC,MAAM,CAAC,OAAO,UAAU,oCAAoC,CAC1D,QAAyB,EACzB,MAAe,EACf,cAAuB;IAMvB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAE1C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACzC,OAAO;YACL,wBAAwB,EAAE,IAAI;YAC9B,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IAED,MAAM,YAAY,GAAG,YAAY;SAC9B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAGV,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,GAAG,CAAC;QAC1C,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAGxB,IAAI,cAAc,EAAE;QAClB,MAAM,gBAAgB,GAAG,YAAY,CAAC,SAAS,CAC7C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,KAAK,cAAc,CACvC,CAAC;QAEF,MAAM,WAAW,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,wBAAwB,GAAG,2BAA2B,CAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAEF,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,QAAQ,EAAE,CAAC;KAC5D;IAED,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;QACxB,OAAO;YACL,wBAAwB,EAAE,IAAI;YAC9B,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IAGD,MAAM,QAAQ,GAAG;QACf,wBAAwB,EAAE,QAAQ;QAClC,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC5C,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAEpC,MAAM,wBAAwB,GAAG,2BAA2B,CAC1D,WAAW,EACX,eAAe,CAChB,CAAC;QAKF,IACE,wBAAwB,GAAG,YAAY;YACvC,QAAQ,CAAC,wBAAwB,EACjC;YACA,QAAQ,CAAC,wBAAwB,GAAG,wBAAwB,CAAC;YAC7D,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;YACnC,QAAQ,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SACzC;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ActorSliceRange, IVolumeViewport, ICamera } from '../types';
2
+ declare function getVolumeSliceRangeInfo(viewport: IVolumeViewport, volumeId: string): {
3
+ sliceRange: ActorSliceRange;
4
+ spacingInNormalDirection: number;
5
+ camera: ICamera;
6
+ };
7
+ export default getVolumeSliceRangeInfo;
@@ -0,0 +1,24 @@
1
+ import getSliceRange from './getSliceRange';
2
+ import getTargetVolumeAndSpacingInNormalDir from './getTargetVolumeAndSpacingInNormalDir';
3
+ function getVolumeSliceRangeInfo(viewport, volumeId) {
4
+ const camera = viewport.getCamera();
5
+ const { focalPoint, viewPlaneNormal } = camera;
6
+ const { spacingInNormalDirection, actorUID } = getTargetVolumeAndSpacingInNormalDir(viewport, camera, volumeId);
7
+ if (!actorUID) {
8
+ throw new Error(`Could not find image volume with id ${volumeId} in the viewport`);
9
+ }
10
+ const actorEntry = viewport.getActor(actorUID);
11
+ if (!actorEntry) {
12
+ console.warn('No actor found for with actorUID of', actorUID);
13
+ return null;
14
+ }
15
+ const volumeActor = actorEntry.actor;
16
+ const sliceRange = getSliceRange(volumeActor, viewPlaneNormal, focalPoint);
17
+ return {
18
+ sliceRange,
19
+ spacingInNormalDirection,
20
+ camera,
21
+ };
22
+ }
23
+ export default getVolumeSliceRangeInfo;
24
+ //# sourceMappingURL=getVolumeSliceRangeInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVolumeSliceRangeInfo.js","sourceRoot":"","sources":["../../../src/utilities/getVolumeSliceRangeInfo.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,oCAAoC,MAAM,wCAAwC,CAAC;AAc1F,SAAS,uBAAuB,CAC9B,QAAyB,EACzB,QAAgB;IAMhB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IACpC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAC/C,MAAM,EAAE,wBAAwB,EAAE,QAAQ,EAAE,GAC1C,oCAAoC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEnE,IAAI,CAAC,QAAQ,EAAE;QACb,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,kBAAkB,CAClE,CAAC;KACH;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,QAAQ,CAAC,CAAC;QAC9D,OAAO,IAAI,CAAC;KACb;IAED,MAAM,WAAW,GAAG,UAAU,CAAC,KAAoB,CAAC;IACpD,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC;IAE3E,OAAO;QACL,UAAU;QACV,wBAAwB;QACxB,MAAM;KACP,CAAC;AACJ,CAAC;AAED,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { IVolumeViewport } from '../types';
2
+ declare function getVolumeViewportScrollInfo(viewport: IVolumeViewport, volumeId: string): {
3
+ numScrollSteps: number;
4
+ currentStepIndex: number;
5
+ };
6
+ export default getVolumeViewportScrollInfo;
@@ -0,0 +1,12 @@
1
+ import getVolumeSliceRangeInfo from './getVolumeSliceRangeInfo';
2
+ function getVolumeViewportScrollInfo(viewport, volumeId) {
3
+ const { sliceRange, spacingInNormalDirection } = getVolumeSliceRangeInfo(viewport, volumeId);
4
+ const { min, max, current } = sliceRange;
5
+ const numScrollSteps = Math.round((max - min) / spacingInNormalDirection);
6
+ const fraction = (current - min) / (max - min);
7
+ const floatingStepNumber = fraction * numScrollSteps;
8
+ const currentStepIndex = Math.round(floatingStepNumber);
9
+ return { numScrollSteps, currentStepIndex };
10
+ }
11
+ export default getVolumeViewportScrollInfo;
12
+ //# sourceMappingURL=getVolumeViewportScrollInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVolumeViewportScrollInfo.js","sourceRoot":"","sources":["../../../src/utilities/getVolumeViewportScrollInfo.ts"],"names":[],"mappings":"AACA,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAQhE,SAAS,2BAA2B,CAClC,QAAyB,EACzB,QAAgB;IAEhB,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAE,GAAG,uBAAuB,CACtE,QAAQ,EACR,QAAQ,CACT,CAAC;IAEF,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IAGzC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,wBAAwB,CAAC,CAAC;IAG1E,MAAM,QAAQ,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAC/C,MAAM,kBAAkB,GAAG,QAAQ,GAAG,cAAc,CAAC;IACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAExD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAC9C,CAAC;AAED,eAAe,2BAA2B,CAAC"}
@@ -25,6 +25,8 @@ import loadImageToCanvas from './loadImageToCanvas';
25
25
  import renderToCanvas from './renderToCanvas';
26
26
  import worldToImageCoords from './worldToImageCoords';
27
27
  import imageToWorldCoords from './imageToWorldCoords';
28
+ import getVolumeSliceRangeInfo from './getVolumeSliceRangeInfo';
29
+ import getVolumeViewportScrollInfo from './getVolumeViewportScrollInfo';
28
30
  import getSliceRange from './getSliceRange';
29
31
  import snapFocalPointToSlice from './snapFocalPointToSlice';
30
32
  import getImageSliceDataForVolumeViewport from './getImageSliceDataForVolumeViewport';
@@ -38,4 +40,4 @@ import hasNaNValues from './hasNaNValues';
38
40
  import applyPreset from './applyPreset';
39
41
  import * as planar from './planar';
40
42
  import * as windowLevel from './windowLevel';
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, };
43
+ 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, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, };
@@ -25,6 +25,8 @@ import loadImageToCanvas from './loadImageToCanvas';
25
25
  import renderToCanvas from './renderToCanvas';
26
26
  import worldToImageCoords from './worldToImageCoords';
27
27
  import imageToWorldCoords from './imageToWorldCoords';
28
+ import getVolumeSliceRangeInfo from './getVolumeSliceRangeInfo';
29
+ import getVolumeViewportScrollInfo from './getVolumeViewportScrollInfo';
28
30
  import getSliceRange from './getSliceRange';
29
31
  import snapFocalPointToSlice from './snapFocalPointToSlice';
30
32
  import getImageSliceDataForVolumeViewport from './getImageSliceDataForVolumeViewport';
@@ -38,5 +40,5 @@ import hasNaNValues from './hasNaNValues';
38
40
  import applyPreset from './applyPreset';
39
41
  import * as planar from './planar';
40
42
  import * as windowLevel from './windowLevel';
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, };
43
+ 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, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, };
42
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,gCAAgC,MAAM,oCAAoC,CAAC;AAClF,OAAO,oCAAoC,MAAM,wCAAwC,CAAC;AAC1F,OAAO,+BAA+B,MAAM,mCAAmC,CAAC;AAChF,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,sCAAsC,MAAM,0CAA0C,CAAC;AAC9F,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AACxE,OAAO,oCAAoC,MAAM,wCAAwC,CAAC;AAC1F,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,uCAAuC,MAAM,2CAA2C,CAAC;AAChG,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,kCAAkC,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,iCAAiC,MAAM,qCAAqC,CAAC;AACpF,OAAO,qCAAqC,MAAM,yCAAyC,CAAC;AAC5F,OAAO,mCAAmC,MAAM,uCAAuC,CAAC;AACxF,OAAO,8BAA8B,MAAM,kCAAkC,CAAC;AAC9E,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,WAAW,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,OAAO,IAAI,yBAAyB,EACpC,gCAAgC,EAChC,oCAAoC,EACpC,+BAA+B,EAC/B,wBAAwB,EACxB,YAAY,EACZ,YAAY,EACZ,sCAAsC,EACtC,MAAM,EACN,MAAM,EACN,SAAS,EACT,YAAY,EACZ,OAAO,EACP,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,iBAAiB,EACjB,2BAA2B,EAC3B,oCAAoC,EACpC,qBAAqB,EACrB,qBAAqB,EACrB,uCAAuC,EACvC,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,kCAAkC,EAClC,YAAY,EACZ,QAAQ,EACR,wBAAwB,EACxB,iCAAiC,EACjC,qCAAqC,EACrC,mCAAmC,EACnC,8BAA8B,EAC9B,YAAY,EACZ,WAAW,GACZ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utilities/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAClD,OAAO,gCAAgC,MAAM,oCAAoC,CAAC;AAClF,OAAO,oCAAoC,MAAM,wCAAwC,CAAC;AAC1F,OAAO,+BAA+B,MAAM,mCAAmC,CAAC;AAChF,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,MAAM,MAAM,UAAU,CAAC;AAC9B,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,sCAAsC,MAAM,0CAA0C,CAAC;AAC9F,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AACxE,OAAO,oCAAoC,MAAM,wCAAwC,CAAC;AAC1F,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,uCAAuC,MAAM,2CAA2C,CAAC;AAChG,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAC9C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAChE,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AACxE,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,kCAAkC,MAAM,sCAAsC,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,wBAAwB,MAAM,4BAA4B,CAAC;AAClE,OAAO,iCAAiC,MAAM,qCAAqC,CAAC;AACpF,OAAO,qCAAqC,MAAM,yCAAyC,CAAC;AAC5F,OAAO,mCAAmC,MAAM,uCAAuC,CAAC;AACxF,OAAO,8BAA8B,MAAM,kCAAkC,CAAC;AAC9E,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,WAAW,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,OAAO,EACL,OAAO,IAAI,yBAAyB,EACpC,gCAAgC,EAChC,oCAAoC,EACpC,+BAA+B,EAC/B,wBAAwB,EACxB,YAAY,EACZ,YAAY,EACZ,sCAAsC,EACtC,MAAM,EACN,MAAM,EACN,SAAS,EACT,YAAY,EACZ,OAAO,EACP,UAAU,EACV,wBAAwB,EACxB,sBAAsB,EACtB,WAAW,EACX,iBAAiB,EACjB,2BAA2B,EAC3B,oCAAoC,EACpC,qBAAqB,EACrB,qBAAqB,EACrB,uCAAuC,EACvC,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,2BAA2B,EAC3B,aAAa,EACb,qBAAqB,EACrB,kCAAkC,EAClC,YAAY,EACZ,QAAQ,EACR,wBAAwB,EACxB,iCAAiC,EACjC,qCAAqC,EACrC,mCAAmC,EACnC,8BAA8B,EAC9B,YAAY,EACZ,WAAW,GACZ,CAAC"}