@cornerstonejs/core 2.0.0-beta.24 → 2.0.0-beta.25

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 (56) hide show
  1. package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +2 -2
  2. package/dist/esm/RenderingEngine/BaseVolumeViewport.js +3 -0
  3. package/dist/esm/RenderingEngine/CanvasActor/index.d.ts +1 -2
  4. package/dist/esm/RenderingEngine/RenderingEngine.d.ts +1 -2
  5. package/dist/esm/RenderingEngine/RenderingEngine.js +1 -12
  6. package/dist/esm/RenderingEngine/StackViewport.d.ts +11 -4
  7. package/dist/esm/RenderingEngine/StackViewport.js +57 -44
  8. package/dist/esm/RenderingEngine/VideoViewport.d.ts +2 -2
  9. package/dist/esm/RenderingEngine/Viewport.d.ts +8 -3
  10. package/dist/esm/RenderingEngine/Viewport.js +8 -8
  11. package/dist/esm/RenderingEngine/VolumeViewport.d.ts +1 -0
  12. package/dist/esm/RenderingEngine/VolumeViewport.js +9 -0
  13. package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +5 -1
  14. package/dist/esm/RenderingEngine/VolumeViewport3D.js +31 -3
  15. package/dist/esm/RenderingEngine/WSIViewport.d.ts +3 -3
  16. package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.d.ts +5 -11
  17. package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.js +1 -1
  18. package/dist/esm/cache/cache.d.ts +2 -2
  19. package/dist/esm/cache/classes/Contour.d.ts +2 -2
  20. package/dist/esm/cache/classes/ContourSet.d.ts +2 -2
  21. package/dist/esm/cache/classes/ImageVolume.d.ts +2 -2
  22. package/dist/esm/cache/classes/Surface.d.ts +2 -2
  23. package/dist/esm/enums/Events.d.ts +1 -1
  24. package/dist/esm/enums/Events.js +1 -1
  25. package/dist/esm/enums/GeometryType.d.ts +2 -2
  26. package/dist/esm/enums/GeometryType.js +2 -2
  27. package/dist/esm/enums/ViewportType.d.ts +1 -1
  28. package/dist/esm/enums/ViewportType.js +1 -1
  29. package/dist/esm/index.d.ts +2 -2
  30. package/dist/esm/index.js +2 -2
  31. package/dist/esm/init.d.ts +2 -1
  32. package/dist/esm/init.js +4 -1
  33. package/dist/esm/loaders/geometryLoader.js +3 -3
  34. package/dist/esm/loaders/utils/contourSet/createContourSet.js +1 -1
  35. package/dist/esm/loaders/utils/surface/createSurface.js +1 -1
  36. package/dist/esm/loaders/volumeLoader.d.ts +2 -2
  37. package/dist/esm/types/IActor.d.ts +2 -7
  38. package/dist/esm/types/IContour.d.ts +2 -14
  39. package/dist/esm/types/IContourSet.d.ts +2 -22
  40. package/dist/esm/types/IImageVolume.d.ts +2 -45
  41. package/dist/esm/types/IPointsManager.d.ts +2 -18
  42. package/dist/esm/types/IRLEVoxelMap.d.ts +2 -11
  43. package/dist/esm/types/IRenderingEngine.d.ts +3 -26
  44. package/dist/esm/types/IStreamingImageVolume.d.ts +1 -0
  45. package/dist/esm/types/ISurface.d.ts +2 -13
  46. package/dist/esm/types/IViewport.d.ts +2 -2
  47. package/dist/esm/types/index.d.ts +1 -2
  48. package/dist/esm/utilities/PointsManager.d.ts +1 -1
  49. package/dist/esm/utilities/RLEVoxelMap.d.ts +2 -2
  50. package/dist/esm/utilities/VoxelManager.d.ts +1 -1
  51. package/dist/esm/utilities/convertStackToVolumeViewport.js +2 -2
  52. package/dist/umd/index.js +1 -1
  53. package/dist/umd/index.js.map +1 -1
  54. package/package.json +13 -5
  55. package/dist/esm/types/WSIViewportTypes.d.ts +0 -13
  56. package/dist/esm/types/WSIViewportTypes.js +0 -1
@@ -1,11 +1,11 @@
1
1
  import type { mat4 } from 'gl-matrix';
2
2
  import type { BlendModes, InterpolationType, OrientationAxis } from '../enums';
3
- import type { FlipDirection, IImageData, IVolumeInput, OrientationVectors, Point2, Point3, VolumeViewportProperties, ViewReferenceSpecifier, ReferenceCompatibleOptions, ViewReference, IBaseVolumeViewport } from '../types';
3
+ import type { FlipDirection, IImageData, IVolumeInput, OrientationVectors, Point2, Point3, VolumeViewportProperties, ViewReferenceSpecifier, ReferenceCompatibleOptions, ViewReference } from '../types';
4
4
  import type { VoiModifiedEventDetail } from '../types/EventTypes';
5
5
  import type { ViewportInput } from '../types/IViewport';
6
6
  import type { TransferFunctionNodes } from '../types/ITransferFunctionNode';
7
7
  import Viewport from './Viewport';
8
- declare abstract class BaseVolumeViewport extends Viewport implements IBaseVolumeViewport {
8
+ declare abstract class BaseVolumeViewport extends Viewport {
9
9
  useCPURendering: boolean;
10
10
  private _FrameOfReferenceUID;
11
11
  protected initialTransferFunctionNodes: TransferFunctionNodes;
@@ -618,6 +618,9 @@ class BaseVolumeViewport extends Viewport {
618
618
  this.setSlabThickness(properties.slabThickness);
619
619
  this.viewportProperties.slabThickness = properties.slabThickness;
620
620
  }
621
+ if (properties.preset !== undefined) {
622
+ this.setPreset(properties.preset, volumeId, false);
623
+ }
621
624
  this.render();
622
625
  }
623
626
  setPreset(presetNameOrObj, volumeId, suppressEvents) {
@@ -1,8 +1,7 @@
1
1
  import type { IViewport } from '../../types/IViewport';
2
- import type { ICanvasActor } from '../../types/IActor';
3
2
  import CanvasProperties from './CanvasProperties';
4
3
  import CanvasMapper from './CanvasMapper';
5
- export default class CanvasActor implements ICanvasActor {
4
+ export default class CanvasActor {
6
5
  private image;
7
6
  private derivedImage;
8
7
  private canvasProperties;
@@ -1,8 +1,7 @@
1
1
  import type IStackViewport from '../types/IStackViewport';
2
- import type IRenderingEngine from '../types/IRenderingEngine';
3
2
  import type IVolumeViewport from '../types/IVolumeViewport';
4
3
  import type { PublicViewportInput, IViewport } from '../types/IViewport';
5
- declare class RenderingEngine implements IRenderingEngine {
4
+ declare class RenderingEngine {
6
5
  readonly id: string;
7
6
  hasBeenDestroyed: boolean;
8
7
  offscreenMultiRenderWindow: any;
@@ -287,18 +287,7 @@ class RenderingEngine {
287
287
  const prevCamera = vp.getCamera();
288
288
  const rotation = vp.getRotation();
289
289
  const { flipHorizontal } = prevCamera;
290
- const resetPan = true;
291
- const resetZoom = true;
292
- const resetToCenter = true;
293
- const resetRotation = false;
294
- const suppressEvents = true;
295
- vp.resetCamera({
296
- resetPan,
297
- resetZoom,
298
- resetToCenter,
299
- resetRotation,
300
- suppressEvents,
301
- });
290
+ vp.resetCameraForResize();
302
291
  const displayArea = vp.getDisplayArea();
303
292
  if (keepCamera) {
304
293
  if (displayArea) {
@@ -1,6 +1,6 @@
1
1
  import type { vtkImageData as vtkImageDataType } from '@kitware/vtk.js/Common/DataModel/ImageData';
2
2
  import { mat4 } from 'gl-matrix';
3
- import type { ActorEntry, CPUIImageData, ICamera, IImage, IImageData, IImagesLoader, IStackInput, IStackViewport, ImageLoadListener, Mat3, Point2, Point3, Scaling, StackViewportProperties, ViewReference, ViewReferenceSpecifier, ReferenceCompatibleOptions, ViewportInput, ImagePixelModule, ImagePlaneModule } from '../types';
3
+ import type { ActorEntry, CPUIImageData, ICamera, IImage, IImageData, IImagesLoader, IStackInput, ImageLoadListener, Mat3, Point2, Point3, Scaling, StackViewportProperties, ViewReference, ViewReferenceSpecifier, ReferenceCompatibleOptions, ViewportInput, ImagePixelModule, ImagePlaneModule } from '../types';
4
4
  import Viewport from './Viewport';
5
5
  import { InterpolationType, RequestType, ViewportStatus } from '../enums';
6
6
  import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
@@ -15,7 +15,7 @@ export interface ImageDataMetaData {
15
15
  imagePlaneModule: ImagePlaneModule;
16
16
  imagePixelModule: ImagePixelModule;
17
17
  }
18
- declare class StackViewport extends Viewport implements IStackViewport, IImagesLoader {
18
+ declare class StackViewport extends Viewport {
19
19
  private imageIds;
20
20
  private currentImageIdIndex;
21
21
  private targetImageIdIndex;
@@ -57,7 +57,12 @@ declare class StackViewport extends Viewport implements IStackViewport, IImagesL
57
57
  setCamera: (cameraInterface: ICamera, storeAsInitialCamera?: boolean) => void;
58
58
  getRotation: () => number;
59
59
  unsetColormap: () => void;
60
- resetCamera: (options?: any) => boolean;
60
+ resetCamera: (options?: {
61
+ resetPan?: boolean;
62
+ resetZoom?: boolean;
63
+ resetToCenter?: boolean;
64
+ suppressEvents?: boolean;
65
+ }) => boolean;
61
66
  canvasToWorld: (canvasPos: Point2) => Point3;
62
67
  worldToCanvas: (worldPos: Point3) => Point2;
63
68
  getRenderer: () => vtkRenderer;
@@ -88,6 +93,7 @@ declare class StackViewport extends Viewport implements IStackViewport, IImagesL
88
93
  setProperties({ colormap, voiRange, VOILUTFunction, invert, interpolationType, }?: StackViewportProperties, suppressEvents?: boolean): void;
89
94
  getDefaultProperties: (imageId?: string) => StackViewportProperties;
90
95
  getProperties: () => StackViewportProperties;
96
+ resetCameraForResize: () => boolean;
91
97
  resetProperties(): void;
92
98
  private _resetProperties;
93
99
  resetToDefaultProperties(): void;
@@ -115,6 +121,7 @@ declare class StackViewport extends Viewport implements IStackViewport, IImagesL
115
121
  private _addScalingToViewport;
116
122
  private _getNumCompsFromPhotometricInterpretation;
117
123
  getImageDataMetadata(image: IImage): ImageDataMetaData;
124
+ private matchImagesForOverlay;
118
125
  getImagePlaneReferenceData(sliceIndex?: number): ViewReference;
119
126
  private _getCameraOrientation;
120
127
  createVTKImageData({ origin, direction, dimensions, spacing, numberOfComponents, pixelArray, }: {
@@ -187,7 +194,7 @@ declare class StackViewport extends Viewport implements IStackViewport, IImagesL
187
194
  width: number;
188
195
  height: number;
189
196
  };
190
- isReferenceViewable(viewRef: ViewReference, options?: ReferenceCompatibleOptions): boolean | unknown;
197
+ isReferenceViewable(viewRef: ViewReference, options?: ReferenceCompatibleOptions): boolean;
191
198
  getViewReference(viewRefSpecifier?: ViewReferenceSpecifier): ViewReference;
192
199
  setViewReference(viewRef: ViewReference): void;
193
200
  getViewReferenceId(specifier?: ViewReferenceSpecifier): string;
@@ -103,6 +103,14 @@ class StackViewport extends Viewport {
103
103
  isComputedVOI: !voiUpdatedWithSetProperties,
104
104
  };
105
105
  };
106
+ this.resetCameraForResize = () => {
107
+ return this.resetCamera({
108
+ resetPan: true,
109
+ resetZoom: true,
110
+ resetToCenter: true,
111
+ suppressEvents: true,
112
+ });
113
+ };
106
114
  this.getRotationCPU = () => {
107
115
  const { viewport } = this._cpuFallbackEnabledElement;
108
116
  return viewport.rotation;
@@ -317,12 +325,14 @@ class StackViewport extends Viewport {
317
325
  gpu: this.setInvertColorGPU,
318
326
  },
319
327
  resetCamera: {
320
- cpu: (resetPan = true, resetZoom = true) => {
321
- this.resetCameraCPU(resetPan, resetZoom);
328
+ cpu: (options = {}) => {
329
+ const { resetPan = true, resetZoom = true } = options;
330
+ this.resetCameraCPU({ resetPan, resetZoom });
322
331
  return true;
323
332
  },
324
- gpu: (resetPan = true, resetZoom = true) => {
325
- this.resetCameraGPU(resetPan, resetZoom);
333
+ gpu: (options = {}) => {
334
+ const { resetPan = true, resetZoom = true } = options;
335
+ this.resetCameraGPU({ resetPan, resetZoom });
326
336
  return true;
327
337
  },
328
338
  },
@@ -1035,6 +1045,43 @@ class StackViewport extends Viewport {
1035
1045
  imagePixelModule,
1036
1046
  };
1037
1047
  }
1048
+ matchImagesForOverlay(currentImageId, referencedImageId) {
1049
+ const matchImagesForOverlay = (targetImageId) => {
1050
+ const referenceImagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, referencedImageId);
1051
+ const currentImagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, targetImageId);
1052
+ const referenceOrientation = referenceImagePlaneModule.imageOrientationPatient;
1053
+ const currentOrientation = currentImagePlaneModule.imageOrientationPatient;
1054
+ if (referenceOrientation && currentOrientation) {
1055
+ const closeEnough = isEqual(referenceImagePlaneModule.imageOrientationPatient, currentImagePlaneModule.imageOrientationPatient);
1056
+ if (closeEnough) {
1057
+ const referencePosition = referenceImagePlaneModule.imagePositionPatient;
1058
+ const currentPosition = currentImagePlaneModule.imagePositionPatient;
1059
+ if (referencePosition && currentPosition) {
1060
+ const vector = vec3.create();
1061
+ vec3.subtract(vector, currentPosition, referencePosition);
1062
+ const viewPlaneNormal = vec3.create();
1063
+ vec3.cross(viewPlaneNormal, currentOrientation.slice(0, 3), currentOrientation.slice(3, 6));
1064
+ const dotProduct = vec3.dot(vector, viewPlaneNormal);
1065
+ const isOrthogonal = Math.abs(dotProduct) < EPSILON;
1066
+ if (isOrthogonal) {
1067
+ return targetImageId;
1068
+ }
1069
+ }
1070
+ }
1071
+ }
1072
+ else {
1073
+ const referenceRows = referenceImagePlaneModule.rows;
1074
+ const referenceColumns = referenceImagePlaneModule.columns;
1075
+ const currentRows = currentImagePlaneModule.rows;
1076
+ const currentColumns = currentImagePlaneModule.columns;
1077
+ if (referenceRows === currentRows &&
1078
+ referenceColumns === currentColumns) {
1079
+ return targetImageId;
1080
+ }
1081
+ }
1082
+ };
1083
+ return matchImagesForOverlay(currentImageId);
1084
+ }
1038
1085
  getImagePlaneReferenceData(sliceIndex = this.getCurrentImageIdIndex()) {
1039
1086
  const imageId = this.imageIds[sliceIndex];
1040
1087
  if (!imageId) {
@@ -1127,7 +1174,7 @@ class StackViewport extends Viewport {
1127
1174
  element: this.element,
1128
1175
  currentImageIdIndex: currentImageIdIndex,
1129
1176
  };
1130
- triggerEvent(this.element, Events.STACK_VIEWPORT_NEW_STACK, eventDetail);
1177
+ triggerEvent(this.element, Events.VIEWPORT_NEW_IMAGE_SET, eventDetail);
1131
1178
  return imageId;
1132
1179
  }
1133
1180
  _throwIfDestroyed() {
@@ -1399,7 +1446,7 @@ class StackViewport extends Viewport {
1399
1446
  _updateActorToDisplayImageId(image) {
1400
1447
  const sameImageData = this._checkVTKImageDataMatchesCornerstoneImage(image, this._imageData);
1401
1448
  const activeCamera = this.getRenderer().getActiveCamera();
1402
- const previousCameraProps = structuredClone(this.getCamera());
1449
+ const previousCameraProps = this.getCamera();
1403
1450
  if (sameImageData && !this.stackInvalidated) {
1404
1451
  this._updateVTKImageDataFromCornerstoneImage(image);
1405
1452
  const cameraProps = this.getCamera();
@@ -1518,7 +1565,7 @@ class StackViewport extends Viewport {
1518
1565
  }
1519
1566
  return imageId;
1520
1567
  }
1521
- resetCameraCPU(resetPan, resetZoom) {
1568
+ resetCameraCPU({ resetPan = true, resetZoom = true, }) {
1522
1569
  const { image } = this._cpuFallbackEnabledElement;
1523
1570
  if (!image) {
1524
1571
  return;
@@ -1533,7 +1580,7 @@ class StackViewport extends Viewport {
1533
1580
  scale,
1534
1581
  });
1535
1582
  }
1536
- resetCameraGPU(resetPan, resetZoom) {
1583
+ resetCameraGPU({ resetPan, resetZoom }) {
1537
1584
  this.setCamera({
1538
1585
  flipHorizontal: false,
1539
1586
  flipVertical: false,
@@ -1672,43 +1719,9 @@ class StackViewport extends Viewport {
1672
1719
  return false;
1673
1720
  }
1674
1721
  if (options.asOverlay && referencedImageId) {
1675
- const matchImagesForOverlay = (targetImageId) => {
1676
- const referenceImagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, referencedImageId);
1677
- const currentImagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, targetImageId);
1678
- const referenceOrientation = referenceImagePlaneModule.imageOrientationPatient;
1679
- const currentOrientation = currentImagePlaneModule.imageOrientationPatient;
1680
- if (referenceOrientation && currentOrientation) {
1681
- const closeEnough = isEqual(referenceImagePlaneModule.imageOrientationPatient, currentImagePlaneModule.imageOrientationPatient);
1682
- if (closeEnough) {
1683
- const referencePosition = referenceImagePlaneModule.imagePositionPatient;
1684
- const currentPosition = currentImagePlaneModule.imagePositionPatient;
1685
- if (referencePosition && currentPosition) {
1686
- const vector = vec3.create();
1687
- vec3.subtract(vector, currentPosition, referencePosition);
1688
- const viewPlaneNormal = vec3.create();
1689
- vec3.cross(viewPlaneNormal, currentOrientation.slice(0, 3), currentOrientation.slice(3, 6));
1690
- const dotProduct = vec3.dot(vector, viewPlaneNormal);
1691
- const isOrthogonal = Math.abs(dotProduct) < EPSILON;
1692
- if (isOrthogonal) {
1693
- return targetImageId;
1694
- }
1695
- }
1696
- }
1697
- }
1698
- else {
1699
- const referenceRows = referenceImagePlaneModule.rows;
1700
- const referenceColumns = referenceImagePlaneModule.columns;
1701
- const currentRows = currentImagePlaneModule.rows;
1702
- const currentColumns = currentImagePlaneModule.columns;
1703
- if (referenceRows === currentRows &&
1704
- referenceColumns === currentColumns) {
1705
- return targetImageId;
1706
- }
1707
- }
1708
- };
1709
- const matchedImageId = matchImagesForOverlay(currentImageId);
1722
+ const matchedImageId = this.matchImagesForOverlay(currentImageId, referencedImageId);
1710
1723
  if (matchedImageId) {
1711
- return matchedImageId;
1724
+ return true;
1712
1725
  }
1713
1726
  }
1714
1727
  let { imageURI } = options;
@@ -1,6 +1,6 @@
1
1
  import type { mat4 } from 'gl-matrix';
2
2
  import { VideoEnums as VideoViewportEnum } from '../enums';
3
- import type { IVideoViewport, VideoViewportProperties, Point3, Point2, ICamera, VideoViewportInput, VOIRange, IImage, ViewReferenceSpecifier, ViewReference, ReferenceCompatibleOptions, ImageSetOptions, IStackInput, CPUIImageData, IImageData } from '../types';
3
+ import type { VideoViewportProperties, Point3, Point2, ICamera, VideoViewportInput, VOIRange, IImage, ViewReferenceSpecifier, ViewReference, ReferenceCompatibleOptions, ImageSetOptions, IStackInput, CPUIImageData, IImageData } from '../types';
4
4
  import { Transform } from './helpers/cpuFallback/rendering/transform';
5
5
  import Viewport from './Viewport';
6
6
  import CanvasActor from './CanvasActor';
@@ -8,7 +8,7 @@ export type CanvasScalarData = Uint8ClampedArray & {
8
8
  frameNumber?: number;
9
9
  getRange?: () => [number, number];
10
10
  };
11
- declare class VideoViewport extends Viewport implements IVideoViewport {
11
+ declare class VideoViewport extends Viewport {
12
12
  static frameRangeExtractor: RegExp;
13
13
  modality: any;
14
14
  protected imageId: string;
@@ -4,12 +4,12 @@ import type { mat4 } from 'gl-matrix';
4
4
  import ViewportStatus from '../enums/ViewportStatus';
5
5
  import ViewportType from '../enums/ViewportType';
6
6
  import type { ICamera, ActorEntry, IRenderingEngine, ViewportInputOptions, Point2, Point3, FlipDirection, DisplayArea, ViewPresentation, ViewReference, ViewportProperties } from '../types';
7
- import type { ViewportInput, IViewport, ViewReferenceSpecifier, ReferenceCompatibleOptions, ViewPresentationSelector, DataSetOptions } from '../types/IViewport';
7
+ import type { ViewportInput, ViewReferenceSpecifier, ReferenceCompatibleOptions, ViewPresentationSelector, DataSetOptions } from '../types/IViewport';
8
8
  import type { vtkSlabCamera } from './vtkClasses/vtkSlabCamera';
9
9
  import type IImageCalibration from '../types/IImageCalibration';
10
10
  import { InterpolationType } from '../enums';
11
11
  import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
12
- declare class Viewport implements IViewport {
12
+ declare class Viewport {
13
13
  static readonly CameraViewPresentation: ViewPresentationSelector;
14
14
  static readonly TransferViewPresentation: ViewPresentationSelector;
15
15
  readonly id: string;
@@ -88,7 +88,12 @@ declare class Viewport implements IViewport {
88
88
  protected setDisplayAreaScale(displayArea: DisplayArea): void;
89
89
  protected setDisplayAreaFit(displayArea: DisplayArea): void;
90
90
  getDisplayArea(): DisplayArea | undefined;
91
- resetCamera(options?: any): boolean;
91
+ resetCamera(options?: {
92
+ resetPan?: boolean;
93
+ resetZoom?: boolean;
94
+ resetToCenter?: boolean;
95
+ storeAsInitialCamera?: boolean;
96
+ }): boolean;
92
97
  protected setInitialCamera(camera: ICamera): void;
93
98
  protected setFitToCanvasCamera(camera: ICamera): void;
94
99
  getPan(initialCamera?: ICamera): Point2;
@@ -408,7 +408,7 @@ class Viewport {
408
408
  flipHorizontal: false,
409
409
  flipVertical: false,
410
410
  });
411
- const previousCamera = structuredClone(this.getCamera());
411
+ const previousCamera = this.getCamera();
412
412
  const bounds = renderer.computeVisiblePropBounds();
413
413
  const focalPoint = [0, 0, 0];
414
414
  const imageData = this.getDefaultImageData();
@@ -468,8 +468,8 @@ class Viewport {
468
468
  viewUp: viewUpToSet,
469
469
  clippingRange: clippingRangeToUse,
470
470
  });
471
- const modifiedCamera = structuredClone(this.getCamera());
472
- this.setFitToCanvasCamera(structuredClone(this.getCamera()));
471
+ const modifiedCamera = this.getCamera();
472
+ this.setFitToCanvasCamera(this.getCamera());
473
473
  if (storeAsInitialCamera) {
474
474
  this.setInitialCamera(modifiedCamera);
475
475
  }
@@ -585,10 +585,10 @@ class Viewport {
585
585
  getCameraNoRotation() {
586
586
  const vtkCamera = this.getVtkActiveCamera();
587
587
  return {
588
- viewUp: vtkCamera.getViewUp(),
589
- viewPlaneNormal: vtkCamera.getViewPlaneNormal(),
590
- position: vtkCamera.getPosition(),
591
- focalPoint: vtkCamera.getFocalPoint(),
588
+ viewUp: [...vtkCamera.getViewUp()],
589
+ viewPlaneNormal: [...vtkCamera.getViewPlaneNormal()],
590
+ position: [...vtkCamera.getPosition()],
591
+ focalPoint: [...vtkCamera.getFocalPoint()],
592
592
  parallelProjection: vtkCamera.getParallelProjection(),
593
593
  parallelScale: vtkCamera.getParallelScale(),
594
594
  viewAngle: vtkCamera.getViewAngle(),
@@ -605,7 +605,7 @@ class Viewport {
605
605
  }
606
606
  setCamera(cameraInterface, storeAsInitialCamera = false) {
607
607
  const vtkCamera = this.getVtkActiveCamera();
608
- const previousCamera = structuredClone(this.getCamera());
608
+ const previousCamera = this.getCamera();
609
609
  const updatedCamera = Object.assign({}, previousCamera, cameraInterface);
610
610
  const { viewUp, viewPlaneNormal, position, focalPoint, parallelScale, viewAngle, flipHorizontal, flipVertical, clippingRange, } = cameraInterface;
611
611
  if (flipHorizontal !== undefined) {
@@ -14,6 +14,7 @@ declare class VolumeViewport extends BaseVolumeViewport {
14
14
  private _getAcquisitionPlaneOrientation;
15
15
  private _setViewPlaneToAcquisitionPlane;
16
16
  setBlendMode(blendMode: BlendModes, filterActorUIDs?: any[], immediate?: boolean): void;
17
+ resetCameraForResize: () => boolean;
17
18
  resetCamera(options?: any): boolean;
18
19
  setSlabThickness(slabThickness: number, filterActorUIDs?: any[]): void;
19
20
  resetSlabThickness(): void;
@@ -23,6 +23,15 @@ class VolumeViewport extends BaseVolumeViewport {
23
23
  const { numberOfSlices } = getImageSliceDataForVolumeViewport(this) || {};
24
24
  return numberOfSlices;
25
25
  };
26
+ this.resetCameraForResize = () => {
27
+ return this.resetCamera({
28
+ resetPan: true,
29
+ resetZoom: true,
30
+ resetToCenter: true,
31
+ resetRotation: false,
32
+ suppressEvents: true,
33
+ });
34
+ };
26
35
  this.getCurrentImageIdIndex = (volumeId) => {
27
36
  const { viewPlaneNormal, focalPoint } = this.getCamera();
28
37
  const imageData = this.getImageData(volumeId);
@@ -3,7 +3,11 @@ import type { ViewportInput } from '../types/IViewport';
3
3
  import BaseVolumeViewport from './BaseVolumeViewport';
4
4
  declare class VolumeViewport3D extends BaseVolumeViewport {
5
5
  constructor(props: ViewportInput);
6
- resetCamera(resetPan?: boolean, resetZoom?: boolean, resetToCenter?: boolean): boolean;
6
+ resetCamera({ resetPan, resetZoom, resetToCenter, }: {
7
+ resetPan?: boolean;
8
+ resetZoom?: boolean;
9
+ resetToCenter?: boolean;
10
+ }): boolean;
7
11
  getRotation: () => number;
8
12
  getCurrentImageIdIndex: () => number;
9
13
  getCurrentImageId: () => string;
@@ -1,5 +1,10 @@
1
1
  import { RENDERING_DEFAULTS } from '../constants';
2
- import { OrientationAxis } from '../enums';
2
+ import { OrientationAxis, Events } from '../enums';
3
+ import cache from '../cache/cache';
4
+ import setDefaultVolumeVOI from './helpers/setDefaultVolumeVOI';
5
+ import triggerEvent from '../utilities/triggerEvent';
6
+ import { isImageActor } from '../utilities/actorCheck';
7
+ import { setTransferFunctionNodes } from '../utilities/transferFunctionUtils';
3
8
  import BaseVolumeViewport from './BaseVolumeViewport';
4
9
  class VolumeViewport3D extends BaseVolumeViewport {
5
10
  constructor(props) {
@@ -20,7 +25,7 @@ class VolumeViewport3D extends BaseVolumeViewport {
20
25
  this.applyViewOrientation(orientation);
21
26
  }
22
27
  }
23
- resetCamera(resetPan = true, resetZoom = true, resetToCenter = true) {
28
+ resetCamera({ resetPan = true, resetZoom = true, resetToCenter = true, }) {
24
29
  super.resetCamera({ resetPan, resetZoom, resetToCenter });
25
30
  const activeCamera = this.getVtkActiveCamera();
26
31
  if (activeCamera.getParallelProjection()) {
@@ -38,7 +43,30 @@ class VolumeViewport3D extends BaseVolumeViewport {
38
43
  return null;
39
44
  }
40
45
  resetProperties(volumeId) {
41
- return null;
46
+ const volumeActor = volumeId
47
+ ? this.getActor(volumeId)
48
+ : this.getDefaultActor();
49
+ if (!volumeActor) {
50
+ throw new Error(`No actor found for the given volumeId: ${volumeId}`);
51
+ }
52
+ if (volumeActor.slabThickness) {
53
+ volumeActor.slabThickness = RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS;
54
+ this.viewportProperties.slabThickness = undefined;
55
+ this.updateClippingPlanesForActors(this.getCamera());
56
+ }
57
+ const imageVolume = cache.getVolume(volumeActor.uid);
58
+ if (!imageVolume) {
59
+ throw new Error(`imageVolume with id: ${volumeActor.uid} does not exist in cache`);
60
+ }
61
+ setDefaultVolumeVOI(volumeActor.actor, imageVolume);
62
+ if (isImageActor(volumeActor)) {
63
+ const transferFunction = volumeActor.actor
64
+ .getProperty()
65
+ .getRGBTransferFunction(0);
66
+ setTransferFunctionNodes(transferFunction, this.initialTransferFunctionNodes);
67
+ }
68
+ this.setCamera(this.initialCamera);
69
+ triggerEvent(this.element, Events.VOI_MODIFIED, super.getVOIModifiedEventDetail(volumeId));
42
70
  }
43
71
  resetSlabThickness() {
44
72
  return null;
@@ -1,7 +1,7 @@
1
- import type { IWSIViewport, WSIViewportProperties, Point3, Point2, ICamera, WSIViewportInput, CPUIImageData } from '../types';
1
+ import type { WSIViewportProperties, Point3, Point2, ICamera, CPUIImageData, ViewportInput } from '../types';
2
2
  import { Transform } from './helpers/cpuFallback/rendering/transform';
3
3
  import Viewport from './Viewport';
4
- declare class WSIViewport extends Viewport implements IWSIViewport {
4
+ declare class WSIViewport extends Viewport {
5
5
  modality: any;
6
6
  protected imageIds: string[];
7
7
  readonly uid: any;
@@ -14,7 +14,7 @@ declare class WSIViewport extends Viewport implements IWSIViewport {
14
14
  private internalCamera;
15
15
  private viewer;
16
16
  private voiRange;
17
- constructor(props: WSIViewportInput);
17
+ constructor(props: ViewportInput);
18
18
  static get useCustomRenderingPipeline(): boolean;
19
19
  private addEventListeners;
20
20
  private removeEventListeners;
@@ -1,14 +1,8 @@
1
- import StackViewport from '../StackViewport';
2
- import VolumeViewport from '../VolumeViewport';
3
- import VolumeViewport3D from '../VolumeViewport3D';
4
- import VideoViewport from '../VideoViewport';
5
- import WSIViewport from '../WSIViewport';
1
+ import type { ViewportInput, IViewport } from '../../types/IViewport';
2
+ interface ViewportConstructor {
3
+ new (viewportInput: ViewportInput): IViewport;
4
+ }
6
5
  declare const viewportTypeToViewportClass: {
7
- orthographic: typeof VolumeViewport;
8
- perspective: typeof VolumeViewport;
9
- stack: typeof StackViewport;
10
- volume3d: typeof VolumeViewport3D;
11
- video: typeof VideoViewport;
12
- wholeSlide: typeof WSIViewport;
6
+ [key: string]: ViewportConstructor;
13
7
  };
14
8
  export default viewportTypeToViewportClass;
@@ -10,6 +10,6 @@ const viewportTypeToViewportClass = {
10
10
  [ViewportType.STACK]: StackViewport,
11
11
  [ViewportType.VOLUME_3D]: VolumeViewport3D,
12
12
  [ViewportType.VIDEO]: VideoViewport,
13
- [ViewportType.WholeSlide]: WSIViewport,
13
+ [ViewportType.WHOLE_SLIDE]: WSIViewport,
14
14
  };
15
15
  export default viewportTypeToViewportClass;
@@ -1,5 +1,5 @@
1
- import type { ICache, IImage, IGeometry, IImageLoadObject, IVolumeLoadObject, IGeometryLoadObject, ICachedImage, IImageVolume } from '../types';
2
- declare class Cache implements ICache {
1
+ import type { IImage, IGeometry, IImageLoadObject, IVolumeLoadObject, IGeometryLoadObject, ICachedImage, IImageVolume } from '../types';
2
+ declare class Cache {
3
3
  private readonly _imageCache;
4
4
  private readonly _volumeCache;
5
5
  private readonly _geometryCache;
@@ -1,4 +1,4 @@
1
- import type { Point3, ContourData, IContour } from '../../types';
1
+ import type { Point3, ContourData } from '../../types';
2
2
  import type { ContourType } from '../../enums';
3
3
  interface ContourProps {
4
4
  id: string;
@@ -6,7 +6,7 @@ interface ContourProps {
6
6
  color: Point3;
7
7
  segmentIndex: number;
8
8
  }
9
- export declare class Contour implements IContour {
9
+ export declare class Contour {
10
10
  readonly id: string;
11
11
  readonly sizeInBytes: number;
12
12
  points: Point3[];
@@ -1,4 +1,4 @@
1
- import type { Point3, IContourSet, IContour, ContourData } from '../../types';
1
+ import type { Point3, IContour, ContourData } from '../../types';
2
2
  import Contour from './Contour';
3
3
  interface ContourSetProps {
4
4
  id: string;
@@ -7,7 +7,7 @@ interface ContourSetProps {
7
7
  segmentIndex: number;
8
8
  color?: Point3;
9
9
  }
10
- export declare class ContourSet implements IContourSet {
10
+ export declare class ContourSet {
11
11
  readonly id: string;
12
12
  readonly sizeInBytes: number;
13
13
  readonly frameOfReferenceUID: string;
@@ -1,12 +1,12 @@
1
1
  import vtkImageData from '@kitware/vtk.js/Common/DataModel/ImageData';
2
- import type { Metadata, Point3, IImageVolume, Mat3, ImageVolumeProps, IImage, PixelDataTypedArrayString, RGB, IVoxelManager } from '../../types';
2
+ import type { Metadata, Point3, Mat3, ImageVolumeProps, IImage, PixelDataTypedArrayString, RGB, IVoxelManager } from '../../types';
3
3
  import type vtkOpenGLTexture from '@kitware/vtk.js/Rendering/OpenGL/Texture';
4
4
  export interface vtkStreamingOpenGLTexture extends vtkOpenGLTexture {
5
5
  setUpdatedFrame: (frame: number) => void;
6
6
  setVolumeId: (volumeId: string) => void;
7
7
  releaseGraphicsResources: () => void;
8
8
  }
9
- export declare class ImageVolume implements IImageVolume {
9
+ export declare class ImageVolume {
10
10
  private _imageIds;
11
11
  private _imageIdsIndexMap;
12
12
  private _imageURIsIndexMap;
@@ -1,11 +1,11 @@
1
- import type { SurfaceData, Point3, ISurface, RGB } from '../../types';
1
+ import type { SurfaceData, Point3, RGB } from '../../types';
2
2
  interface SurfaceProps {
3
3
  id: string;
4
4
  data: SurfaceData;
5
5
  frameOfReferenceUID: string;
6
6
  color?: Point3;
7
7
  }
8
- export declare class Surface implements ISurface {
8
+ export declare class Surface {
9
9
  readonly id: string;
10
10
  readonly sizeInBytes: number;
11
11
  readonly frameOfReferenceUID: string;
@@ -26,7 +26,7 @@ declare enum Events {
26
26
  VOLUME_NEW_IMAGE = "CORNERSTONE_VOLUME_NEW_IMAGE",
27
27
  PRE_STACK_NEW_IMAGE = "CORNERSTONE_PRE_STACK_NEW_IMAGE",
28
28
  IMAGE_SPACING_CALIBRATED = "CORNERSTONE_IMAGE_SPACING_CALIBRATED",
29
- STACK_VIEWPORT_NEW_STACK = "CORNERSTONE_STACK_VIEWPORT_NEW_STACK",
29
+ VIEWPORT_NEW_IMAGE_SET = "CORNERSTONE_STACK_VIEWPORT_NEW_STACK",
30
30
  STACK_VIEWPORT_SCROLL = "CORNERSTONE_STACK_VIEWPORT_SCROLL",
31
31
  GEOMETRY_CACHE_GEOMETRY_ADDED = "CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED",
32
32
  VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS = "VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS",
@@ -27,7 +27,7 @@ var Events;
27
27
  Events["VOLUME_NEW_IMAGE"] = "CORNERSTONE_VOLUME_NEW_IMAGE";
28
28
  Events["PRE_STACK_NEW_IMAGE"] = "CORNERSTONE_PRE_STACK_NEW_IMAGE";
29
29
  Events["IMAGE_SPACING_CALIBRATED"] = "CORNERSTONE_IMAGE_SPACING_CALIBRATED";
30
- Events["STACK_VIEWPORT_NEW_STACK"] = "CORNERSTONE_STACK_VIEWPORT_NEW_STACK";
30
+ Events["VIEWPORT_NEW_IMAGE_SET"] = "CORNERSTONE_STACK_VIEWPORT_NEW_STACK";
31
31
  Events["STACK_VIEWPORT_SCROLL"] = "CORNERSTONE_STACK_VIEWPORT_SCROLL";
32
32
  Events["GEOMETRY_CACHE_GEOMETRY_ADDED"] = "CORNERSTONE_GEOMETRY_CACHE_GEOMETRY_ADDED";
33
33
  Events["VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS"] = "VOLUME_VIEWPORT_SCROLL_OUT_OF_BOUNDS";
@@ -1,5 +1,5 @@
1
1
  declare enum GeometryType {
2
- CONTOUR = "contour",
3
- SURFACE = "Surface"
2
+ Contour = "Contour",
3
+ Surface = "Surface"
4
4
  }
5
5
  export default GeometryType;
@@ -1,6 +1,6 @@
1
1
  var GeometryType;
2
2
  (function (GeometryType) {
3
- GeometryType["CONTOUR"] = "contour";
4
- GeometryType["SURFACE"] = "Surface";
3
+ GeometryType["Contour"] = "Contour";
4
+ GeometryType["Surface"] = "Surface";
5
5
  })(GeometryType || (GeometryType = {}));
6
6
  export default GeometryType;
@@ -4,6 +4,6 @@ declare enum ViewportType {
4
4
  PERSPECTIVE = "perspective",
5
5
  VOLUME_3D = "volume3d",
6
6
  VIDEO = "video",
7
- WholeSlide = "wholeSlide"
7
+ WHOLE_SLIDE = "wholeSlide"
8
8
  }
9
9
  export default ViewportType;