@cornerstonejs/core 2.0.0-beta.29 → 2.0.0-beta.30

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 (30) hide show
  1. package/dist/esm/RenderingEngine/StackViewport.js +20 -3
  2. package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +1 -1
  3. package/dist/esm/cache/classes/BaseStreamingImageVolume.js +1 -1
  4. package/dist/esm/enums/Events.d.ts +1 -0
  5. package/dist/esm/enums/Events.js +1 -0
  6. package/dist/esm/enums/GeometryType.d.ts +2 -2
  7. package/dist/esm/enums/GeometryType.js +2 -2
  8. package/dist/esm/enums/RequestType.d.ts +4 -4
  9. package/dist/esm/enums/RequestType.js +4 -4
  10. package/dist/esm/index.d.ts +2 -2
  11. package/dist/esm/index.js +2 -2
  12. package/dist/esm/init.js +0 -1
  13. package/dist/esm/loaders/ProgressiveRetrieveImages.js +1 -1
  14. package/dist/esm/loaders/configuration/interleavedRetrieve.js +43 -2
  15. package/dist/esm/loaders/cornerstoneStreamingImageVolumeLoader.js +1 -1
  16. package/dist/esm/loaders/geometryLoader.js +2 -2
  17. package/dist/esm/loaders/utils/contourSet/createContourSet.js +1 -1
  18. package/dist/esm/loaders/utils/surface/createSurface.js +1 -1
  19. package/dist/esm/requestPool/imageLoadPoolManager.js +3 -3
  20. package/dist/esm/requestPool/imageRetrievalPoolManager.js +3 -3
  21. package/dist/esm/requestPool/requestPoolManager.d.ts +4 -4
  22. package/dist/esm/requestPool/requestPoolManager.js +20 -20
  23. package/dist/esm/types/EventTypes.d.ts +6 -1
  24. package/dist/esm/types/ICache.d.ts +2 -2
  25. package/dist/esm/types/IViewport.d.ts +1 -0
  26. package/dist/esm/utilities/RLEVoxelMap.d.ts +1 -1
  27. package/dist/esm/utilities/RLEVoxelMap.js +12 -12
  28. package/dist/esm/utilities/loadImageToCanvas.js +1 -1
  29. package/dist/esm/webWorkerManager/webWorkerManager.js +1 -1
  30. package/package.json +3 -4
@@ -37,6 +37,7 @@ import correctShift from './helpers/cpuFallback/rendering/correctShift';
37
37
  import resetCamera from './helpers/cpuFallback/rendering/resetCamera';
38
38
  import { Transform } from './helpers/cpuFallback/rendering/transform';
39
39
  import uuidv4 from '../utilities/uuidv4';
40
+ import getSpacingInNormalDirection from '../utilities/getSpacingInNormalDirection';
40
41
  const EPSILON = 1;
41
42
  class StackViewport extends Viewport {
42
43
  constructor(props) {
@@ -1308,7 +1309,7 @@ class StackViewport extends Viewport {
1308
1309
  });
1309
1310
  }
1310
1311
  const priority = -5;
1311
- const requestType = RequestType.Interaction;
1312
+ const requestType = RequestType.INTERACTION;
1312
1313
  const additionalDetails = { imageId, imageIdIndex };
1313
1314
  const options = {
1314
1315
  useRGBA: true,
@@ -1369,7 +1370,7 @@ class StackViewport extends Viewport {
1369
1370
  useRGBA: false,
1370
1371
  transferSyntaxUID,
1371
1372
  priority: 5,
1372
- requestType: RequestType.Interaction,
1373
+ requestType: RequestType.INTERACTION,
1373
1374
  additionalDetails: { imageId, imageIdIndex },
1374
1375
  };
1375
1376
  return options;
@@ -1714,7 +1715,23 @@ class StackViewport extends Viewport {
1714
1715
  imageURI = imageIdToURI(currentImageId);
1715
1716
  }
1716
1717
  const referencedImageURI = imageIdToURI(referencedImageId);
1717
- return referencedImageURI === imageURI;
1718
+ const endsWith = referencedImageId?.endsWith(imageURI);
1719
+ if (endsWith) {
1720
+ return endsWith;
1721
+ }
1722
+ const { cameraFocalPoint } = viewRef;
1723
+ if (options.asNearbyProjection && cameraFocalPoint) {
1724
+ const { spacing, direction, origin } = this.getImageData();
1725
+ const viewPlaneNormal = direction.slice(6, 9);
1726
+ const sliceThickness = getSpacingInNormalDirection({ direction, spacing }, viewPlaneNormal);
1727
+ const diff = vec3.subtract(vec3.create(), cameraFocalPoint, origin);
1728
+ const distanceToPlane = vec3.dot(diff, viewPlaneNormal);
1729
+ const threshold = sliceThickness / 2;
1730
+ if (Math.abs(distanceToPlane) <= threshold) {
1731
+ return true;
1732
+ }
1733
+ }
1734
+ return false;
1718
1735
  }
1719
1736
  getViewReference(viewRefSpecifier = {}) {
1720
1737
  const { sliceIndex = this.getCurrentImageIdIndex() } = viewRefSpecifier;
@@ -5,7 +5,7 @@ import * as windowLevel from '../../utilities/windowLevel';
5
5
  import { RequestType } from '../../enums';
6
6
  import cache from '../../cache/cache';
7
7
  const PRIORITY = 0;
8
- const REQUEST_TYPE = RequestType.Prefetch;
8
+ const REQUEST_TYPE = RequestType.PREFETCH;
9
9
  async function setDefaultVolumeVOI(volumeActor, imageVolume) {
10
10
  let voi = getVOIFromMetadata(imageVolume);
11
11
  if (!voi && imageVolume.imageIds.length) {
@@ -7,7 +7,7 @@ import ImageVolume from './ImageVolume';
7
7
  import ProgressiveRetrieveImages from '../../loaders/ProgressiveRetrieveImages';
8
8
  import { canRenderFloatTextures } from '../../init';
9
9
  import { loadAndCacheImage } from '../../loaders/imageLoader';
10
- const requestTypeDefault = RequestType.Prefetch;
10
+ const requestTypeDefault = RequestType.PREFETCH;
11
11
  export default class BaseStreamingImageVolume extends ImageVolume {
12
12
  constructor(imageVolumeProperties, streamingProperties) {
13
13
  super(imageVolumeProperties);
@@ -28,6 +28,7 @@ declare enum Events {
28
28
  IMAGE_SPACING_CALIBRATED = "CORNERSTONE_IMAGE_SPACING_CALIBRATED",
29
29
  VIEWPORT_NEW_IMAGE_SET = "CORNERSTONE_VIEWPORT_NEW_IMAGE_SET",
30
30
  STACK_VIEWPORT_SCROLL = "CORNERSTONE_STACK_VIEWPORT_SCROLL",
31
+ STACK_SCROLL_OUT_OF_BOUNDS = "STACK_SCROLL_OUT_OF_BOUNDS",
31
32
  GEOMETRY_CACHE_GEOMETRY_ADDED = "CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED",
32
33
  VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS = "VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS",
33
34
  VOLUME_VIEWPORT_SCROLL = "VOLUME_VIEWPORT_SCROLL",
@@ -29,6 +29,7 @@ var Events;
29
29
  Events["IMAGE_SPACING_CALIBRATED"] = "CORNERSTONE_IMAGE_SPACING_CALIBRATED";
30
30
  Events["VIEWPORT_NEW_IMAGE_SET"] = "CORNERSTONE_VIEWPORT_NEW_IMAGE_SET";
31
31
  Events["STACK_VIEWPORT_SCROLL"] = "CORNERSTONE_STACK_VIEWPORT_SCROLL";
32
+ Events["STACK_SCROLL_OUT_OF_BOUNDS"] = "STACK_SCROLL_OUT_OF_BOUNDS";
32
33
  Events["GEOMETRY_CACHE_GEOMETRY_ADDED"] = "CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED";
33
34
  Events["VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS"] = "VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS";
34
35
  Events["VOLUME_VIEWPORT_SCROLL"] = "VOLUME_VIEWPORT_SCROLL";
@@ -1,5 +1,5 @@
1
1
  declare enum GeometryType {
2
- Contour = "Contour",
3
- Surface = "Surface"
2
+ CONTOUR = "CONTOUR",
3
+ SURFACE = "SURFACE"
4
4
  }
5
5
  export default GeometryType;
@@ -1,6 +1,6 @@
1
1
  var GeometryType;
2
2
  (function (GeometryType) {
3
- GeometryType["Contour"] = "Contour";
4
- GeometryType["Surface"] = "Surface";
3
+ GeometryType["CONTOUR"] = "CONTOUR";
4
+ GeometryType["SURFACE"] = "SURFACE";
5
5
  })(GeometryType || (GeometryType = {}));
6
6
  export default GeometryType;
@@ -1,7 +1,7 @@
1
1
  declare enum RequestType {
2
- Interaction = "interaction",
3
- Thumbnail = "thumbnail",
4
- Prefetch = "prefetch",
5
- Compute = "compute"
2
+ INTERACTION = "INTERACTION",
3
+ THUMBNAIL = "THUMBNAIL",
4
+ PREFETCH = "PREFETCH",
5
+ COMPUTE = "COMPUTE"
6
6
  }
7
7
  export default RequestType;
@@ -1,8 +1,8 @@
1
1
  var RequestType;
2
2
  (function (RequestType) {
3
- RequestType["Interaction"] = "interaction";
4
- RequestType["Thumbnail"] = "thumbnail";
5
- RequestType["Prefetch"] = "prefetch";
6
- RequestType["Compute"] = "compute";
3
+ RequestType["INTERACTION"] = "INTERACTION";
4
+ RequestType["THUMBNAIL"] = "THUMBNAIL";
5
+ RequestType["PREFETCH"] = "PREFETCH";
6
+ RequestType["COMPUTE"] = "COMPUTE";
7
7
  })(RequestType || (RequestType = {}));
8
8
  export default RequestType;
@@ -14,7 +14,7 @@ import WSIViewport from './RenderingEngine/WSIViewport';
14
14
  import Viewport from './RenderingEngine/Viewport';
15
15
  import eventTarget from './eventTarget';
16
16
  import { getRenderingEngine, getRenderingEngines } from './RenderingEngine/getRenderingEngine';
17
- import { ImageVolume, Surface } from './cache';
17
+ import { ImageVolume, Surface, StreamingDynamicImageVolume, StreamingImageVolume } from './cache';
18
18
  import cache from './cache/cache';
19
19
  import imageRetrievalPoolManager from './requestPool/imageRetrievalPoolManager';
20
20
  import imageLoadPoolManager from './requestPool/imageLoadPoolManager';
@@ -35,4 +35,4 @@ import { cornerstoneStreamingImageVolumeLoader } from './loaders/cornerstoneStre
35
35
  import { cornerstoneStreamingDynamicImageVolumeLoader } from './loaders/cornerstoneStreamingDynamicImageVolumeLoader';
36
36
  import { setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports } from './RenderingEngine/helpers';
37
37
  export type { Types, IRetrieveConfiguration, RetrieveOptions, RetrieveStage, ImageLoadListener, IImagesLoader, };
38
- export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, getOrCreateCanvas, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, };
38
+ export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, getOrCreateCanvas, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, };
package/dist/esm/index.js CHANGED
@@ -14,7 +14,7 @@ import WSIViewport from './RenderingEngine/WSIViewport';
14
14
  import Viewport from './RenderingEngine/Viewport';
15
15
  import eventTarget from './eventTarget';
16
16
  import { getRenderingEngine, getRenderingEngines, } from './RenderingEngine/getRenderingEngine';
17
- import { ImageVolume, Surface } from './cache';
17
+ import { ImageVolume, Surface, StreamingDynamicImageVolume, StreamingImageVolume, } from './cache';
18
18
  import cache from './cache/cache';
19
19
  import imageRetrievalPoolManager from './requestPool/imageRetrievalPoolManager';
20
20
  import imageLoadPoolManager from './requestPool/imageLoadPoolManager';
@@ -32,4 +32,4 @@ import triggerEvent from './utilities/triggerEvent';
32
32
  import { cornerstoneStreamingImageVolumeLoader } from './loaders/cornerstoneStreamingImageVolumeLoader';
33
33
  import { cornerstoneStreamingDynamicImageVolumeLoader } from './loaders/cornerstoneStreamingDynamicImageVolumeLoader';
34
34
  import { setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, } from './RenderingEngine/helpers';
35
- export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, getOrCreateCanvas, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, };
35
+ export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, getOrCreateCanvas, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, };
package/dist/esm/init.js CHANGED
@@ -1,4 +1,3 @@
1
- console.debug("core: link: init: 3DA675F2-86A1-41A1-9E15-A7019E085C0F");
2
1
  import { getRenderingEngines } from './RenderingEngine/getRenderingEngine';
3
2
  let csRenderInitialized = false;
4
3
  import deepMerge from './utilities/deepMerge';
@@ -124,7 +124,7 @@ class ProgressiveRetrieveImagesInstance {
124
124
  streamingData,
125
125
  };
126
126
  const priority = stage.priority ?? -5;
127
- const requestType = stage.requestType || RequestType.Interaction;
127
+ const requestType = stage.requestType || RequestType.INTERACTION;
128
128
  const additionalDetails = { imageId };
129
129
  imageLoadPoolManager.addRequest(this.sendRequest.bind(this, request, options), requestType, additionalDetails, priority);
130
130
  }
@@ -15,7 +15,7 @@ const interleavedRetrieveConfiguration = [
15
15
  id: 'initialImages',
16
16
  positions: [0.5, 0, -1],
17
17
  retrieveType: 'default',
18
- requestType: RequestType.Thumbnail,
18
+ requestType: RequestType.THUMBNAIL,
19
19
  priority: 5,
20
20
  nearbyFrames,
21
21
  },
@@ -23,10 +23,51 @@ const interleavedRetrieveConfiguration = [
23
23
  id: 'quarterThumb',
24
24
  decimate: 4,
25
25
  offset: 3,
26
- requestType: RequestType.Thumbnail,
26
+ requestType: RequestType.THUMBNAIL,
27
27
  retrieveType: 'multipleFast',
28
28
  priority: 6,
29
29
  nearbyFrames,
30
30
  },
31
+ {
32
+ id: 'halfThumb',
33
+ decimate: 4,
34
+ offset: 1,
35
+ priority: 7,
36
+ requestType: RequestType.THUMBNAIL,
37
+ retrieveType: 'multipleFast',
38
+ nearbyFrames,
39
+ },
40
+ {
41
+ id: 'quarterFull',
42
+ decimate: 4,
43
+ offset: 2,
44
+ priority: 8,
45
+ requestType: RequestType.THUMBNAIL,
46
+ retrieveType: 'multipleFinal',
47
+ },
48
+ {
49
+ id: 'halfFull',
50
+ decimate: 4,
51
+ offset: 0,
52
+ priority: 9,
53
+ requestType: RequestType.THUMBNAIL,
54
+ retrieveType: 'multipleFinal',
55
+ },
56
+ {
57
+ id: 'threeQuarterFull',
58
+ decimate: 4,
59
+ offset: 1,
60
+ priority: 10,
61
+ requestType: RequestType.THUMBNAIL,
62
+ retrieveType: 'multipleFinal',
63
+ },
64
+ {
65
+ id: 'finalFull',
66
+ decimate: 4,
67
+ offset: 3,
68
+ priority: 11,
69
+ requestType: RequestType.THUMBNAIL,
70
+ retrieveType: 'multipleFinal',
71
+ },
31
72
  ];
32
73
  export default interleavedRetrieveConfiguration;
@@ -26,7 +26,7 @@ function cornerstoneStreamingImageVolumeLoader(volumeId, options) {
26
26
  .catch((err) => {
27
27
  reject(err);
28
28
  });
29
- }, RequestType.Prefetch, { volumeId }, 1);
29
+ }, RequestType.PREFETCH, { volumeId }, 1);
30
30
  });
31
31
  })).catch(console.error);
32
32
  }
@@ -8,10 +8,10 @@ async function createAndCacheGeometry(geometryId, options) {
8
8
  if (geometry) {
9
9
  return geometry;
10
10
  }
11
- if (options.type === GeometryType.Contour) {
11
+ if (options.type === GeometryType.CONTOUR) {
12
12
  geometry = createContourSet(geometryId, options.geometryData);
13
13
  }
14
- else if (options.type === GeometryType.Surface) {
14
+ else if (options.type === GeometryType.SURFACE) {
15
15
  geometry = createSurface(geometryId, options.geometryData);
16
16
  }
17
17
  else {
@@ -12,7 +12,7 @@ export function createContourSet(geometryId, contourSetData) {
12
12
  });
13
13
  const geometry = {
14
14
  id: geometryId,
15
- type: GeometryType.Contour,
15
+ type: GeometryType.CONTOUR,
16
16
  data: contourSet,
17
17
  sizeInBytes: contourSet.getSizeInBytes(),
18
18
  };
@@ -14,7 +14,7 @@ export function createSurface(geometryId, SurfaceData) {
14
14
  });
15
15
  const geometry = {
16
16
  id: geometryId,
17
- type: GeometryType.Surface,
17
+ type: GeometryType.SURFACE,
18
18
  data: surface,
19
19
  sizeInBytes: surface.getSizeInBytes(),
20
20
  };
@@ -2,7 +2,7 @@ import { RequestPoolManager } from './requestPoolManager';
2
2
  import RequestType from '../enums/RequestType';
3
3
  const imageLoadPoolManager = new RequestPoolManager('imageLoadPool');
4
4
  imageLoadPoolManager.grabDelay = 0;
5
- imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.Interaction, 1000);
6
- imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.Thumbnail, 1000);
7
- imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.Prefetch, 1000);
5
+ imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.INTERACTION, 1000);
6
+ imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.THUMBNAIL, 1000);
7
+ imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.PREFETCH, 1000);
8
8
  export default imageLoadPoolManager;
@@ -1,8 +1,8 @@
1
1
  import { RequestPoolManager } from './requestPoolManager';
2
2
  import RequestType from '../enums/RequestType';
3
3
  const imageRetrievalPoolManager = new RequestPoolManager('imageRetrievalPool');
4
- imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.Interaction, 200);
5
- imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.Thumbnail, 200);
6
- imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.Prefetch, 200);
4
+ imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.INTERACTION, 200);
5
+ imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.THUMBNAIL, 200);
6
+ imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.PREFETCH, 200);
7
7
  imageRetrievalPoolManager.grabDelay = 0;
8
8
  export default imageRetrievalPoolManager;
@@ -18,10 +18,10 @@ declare class RequestPoolManager {
18
18
  private requestPool;
19
19
  private numRequests;
20
20
  maxNumRequests: {
21
- interaction: number;
22
- thumbnail: number;
23
- prefetch: number;
24
- compute: number;
21
+ INTERACTION: number;
22
+ THUMBNAIL: number;
23
+ PREFETCH: number;
24
+ COMPUTE: number;
25
25
  };
26
26
  grabDelay: number;
27
27
  private timeoutHandle;
@@ -3,31 +3,31 @@ import uuidv4 from '../utilities/uuidv4';
3
3
  class RequestPoolManager {
4
4
  constructor(id) {
5
5
  this.numRequests = {
6
- interaction: 0,
7
- thumbnail: 0,
8
- prefetch: 0,
9
- compute: 0,
6
+ INTERACTION: 0,
7
+ THUMBNAIL: 0,
8
+ PREFETCH: 0,
9
+ COMPUTE: 0,
10
10
  };
11
11
  this.id = id ? id : uuidv4();
12
12
  this.requestPool = {
13
- interaction: { 0: [] },
14
- thumbnail: { 0: [] },
15
- prefetch: { 0: [] },
16
- compute: { 0: [] },
13
+ INTERACTION: { 0: [] },
14
+ THUMBNAIL: { 0: [] },
15
+ PREFETCH: { 0: [] },
16
+ COMPUTE: { 0: [] },
17
17
  };
18
18
  this.grabDelay = 5;
19
19
  this.awake = false;
20
20
  this.numRequests = {
21
- interaction: 0,
22
- thumbnail: 0,
23
- prefetch: 0,
24
- compute: 0,
21
+ INTERACTION: 0,
22
+ THUMBNAIL: 0,
23
+ PREFETCH: 0,
24
+ COMPUTE: 0,
25
25
  };
26
26
  this.maxNumRequests = {
27
- interaction: 6,
28
- thumbnail: 6,
29
- prefetch: 5,
30
- compute: 1000,
27
+ INTERACTION: 6,
28
+ THUMBNAIL: 6,
29
+ PREFETCH: 5,
30
+ COMPUTE: 1000,
31
31
  };
32
32
  }
33
33
  setMaxSimultaneousRequests(type, maxNumRequests) {
@@ -114,10 +114,10 @@ class RequestPoolManager {
114
114
  return null;
115
115
  }
116
116
  startGrabbing() {
117
- const hasRemainingInteractionRequests = this.sendRequests(RequestType.Interaction);
118
- const hasRemainingThumbnailRequests = this.sendRequests(RequestType.Thumbnail);
119
- const hasRemainingPrefetchRequests = this.sendRequests(RequestType.Prefetch);
120
- const hasRemainingComputeRequests = this.sendRequests(RequestType.Compute);
117
+ const hasRemainingInteractionRequests = this.sendRequests(RequestType.INTERACTION);
118
+ const hasRemainingThumbnailRequests = this.sendRequests(RequestType.THUMBNAIL);
119
+ const hasRemainingPrefetchRequests = this.sendRequests(RequestType.PREFETCH);
120
+ const hasRemainingComputeRequests = this.sendRequests(RequestType.COMPUTE);
121
121
  if (!hasRemainingInteractionRequests &&
122
122
  !hasRemainingThumbnailRequests &&
123
123
  !hasRemainingPrefetchRequests &&
@@ -145,6 +145,10 @@ interface StackViewportScrollEventDetail {
145
145
  imageId: string;
146
146
  direction: number;
147
147
  }
148
+ type StackScrollOutOfBoundsEventDetail = {
149
+ imageIdIndex: number;
150
+ direction: number;
151
+ };
148
152
  type CameraModifiedEvent = CustomEventType<CameraModifiedEventDetail>;
149
153
  type VoiModifiedEvent = CustomEventType<VoiModifiedEventDetail>;
150
154
  type ColormapModifiedEvent = CustomEventType<ColormapModifiedEventDetail>;
@@ -168,4 +172,5 @@ type PreStackNewImageEvent = CustomEventType<PreStackNewImageEventDetail>;
168
172
  type ImageSpacingCalibratedEvent = CustomEventType<ImageSpacingCalibratedEventDetail>;
169
173
  type StackViewportNewStackEvent = CustomEventType<StackViewportNewStackEventDetail>;
170
174
  type StackViewportScrollEvent = CustomEventType<StackViewportScrollEventDetail>;
171
- export type { CameraModifiedEventDetail, CameraModifiedEvent, VoiModifiedEvent, VoiModifiedEventDetail, ColormapModifiedEvent, ColormapModifiedEventDetail, DisplayAreaModifiedEvent, DisplayAreaModifiedEventDetail, ElementDisabledEvent, ElementDisabledEventDetail, ElementEnabledEvent, ElementEnabledEventDetail, ImageRenderedEventDetail, ImageRenderedEvent, ImageVolumeModifiedEvent, ImageVolumeModifiedEventDetail, ImageVolumeLoadingCompletedEvent, ImageVolumeLoadingCompletedEventDetail, ImageLoadedEvent, ImageLoadedEventDetail, ImageLoadedFailedEventDetail, ImageLoadedFailedEvent, VolumeLoadedEvent, VolumeLoadedEventDetail, VolumeLoadedFailedEvent, VolumeLoadedFailedEventDetail, ImageCacheImageAddedEvent, ImageCacheImageAddedEventDetail, ImageCacheImageRemovedEvent, ImageCacheImageRemovedEventDetail, VolumeCacheVolumeAddedEvent, VolumeCacheVolumeAddedEventDetail, VolumeCacheVolumeRemovedEvent, VolumeCacheVolumeRemovedEventDetail, StackNewImageEvent, StackNewImageEventDetail, PreStackNewImageEvent, PreStackNewImageEventDetail, ImageSpacingCalibratedEvent, ImageSpacingCalibratedEventDetail, VolumeNewImageEvent, VolumeNewImageEventDetail, StackViewportNewStackEvent, StackViewportNewStackEventDetail, StackViewportScrollEvent, StackViewportScrollEventDetail, CameraResetEvent, CameraResetEventDetail, };
175
+ type StackScrollOutOfBoundsEvent = CustomEventType<StackScrollOutOfBoundsEventDetail>;
176
+ export type { CameraModifiedEventDetail, CameraModifiedEvent, VoiModifiedEvent, VoiModifiedEventDetail, ColormapModifiedEvent, ColormapModifiedEventDetail, DisplayAreaModifiedEvent, DisplayAreaModifiedEventDetail, ElementDisabledEvent, ElementDisabledEventDetail, ElementEnabledEvent, ElementEnabledEventDetail, ImageRenderedEventDetail, ImageRenderedEvent, ImageVolumeModifiedEvent, ImageVolumeModifiedEventDetail, ImageVolumeLoadingCompletedEvent, ImageVolumeLoadingCompletedEventDetail, ImageLoadedEvent, ImageLoadedEventDetail, ImageLoadedFailedEventDetail, ImageLoadedFailedEvent, VolumeLoadedEvent, VolumeLoadedEventDetail, VolumeLoadedFailedEvent, VolumeLoadedFailedEventDetail, ImageCacheImageAddedEvent, ImageCacheImageAddedEventDetail, ImageCacheImageRemovedEvent, ImageCacheImageRemovedEventDetail, VolumeCacheVolumeAddedEvent, VolumeCacheVolumeAddedEventDetail, VolumeCacheVolumeRemovedEvent, VolumeCacheVolumeRemovedEventDetail, StackNewImageEvent, StackNewImageEventDetail, PreStackNewImageEvent, PreStackNewImageEventDetail, ImageSpacingCalibratedEvent, ImageSpacingCalibratedEventDetail, VolumeNewImageEvent, VolumeNewImageEventDetail, StackViewportNewStackEvent, StackViewportNewStackEventDetail, StackViewportScrollEvent, StackViewportScrollEventDetail, StackScrollOutOfBoundsEvent, StackScrollOutOfBoundsEventDetail, CameraResetEvent, CameraResetEventDetail, };
@@ -3,9 +3,9 @@ interface ICache {
3
3
  setMaxCacheSize: (maxCacheSize: number) => void;
4
4
  getMaxCacheSize: () => number;
5
5
  getCacheSize: () => number;
6
- putImageLoadObject: (imageId: string, imageLoadObject: IImageLoadObject, updateCache?: boolean) => void;
6
+ putImageLoadObject: (imageId: string, imageLoadObject: IImageLoadObject, updateCache?: boolean) => Promise<void>;
7
7
  getImageLoadObject: (imageId: string) => IImageLoadObject | void;
8
- putVolumeLoadObject: (volumeId: string, volumeLoadObject: IVolumeLoadObject) => void;
8
+ putVolumeLoadObject: (volumeId: string, volumeLoadObject: IVolumeLoadObject) => Promise<void>;
9
9
  getVolumeLoadObject: (volumeId: string) => IVolumeLoadObject | void;
10
10
  purgeCache: () => void;
11
11
  }
@@ -16,6 +16,7 @@ export interface ReferenceCompatibleOptions {
16
16
  asVolume?: boolean;
17
17
  withOrientation?: boolean;
18
18
  imageURI?: string;
19
+ asNearbyProjection?: boolean;
19
20
  asOverlay?: boolean;
20
21
  }
21
22
  export interface ViewReference {
@@ -11,7 +11,7 @@ export default class RLEVoxelMap<T> {
11
11
  pixelDataConstructor: Uint8ArrayConstructor;
12
12
  constructor(width: number, height: number, depth?: number);
13
13
  get: (index: number) => T;
14
- protected getRLE(i: number, j: number, k?: number): RLERun<T>;
14
+ protected getRLE(i: number, j: number, k?: number): RLERun<T> | undefined;
15
15
  protected findIndex(row: RLERun<T>[], i: number): number;
16
16
  getRun: (j: number, k: number) => RLERun<T>[];
17
17
  set: (index: number, value: T) => void;
@@ -13,7 +13,7 @@ export default class RLEVoxelMap {
13
13
  const i = index % this.jMultiple;
14
14
  const j = (index - i) / this.jMultiple;
15
15
  const rle = this.getRLE(i, j);
16
- return rle.value || this.defaultValue;
16
+ return rle?.value || this.defaultValue;
17
17
  };
18
18
  this.getRun = (j, k) => {
19
19
  const runIndex = j + k * this.height;
@@ -50,18 +50,18 @@ export default class RLEVoxelMap {
50
50
  const insertIndex = isAfter ? rleIndex + 1 : rleIndex;
51
51
  const rlePrev = isAfter ? rle1 : rle0;
52
52
  let rleNext = isAfter ? row[rleIndex + 1] : rle1;
53
- if (rlePrev.value === value && rlePrev.end === i) {
53
+ if (rlePrev?.value === value && rlePrev.end === i) {
54
54
  rlePrev.end++;
55
- if (rleNext.value === value && rleNext.start === i + 1) {
55
+ if (rleNext?.value === value && rleNext.start === i + 1) {
56
56
  rlePrev.end = rleNext.end;
57
57
  row.splice(rleIndex, 1);
58
58
  }
59
- else if (rleNext.start === i) {
59
+ else if (rleNext?.start === i) {
60
60
  rleNext.start++;
61
61
  if (rleNext.start === rleNext.end) {
62
62
  row.splice(rleIndex, 1);
63
63
  rleNext = row[rleIndex];
64
- if (rleNext.start === i + 1 && rleNext.value === value) {
64
+ if (rleNext?.start === i + 1 && rleNext.value === value) {
65
65
  rlePrev.end = rleNext.end;
66
66
  row.splice(rleIndex, 1);
67
67
  }
@@ -69,9 +69,9 @@ export default class RLEVoxelMap {
69
69
  }
70
70
  return;
71
71
  }
72
- if (rleNext.value === value && rleNext.start === i + 1) {
72
+ if (rleNext?.value === value && rleNext.start === i + 1) {
73
73
  rleNext.start--;
74
- if (rlePrev.end > i) {
74
+ if (rlePrev?.end > i) {
75
75
  rlePrev.end = i;
76
76
  if (rlePrev.end === rlePrev.start) {
77
77
  row.splice(rleIndex, 1);
@@ -79,16 +79,16 @@ export default class RLEVoxelMap {
79
79
  }
80
80
  return;
81
81
  }
82
- if (rleNext.start === i && rleNext.end === i + 1) {
82
+ if (rleNext?.start === i && rleNext.end === i + 1) {
83
83
  rleNext.value = value;
84
84
  const nextnext = row[rleIndex + 1];
85
- if (nextnext.start == i + 1 && nextnext.value === value) {
85
+ if (nextnext?.start == i + 1 && nextnext?.value === value) {
86
86
  row.splice(rleIndex + 1, 1);
87
87
  rleNext.end = nextnext.end;
88
88
  }
89
89
  return;
90
90
  }
91
- if (i === rleNext.start) {
91
+ if (i === rleNext?.start) {
92
92
  rleNext.start++;
93
93
  }
94
94
  if (isAfter && end > i + 1) {
@@ -101,7 +101,7 @@ export default class RLEVoxelMap {
101
101
  else {
102
102
  row.splice(insertIndex, 0, rleInsert);
103
103
  }
104
- if (rlePrev.end > i) {
104
+ if (rlePrev?.end > i) {
105
105
  rlePrev.end = i;
106
106
  }
107
107
  };
@@ -118,7 +118,7 @@ export default class RLEVoxelMap {
118
118
  }
119
119
  const index = this.findIndex(row, i);
120
120
  const rle = row[index];
121
- return i >= rle.start ? rle : undefined;
121
+ return i >= rle?.start ? rle : undefined;
122
122
  }
123
123
  findIndex(row, i) {
124
124
  for (let index = 0; index < row.length; index++) {
@@ -7,7 +7,7 @@ import renderToCanvasCPU from './renderToCanvasCPU';
7
7
  import { getConfiguration } from '../init';
8
8
  import cache from '../cache/cache';
9
9
  export default function loadImageToCanvas(options) {
10
- const { canvas, imageId, viewReference, requestType = RequestType.Thumbnail, priority = -5, renderingEngineId = '_thumbnails', useCPURendering = false, thumbnail = false, imageAspect = false, viewportOptions: baseViewportOptions, } = options;
10
+ const { canvas, imageId, viewReference, requestType = RequestType.THUMBNAIL, priority = -5, renderingEngineId = '_thumbnails', useCPURendering = false, thumbnail = false, imageAspect = false, viewportOptions: baseViewportOptions, } = options;
11
11
  const volumeId = viewReference?.volumeId;
12
12
  const isVolume = volumeId && !imageId;
13
13
  const viewportOptions = viewReference && baseViewportOptions
@@ -65,7 +65,7 @@ class CentralizedWorkerManager {
65
65
  index: minLoadIndex,
66
66
  };
67
67
  }
68
- executeTask(workerName, methodName, args = {}, { requestType = RequestType.Compute, priority = 0, options = {}, callbacks = [], } = {}) {
68
+ executeTask(workerName, methodName, args = {}, { requestType = RequestType.COMPUTE, priority = 0, options = {}, callbacks = [], } = {}) {
69
69
  return new Promise((resolve, reject) => {
70
70
  const requestFn = async () => {
71
71
  const { api, index } = this.getNextWorkerAPI(workerName);
package/package.json CHANGED
@@ -1,14 +1,13 @@
1
1
  {
2
2
  "name": "@cornerstonejs/core",
3
- "version": "2.0.0-beta.29",
3
+ "version": "2.0.0-beta.30",
4
4
  "description": "",
5
5
  "main": "./dist/umd/index.js",
6
6
  "module": "./dist/esm/index.js",
7
7
  "types": "./dist/esm/index.d.ts",
8
8
  "repository": "https://github.com/cornerstonejs/cornerstone3D",
9
9
  "files": [
10
- "dist/esm",
11
- "dist/umd"
10
+ "./dist/"
12
11
  ],
13
12
  "sideEffects": false,
14
13
  "exports": {
@@ -85,5 +84,5 @@
85
84
  "type": "individual",
86
85
  "url": "https://ohif.org/donate"
87
86
  },
88
- "gitHead": "fd9316cac241522bc5c43d267e41c7a4e36bec96"
87
+ "gitHead": "e56a9df570b820968e23b35f0526700989ae1e3c"
89
88
  }