@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.
@@ -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.imageCacheOffsetMap.size > 0
26
- ? _processImageCacheOffsetMap(volume, scalarData)
27
- : _processVolumeImages(volume, scalarData);
28
- }
29
- function _processImageCacheOffsetMap(volume, scalarData) {
30
- volume.imageCacheOffsetMap.forEach(({ offset }, imageId) => {
31
- const image = cache.getImage(imageId);
32
- if (!image) {
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
- _updateImageWithScalarDataView(image, scalarData, offset);
36
- cache.decrementImageCacheSize(image.sizeInBytes);
37
- });
38
- }
39
- function _processVolumeImages(volume, scalarData) {
40
- let compatibleScalarData = scalarData;
41
- const sampleImageIdWithImage = volume.imageIds.find((imageId) => {
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 prevCamera = viewport.getCamera();
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
- if (!options.orientation) {
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
- const hasCachedImages = volume.imageCacheOffsetMap.size > 0;
27
- let isAllImagesCached = false;
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
  }