@cornerstonejs/core 1.42.0 → 1.42.1
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/cjs/RenderingEngine/BaseVolumeViewport.js.map +1 -1
- package/dist/cjs/RenderingEngine/StackViewport.js +2 -1
- package/dist/cjs/RenderingEngine/StackViewport.js.map +1 -1
- package/dist/cjs/RenderingEngine/helpers/createVolumeActor.js +2 -1
- package/dist/cjs/RenderingEngine/helpers/createVolumeActor.js.map +1 -1
- package/dist/cjs/cache/cache.d.ts +6 -3
- package/dist/cjs/cache/cache.js +43 -6
- package/dist/cjs/cache/cache.js.map +1 -1
- package/dist/cjs/cache/classes/ImageVolume.d.ts +25 -5
- package/dist/cjs/cache/classes/ImageVolume.js +302 -13
- package/dist/cjs/cache/classes/ImageVolume.js.map +1 -1
- package/dist/cjs/eventTarget.d.ts +1 -0
- package/dist/cjs/eventTarget.js +13 -1
- package/dist/cjs/eventTarget.js.map +1 -1
- package/dist/cjs/init.js +2 -0
- package/dist/cjs/init.js.map +1 -1
- package/dist/cjs/loaders/imageLoader.js +6 -2
- package/dist/cjs/loaders/imageLoader.js.map +1 -1
- package/dist/cjs/loaders/volumeLoader.d.ts +12 -9
- package/dist/cjs/loaders/volumeLoader.js +50 -5
- package/dist/cjs/loaders/volumeLoader.js.map +1 -1
- package/dist/cjs/types/Cornerstone3DConfig.d.ts +1 -0
- package/dist/cjs/types/IDynamicImageVolume.d.ts +2 -2
- package/dist/cjs/types/IImage.d.ts +5 -0
- package/dist/cjs/types/IImageVolume.d.ts +7 -2
- package/dist/cjs/types/ILoadObject.d.ts +2 -2
- package/dist/cjs/types/IVolume.d.ts +3 -26
- package/dist/cjs/types/ImageVolumeProps.d.ts +6 -0
- package/dist/cjs/types/ImageVolumeProps.js +3 -0
- package/dist/cjs/types/ImageVolumeProps.js.map +1 -0
- package/dist/cjs/types/VolumeProps.d.ts +27 -0
- package/dist/cjs/types/VolumeProps.js +3 -0
- package/dist/cjs/types/VolumeProps.js.map +1 -0
- package/dist/cjs/types/index.d.ts +4 -2
- package/dist/cjs/utilities/VoxelManager.d.ts +2 -2
- package/dist/cjs/utilities/cacheUtils.d.ts +2 -0
- package/dist/cjs/utilities/cacheUtils.js +96 -0
- package/dist/cjs/utilities/cacheUtils.js.map +1 -0
- package/dist/cjs/utilities/convertStackToVolumeViewport.d.ts +12 -0
- package/dist/cjs/utilities/convertStackToVolumeViewport.js +61 -0
- package/dist/cjs/utilities/convertStackToVolumeViewport.js.map +1 -0
- package/dist/cjs/utilities/convertVolumeToStackViewport.d.ts +9 -0
- package/dist/cjs/utilities/convertVolumeToStackViewport.js +95 -0
- package/dist/cjs/utilities/convertVolumeToStackViewport.js.map +1 -0
- package/dist/cjs/utilities/generateVolumePropsFromImageIds.d.ts +3 -0
- package/dist/cjs/utilities/generateVolumePropsFromImageIds.js +124 -0
- package/dist/cjs/utilities/generateVolumePropsFromImageIds.js.map +1 -0
- package/dist/cjs/utilities/index.d.ts +6 -1
- package/dist/cjs/utilities/index.js +12 -1
- package/dist/cjs/utilities/index.js.map +1 -1
- package/dist/cjs/utilities/roundNumber.d.ts +4 -0
- package/dist/cjs/utilities/roundNumber.js +36 -0
- package/dist/cjs/utilities/roundNumber.js.map +1 -0
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js.map +1 -1
- package/dist/esm/RenderingEngine/StackViewport.js +2 -1
- package/dist/esm/RenderingEngine/StackViewport.js.map +1 -1
- package/dist/esm/RenderingEngine/helpers/createVolumeActor.js +1 -1
- package/dist/esm/RenderingEngine/helpers/createVolumeActor.js.map +1 -1
- package/dist/esm/cache/cache.js +43 -6
- package/dist/esm/cache/cache.js.map +1 -1
- package/dist/esm/cache/classes/ImageVolume.js +279 -14
- package/dist/esm/cache/classes/ImageVolume.js.map +1 -1
- package/dist/esm/eventTarget.js +13 -1
- package/dist/esm/eventTarget.js.map +1 -1
- package/dist/esm/init.js +2 -0
- package/dist/esm/init.js.map +1 -1
- package/dist/esm/loaders/imageLoader.js +5 -2
- package/dist/esm/loaders/imageLoader.js.map +1 -1
- package/dist/esm/loaders/volumeLoader.js +50 -5
- package/dist/esm/loaders/volumeLoader.js.map +1 -1
- package/dist/esm/types/ImageVolumeProps.js +2 -0
- package/dist/esm/types/ImageVolumeProps.js.map +1 -0
- package/dist/esm/types/VolumeProps.js +2 -0
- package/dist/esm/types/VolumeProps.js.map +1 -0
- package/dist/esm/utilities/cacheUtils.js +65 -0
- package/dist/esm/utilities/cacheUtils.js.map +1 -0
- package/dist/esm/utilities/convertStackToVolumeViewport.js +49 -0
- package/dist/esm/utilities/convertStackToVolumeViewport.js.map +1 -0
- package/dist/esm/utilities/convertVolumeToStackViewport.js +58 -0
- package/dist/esm/utilities/convertVolumeToStackViewport.js.map +1 -0
- package/dist/esm/utilities/generateVolumePropsFromImageIds.js +118 -0
- package/dist/esm/utilities/generateVolumePropsFromImageIds.js.map +1 -0
- package/dist/esm/utilities/index.js +6 -1
- package/dist/esm/utilities/index.js.map +1 -1
- package/dist/esm/utilities/roundNumber.js +33 -0
- package/dist/esm/utilities/roundNumber.js.map +1 -0
- package/dist/types/RenderingEngine/BaseVolumeViewport.d.ts.map +1 -1
- package/dist/types/RenderingEngine/StackViewport.d.ts.map +1 -1
- package/dist/types/cache/cache.d.ts +6 -3
- package/dist/types/cache/cache.d.ts.map +1 -1
- package/dist/types/cache/classes/ImageVolume.d.ts +25 -5
- package/dist/types/cache/classes/ImageVolume.d.ts.map +1 -1
- package/dist/types/eventTarget.d.ts +1 -0
- package/dist/types/eventTarget.d.ts.map +1 -1
- package/dist/types/loaders/imageLoader.d.ts.map +1 -1
- package/dist/types/loaders/volumeLoader.d.ts +12 -9
- package/dist/types/loaders/volumeLoader.d.ts.map +1 -1
- package/dist/types/types/Cornerstone3DConfig.d.ts +1 -0
- package/dist/types/types/Cornerstone3DConfig.d.ts.map +1 -1
- package/dist/types/types/IDynamicImageVolume.d.ts +2 -2
- package/dist/types/types/IDynamicImageVolume.d.ts.map +1 -1
- package/dist/types/types/IImage.d.ts +5 -0
- package/dist/types/types/IImage.d.ts.map +1 -1
- package/dist/types/types/IImageVolume.d.ts +7 -2
- package/dist/types/types/IImageVolume.d.ts.map +1 -1
- package/dist/types/types/ILoadObject.d.ts +2 -2
- package/dist/types/types/ILoadObject.d.ts.map +1 -1
- package/dist/types/types/IVolume.d.ts +3 -26
- package/dist/types/types/IVolume.d.ts.map +1 -1
- package/dist/types/types/ImageVolumeProps.d.ts +7 -0
- package/dist/types/types/ImageVolumeProps.d.ts.map +1 -0
- package/dist/types/types/VolumeProps.d.ts +28 -0
- package/dist/types/types/VolumeProps.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +4 -2
- package/dist/types/types/index.d.ts.map +1 -1
- package/dist/types/utilities/VoxelManager.d.ts +2 -2
- package/dist/types/utilities/VoxelManager.d.ts.map +1 -1
- package/dist/types/utilities/cacheUtils.d.ts +3 -0
- package/dist/types/utilities/cacheUtils.d.ts.map +1 -0
- package/dist/types/utilities/convertStackToVolumeViewport.d.ts +13 -0
- package/dist/types/utilities/convertStackToVolumeViewport.d.ts.map +1 -0
- package/dist/types/utilities/convertVolumeToStackViewport.d.ts +10 -0
- package/dist/types/utilities/convertVolumeToStackViewport.d.ts.map +1 -0
- package/dist/types/utilities/generateVolumePropsFromImageIds.d.ts +4 -0
- package/dist/types/utilities/generateVolumePropsFromImageIds.d.ts.map +1 -0
- package/dist/types/utilities/index.d.ts +6 -1
- package/dist/types/utilities/index.d.ts.map +1 -1
- package/dist/types/utilities/roundNumber.d.ts +5 -0
- package/dist/types/utilities/roundNumber.d.ts.map +1 -0
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +2 -2
- package/src/RenderingEngine/BaseVolumeViewport.ts +0 -1
- package/src/RenderingEngine/StackViewport.ts +3 -1
- package/src/RenderingEngine/helpers/createVolumeActor.ts +1 -1
- package/src/cache/cache.ts +91 -7
- package/src/cache/classes/ImageVolume.ts +535 -21
- package/src/eventTarget.ts +19 -1
- package/src/init.ts +2 -2
- package/src/loaders/imageLoader.ts +6 -2
- package/src/loaders/volumeLoader.ts +118 -23
- package/src/types/Cornerstone3DConfig.ts +12 -0
- package/src/types/IDynamicImageVolume.ts +2 -2
- package/src/types/IImage.ts +6 -0
- package/src/types/IImageVolume.ts +14 -2
- package/src/types/ILoadObject.ts +2 -2
- package/src/types/IVolume.ts +4 -41
- package/src/types/ImageVolumeProps.ts +15 -0
- package/src/types/VolumeProps.ts +57 -0
- package/src/types/index.ts +5 -2
- package/src/utilities/VoxelManager.ts +2 -2
- package/src/utilities/cacheUtils.ts +121 -0
- package/src/utilities/convertStackToVolumeViewport.ts +115 -0
- package/src/utilities/convertVolumeToStackViewport.ts +125 -0
- package/src/utilities/generateVolumePropsFromImageIds.ts +183 -0
- package/src/utilities/index.ts +11 -0
- package/src/utilities/roundNumber.ts +56 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/core",
|
|
3
|
-
"version": "1.42.
|
|
3
|
+
"version": "1.42.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "src/index.ts",
|
|
6
6
|
"types": "dist/types/index.d.ts",
|
|
@@ -47,5 +47,5 @@
|
|
|
47
47
|
"type": "individual",
|
|
48
48
|
"url": "https://ohif.org/donate"
|
|
49
49
|
},
|
|
50
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "14a1bff3ba983b6664529e8e829a655cc4ffda89"
|
|
51
51
|
}
|
|
@@ -2279,13 +2279,15 @@ class StackViewport extends Viewport implements IStackViewport, IImagesLoader {
|
|
|
2279
2279
|
|
|
2280
2280
|
// 3b. If we cannot reuse the vtkImageData object (either the first render
|
|
2281
2281
|
// or the size has changed), create a new one
|
|
2282
|
+
|
|
2283
|
+
const pixelArray = image.getPixelData();
|
|
2282
2284
|
this._createVTKImageData({
|
|
2283
2285
|
origin,
|
|
2284
2286
|
direction,
|
|
2285
2287
|
dimensions,
|
|
2286
2288
|
spacing,
|
|
2287
2289
|
numComps,
|
|
2288
|
-
pixelArray
|
|
2290
|
+
pixelArray,
|
|
2289
2291
|
});
|
|
2290
2292
|
|
|
2291
2293
|
// Set the scalar data of the vtkImageData object from the Cornerstone
|
|
@@ -70,7 +70,7 @@ async function createVolumeActor(
|
|
|
70
70
|
// on either the metadata or the min/max of the middle slice. Example of other
|
|
71
71
|
// types of volumes which might not be composed of imageIds would be e.g., nrrd, nifti
|
|
72
72
|
// format volumes
|
|
73
|
-
if (imageVolume.imageIds) {
|
|
73
|
+
if (imageVolume.imageIds?.length) {
|
|
74
74
|
await setDefaultVolumeVOI(volumeActor, imageVolume, useNativeDataType);
|
|
75
75
|
}
|
|
76
76
|
|
package/src/cache/cache.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ICache,
|
|
3
3
|
IImage,
|
|
4
|
-
IImageVolume,
|
|
5
4
|
IGeometry,
|
|
6
5
|
IImageLoadObject,
|
|
7
6
|
IVolumeLoadObject,
|
|
@@ -10,10 +9,12 @@ import {
|
|
|
10
9
|
ICachedVolume,
|
|
11
10
|
ICachedGeometry,
|
|
12
11
|
EventTypes,
|
|
12
|
+
IImageVolume,
|
|
13
13
|
} from '../types';
|
|
14
14
|
import { triggerEvent, imageIdToURI } from '../utilities';
|
|
15
15
|
import eventTarget from '../eventTarget';
|
|
16
16
|
import Events from '../enums/Events';
|
|
17
|
+
import { ImageVolume } from './classes/ImageVolume';
|
|
17
18
|
|
|
18
19
|
const ONE_GB = 1073741824;
|
|
19
20
|
|
|
@@ -152,6 +153,10 @@ class Cache implements ICache {
|
|
|
152
153
|
volume.imageData.delete();
|
|
153
154
|
}
|
|
154
155
|
|
|
156
|
+
// if we had views for the images of the volume, we need to restore them
|
|
157
|
+
// to avoid memory leaks
|
|
158
|
+
this._restoreImagesFromBuffer(volume);
|
|
159
|
+
|
|
155
160
|
if (volumeLoadObject.cancelFn) {
|
|
156
161
|
// Cancel any in-progress loading
|
|
157
162
|
volumeLoadObject.cancelFn();
|
|
@@ -402,7 +407,7 @@ class Cache implements ICache {
|
|
|
402
407
|
cachedImage.loaded = true;
|
|
403
408
|
cachedImage.image = image;
|
|
404
409
|
cachedImage.sizeInBytes = image.sizeInBytes;
|
|
405
|
-
this.
|
|
410
|
+
this.incrementImageCacheSize(cachedImage.sizeInBytes);
|
|
406
411
|
const eventDetails: EventTypes.ImageCacheImageAddedEventDetail = {
|
|
407
412
|
image: cachedImage,
|
|
408
413
|
};
|
|
@@ -598,7 +603,7 @@ class Cache implements ICache {
|
|
|
598
603
|
// cachedVolume.loaded = true
|
|
599
604
|
cachedVolume.volume = volume;
|
|
600
605
|
cachedVolume.sizeInBytes = volume.sizeInBytes;
|
|
601
|
-
this.
|
|
606
|
+
this.incrementVolumeCacheSize(cachedVolume.sizeInBytes);
|
|
602
607
|
|
|
603
608
|
const eventDetails: EventTypes.VolumeCacheVolumeAddedEventDetail = {
|
|
604
609
|
volume: cachedVolume,
|
|
@@ -720,7 +725,7 @@ class Cache implements ICache {
|
|
|
720
725
|
);
|
|
721
726
|
}
|
|
722
727
|
|
|
723
|
-
this.
|
|
728
|
+
this.incrementImageCacheSize(-cachedImage.sizeInBytes);
|
|
724
729
|
|
|
725
730
|
const eventDetails = {
|
|
726
731
|
imageId,
|
|
@@ -751,7 +756,7 @@ class Cache implements ICache {
|
|
|
751
756
|
);
|
|
752
757
|
}
|
|
753
758
|
|
|
754
|
-
this.
|
|
759
|
+
this.incrementVolumeCacheSize(-cachedVolume.sizeInBytes);
|
|
755
760
|
|
|
756
761
|
const eventDetails = {
|
|
757
762
|
volume: cachedVolume,
|
|
@@ -835,7 +840,7 @@ class Cache implements ICache {
|
|
|
835
840
|
*
|
|
836
841
|
* @param increment - bytes length
|
|
837
842
|
*/
|
|
838
|
-
|
|
843
|
+
public incrementImageCacheSize = (increment: number) => {
|
|
839
844
|
this._imageCacheSize += increment;
|
|
840
845
|
};
|
|
841
846
|
|
|
@@ -844,9 +849,88 @@ class Cache implements ICache {
|
|
|
844
849
|
*
|
|
845
850
|
* @param increment - bytes length
|
|
846
851
|
*/
|
|
847
|
-
|
|
852
|
+
public incrementVolumeCacheSize = (increment: number) => {
|
|
848
853
|
this._volumeCacheSize += increment;
|
|
849
854
|
};
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Decreases the image cache size with the provided decrement
|
|
858
|
+
*
|
|
859
|
+
* @param decrement - bytes length
|
|
860
|
+
*/
|
|
861
|
+
public decrementImageCacheSize = (decrement: number) => {
|
|
862
|
+
this._imageCacheSize -= decrement;
|
|
863
|
+
};
|
|
864
|
+
|
|
865
|
+
/**
|
|
866
|
+
* Decreases the cache size with the provided decrement
|
|
867
|
+
*
|
|
868
|
+
* @param decrement - bytes length
|
|
869
|
+
*/
|
|
870
|
+
public decrementVolumeCacheSize = (decrement: number) => {
|
|
871
|
+
this._volumeCacheSize -= decrement;
|
|
872
|
+
};
|
|
873
|
+
|
|
874
|
+
/**
|
|
875
|
+
* This function will restore the images' pixel data from the shared array buffer
|
|
876
|
+
* back to the individual images when the volume is purged from cache. It ensures
|
|
877
|
+
* that each image retrieves its correct portion of data from the buffer based on
|
|
878
|
+
* the previously stored offset and length information.
|
|
879
|
+
*
|
|
880
|
+
* @param volumeId - The volumeId whose images need to be restored.
|
|
881
|
+
*/
|
|
882
|
+
private _restoreImagesFromBuffer(volume: IImageVolume) {
|
|
883
|
+
if (!(volume instanceof ImageVolume)) {
|
|
884
|
+
console.warn(
|
|
885
|
+
'Volume is not an ImageVolume. Cannot restore images from buffer.'
|
|
886
|
+
);
|
|
887
|
+
return;
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
// Retrieve the scalar data and the offset map from the volume
|
|
891
|
+
const scalarData = volume.getScalarData();
|
|
892
|
+
const imageCacheOffsetMap = volume.imageCacheOffsetMap;
|
|
893
|
+
|
|
894
|
+
if (imageCacheOffsetMap.size === 0) {
|
|
895
|
+
console.warn('No cached images to restore for this volume.');
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
|
|
899
|
+
// Iterate over each image and restore its pixel data from the shared buffer
|
|
900
|
+
for (const [imageId, { offset }] of imageCacheOffsetMap) {
|
|
901
|
+
const image = this.getImage(imageId);
|
|
902
|
+
|
|
903
|
+
if (!image) {
|
|
904
|
+
console.warn(`Image with id ${imageId} not found in cache.`);
|
|
905
|
+
continue;
|
|
906
|
+
}
|
|
907
|
+
|
|
908
|
+
const viewPixelData = image.getPixelData();
|
|
909
|
+
const length = viewPixelData.length;
|
|
910
|
+
|
|
911
|
+
// Create a new view of the buffer for this specific image
|
|
912
|
+
// @ts-ignore
|
|
913
|
+
const pixelData = new viewPixelData.constructor(
|
|
914
|
+
scalarData.buffer,
|
|
915
|
+
offset,
|
|
916
|
+
length
|
|
917
|
+
);
|
|
918
|
+
|
|
919
|
+
// Restore the original getPixelData function and pixelData
|
|
920
|
+
image.getPixelData = () => pixelData;
|
|
921
|
+
|
|
922
|
+
if (image.imageFrame) {
|
|
923
|
+
image.imageFrame.pixelData = pixelData;
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
delete image.bufferView;
|
|
927
|
+
|
|
928
|
+
// Optionally, increment the image cache size again if needed
|
|
929
|
+
this.incrementImageCacheSize(image.sizeInBytes);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
console.log(`Images restored from buffer for volume ${volume.volumeId}.`);
|
|
933
|
+
}
|
|
850
934
|
}
|
|
851
935
|
|
|
852
936
|
/**
|