@cornerstonejs/core 2.0.0-beta.23 → 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.
- package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +2 -2
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +4 -0
- package/dist/esm/RenderingEngine/CanvasActor/index.d.ts +1 -2
- package/dist/esm/RenderingEngine/RenderingEngine.d.ts +1 -2
- package/dist/esm/RenderingEngine/RenderingEngine.js +1 -12
- package/dist/esm/RenderingEngine/StackViewport.d.ts +11 -4
- package/dist/esm/RenderingEngine/StackViewport.js +61 -47
- package/dist/esm/RenderingEngine/VideoViewport.d.ts +2 -2
- package/dist/esm/RenderingEngine/Viewport.d.ts +8 -3
- package/dist/esm/RenderingEngine/Viewport.js +8 -8
- package/dist/esm/RenderingEngine/VolumeViewport.d.ts +1 -0
- package/dist/esm/RenderingEngine/VolumeViewport.js +9 -0
- package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +5 -1
- package/dist/esm/RenderingEngine/VolumeViewport3D.js +31 -3
- package/dist/esm/RenderingEngine/WSIViewport.d.ts +3 -3
- package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.d.ts +5 -11
- package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.js +1 -1
- package/dist/esm/cache/cache.d.ts +3 -3
- package/dist/esm/cache/cache.js +1 -1
- package/dist/esm/cache/classes/BaseStreamingImageVolume.js +0 -1
- package/dist/esm/cache/classes/Contour.d.ts +2 -2
- package/dist/esm/cache/classes/ContourSet.d.ts +2 -2
- package/dist/esm/cache/classes/ImageVolume.d.ts +2 -2
- package/dist/esm/cache/classes/Surface.d.ts +2 -2
- package/dist/esm/enums/Events.d.ts +1 -1
- package/dist/esm/enums/Events.js +1 -1
- package/dist/esm/enums/GeometryType.d.ts +2 -2
- package/dist/esm/enums/GeometryType.js +2 -2
- package/dist/esm/enums/ViewportType.d.ts +1 -1
- package/dist/esm/enums/ViewportType.js +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/init.d.ts +2 -1
- package/dist/esm/init.js +4 -1
- package/dist/esm/loaders/geometryLoader.js +3 -3
- package/dist/esm/loaders/utils/contourSet/createContourSet.js +1 -1
- package/dist/esm/loaders/utils/surface/createSurface.js +1 -1
- package/dist/esm/loaders/volumeLoader.d.ts +2 -2
- package/dist/esm/loaders/volumeLoader.js +0 -8
- package/dist/esm/types/IActor.d.ts +2 -7
- package/dist/esm/types/IBaseVolumeViewport.d.ts +2 -0
- package/dist/esm/types/IContour.d.ts +2 -14
- package/dist/esm/types/IContourSet.d.ts +2 -22
- package/dist/esm/types/IImageVolume.d.ts +2 -45
- package/dist/esm/types/IPointsManager.d.ts +2 -18
- package/dist/esm/types/IRLEVoxelMap.d.ts +2 -11
- package/dist/esm/types/IRenderingEngine.d.ts +3 -26
- package/dist/esm/types/IStackViewport.d.ts +2 -69
- package/dist/esm/types/IStreamingImageVolume.d.ts +1 -0
- package/dist/esm/types/ISurface.d.ts +2 -13
- package/dist/esm/types/IVideoViewport.d.ts +2 -40
- package/dist/esm/types/IViewport.d.ts +4 -90
- package/dist/esm/types/IVolumeViewport.d.ts +3 -45
- package/dist/esm/types/IVoxelManager.d.ts +2 -54
- package/dist/esm/types/IWSIViewport.d.ts +3 -16
- package/dist/esm/types/MetadataModuleTypes.d.ts +1 -0
- package/dist/esm/types/index.d.ts +2 -2
- package/dist/esm/utilities/PointsManager.d.ts +1 -1
- package/dist/esm/utilities/RLEVoxelMap.d.ts +2 -2
- package/dist/esm/utilities/VoxelManager.d.ts +7 -6
- package/dist/esm/utilities/VoxelManager.js +12 -3
- package/dist/esm/utilities/convertStackToVolumeViewport.js +2 -2
- package/dist/esm/utilities/generateVolumePropsFromImageIds.js +2 -2
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +13 -5
- package/dist/esm/types/WSIViewportTypes.d.ts +0 -13
- /package/dist/esm/types/{WSIViewportTypes.js → IBaseVolumeViewport.js} +0 -0
|
@@ -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
|
|
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
|
|
8
|
+
declare abstract class BaseVolumeViewport extends Viewport {
|
|
9
9
|
useCPURendering: boolean;
|
|
10
10
|
private _FrameOfReferenceUID;
|
|
11
11
|
protected initialTransferFunctionNodes: TransferFunctionNodes;
|
|
@@ -419,6 +419,7 @@ class BaseVolumeViewport extends Viewport {
|
|
|
419
419
|
const volumeIdToUse = applicableVolumeActorInfo.volumeId;
|
|
420
420
|
let voiRangeToUse = voiRange;
|
|
421
421
|
if (typeof voiRangeToUse === 'undefined') {
|
|
422
|
+
throw new Error('voiRangeToUse is undefined, need to implement this in the new volume model');
|
|
422
423
|
const imageData = volumeActor.getMapper().getInputData();
|
|
423
424
|
const range = imageData.getPointData().getScalars().getRange();
|
|
424
425
|
const maxVoiRange = { lower: range[0], upper: range[1] };
|
|
@@ -617,6 +618,9 @@ class BaseVolumeViewport extends Viewport {
|
|
|
617
618
|
this.setSlabThickness(properties.slabThickness);
|
|
618
619
|
this.viewportProperties.slabThickness = properties.slabThickness;
|
|
619
620
|
}
|
|
621
|
+
if (properties.preset !== undefined) {
|
|
622
|
+
this.setPreset(properties.preset, volumeId, false);
|
|
623
|
+
}
|
|
620
624
|
this.render();
|
|
621
625
|
}
|
|
622
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
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
|
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?:
|
|
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
|
|
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: (
|
|
321
|
-
|
|
328
|
+
cpu: (options = {}) => {
|
|
329
|
+
const { resetPan = true, resetZoom = true } = options;
|
|
330
|
+
this.resetCameraCPU({ resetPan, resetZoom });
|
|
322
331
|
return true;
|
|
323
332
|
},
|
|
324
|
-
gpu: (
|
|
325
|
-
|
|
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.
|
|
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 =
|
|
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,
|
|
@@ -1663,51 +1710,18 @@ class StackViewport extends Viewport {
|
|
|
1663
1710
|
return options.asVolume;
|
|
1664
1711
|
}
|
|
1665
1712
|
let testIndex = this.getCurrentImageIdIndex();
|
|
1666
|
-
|
|
1713
|
+
let currentImageId = this.imageIds[testIndex];
|
|
1667
1714
|
if (options.withNavigation && typeof sliceIndex === 'number') {
|
|
1668
1715
|
testIndex = sliceIndex;
|
|
1716
|
+
currentImageId = this.imageIds[testIndex];
|
|
1669
1717
|
}
|
|
1670
1718
|
if (!currentImageId) {
|
|
1671
1719
|
return false;
|
|
1672
1720
|
}
|
|
1673
1721
|
if (options.asOverlay && referencedImageId) {
|
|
1674
|
-
const
|
|
1675
|
-
const referenceImagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, referencedImageId);
|
|
1676
|
-
const currentImagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, targetImageId);
|
|
1677
|
-
const referenceOrientation = referenceImagePlaneModule.imageOrientationPatient;
|
|
1678
|
-
const currentOrientation = currentImagePlaneModule.imageOrientationPatient;
|
|
1679
|
-
if (referenceOrientation && currentOrientation) {
|
|
1680
|
-
const closeEnough = isEqual(referenceImagePlaneModule.imageOrientationPatient, currentImagePlaneModule.imageOrientationPatient);
|
|
1681
|
-
if (closeEnough) {
|
|
1682
|
-
const referencePosition = referenceImagePlaneModule.imagePositionPatient;
|
|
1683
|
-
const currentPosition = currentImagePlaneModule.imagePositionPatient;
|
|
1684
|
-
if (referencePosition && currentPosition) {
|
|
1685
|
-
const vector = vec3.create();
|
|
1686
|
-
vec3.subtract(vector, currentPosition, referencePosition);
|
|
1687
|
-
const viewPlaneNormal = vec3.create();
|
|
1688
|
-
vec3.cross(viewPlaneNormal, currentOrientation.slice(0, 3), currentOrientation.slice(3, 6));
|
|
1689
|
-
const dotProduct = vec3.dot(vector, viewPlaneNormal);
|
|
1690
|
-
const isOrthogonal = Math.abs(dotProduct) < EPSILON;
|
|
1691
|
-
if (isOrthogonal) {
|
|
1692
|
-
return targetImageId;
|
|
1693
|
-
}
|
|
1694
|
-
}
|
|
1695
|
-
}
|
|
1696
|
-
}
|
|
1697
|
-
else {
|
|
1698
|
-
const referenceRows = referenceImagePlaneModule.rows;
|
|
1699
|
-
const referenceColumns = referenceImagePlaneModule.columns;
|
|
1700
|
-
const currentRows = currentImagePlaneModule.rows;
|
|
1701
|
-
const currentColumns = currentImagePlaneModule.columns;
|
|
1702
|
-
if (referenceRows === currentRows &&
|
|
1703
|
-
referenceColumns === currentColumns) {
|
|
1704
|
-
return targetImageId;
|
|
1705
|
-
}
|
|
1706
|
-
}
|
|
1707
|
-
};
|
|
1708
|
-
const matchedImageId = matchImagesForOverlay(currentImageId);
|
|
1722
|
+
const matchedImageId = this.matchImagesForOverlay(currentImageId, referencedImageId);
|
|
1709
1723
|
if (matchedImageId) {
|
|
1710
|
-
return
|
|
1724
|
+
return true;
|
|
1711
1725
|
}
|
|
1712
1726
|
}
|
|
1713
1727
|
let { imageURI } = options;
|
|
@@ -1822,17 +1836,17 @@ class StackViewport extends Viewport {
|
|
|
1822
1836
|
}
|
|
1823
1837
|
_getImagePlaneModule(imageId) {
|
|
1824
1838
|
const imagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, imageId);
|
|
1839
|
+
this.hasPixelSpacing =
|
|
1840
|
+
!imagePlaneModule.usingDefaultValues || this.calibration?.scale > 0;
|
|
1825
1841
|
this.calibration ||= imagePlaneModule.calibration;
|
|
1826
1842
|
const newImagePlaneModule = {
|
|
1827
1843
|
...imagePlaneModule,
|
|
1828
1844
|
};
|
|
1829
1845
|
if (!newImagePlaneModule.columnPixelSpacing) {
|
|
1830
1846
|
newImagePlaneModule.columnPixelSpacing = 1;
|
|
1831
|
-
this.hasPixelSpacing = this.calibration?.scale > 0;
|
|
1832
1847
|
}
|
|
1833
1848
|
if (!newImagePlaneModule.rowPixelSpacing) {
|
|
1834
1849
|
newImagePlaneModule.rowPixelSpacing = 1;
|
|
1835
|
-
this.hasPixelSpacing = this.calibration?.scale > 0;
|
|
1836
1850
|
}
|
|
1837
1851
|
if (!newImagePlaneModule.columnCosines) {
|
|
1838
1852
|
newImagePlaneModule.columnCosines = [0, 1, 0];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { mat4 } from 'gl-matrix';
|
|
2
2
|
import { VideoEnums as VideoViewportEnum } from '../enums';
|
|
3
|
-
import type {
|
|
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
|
|
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,
|
|
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
|
|
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?:
|
|
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 =
|
|
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 =
|
|
472
|
-
this.setFitToCanvasCamera(
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 {
|
|
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
|
|
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:
|
|
17
|
+
constructor(props: ViewportInput);
|
|
18
18
|
static get useCustomRenderingPipeline(): boolean;
|
|
19
19
|
private addEventListeners;
|
|
20
20
|
private removeEventListeners;
|
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
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.
|
|
13
|
+
[ViewportType.WHOLE_SLIDE]: WSIViewport,
|
|
14
14
|
};
|
|
15
15
|
export default viewportTypeToViewportClass;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
declare class Cache
|
|
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;
|
|
@@ -42,4 +42,4 @@ declare class Cache implements ICache {
|
|
|
42
42
|
}
|
|
43
43
|
declare const cache: Cache;
|
|
44
44
|
export default cache;
|
|
45
|
-
export { Cache };
|
|
45
|
+
export { Cache, cache };
|
package/dist/esm/cache/cache.js
CHANGED
|
@@ -7,7 +7,6 @@ import ImageVolume from './ImageVolume';
|
|
|
7
7
|
import ProgressiveRetrieveImages from '../../loaders/ProgressiveRetrieveImages';
|
|
8
8
|
import { canRenderFloatTextures } from '../../init';
|
|
9
9
|
import { loadAndCacheImage } from '../../loaders/imageLoader';
|
|
10
|
-
import StreamingImageVolume from './StreamingImageVolume';
|
|
11
10
|
const requestTypeDefault = RequestType.Prefetch;
|
|
12
11
|
export default class BaseStreamingImageVolume extends ImageVolume {
|
|
13
12
|
constructor(imageVolumeProperties, streamingProperties) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Point3, ContourData
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
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,
|
|
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
|
|
8
|
+
export declare class Surface {
|
|
9
9
|
readonly id: string;
|
|
10
10
|
readonly sizeInBytes: number;
|
|
11
11
|
readonly frameOfReferenceUID: string;
|