@cornerstonejs/core 2.0.0-beta.19 → 2.0.0-beta.20
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/BaseVolumeViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +3 -2
- package/dist/esm/RenderingEngine/StackViewport.d.ts +2 -2
- package/dist/esm/RenderingEngine/StackViewport.js +61 -10
- package/dist/esm/RenderingEngine/VideoViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/VideoViewport.js +2 -2
- package/dist/esm/RenderingEngine/Viewport.d.ts +2 -2
- package/dist/esm/RenderingEngine/Viewport.js +1 -1
- package/dist/esm/cache/cache.d.ts +2 -0
- package/dist/esm/cache/cache.js +52 -24
- package/dist/esm/cache/classes/ImageVolume.d.ts +0 -1
- package/dist/esm/cache/classes/ImageVolume.js +61 -70
- package/dist/esm/loaders/imageLoader.js +2 -1
- package/dist/esm/loaders/volumeLoader.js +11 -1
- package/dist/esm/types/CPUIImageData.d.ts +1 -0
- package/dist/esm/types/IImage.d.ts +1 -0
- package/dist/esm/types/IImageData.d.ts +1 -0
- package/dist/esm/types/IViewport.d.ts +4 -3
- package/dist/esm/utilities/cacheUtils.js +38 -30
- package/dist/esm/utilities/convertStackToVolumeViewport.js +2 -6
- package/dist/esm/utilities/convertVolumeToStackViewport.js +3 -29
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -21,41 +21,41 @@ export function performCacheOptimizationForVolume(volume) {
|
|
|
21
21
|
if (!(volume instanceof ImageVolume)) {
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
+
if (!volume.imageIds?.length) {
|
|
25
|
+
console.warn(`Volume with ID ${volume.volumeId} does not have any images to optimize.`);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
24
28
|
const scalarData = volume.getScalarData();
|
|
25
|
-
volume.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
volume.imageIds.forEach((imageId, imageIdIndex) => {
|
|
30
|
+
let image = cache.getImage(imageId);
|
|
31
|
+
if (image) {
|
|
32
|
+
if (image.bufferView) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const offset = _calculateOffset(volume, imageId, imageIdIndex);
|
|
36
|
+
_updateImageWithScalarDataView(image, scalarData, offset);
|
|
37
|
+
cache.decrementImageCacheSize(image.sizeInBytes);
|
|
33
38
|
return;
|
|
34
39
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const image = cache.getImage(imageId);
|
|
43
|
-
return image;
|
|
44
|
-
});
|
|
45
|
-
if (!sampleImageIdWithImage) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const sampleImage = cache.getImage(sampleImageIdWithImage);
|
|
49
|
-
const samplePixelData = sampleImage.imageFrame?.pixelData || sampleImage.getPixelData();
|
|
50
|
-
if (scalarData.constructor !== samplePixelData.constructor) {
|
|
51
|
-
compatibleScalarData = new samplePixelData.constructor(scalarData.length);
|
|
52
|
-
compatibleScalarData.set(scalarData);
|
|
53
|
-
}
|
|
54
|
-
volume.imageIds.forEach((imageId) => {
|
|
55
|
-
const image = cache.getImage(imageId);
|
|
56
|
-
if (!image) {
|
|
40
|
+
const inOffSetMap = volume.imageCacheOffsetMap.has(imageId) &&
|
|
41
|
+
volume.imageCacheOffsetMap.get(imageId).offset;
|
|
42
|
+
if (inOffSetMap) {
|
|
43
|
+
const image = cache.getImage(imageId);
|
|
44
|
+
const offset = volume.imageCacheOffsetMap.get(imageId).offset;
|
|
45
|
+
_updateImageWithScalarDataView(image, scalarData, offset);
|
|
46
|
+
cache.decrementImageCacheSize(image.sizeInBytes);
|
|
57
47
|
return;
|
|
58
48
|
}
|
|
49
|
+
image = volume.getCornerstoneImage(imageId, imageIdIndex);
|
|
50
|
+
if (!cache.getImageLoadObject(imageId)) {
|
|
51
|
+
cache.putImageSync(imageId, image);
|
|
52
|
+
}
|
|
53
|
+
let compatibleScalarData = scalarData;
|
|
54
|
+
const samplePixelData = image.imageFrame?.pixelData || image.getPixelData();
|
|
55
|
+
if (scalarData.constructor !== samplePixelData.constructor) {
|
|
56
|
+
compatibleScalarData = new samplePixelData.constructor(scalarData.length);
|
|
57
|
+
compatibleScalarData.set(scalarData);
|
|
58
|
+
}
|
|
59
59
|
const index = volume.getImageIdIndex(imageId);
|
|
60
60
|
const offset = index * image.getPixelData().byteLength;
|
|
61
61
|
_updateImageWithScalarDataView(image, compatibleScalarData, offset);
|
|
@@ -76,3 +76,11 @@ function _updateImageWithScalarDataView(image, scalarData, offset) {
|
|
|
76
76
|
offset,
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
+
function _calculateOffset(volume, imageId, imageIdIndex) {
|
|
80
|
+
if (volume.imageCacheOffsetMap.has(imageId)) {
|
|
81
|
+
return volume.imageCacheOffsetMap.get(imageId).offset;
|
|
82
|
+
}
|
|
83
|
+
const image = volume.getCornerstoneImage(imageId, imageIdIndex);
|
|
84
|
+
const index = volume.getImageIdIndex(imageId);
|
|
85
|
+
return index * image.getPixelData().byteLength;
|
|
86
|
+
}
|
|
@@ -11,7 +11,7 @@ async function convertStackToVolumeViewport({ viewport, options, }) {
|
|
|
11
11
|
const { id, element } = viewport;
|
|
12
12
|
const viewportId = options.viewportId || id;
|
|
13
13
|
const imageIds = viewport.getImageIds();
|
|
14
|
-
const
|
|
14
|
+
const prevView = viewport.getViewReference();
|
|
15
15
|
renderingEngine.enableElement({
|
|
16
16
|
viewportId,
|
|
17
17
|
type: ViewportType.ORTHOGRAPHIC,
|
|
@@ -32,11 +32,7 @@ async function convertStackToVolumeViewport({ viewport, options, }) {
|
|
|
32
32
|
},
|
|
33
33
|
], [viewportId]);
|
|
34
34
|
const volumeViewportNewVolumeHandler = () => {
|
|
35
|
-
|
|
36
|
-
volumeViewport.setCamera({
|
|
37
|
-
...prevCamera,
|
|
38
|
-
});
|
|
39
|
-
}
|
|
35
|
+
volumeViewport.setViewReference(prevView);
|
|
40
36
|
volumeViewport.render();
|
|
41
37
|
element.removeEventListener(Events.VOLUME_VIEWPORT_NEW_VOLUME, volumeViewportNewVolumeHandler);
|
|
42
38
|
};
|
|
@@ -4,7 +4,6 @@ async function convertVolumeToStackViewport({ viewport, options, }) {
|
|
|
4
4
|
const volumeViewport = viewport;
|
|
5
5
|
const { id, element } = volumeViewport;
|
|
6
6
|
const renderingEngine = viewport.getRenderingEngine();
|
|
7
|
-
const imageIdIndex = viewport.getCurrentImageIdIndex();
|
|
8
7
|
const { background } = options;
|
|
9
8
|
const viewportId = options.viewportId || id;
|
|
10
9
|
const actorEntry = volumeViewport.getDefaultActor();
|
|
@@ -21,36 +20,11 @@ async function convertVolumeToStackViewport({ viewport, options, }) {
|
|
|
21
20
|
background,
|
|
22
21
|
},
|
|
23
22
|
};
|
|
23
|
+
const prevView = volumeViewport.getViewReference();
|
|
24
24
|
renderingEngine.enableElement(viewportInput);
|
|
25
25
|
const stackViewport = (renderingEngine.getViewport(viewportId));
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (hasCachedImages) {
|
|
29
|
-
isAllImagesCached = volume.imageIds.every((imageId) => cache.getImage(imageId));
|
|
30
|
-
}
|
|
31
|
-
const volumeUsedInOtherViewports = renderingEngine
|
|
32
|
-
.getVolumeViewports()
|
|
33
|
-
.find((vp) => vp.hasVolumeId(volumeId));
|
|
34
|
-
volume.decache(!volumeUsedInOtherViewports && isAllImagesCached);
|
|
35
|
-
const stack = [...volume.imageIds].reverse();
|
|
36
|
-
let imageIdIndexToJump = Math.max(volume.imageIds.length - imageIdIndex - 1, 0);
|
|
37
|
-
const imageToJump = cache.getImage(stack[imageIdIndexToJump]);
|
|
38
|
-
if (!imageToJump) {
|
|
39
|
-
let minDistance = Infinity;
|
|
40
|
-
let minDistanceIndex = null;
|
|
41
|
-
stack.forEach((imageId, index) => {
|
|
42
|
-
const image = cache.getImage(imageId);
|
|
43
|
-
if (image) {
|
|
44
|
-
const distance = Math.abs(imageIdIndexToJump - index);
|
|
45
|
-
if (distance < minDistance) {
|
|
46
|
-
minDistance = distance;
|
|
47
|
-
minDistanceIndex = index;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
imageIdIndexToJump = minDistanceIndex;
|
|
52
|
-
}
|
|
53
|
-
await stackViewport.setStack(stack, imageIdIndexToJump ?? 0);
|
|
26
|
+
await stackViewport.setStack(volume.imageIds);
|
|
27
|
+
stackViewport.setViewReference(prevView);
|
|
54
28
|
stackViewport.render();
|
|
55
29
|
return stackViewport;
|
|
56
30
|
}
|