@cornerstonejs/core 2.0.0-beta.26 → 2.0.0-beta.28

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 (150) hide show
  1. package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +5 -1
  2. package/dist/esm/RenderingEngine/BaseVolumeViewport.js +56 -32
  3. package/dist/esm/RenderingEngine/RenderingEngine.js +7 -3
  4. package/dist/esm/RenderingEngine/StackViewport.d.ts +1 -2
  5. package/dist/esm/RenderingEngine/StackViewport.js +70 -85
  6. package/dist/esm/RenderingEngine/VideoViewport.js +50 -25
  7. package/dist/esm/RenderingEngine/Viewport.d.ts +3 -1
  8. package/dist/esm/RenderingEngine/Viewport.js +14 -8
  9. package/dist/esm/RenderingEngine/VolumeViewport.d.ts +1 -1
  10. package/dist/esm/RenderingEngine/VolumeViewport.js +15 -17
  11. package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +4 -1
  12. package/dist/esm/RenderingEngine/VolumeViewport3D.js +23 -3
  13. package/dist/esm/RenderingEngine/WSIViewport.d.ts +1 -1
  14. package/dist/esm/RenderingEngine/WSIViewport.js +31 -18
  15. package/dist/esm/RenderingEngine/helpers/createVolumeActor.js +2 -0
  16. package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +10 -11
  17. package/dist/esm/cache/cache.d.ts +1 -1
  18. package/dist/esm/cache/cache.js +8 -2
  19. package/dist/esm/cache/classes/StreamingDynamicImageVolume.js +2 -0
  20. package/dist/esm/enums/Events.d.ts +1 -1
  21. package/dist/esm/enums/Events.js +1 -1
  22. package/dist/esm/loaders/configuration/interleavedRetrieve.js +0 -3
  23. package/dist/esm/loaders/configuration/singleRetrieve.js +0 -3
  24. package/dist/esm/loaders/imageLoader.d.ts +9 -4
  25. package/dist/esm/loaders/imageLoader.js +55 -42
  26. package/dist/esm/loaders/index.d.ts +6 -0
  27. package/dist/esm/loaders/index.js +7 -0
  28. package/dist/esm/loaders/volumeLoader.d.ts +8 -4
  29. package/dist/esm/loaders/volumeLoader.js +26 -7
  30. package/dist/esm/types/AABB2.js +0 -1
  31. package/dist/esm/types/AABB3.js +0 -1
  32. package/dist/esm/types/ActorSliceRange.js +0 -1
  33. package/dist/esm/types/AffineMatrix.js +0 -1
  34. package/dist/esm/types/BoundsIJK.js +0 -1
  35. package/dist/esm/types/BoundsLPS.js +0 -1
  36. package/dist/esm/types/CPUFallbackColormap.js +0 -1
  37. package/dist/esm/types/CPUFallbackColormapData.js +0 -1
  38. package/dist/esm/types/CPUFallbackColormapsData.js +0 -1
  39. package/dist/esm/types/CPUFallbackEnabledElement.js +0 -1
  40. package/dist/esm/types/CPUFallbackLUT.js +0 -1
  41. package/dist/esm/types/CPUFallbackLookupTable.js +0 -1
  42. package/dist/esm/types/CPUFallbackRenderingTools.js +0 -1
  43. package/dist/esm/types/CPUFallbackTransform.js +0 -1
  44. package/dist/esm/types/CPUFallbackViewport.js +0 -1
  45. package/dist/esm/types/CPUFallbackViewportDisplayedArea.js +0 -1
  46. package/dist/esm/types/CPUIImageData.js +0 -1
  47. package/dist/esm/types/Color.js +0 -1
  48. package/dist/esm/types/Colormap.js +0 -1
  49. package/dist/esm/types/ContourData.js +0 -1
  50. package/dist/esm/types/Cornerstone3DConfig.js +0 -1
  51. package/dist/esm/types/CustomEventType.js +0 -1
  52. package/dist/esm/types/EventTypes.js +0 -1
  53. package/dist/esm/types/FlipDirection.js +0 -1
  54. package/dist/esm/types/IActor.js +0 -1
  55. package/dist/esm/types/IBaseVolumeViewport.js +0 -1
  56. package/dist/esm/types/ICache.js +0 -1
  57. package/dist/esm/types/ICachedGeometry.js +0 -1
  58. package/dist/esm/types/ICachedImage.js +0 -1
  59. package/dist/esm/types/ICachedVolume.js +0 -1
  60. package/dist/esm/types/ICamera.js +0 -1
  61. package/dist/esm/types/IContour.js +0 -1
  62. package/dist/esm/types/IContourSet.js +0 -1
  63. package/dist/esm/types/IDynamicImageVolume.js +0 -1
  64. package/dist/esm/types/IEnabledElement.js +0 -1
  65. package/dist/esm/types/IGeometry.js +0 -1
  66. package/dist/esm/types/IImage.js +0 -1
  67. package/dist/esm/types/IImageCalibration.js +0 -1
  68. package/dist/esm/types/IImageData.js +0 -1
  69. package/dist/esm/types/IImageFrame.js +0 -1
  70. package/dist/esm/types/IImageVolume.js +0 -1
  71. package/dist/esm/types/ILoadObject.js +0 -1
  72. package/dist/esm/types/IPointsManager.js +0 -1
  73. package/dist/esm/types/IRLEVoxelMap.js +0 -1
  74. package/dist/esm/types/IRegisterImageLoader.js +0 -1
  75. package/dist/esm/types/IRenderingEngine.js +0 -1
  76. package/dist/esm/types/IRetrieveConfiguration.js +0 -1
  77. package/dist/esm/types/IStackInput.js +0 -1
  78. package/dist/esm/types/IStackViewport.js +0 -1
  79. package/dist/esm/types/IStreamingImageVolume.js +0 -1
  80. package/dist/esm/types/IStreamingVolumeProperties.js +0 -1
  81. package/dist/esm/types/ISurface.js +0 -1
  82. package/dist/esm/types/ITransferFunctionNode.js +0 -1
  83. package/dist/esm/types/IVideoViewport.js +0 -1
  84. package/dist/esm/types/IViewport.js +0 -1
  85. package/dist/esm/types/IViewportId.js +0 -1
  86. package/dist/esm/types/IVolume.js +0 -1
  87. package/dist/esm/types/IVolumeInput.js +0 -1
  88. package/dist/esm/types/IVolumeViewport.js +0 -1
  89. package/dist/esm/types/IVoxelManager.js +0 -1
  90. package/dist/esm/types/IWSIViewport.js +0 -1
  91. package/dist/esm/types/ImageLoadListener.js +0 -1
  92. package/dist/esm/types/ImageLoadRequests.js +0 -1
  93. package/dist/esm/types/ImageLoaderFn.js +0 -1
  94. package/dist/esm/types/ImagePixelModule.js +0 -1
  95. package/dist/esm/types/ImagePlaneModule.js +0 -1
  96. package/dist/esm/types/ImageSliceData.js +0 -1
  97. package/dist/esm/types/ImageVolumeProps.js +0 -1
  98. package/dist/esm/types/Mat3.js +0 -1
  99. package/dist/esm/types/Metadata.js +0 -1
  100. package/dist/esm/types/MetadataModuleTypes.d.ts +4 -4
  101. package/dist/esm/types/MetadataModuleTypes.js +0 -1
  102. package/dist/esm/types/OrientationVectors.js +0 -1
  103. package/dist/esm/types/PixelDataTypedArray.js +0 -1
  104. package/dist/esm/types/Plane.js +0 -1
  105. package/dist/esm/types/Point2.js +0 -1
  106. package/dist/esm/types/Point3.js +0 -1
  107. package/dist/esm/types/Point4.js +0 -1
  108. package/dist/esm/types/RGB.js +0 -1
  109. package/dist/esm/types/ScalingParameters.js +0 -1
  110. package/dist/esm/types/StackViewportProperties.js +0 -1
  111. package/dist/esm/types/SurfaceData.js +0 -1
  112. package/dist/esm/types/TransformMatrix2D.js +0 -1
  113. package/dist/esm/types/VideoViewportProperties.js +0 -1
  114. package/dist/esm/types/VideoViewportTypes.js +0 -1
  115. package/dist/esm/types/ViewportInputOptions.js +0 -1
  116. package/dist/esm/types/ViewportPreset.js +0 -1
  117. package/dist/esm/types/ViewportProperties.d.ts +1 -0
  118. package/dist/esm/types/ViewportProperties.js +0 -1
  119. package/dist/esm/types/VolumeLoaderFn.js +0 -1
  120. package/dist/esm/types/VolumeProps.js +0 -1
  121. package/dist/esm/types/VolumeViewportProperties.js +0 -1
  122. package/dist/esm/types/WSIViewportProperties.js +0 -1
  123. package/dist/esm/types/displayArea.js +0 -1
  124. package/dist/esm/types/index.js +0 -1
  125. package/dist/esm/types/voi.js +0 -1
  126. package/dist/esm/utilities/VoxelManager.d.ts +3 -1
  127. package/dist/esm/utilities/VoxelManager.js +15 -9
  128. package/dist/esm/utilities/autoLoad.js +1 -1
  129. package/dist/esm/utilities/convertVolumeToStackViewport.js +1 -3
  130. package/dist/esm/utilities/createSigmoidRGBTransferFunction.d.ts +2 -1
  131. package/dist/esm/utilities/deepClone.d.ts +1 -0
  132. package/dist/esm/utilities/deepClone.js +28 -0
  133. package/dist/esm/utilities/eventListener/TargetEventListeners.js +1 -1
  134. package/dist/esm/utilities/getViewportImageIds.js +1 -3
  135. package/dist/esm/utilities/getViewportModality.js +1 -1
  136. package/dist/esm/utilities/getViewportsWithImageURI.d.ts +3 -3
  137. package/dist/esm/utilities/getViewportsWithImageURI.js +2 -9
  138. package/dist/esm/utilities/getViewportsWithVolumeId.d.ts +1 -1
  139. package/dist/esm/utilities/getViewportsWithVolumeId.js +3 -5
  140. package/dist/esm/utilities/getViewportsWithVolumeURI.d.ts +3 -0
  141. package/dist/esm/utilities/getViewportsWithVolumeURI.js +14 -0
  142. package/dist/esm/utilities/index.d.ts +3 -1
  143. package/dist/esm/utilities/index.js +3 -1
  144. package/dist/esm/utilities/loadImageToCanvas.js +0 -4
  145. package/dist/esm/utilities/pointInShapeCallback.d.ts +24 -0
  146. package/dist/esm/utilities/pointInShapeCallback.js +92 -0
  147. package/dist/esm/webWorkerManager/webWorkerManager.d.ts +11 -4
  148. package/package.json +56 -29
  149. package/dist/umd/index.js +0 -2
  150. package/dist/umd/index.js.map +0 -1
@@ -7,7 +7,9 @@ export interface ImageLoaderOptions {
7
7
  }
8
8
  interface LocalImageOptions {
9
9
  scalarData?: PixelDataTypedArray;
10
- targetBufferType?: PixelDataTypedArrayString;
10
+ targetBuffer?: {
11
+ type: PixelDataTypedArrayString;
12
+ };
11
13
  dimensions?: Point2;
12
14
  spacing?: Point2;
13
15
  origin?: Point3;
@@ -17,6 +19,7 @@ interface LocalImageOptions {
17
19
  }
18
20
  type DerivedImageOptions = LocalImageOptions & {
19
21
  imageId?: string;
22
+ instanceNumber?: number;
20
23
  };
21
24
  export declare function loadImage(imageId: string, options?: ImageLoaderOptions): Promise<IImage>;
22
25
  export declare function loadAndCacheImage(imageId: string, options?: ImageLoaderOptions): Promise<IImage>;
@@ -24,7 +27,9 @@ export declare function loadAndCacheImages(imageIds: string[], options?: ImageLo
24
27
  export declare function createAndCacheDerivedImage(referencedImageId: string, options?: DerivedImageOptions): IImage;
25
28
  export declare function createAndCacheDerivedImages(referencedImageIds: string[], options?: DerivedImageOptions & {
26
29
  getDerivedImageId?: (referencedImageId: string) => string;
27
- targetBufferType?: PixelDataTypedArrayString;
30
+ targetBuffer?: {
31
+ type: PixelDataTypedArrayString;
32
+ };
28
33
  }): IImage[];
29
34
  export declare function createAndCacheLocalImage(imageId: string, options: LocalImageOptions): IImage;
30
35
  export declare function cancelLoadImage(imageId: string): void;
@@ -33,6 +38,6 @@ export declare function cancelLoadAll(): void;
33
38
  export declare function registerImageLoader(scheme: string, imageLoader: ImageLoaderFn): void;
34
39
  export declare function registerUnknownImageLoader(imageLoader: ImageLoaderFn): ImageLoaderFn;
35
40
  export declare function unregisterAllImageLoaders(): void;
36
- export declare function createAndCacheDerivedSegmentationImages(referencedImageIds: string[], options?: DerivedImageOptions): IImage[];
37
- export declare function createAndCacheDerivedSegmentationImage(referencedImageId: string, options?: DerivedImageOptions): IImage;
41
+ export declare function createAndCacheDerivedLabelmapImages(referencedImageIds: string[], options?: DerivedImageOptions): IImage[];
42
+ export declare function createAndCacheDerivedLabelmapImage(referencedImageId: string, options?: DerivedImageOptions): IImage;
38
43
  export {};
@@ -11,45 +11,47 @@ import * as metaData from '../metaData';
11
11
  const imageLoaders = {};
12
12
  let unknownImageLoader;
13
13
  function loadImageFromImageLoader(imageId, options) {
14
- const cachedImage = cache.getImageLoadObject(imageId);
15
- if (cachedImage) {
16
- return cachedImage;
14
+ const cachedImageLoadObject = cache.getImageLoadObject(imageId);
15
+ if (cachedImageLoadObject) {
16
+ handleImageLoadPromise(cachedImageLoadObject.promise, imageId);
17
+ return cachedImageLoadObject;
17
18
  }
18
- const colonIndex = imageId.indexOf(':');
19
- const scheme = imageId.substring(0, colonIndex);
20
- const loader = imageLoaders[scheme];
21
- if (loader === undefined || loader === null) {
22
- if (unknownImageLoader !== undefined) {
23
- return unknownImageLoader(imageId);
24
- }
25
- throw new Error('loadImageFromImageLoader: no image loader for imageId');
19
+ const scheme = imageId.split(':')[0];
20
+ const loader = imageLoaders[scheme] || unknownImageLoader;
21
+ if (!loader) {
22
+ throw new Error(`loadImageFromImageLoader: No image loader found for scheme '${scheme}'`);
26
23
  }
27
24
  const imageLoadObject = loader(imageId, options);
28
- imageLoadObject.promise
25
+ handleImageLoadPromise(imageLoadObject.promise, imageId);
26
+ return imageLoadObject;
27
+ }
28
+ function handleImageLoadPromise(imagePromise, imageId) {
29
+ Promise.resolve(imagePromise)
29
30
  .then((image) => {
30
- const scalarData = image.getPixelData();
31
- const { width, height, numberOfComponents } = image;
32
- if (!image.voxelManager) {
33
- const voxelManager = VoxelManager.createImageVoxelManager({
34
- scalarData,
35
- width,
36
- height,
37
- numberOfComponents,
38
- });
39
- image.voxelManager = voxelManager;
40
- image.getPixelData = () => voxelManager.getScalarData();
41
- delete image.imageFrame.pixelData;
42
- }
31
+ ensureVoxelManager(image);
43
32
  triggerEvent(eventTarget, Events.IMAGE_LOADED, { image });
44
33
  })
45
34
  .catch((error) => {
46
- const errorObject = {
35
+ const errorDetails = {
47
36
  imageId,
48
37
  error,
49
38
  };
50
- triggerEvent(eventTarget, Events.IMAGE_LOAD_FAILED, errorObject);
39
+ triggerEvent(eventTarget, Events.IMAGE_LOAD_FAILED, errorDetails);
51
40
  });
52
- return imageLoadObject;
41
+ }
42
+ function ensureVoxelManager(image) {
43
+ if (!image.voxelManager) {
44
+ const { width, height, numberOfComponents } = image;
45
+ const voxelManager = VoxelManager.createImageVoxelManager({
46
+ scalarData: image.getPixelData(),
47
+ width,
48
+ height,
49
+ numberOfComponents,
50
+ });
51
+ image.voxelManager = voxelManager;
52
+ image.getPixelData = () => voxelManager.getScalarData();
53
+ delete image.imageFrame.pixelData;
54
+ }
53
55
  }
54
56
  export function loadImage(imageId, options = { priority: 0, requestType: 'prefetch' }) {
55
57
  if (imageId === undefined) {
@@ -86,7 +88,7 @@ export function createAndCacheDerivedImage(referencedImageId, options = {}) {
86
88
  const { imageId, skipCreateBuffer, onCacheAdd } = options;
87
89
  const imagePlaneModule = metaData.get('imagePlaneModule', referencedImageId);
88
90
  const length = imagePlaneModule.rows * imagePlaneModule.columns;
89
- const { TypedArrayConstructor } = getBufferConfiguration(options.targetBufferType, length);
91
+ const { TypedArrayConstructor } = getBufferConfiguration(options.targetBuffer?.type, length);
90
92
  const imageScalarData = new TypedArrayConstructor(skipCreateBuffer ? 1 : length);
91
93
  const derivedImageId = imageId;
92
94
  const referencedImagePlaneMetadata = metaData.get('imagePlaneModule', referencedImageId);
@@ -99,6 +101,12 @@ export function createAndCacheDerivedImage(referencedImageId, options = {}) {
99
101
  type: 'generalSeriesModule',
100
102
  metadata: referencedImageGeneralSeriesMetadata,
101
103
  });
104
+ genericMetadataProvider.add(derivedImageId, {
105
+ type: 'generalImageModule',
106
+ metadata: {
107
+ instanceNumber: options.instanceNumber,
108
+ },
109
+ });
102
110
  const imagePixelModule = metaData.get('imagePixelModule', referencedImageId);
103
111
  genericMetadataProvider.add(derivedImageId, {
104
112
  type: 'imagePixelModule',
@@ -115,8 +123,9 @@ export function createAndCacheDerivedImage(referencedImageId, options = {}) {
115
123
  scalarData: imageScalarData,
116
124
  onCacheAdd,
117
125
  skipCreateBuffer,
118
- targetBufferType: imageScalarData.constructor
119
- .name,
126
+ targetBuffer: {
127
+ type: imageScalarData.constructor.name,
128
+ },
120
129
  dimensions: [imagePlaneModule.columns, imagePlaneModule.rows],
121
130
  spacing: [
122
131
  imagePlaneModule.columnPixelSpacing,
@@ -125,6 +134,7 @@ export function createAndCacheDerivedImage(referencedImageId, options = {}) {
125
134
  origin: imagePlaneModule.imagePositionPatient,
126
135
  direction: imagePlaneModule.imageOrientationPatient,
127
136
  });
137
+ localImage.referencedImageId = referencedImageId;
128
138
  if (!cache.getImageLoadObject(imageId)) {
129
139
  cache.putImageSync(imageId, localImage);
130
140
  }
@@ -135,19 +145,22 @@ export function createAndCacheDerivedImages(referencedImageIds, options = {}) {
135
145
  throw new Error('createAndCacheDerivedImages: parameter imageIds must be list of image Ids');
136
146
  }
137
147
  const derivedImageIds = [];
138
- const images = referencedImageIds.map((referencedImageId) => {
148
+ const images = referencedImageIds.map((referencedImageId, index) => {
139
149
  const newOptions = {
140
150
  imageId: options?.getDerivedImageId?.(referencedImageId) ||
141
151
  `derived:${uuidv4()}`,
142
152
  ...options,
143
153
  };
144
154
  derivedImageIds.push(newOptions.imageId);
145
- return createAndCacheDerivedImage(referencedImageId, newOptions);
155
+ return createAndCacheDerivedImage(referencedImageId, {
156
+ ...newOptions,
157
+ instanceNumber: index + 1,
158
+ });
146
159
  });
147
160
  return images;
148
161
  }
149
162
  export function createAndCacheLocalImage(imageId, options) {
150
- const { scalarData, origin, direction, targetBufferType, skipCreateBuffer, onCacheAdd, } = options;
163
+ const { scalarData, origin, direction, targetBuffer, skipCreateBuffer, onCacheAdd, } = options;
151
164
  const dimensions = options.dimensions;
152
165
  const spacing = options.spacing;
153
166
  if (!dimensions || !spacing) {
@@ -158,8 +171,8 @@ export function createAndCacheLocalImage(imageId, options) {
158
171
  const columnPixelSpacing = spacing[0];
159
172
  const rowPixelSpacing = spacing[1];
160
173
  const imagePlaneModule = {
161
- rows: height.toString(),
162
- columns: width.toString(),
174
+ rows: height,
175
+ columns: width,
163
176
  imageOrientationPatient: direction ?? [1, 0, 0, 0, 1, 0],
164
177
  rowCosines: direction ? direction.slice(0, 3) : [1, 0, 0],
165
178
  columnCosines: direction ? direction.slice(3, 6) : [0, 1, 0],
@@ -181,7 +194,7 @@ export function createAndCacheLocalImage(imageId, options) {
181
194
  scalarDataToUse = scalarData;
182
195
  }
183
196
  else if (!skipCreateBuffer) {
184
- const { numBytes, TypedArrayConstructor } = getBufferConfiguration(targetBufferType, length);
197
+ const { numBytes, TypedArrayConstructor } = getBufferConfiguration(targetBuffer?.type, length);
185
198
  const imageScalarData = new TypedArrayConstructor(length);
186
199
  scalarDataToUse = imageScalarData;
187
200
  }
@@ -243,7 +256,7 @@ export function createAndCacheLocalImage(imageId, options) {
243
256
  windowWidth: 0,
244
257
  color: imagePixelModule.photometricInterpretation === 'RGB',
245
258
  numberOfComponents: imagePixelModule.samplesPerPixel,
246
- dataType: targetBufferType,
259
+ dataType: targetBuffer?.type,
247
260
  slope: 1,
248
261
  minPixelValue: 0,
249
262
  maxPixelValue: Math.pow(2, imagePixelModule.bitsStored) - 1,
@@ -317,15 +330,15 @@ export function unregisterAllImageLoaders() {
317
330
  Object.keys(imageLoaders).forEach((imageLoader) => delete imageLoaders[imageLoader]);
318
331
  unknownImageLoader = undefined;
319
332
  }
320
- export function createAndCacheDerivedSegmentationImages(referencedImageIds, options = {}) {
333
+ export function createAndCacheDerivedLabelmapImages(referencedImageIds, options = {}) {
321
334
  return createAndCacheDerivedImages(referencedImageIds, {
322
335
  ...options,
323
- targetBufferType: 'Uint8Array',
336
+ targetBuffer: { type: 'Uint8Array' },
324
337
  });
325
338
  }
326
- export function createAndCacheDerivedSegmentationImage(referencedImageId, options = {}) {
339
+ export function createAndCacheDerivedLabelmapImage(referencedImageId, options = {}) {
327
340
  return createAndCacheDerivedImage(referencedImageId, {
328
341
  ...options,
329
- targetBufferType: 'Uint8Array',
342
+ targetBuffer: { type: 'Uint8Array' },
330
343
  });
331
344
  }
@@ -0,0 +1,6 @@
1
+ import { cornerstoneStreamingImageVolumeLoader } from './cornerstoneStreamingImageVolumeLoader';
2
+ import { cornerstoneStreamingDynamicImageVolumeLoader } from './cornerstoneStreamingDynamicImageVolumeLoader';
3
+ import * as geometryLoader from './geometryLoader';
4
+ import * as imageLoader from './imageLoader';
5
+ import * as volumeLoader from './volumeLoader';
6
+ export { cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, geometryLoader, imageLoader, volumeLoader, };
@@ -0,0 +1,7 @@
1
+ import { cornerstoneStreamingImageVolumeLoader } from './cornerstoneStreamingImageVolumeLoader';
2
+ import { cornerstoneStreamingDynamicImageVolumeLoader } from './cornerstoneStreamingDynamicImageVolumeLoader';
3
+ import * as geometryLoader from './geometryLoader';
4
+ import * as imageLoader from './imageLoader';
5
+ import * as volumeLoader from './volumeLoader';
6
+ volumeLoader.registerUnknownVolumeLoader(cornerstoneStreamingImageVolumeLoader);
7
+ export { cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, geometryLoader, imageLoader, volumeLoader, };
@@ -6,7 +6,9 @@ interface VolumeLoaderOptions {
6
6
  }
7
7
  interface DerivedVolumeOptions {
8
8
  volumeId: string;
9
- targetBufferType?: PixelDataTypedArrayString;
9
+ targetBuffer?: {
10
+ type: PixelDataTypedArrayString;
11
+ };
10
12
  }
11
13
  export interface LocalVolumeOptions {
12
14
  metadata: Metadata;
@@ -19,7 +21,9 @@ export interface LocalVolumeOptions {
19
21
  referencedImageIds?: string[];
20
22
  referencedVolumeId?: string;
21
23
  preventCache?: boolean;
22
- targetBufferType?: PixelDataTypedArrayString;
24
+ targetBuffer?: {
25
+ type: PixelDataTypedArrayString;
26
+ };
23
27
  }
24
28
  export declare function loadVolume(volumeId: string, options?: VolumeLoaderOptions): Promise<IImageVolume>;
25
29
  export declare function createAndCacheVolume(volumeId: string, options?: VolumeLoaderOptions): Promise<IImageVolume | IStreamingImageVolume>;
@@ -30,6 +34,6 @@ export declare function registerVolumeLoader(scheme: string, volumeLoader: Volum
30
34
  export declare function getVolumeLoaderSchemes(): string[];
31
35
  export declare function registerUnknownVolumeLoader(volumeLoader: VolumeLoaderFn): VolumeLoaderFn | undefined;
32
36
  export declare function getUnknownVolumeLoaderSchema(): string;
33
- export declare function createAndCacheDerivedSegmentationVolume(referencedVolumeId: string, options?: DerivedVolumeOptions): IImageVolume;
34
- export declare function createLocalSegmentationVolume(options: LocalVolumeOptions, volumeId: string, preventCache?: boolean): IImageVolume;
37
+ export declare function createAndCacheDerivedLabelmapVolume(referencedVolumeId: string, options?: DerivedVolumeOptions): IImageVolume;
38
+ export declare function createLocalLabelmapVolume(options: LocalVolumeOptions, volumeId: string, preventCache?: boolean): IImageVolume;
35
39
  export {};
@@ -7,6 +7,7 @@ import triggerEvent from '../utilities/triggerEvent';
7
7
  import uuidv4 from '../utilities/uuidv4';
8
8
  import VoxelManager from '../utilities/VoxelManager';
9
9
  import { createAndCacheLocalImage, createAndCacheDerivedImages, } from './imageLoader';
10
+ import { generateVolumePropsFromImageIds } from '../utilities/generateVolumePropsFromImageIds';
10
11
  const volumeLoaders = {};
11
12
  let unknownVolumeLoader;
12
13
  function loadVolumeFromVolumeLoader(volumeId, options) {
@@ -69,7 +70,7 @@ export function createAndCacheDerivedVolume(referencedVolumeId, options) {
69
70
  const { metadata, dimensions, spacing, origin, direction } = referencedVolume;
70
71
  const referencedImageIds = referencedVolume.imageIds ?? [];
71
72
  const derivedImages = createAndCacheDerivedImages(referencedImageIds, {
72
- targetBufferType: options.targetBufferType,
73
+ targetBuffer: options.targetBuffer,
73
74
  });
74
75
  const dataType = derivedImages[0].dataType;
75
76
  const derivedVolumeImageIds = derivedImages.map((image) => image.imageId);
@@ -99,13 +100,31 @@ export async function createAndCacheVolumeFromImages(volumeId, imageIds) {
99
100
  if (cachedVolume) {
100
101
  return cachedVolume;
101
102
  }
103
+ const imageIdsToLoad = imageIds.filter((imageId) => !cache.getImage(imageId));
104
+ if (imageIdsToLoad.length === 0) {
105
+ const volumeProps = generateVolumePropsFromImageIds(imageIds, volumeId);
106
+ const derivedVolume = new ImageVolume({
107
+ volumeId,
108
+ dataType: volumeProps.dataType,
109
+ metadata: structuredClone(volumeProps.metadata),
110
+ dimensions: volumeProps.dimensions,
111
+ spacing: volumeProps.spacing,
112
+ origin: volumeProps.origin,
113
+ direction: volumeProps.direction,
114
+ referencedVolumeId: volumeProps.referencedVolumeId,
115
+ imageIds: volumeProps.imageIds,
116
+ referencedImageIds: volumeProps.referencedImageIds,
117
+ });
118
+ cache.putVolumeSync(volumeId, derivedVolume);
119
+ return derivedVolume;
120
+ }
102
121
  const volume = (await createAndCacheVolume(volumeId, {
103
122
  imageIds,
104
123
  }));
105
124
  return volume;
106
125
  }
107
126
  export function createLocalVolume(volumeId, options = {}) {
108
- const { metadata, dimensions, spacing, origin, direction, scalarData, targetBufferType, preventCache = false, } = options;
127
+ const { metadata, dimensions, spacing, origin, direction, scalarData, targetBuffer, preventCache = false, } = options;
109
128
  const cachedVolume = cache.getVolume(volumeId);
110
129
  if (cachedVolume) {
111
130
  return cachedVolume;
@@ -113,7 +132,7 @@ export function createLocalVolume(volumeId, options = {}) {
113
132
  const sliceLength = dimensions[0] * dimensions[1];
114
133
  const dataType = scalarData
115
134
  ? scalarData.constructor.name
116
- : targetBufferType;
135
+ : targetBuffer?.type;
117
136
  const totalNumberOfVoxels = sliceLength * dimensions[2];
118
137
  let byteLength;
119
138
  switch (dataType) {
@@ -145,7 +164,7 @@ export function createLocalVolume(volumeId, options = {}) {
145
164
  spacing: [spacing[0], spacing[1]],
146
165
  origin,
147
166
  direction,
148
- targetBufferType: dataType,
167
+ targetBuffer: { type: dataType },
149
168
  });
150
169
  derivedImages.push(derivedImage);
151
170
  }
@@ -184,13 +203,13 @@ export function registerUnknownVolumeLoader(volumeLoader) {
184
203
  export function getUnknownVolumeLoaderSchema() {
185
204
  return unknownVolumeLoader.name;
186
205
  }
187
- export function createAndCacheDerivedSegmentationVolume(referencedVolumeId, options = {}) {
206
+ export function createAndCacheDerivedLabelmapVolume(referencedVolumeId, options = {}) {
188
207
  return createAndCacheDerivedVolume(referencedVolumeId, {
189
208
  ...options,
190
- targetBufferType: 'Uint8Array',
209
+ targetBuffer: { type: 'Uint8Array' },
191
210
  });
192
211
  }
193
- export function createLocalSegmentationVolume(options, volumeId, preventCache = false) {
212
+ export function createLocalLabelmapVolume(options, volumeId, preventCache = false) {
194
213
  if (!options.scalarData) {
195
214
  options.scalarData = new Uint8Array(options.dimensions[0] * options.dimensions[1] * options.dimensions[2]);
196
215
  }
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -24,14 +24,14 @@ export interface PatientStudyModuleMetadata {
24
24
  }
25
25
  export interface ImagePlaneModuleMetadata {
26
26
  frameOfReferenceUID: string;
27
- rows: string;
28
- columns: string;
27
+ rows: number;
28
+ columns: number;
29
29
  imageOrientationPatient: number[];
30
30
  rowCosines: number[];
31
31
  columnCosines: number[];
32
32
  imagePositionPatient: number[];
33
- sliceThickness: string;
34
- sliceLocation: string;
33
+ sliceThickness: number;
34
+ sliceLocation: number;
35
35
  pixelSpacing: number[];
36
36
  rowPixelSpacing: number | null;
37
37
  columnPixelSpacing: number | null;
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};