@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.
- package/dist/esm/RenderingEngine/StackViewport.js +20 -3
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +1 -1
- package/dist/esm/cache/classes/BaseStreamingImageVolume.js +1 -1
- package/dist/esm/enums/Events.d.ts +1 -0
- package/dist/esm/enums/Events.js +1 -0
- package/dist/esm/enums/GeometryType.d.ts +2 -2
- package/dist/esm/enums/GeometryType.js +2 -2
- package/dist/esm/enums/RequestType.d.ts +4 -4
- package/dist/esm/enums/RequestType.js +4 -4
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/init.js +0 -1
- package/dist/esm/loaders/ProgressiveRetrieveImages.js +1 -1
- package/dist/esm/loaders/configuration/interleavedRetrieve.js +43 -2
- package/dist/esm/loaders/cornerstoneStreamingImageVolumeLoader.js +1 -1
- package/dist/esm/loaders/geometryLoader.js +2 -2
- package/dist/esm/loaders/utils/contourSet/createContourSet.js +1 -1
- package/dist/esm/loaders/utils/surface/createSurface.js +1 -1
- package/dist/esm/requestPool/imageLoadPoolManager.js +3 -3
- package/dist/esm/requestPool/imageRetrievalPoolManager.js +3 -3
- package/dist/esm/requestPool/requestPoolManager.d.ts +4 -4
- package/dist/esm/requestPool/requestPoolManager.js +20 -20
- package/dist/esm/types/EventTypes.d.ts +6 -1
- package/dist/esm/types/ICache.d.ts +2 -2
- package/dist/esm/types/IViewport.d.ts +1 -0
- package/dist/esm/utilities/RLEVoxelMap.d.ts +1 -1
- package/dist/esm/utilities/RLEVoxelMap.js +12 -12
- package/dist/esm/utilities/loadImageToCanvas.js +1 -1
- package/dist/esm/webWorkerManager/webWorkerManager.js +1 -1
- 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.
|
|
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.
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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",
|
package/dist/esm/enums/Events.js
CHANGED
|
@@ -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,6 +1,6 @@
|
|
|
1
1
|
var GeometryType;
|
|
2
2
|
(function (GeometryType) {
|
|
3
|
-
GeometryType["
|
|
4
|
-
GeometryType["
|
|
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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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["
|
|
4
|
-
RequestType["
|
|
5
|
-
RequestType["
|
|
6
|
-
RequestType["
|
|
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;
|
package/dist/esm/index.d.ts
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';
|
|
@@ -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
|
@@ -124,7 +124,7 @@ class ProgressiveRetrieveImagesInstance {
|
|
|
124
124
|
streamingData,
|
|
125
125
|
};
|
|
126
126
|
const priority = stage.priority ?? -5;
|
|
127
|
-
const requestType = stage.requestType || RequestType.
|
|
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.
|
|
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.
|
|
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;
|
|
@@ -8,10 +8,10 @@ async function createAndCacheGeometry(geometryId, options) {
|
|
|
8
8
|
if (geometry) {
|
|
9
9
|
return geometry;
|
|
10
10
|
}
|
|
11
|
-
if (options.type === GeometryType.
|
|
11
|
+
if (options.type === GeometryType.CONTOUR) {
|
|
12
12
|
geometry = createContourSet(geometryId, options.geometryData);
|
|
13
13
|
}
|
|
14
|
-
else if (options.type === GeometryType.
|
|
14
|
+
else if (options.type === GeometryType.SURFACE) {
|
|
15
15
|
geometry = createSurface(geometryId, options.geometryData);
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
@@ -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.
|
|
6
|
-
imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.
|
|
7
|
-
imageLoadPoolManager.setMaxSimultaneousRequests(RequestType.
|
|
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.
|
|
5
|
-
imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.
|
|
6
|
-
imageRetrievalPoolManager.setMaxSimultaneousRequests(RequestType.
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
INTERACTION: 0,
|
|
22
|
+
THUMBNAIL: 0,
|
|
23
|
+
PREFETCH: 0,
|
|
24
|
+
COMPUTE: 0,
|
|
25
25
|
};
|
|
26
26
|
this.maxNumRequests = {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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.
|
|
118
|
-
const hasRemainingThumbnailRequests = this.sendRequests(RequestType.
|
|
119
|
-
const hasRemainingPrefetchRequests = this.sendRequests(RequestType.
|
|
120
|
-
const hasRemainingComputeRequests = this.sendRequests(RequestType.
|
|
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
|
-
|
|
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
|
}
|
|
@@ -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
|
|
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
|
|
53
|
+
if (rlePrev?.value === value && rlePrev.end === i) {
|
|
54
54
|
rlePrev.end++;
|
|
55
|
-
if (rleNext
|
|
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
|
|
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
|
|
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
|
|
72
|
+
if (rleNext?.value === value && rleNext.start === i + 1) {
|
|
73
73
|
rleNext.start--;
|
|
74
|
-
if (rlePrev
|
|
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
|
|
82
|
+
if (rleNext?.start === i && rleNext.end === i + 1) {
|
|
83
83
|
rleNext.value = value;
|
|
84
84
|
const nextnext = row[rleIndex + 1];
|
|
85
|
-
if (nextnext
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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.
|
|
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/
|
|
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": "
|
|
87
|
+
"gitHead": "e56a9df570b820968e23b35f0526700989ae1e3c"
|
|
89
88
|
}
|