@cornerstonejs/core 5.0.16 → 5.1.0
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 +4 -0
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +24 -0
- package/dist/esm/RenderingEngine/ECGViewport.d.ts +4 -0
- package/dist/esm/RenderingEngine/ECGViewport.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/DefaultECGDataProvider.js +1 -1
- package/dist/esm/RenderingEngine/GenericViewport/GenericViewport.d.ts +18 -14
- package/dist/esm/RenderingEngine/GenericViewport/GenericViewport.js +6 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/DefaultPlanarDataProvider.js +2 -2
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarLegacyCompatibilityController.js +3 -3
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewport.js +8 -8
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportLegacyAdapter.js +2 -2
- package/dist/esm/RenderingEngine/GenericViewport/Video/DefaultVideoDataProvider.js +1 -1
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewport.js +1 -1
- package/dist/esm/RenderingEngine/GenericViewport/ViewportArchitectureTypes.d.ts +12 -8
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/DefaultVolume3DDataProvider.js +3 -3
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VolumeViewport3DLegacyAdapter.js +4 -4
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3D.js +3 -3
- package/dist/esm/RenderingEngine/GenericViewport/WSI/DefaultWSIDataProvider.js +2 -2
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportLegacyAdapter.js +2 -2
- package/dist/esm/RenderingEngine/GenericViewport/genericViewportDisplaySetAccess.d.ts +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/{genericViewportDataSetAccess.js → genericViewportDisplaySetAccess.js} +19 -19
- package/dist/esm/RenderingEngine/GenericViewport/index.d.ts +1 -1
- package/dist/esm/RenderingEngine/StackViewport.d.ts +4 -0
- package/dist/esm/RenderingEngine/StackViewport.js +14 -0
- package/dist/esm/RenderingEngine/VideoViewport.d.ts +10 -0
- package/dist/esm/RenderingEngine/VideoViewport.js +13 -0
- package/dist/esm/RenderingEngine/Viewport.d.ts +17 -0
- package/dist/esm/RenderingEngine/Viewport.js +18 -0
- package/dist/esm/RenderingEngine/WSIViewport.d.ts +4 -0
- package/dist/esm/RenderingEngine/WSIViewport.js +15 -1
- package/dist/esm/utilities/genericViewportDisplaySetMetadataProvider.d.ts +8 -0
- package/dist/esm/utilities/genericViewportDisplaySetMetadataProvider.js +23 -0
- package/dist/esm/utilities/index.d.ts +2 -2
- package/dist/esm/utilities/index.js +2 -2
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +6 -6
- package/dist/esm/RenderingEngine/GenericViewport/genericViewportDataSetAccess.d.ts +0 -35
- package/dist/esm/utilities/genericViewportDataSetMetadataProvider.d.ts +0 -8
- package/dist/esm/utilities/genericViewportDataSetMetadataProvider.js +0 -23
|
@@ -65,6 +65,10 @@ declare abstract class BaseVolumeViewport extends Viewport {
|
|
|
65
65
|
getProperties: (volumeId?: string) => VolumeViewportProperties | undefined | null;
|
|
66
66
|
private getColormap;
|
|
67
67
|
setVolumes(volumeInputArray: IVolumeInput[], immediate?: boolean, suppressEvents?: boolean): Promise<void>;
|
|
68
|
+
setDisplaySets(...entries: Array<{
|
|
69
|
+
displaySetId: string;
|
|
70
|
+
options?: unknown;
|
|
71
|
+
}>): Promise<void>;
|
|
68
72
|
addVolumes(volumeInputArray: IVolumeInput[], immediate?: boolean, suppressEvents?: boolean): Promise<void>;
|
|
69
73
|
removeVolumeActors(actorUIDs: string[], immediate?: boolean): void;
|
|
70
74
|
setOrientation(_orientation: OrientationAxis | OrientationVectors, _immediate?: boolean, _suppressEvents?: boolean): void;
|
|
@@ -14,6 +14,9 @@ import transformWorldToIndex from '../utilities/transformWorldToIndex';
|
|
|
14
14
|
import { findMatchingColormap, updateOpacity as colormapUpdateOpacity, updateThreshold as colormapUpdateThreshold, updateOpacityMapping as colormapUpdateOpacityMapping, getOpacityState, } from '../utilities/colormap';
|
|
15
15
|
import getAcquisitionPlaneOrientation from '../utilities/getAcquisitionPlaneOrientation';
|
|
16
16
|
import { getTransferFunctionNodes, setTransferFunctionNodes, } from '../utilities/transferFunctionUtils';
|
|
17
|
+
import { createAndCacheVolume } from '../loaders/volumeLoader';
|
|
18
|
+
import resolveViewportVolumeId from './helpers/resolveViewportVolumeId';
|
|
19
|
+
import { getGenericViewportImageDisplaySet } from './GenericViewport/genericViewportDisplaySetAccess';
|
|
17
20
|
import createVolumeActor from './helpers/createVolumeActor';
|
|
18
21
|
import volumeNewImageEventDispatcher, { resetVolumeNewImageState, } from './helpers/volumeNewImageEventDispatcher';
|
|
19
22
|
import Viewport from './Viewport';
|
|
@@ -912,6 +915,7 @@ class BaseVolumeViewport extends Viewport {
|
|
|
912
915
|
}
|
|
913
916
|
setSampleDistanceMultiplier(multiplier) { }
|
|
914
917
|
async setVolumes(volumeInputArray, immediate = false, suppressEvents = false) {
|
|
918
|
+
this.clearDisplaySets();
|
|
915
919
|
const volumeId = volumeInputArray[0].volumeId;
|
|
916
920
|
const firstImageVolume = cache.getVolume(volumeId);
|
|
917
921
|
if (!firstImageVolume) {
|
|
@@ -947,6 +951,26 @@ class BaseVolumeViewport extends Viewport {
|
|
|
947
951
|
this.render();
|
|
948
952
|
}
|
|
949
953
|
}
|
|
954
|
+
async setDisplaySets(...entries) {
|
|
955
|
+
await this.mountDisplaySets(entries, async (entry) => {
|
|
956
|
+
const dataSet = getGenericViewportImageDisplaySet(entry.displaySetId);
|
|
957
|
+
if (!dataSet?.imageIds?.length) {
|
|
958
|
+
throw new Error(`[VolumeViewport] No registered imageIds for display set ${entry.displaySetId}`);
|
|
959
|
+
}
|
|
960
|
+
const volumeId = resolveViewportVolumeId(dataSet.volumeId ?? entry.displaySetId);
|
|
961
|
+
if (!cache.getVolume(volumeId)) {
|
|
962
|
+
const volume = await createAndCacheVolume(volumeId, {
|
|
963
|
+
imageIds: dataSet.imageIds,
|
|
964
|
+
});
|
|
965
|
+
volume.load();
|
|
966
|
+
}
|
|
967
|
+
const volumeInput = {
|
|
968
|
+
volumeId,
|
|
969
|
+
...(entry.options ?? {}),
|
|
970
|
+
};
|
|
971
|
+
await this.setVolumes([volumeInput]);
|
|
972
|
+
});
|
|
973
|
+
}
|
|
950
974
|
async addVolumes(volumeInputArray, immediate = false, suppressEvents = false) {
|
|
951
975
|
const firstImageVolume = cache.getVolume(volumeInputArray[0].volumeId);
|
|
952
976
|
if (!firstImageVolume) {
|
|
@@ -19,6 +19,10 @@ declare class ECGViewport extends Viewport {
|
|
|
19
19
|
private removeEventListeners;
|
|
20
20
|
private elementDisabledHandler;
|
|
21
21
|
setEcg(imageId: string): Promise<void>;
|
|
22
|
+
setDisplaySets(...entries: Array<{
|
|
23
|
+
displaySetId: string;
|
|
24
|
+
options?: unknown;
|
|
25
|
+
}>): Promise<void>;
|
|
22
26
|
setChannelVisibility(index: number, visible: boolean): void;
|
|
23
27
|
getVisibleChannels(): {
|
|
24
28
|
name: string;
|
|
@@ -3,6 +3,7 @@ import { Transform } from './helpers/cpuFallback/rendering/transform';
|
|
|
3
3
|
import triggerEvent from '../utilities/triggerEvent';
|
|
4
4
|
import Viewport from './Viewport';
|
|
5
5
|
import { getOrCreateCanvas } from './helpers';
|
|
6
|
+
import { getGenericViewportSourceDataId } from './GenericViewport/genericViewportDisplaySetAccess';
|
|
6
7
|
import { ECG_CHANNEL_SPACING, computeECGChannelLayouts, computeECGHeight, drawECGGrid, drawECGLabels, drawECGTraces, ECG_RENDERING_COLORS, ECG_SECONDS_WIDTH, getVisibleECGChannelsByFlag, loadECGWaveform, } from '../utilities/ECGUtilities';
|
|
7
8
|
const ECG_AMPLITUDE_INDEX_SIZE = 65536;
|
|
8
9
|
class ECGViewport extends Viewport {
|
|
@@ -173,6 +174,7 @@ class ECGViewport extends Viewport {
|
|
|
173
174
|
this.removeEventListeners();
|
|
174
175
|
}
|
|
175
176
|
async setEcg(imageId) {
|
|
177
|
+
this.clearDisplaySets();
|
|
176
178
|
this.imageId = imageId;
|
|
177
179
|
const { waveform, calibration } = await loadECGWaveform(imageId);
|
|
178
180
|
this.channels = waveform.channels.map((channel) => ({
|
|
@@ -192,6 +194,12 @@ class ECGViewport extends Viewport {
|
|
|
192
194
|
this.refreshRenderValues();
|
|
193
195
|
this.renderFrame();
|
|
194
196
|
}
|
|
197
|
+
async setDisplaySets(...entries) {
|
|
198
|
+
await this.mountDisplaySets(entries, async (entry) => {
|
|
199
|
+
const sourceDataId = getGenericViewportSourceDataId(entry.displaySetId);
|
|
200
|
+
await this.setEcg(sourceDataId);
|
|
201
|
+
});
|
|
202
|
+
}
|
|
195
203
|
setChannelVisibility(index, visible) {
|
|
196
204
|
if (index >= 0 && index < this.channels.length) {
|
|
197
205
|
this.channels[index].visible = visible;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadECGWaveform } from '../../../utilities/ECGUtilities';
|
|
2
|
-
import { getGenericViewportSourceDataId } from '../
|
|
2
|
+
import { getGenericViewportSourceDataId } from '../genericViewportDisplaySetAccess';
|
|
3
3
|
export class DefaultECGDataProvider {
|
|
4
4
|
async load(dataId) {
|
|
5
5
|
const sourceDataId = getGenericViewportSourceDataId(dataId);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type ICamera from '../../types/ICamera';
|
|
2
2
|
import type { Point2, Point3 } from '../../types';
|
|
3
3
|
import ViewportStatus from '../../enums/ViewportStatus';
|
|
4
|
-
import type { BaseViewportRenderContext, BindingRole, DataAddOptions,
|
|
4
|
+
import type { BaseViewportRenderContext, BindingRole, DataAddOptions, DisplaySetId, DataProvider, LoadedData, ViewportDataBinding, RenderPathResolver, ViewportController, ViewportId } from './ViewportArchitectureTypes';
|
|
5
5
|
import type ViewportType from '../../enums/ViewportType';
|
|
6
6
|
import type ResolvedViewportView from './ResolvedViewportView';
|
|
7
7
|
import type { ReferenceCompatibleOptions, ViewReference, ViewReferenceSpecifier, RenderingEngineResizeOptions } from '../../types/IViewport';
|
|
@@ -27,14 +27,18 @@ declare abstract class GenericViewport<TViewState extends object, TDataPresentat
|
|
|
27
27
|
element: HTMLDivElement;
|
|
28
28
|
});
|
|
29
29
|
setDisplaySets(...entries: Array<{
|
|
30
|
-
displaySetId:
|
|
30
|
+
displaySetId: DisplaySetId;
|
|
31
31
|
options?: unknown;
|
|
32
32
|
}>): Promise<void>;
|
|
33
|
-
addDisplaySet(displaySetId:
|
|
34
|
-
|
|
33
|
+
addDisplaySet(displaySetId: DisplaySetId, options: DataAddOptions): Promise<void>;
|
|
34
|
+
getDisplaySets(): Array<{
|
|
35
|
+
displaySetId: DisplaySetId;
|
|
36
|
+
options?: unknown;
|
|
37
|
+
}>;
|
|
38
|
+
removeData(displaySetId: DisplaySetId): void;
|
|
35
39
|
setDisplaySetPresentation(props: Partial<TDataPresentation>): void;
|
|
36
|
-
setDisplaySetPresentation(displaySetId:
|
|
37
|
-
getDisplaySetPresentation(displaySetId:
|
|
40
|
+
setDisplaySetPresentation(displaySetId: DisplaySetId, props: Partial<TDataPresentation>): void;
|
|
41
|
+
getDisplaySetPresentation(displaySetId: DisplaySetId): TDataPresentation | undefined;
|
|
38
42
|
getViewReference(_specifier?: ViewReferenceSpecifier): ViewReference;
|
|
39
43
|
getViewReferenceId(_specifier?: ViewReferenceSpecifier): string;
|
|
40
44
|
setViewReference(_viewReference: ViewReference): void;
|
|
@@ -56,20 +60,20 @@ declare abstract class GenericViewport<TViewState extends object, TDataPresentat
|
|
|
56
60
|
resize(): void;
|
|
57
61
|
resetViewState(_options?: unknown): boolean;
|
|
58
62
|
resizeForRenderingEngine({ keepCamera, }?: RenderingEngineResizeOptions): void;
|
|
59
|
-
protected addLoadedData(displaySetId:
|
|
63
|
+
protected addLoadedData(displaySetId: DisplaySetId, data: LoadedData, options: DataAddOptions, shouldIgnore?: () => boolean): Promise<boolean>;
|
|
60
64
|
protected removeAllData(): void;
|
|
61
|
-
protected setDataPresentationState(displaySetId:
|
|
62
|
-
protected getDataPresentationState(displaySetId:
|
|
63
|
-
protected setDefaultDataPresentation(displaySetId:
|
|
64
|
-
protected mergeDataPresentation(displaySetId:
|
|
65
|
+
protected setDataPresentationState(displaySetId: DisplaySetId, props: TDataPresentation): void;
|
|
66
|
+
protected getDataPresentationState(displaySetId: DisplaySetId): TDataPresentation | undefined;
|
|
67
|
+
protected setDefaultDataPresentation(displaySetId: DisplaySetId, defaults: TDataPresentation): TDataPresentation;
|
|
68
|
+
protected mergeDataPresentation(displaySetId: DisplaySetId, props: Partial<TDataPresentation>): TDataPresentation;
|
|
65
69
|
protected normalizeViewState(viewState: TViewState): TViewState;
|
|
66
70
|
protected modified(previousCamera?: ICamera): void;
|
|
67
71
|
protected getCameraForEvent(): ICamera;
|
|
68
72
|
protected triggerCameraModifiedEvent(previousCamera: ICamera): void;
|
|
69
73
|
protected triggerCameraResetEvent(): void;
|
|
70
|
-
protected getBinding(displaySetId:
|
|
71
|
-
protected getDisplaySetRenderMode(displaySetId:
|
|
72
|
-
protected getDisplaySetRole(displaySetId:
|
|
74
|
+
protected getBinding(displaySetId: DisplaySetId): ViewportDataBinding<TDataPresentation> | undefined;
|
|
75
|
+
protected getDisplaySetRenderMode(displaySetId: DisplaySetId): string | undefined;
|
|
76
|
+
protected getDisplaySetRole(displaySetId: DisplaySetId): BindingRole | undefined;
|
|
73
77
|
protected getFirstBinding(): ViewportDataBinding<TDataPresentation> | undefined;
|
|
74
78
|
protected getCurrentBinding(): ViewportDataBinding<TDataPresentation> | undefined;
|
|
75
79
|
protected forEachBinding(visitor: (binding: ViewportDataBinding<TDataPresentation>) => void): void;
|
|
@@ -34,6 +34,12 @@ class GenericViewport {
|
|
|
34
34
|
const data = await this.dataProvider.load(displaySetId, options);
|
|
35
35
|
await this.addLoadedData(displaySetId, data, options);
|
|
36
36
|
}
|
|
37
|
+
getDisplaySets() {
|
|
38
|
+
return Array.from(this.bindings.entries()).map(([displaySetId, binding]) => ({
|
|
39
|
+
displaySetId,
|
|
40
|
+
options: { role: binding.role },
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
37
43
|
removeData(displaySetId) {
|
|
38
44
|
const binding = this.bindings.get(displaySetId);
|
|
39
45
|
if (!binding) {
|
|
@@ -2,7 +2,7 @@ import { loadAndCacheImage } from '../../../loaders/imageLoader';
|
|
|
2
2
|
import { createAndCacheVolume } from '../../../loaders/volumeLoader';
|
|
3
3
|
import { ActorRenderMode } from '../../../types';
|
|
4
4
|
import resolveViewportVolumeId from '../../helpers/resolveViewportVolumeId';
|
|
5
|
-
import {
|
|
5
|
+
import { getGenericViewportPlanarDisplaySet } from '../genericViewportDisplaySetAccess';
|
|
6
6
|
export class DefaultPlanarDataProvider {
|
|
7
7
|
async load(dataId, options) {
|
|
8
8
|
const dataSet = this.getDataSet(dataId);
|
|
@@ -59,7 +59,7 @@ export class DefaultPlanarDataProvider {
|
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
61
|
getDataSet(dataId) {
|
|
62
|
-
const dataSet =
|
|
62
|
+
const dataSet = getGenericViewportPlanarDisplaySet(dataId);
|
|
63
63
|
if (!isPlanarRegisteredDataSet(dataSet)) {
|
|
64
64
|
return;
|
|
65
65
|
}
|
package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarLegacyCompatibilityController.js
CHANGED
|
@@ -4,7 +4,7 @@ import { ActorRenderMode } from '../../../types';
|
|
|
4
4
|
import triggerEvent from '../../../utilities/triggerEvent';
|
|
5
5
|
import { findMatchingColormap, getMaxOpacity, getThresholdValue, } from '../../../utilities/colormap';
|
|
6
6
|
import { getTransferFunctionNodes } from '../../../utilities/transferFunctionUtils';
|
|
7
|
-
import
|
|
7
|
+
import genericViewportDisplaySetMetadataProvider from '../../../utilities/genericViewportDisplaySetMetadataProvider';
|
|
8
8
|
import { clonePlanarLegacyProperties, mergePlanarLegacyProperties, clonePlanarOrientation, toPlanarDataPresentation, } from './planarLegacyCompatibility';
|
|
9
9
|
import { mapSlabTypeToBlendMode } from './planarVolumeSliceBlendMode';
|
|
10
10
|
export const PLANAR_LEGACY_PER_IMAGE_DEFAULT_PROPERTIES_LIMIT = 2048;
|
|
@@ -255,7 +255,7 @@ class PlanarLegacyCompatibilityController {
|
|
|
255
255
|
return `__planar_v2__:${this.host.getViewportId()}:volume:${volumeId}`;
|
|
256
256
|
}
|
|
257
257
|
registerDataSet(dataId, dataSet) {
|
|
258
|
-
|
|
258
|
+
genericViewportDisplaySetMetadataProvider.add(dataId, dataSet);
|
|
259
259
|
this.managedDataIds.add(dataId);
|
|
260
260
|
}
|
|
261
261
|
async mountVolumes(volumeInputArray, replaceExisting, suppressEvents) {
|
|
@@ -507,7 +507,7 @@ class PlanarLegacyCompatibilityController {
|
|
|
507
507
|
}
|
|
508
508
|
unregisterDataId(dataId) {
|
|
509
509
|
try {
|
|
510
|
-
|
|
510
|
+
genericViewportDisplaySetMetadataProvider.remove(dataId);
|
|
511
511
|
}
|
|
512
512
|
finally {
|
|
513
513
|
this.properties.delete(dataId);
|
|
@@ -4,13 +4,13 @@ import cache from '../../../cache/cache';
|
|
|
4
4
|
import { deepClone } from '../../../utilities/deepClone';
|
|
5
5
|
import imageIdToURI from '../../../utilities/imageIdToURI';
|
|
6
6
|
import { getImageDataMetadata } from '../../../utilities/getImageDataMetadata';
|
|
7
|
-
import
|
|
7
|
+
import genericViewportDisplaySetMetadataProvider from '../../../utilities/genericViewportDisplaySetMetadataProvider';
|
|
8
8
|
import triggerEvent from '../../../utilities/triggerEvent';
|
|
9
9
|
import getMinMax from '../../../utilities/getMinMax';
|
|
10
10
|
import renderingEngineCache from '../../renderingEngineCache';
|
|
11
11
|
import { getCameraVectors } from '../../helpers/getCameraVectors';
|
|
12
12
|
import GenericViewport from '../GenericViewport';
|
|
13
|
-
import {
|
|
13
|
+
import { getGenericViewportImageDisplaySet, isGenericViewportImageDisplaySet, } from '../genericViewportDisplaySetAccess';
|
|
14
14
|
import { DefaultPlanarDataProvider } from './DefaultPlanarDataProvider';
|
|
15
15
|
import { createPlanarRenderPathResolver } from './PlanarRenderPathResolver';
|
|
16
16
|
import { normalizePlanarOrientation, selectPlanarRenderPath, } from './planarRenderPathSelector';
|
|
@@ -220,10 +220,10 @@ class PlanarViewport extends GenericViewport {
|
|
|
220
220
|
const dataId = `image-object:${this.id}:${imageIdToURI(image.imageId)}`;
|
|
221
221
|
if (this.renderImageObjectDataId &&
|
|
222
222
|
this.renderImageObjectDataId !== dataId) {
|
|
223
|
-
|
|
223
|
+
genericViewportDisplaySetMetadataProvider.remove(this.renderImageObjectDataId);
|
|
224
224
|
}
|
|
225
225
|
this.renderImageObjectDataId = dataId;
|
|
226
|
-
|
|
226
|
+
genericViewportDisplaySetMetadataProvider.add(dataId, {
|
|
227
227
|
image,
|
|
228
228
|
imageIds: [image.imageId],
|
|
229
229
|
initialImageIdIndex: 0,
|
|
@@ -258,7 +258,7 @@ class PlanarViewport extends GenericViewport {
|
|
|
258
258
|
}
|
|
259
259
|
const reference = this.resolveOverlayReference(stackInput, image);
|
|
260
260
|
const dataId = this.resolveOverlayDataId(stackInput, image, reference);
|
|
261
|
-
|
|
261
|
+
genericViewportDisplaySetMetadataProvider.add(dataId, {
|
|
262
262
|
image,
|
|
263
263
|
imageData: stackInput.imageData,
|
|
264
264
|
imageIds: [stackInput.imageId],
|
|
@@ -612,7 +612,7 @@ class PlanarViewport extends GenericViewport {
|
|
|
612
612
|
onDestroy() {
|
|
613
613
|
this.clearResolvedViewCache();
|
|
614
614
|
if (this.renderImageObjectDataId) {
|
|
615
|
-
|
|
615
|
+
genericViewportDisplaySetMetadataProvider.remove(this.renderImageObjectDataId);
|
|
616
616
|
this.renderImageObjectDataId = undefined;
|
|
617
617
|
}
|
|
618
618
|
this.cpuCanvas?.remove();
|
|
@@ -758,7 +758,7 @@ class PlanarViewport extends GenericViewport {
|
|
|
758
758
|
return this.mountedData.getCurrentBinding();
|
|
759
759
|
}
|
|
760
760
|
getDataSet(dataId) {
|
|
761
|
-
const dataSet =
|
|
761
|
+
const dataSet = getGenericViewportImageDisplaySet(dataId);
|
|
762
762
|
if (!isPlanarRegisteredDataSet(dataSet)) {
|
|
763
763
|
return;
|
|
764
764
|
}
|
|
@@ -1165,7 +1165,7 @@ function createPlanarImageFromVTKImageData(imageId, imageData) {
|
|
|
1165
1165
|
};
|
|
1166
1166
|
}
|
|
1167
1167
|
function isPlanarRegisteredDataSet(value) {
|
|
1168
|
-
if (!
|
|
1168
|
+
if (!isGenericViewportImageDisplaySet(value) || value.imageIds.length === 0) {
|
|
1169
1169
|
return false;
|
|
1170
1170
|
}
|
|
1171
1171
|
return ((value.initialImageIdIndex === undefined ||
|
|
@@ -3,7 +3,7 @@ import RENDERING_DEFAULTS from '../../../constants/rendering';
|
|
|
3
3
|
import { ActorRenderMode } from '../../../types';
|
|
4
4
|
import clonePoint3 from '../../../utilities/clonePoint3';
|
|
5
5
|
import hasOwn from '../../../utilities/hasOwn';
|
|
6
|
-
import
|
|
6
|
+
import genericViewportDisplaySetMetadataProvider from '../../../utilities/genericViewportDisplaySetMetadataProvider';
|
|
7
7
|
import { viewportProjection } from '../viewportProjection';
|
|
8
8
|
import PlanarLegacyCompatibilityController from './PlanarLegacyCompatibilityController';
|
|
9
9
|
import PlanarViewport from './PlanarViewport';
|
|
@@ -216,7 +216,7 @@ class PlanarViewportLegacyAdapter extends PlanarViewport {
|
|
|
216
216
|
const bindingDataId = this.findBindingDataIdByActorEntryUID(actorEntryUID);
|
|
217
217
|
if (bindingDataId) {
|
|
218
218
|
if (this.getDisplaySetRole(bindingDataId) === 'overlay') {
|
|
219
|
-
|
|
219
|
+
genericViewportDisplaySetMetadataProvider.remove(bindingDataId);
|
|
220
220
|
}
|
|
221
221
|
this.removeData(bindingDataId);
|
|
222
222
|
didRemoveActor = true;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { loadVideoStreamMetadata } from '../../../utilities/VideoUtilities';
|
|
2
|
-
import { getGenericViewportSourceDataId } from '../
|
|
2
|
+
import { getGenericViewportSourceDataId } from '../genericViewportDisplaySetAccess';
|
|
3
3
|
export class DefaultVideoDataProvider {
|
|
4
4
|
async load(dataId) {
|
|
5
5
|
const sourceDataId = getGenericViewportSourceDataId(dataId);
|
|
@@ -3,7 +3,7 @@ import { ViewportType } from '../../../enums';
|
|
|
3
3
|
import { frameNumberToTimeSeconds, timeSecondsToFrameNumber, } from '../../../utilities/VideoUtilities';
|
|
4
4
|
import { generateFrameImageId } from '../../../utilities/splitImageIdsBy4DTags';
|
|
5
5
|
import { DefaultVideoDataProvider } from './DefaultVideoDataProvider';
|
|
6
|
-
import { getGenericViewportSourceDataId } from '../
|
|
6
|
+
import { getGenericViewportSourceDataId } from '../genericViewportDisplaySetAccess';
|
|
7
7
|
import { createDefaultVideoViewState, normalizeVideoViewState, } from './videoViewportCamera';
|
|
8
8
|
import { createVideoRenderPathResolver } from './VideoRenderPathResolver';
|
|
9
9
|
import VideoResolvedView from './VideoResolvedView';
|
|
@@ -3,7 +3,7 @@ import type { ReferenceCompatibleOptions, ViewReference, ViewReferenceSpecifier
|
|
|
3
3
|
import type ViewportType from '../../enums/ViewportType';
|
|
4
4
|
import type ResolvedViewportView from './ResolvedViewportView';
|
|
5
5
|
export type ViewportId = string;
|
|
6
|
-
export type
|
|
6
|
+
export type DisplaySetId = string;
|
|
7
7
|
export type KnownViewportRenderContext = 'planar' | 'video' | 'ecg' | 'wsi' | '3d';
|
|
8
8
|
export type ExtensionViewportRenderContext = string & {};
|
|
9
9
|
export type ViewportRenderContextType = KnownViewportRenderContext | ExtensionViewportRenderContext;
|
|
@@ -36,7 +36,7 @@ export interface BasePresentationProps {
|
|
|
36
36
|
opacity?: number;
|
|
37
37
|
}
|
|
38
38
|
export type LoadedData<TData extends object = object> = {
|
|
39
|
-
id:
|
|
39
|
+
id: DisplaySetId;
|
|
40
40
|
type: LogicalDataType;
|
|
41
41
|
} & TData;
|
|
42
42
|
export type MountedRendering<TRendering extends {
|
|
@@ -75,7 +75,7 @@ export interface RenderPathResolver {
|
|
|
75
75
|
resolve<TContext extends BaseViewportRenderContext>(type: ViewportType, data: LoadedData, options: DataAddOptions): RenderPathDefinition<TContext, BaseViewportRenderContext>;
|
|
76
76
|
}
|
|
77
77
|
export interface DataProvider<TData extends object = object, TOptions = unknown> {
|
|
78
|
-
load(dataId:
|
|
78
|
+
load(dataId: DisplaySetId, options?: TOptions): Promise<LoadedData<TData>>;
|
|
79
79
|
}
|
|
80
80
|
export interface ViewportDataBinding<TPresentation = unknown> extends RenderPathAttachment<TPresentation> {
|
|
81
81
|
data: LoadedData;
|
|
@@ -84,20 +84,24 @@ export interface ViewportDataBinding<TPresentation = unknown> extends RenderPath
|
|
|
84
84
|
export interface ViewportController<TViewState = unknown, TDataPresentation = unknown> {
|
|
85
85
|
readonly id: ViewportId;
|
|
86
86
|
readonly type: ViewportType;
|
|
87
|
-
addDisplaySet(displaySetId:
|
|
87
|
+
addDisplaySet(displaySetId: DisplaySetId, options: DataAddOptions): Promise<void>;
|
|
88
88
|
setDisplaySets(...entries: Array<{
|
|
89
|
-
displaySetId:
|
|
89
|
+
displaySetId: DisplaySetId;
|
|
90
90
|
options?: unknown;
|
|
91
91
|
}>): Promise<void>;
|
|
92
|
-
|
|
92
|
+
getDisplaySets(): Array<{
|
|
93
|
+
displaySetId: DisplaySetId;
|
|
94
|
+
options?: unknown;
|
|
95
|
+
}>;
|
|
96
|
+
removeData(displaySetId: DisplaySetId): void;
|
|
93
97
|
setViewState(viewState: Partial<TViewState>): void;
|
|
94
98
|
getViewState(): TViewState;
|
|
95
99
|
getResolvedView(): ResolvedViewportView<unknown, ICamera<unknown>> | undefined;
|
|
96
100
|
updateViewState(updater: Partial<TViewState> | ((viewState: TViewState) => Partial<TViewState> | void)): void;
|
|
97
101
|
resetViewState(options?: unknown): boolean;
|
|
98
102
|
setDisplaySetPresentation(props: Partial<TDataPresentation>): void;
|
|
99
|
-
setDisplaySetPresentation(displaySetId:
|
|
100
|
-
getDisplaySetPresentation(
|
|
103
|
+
setDisplaySetPresentation(displaySetId: DisplaySetId, props: Partial<TDataPresentation>): void;
|
|
104
|
+
getDisplaySetPresentation(displaySetId: DisplaySetId): TDataPresentation | undefined;
|
|
101
105
|
setViewReference(viewReference: ViewReference): void;
|
|
102
106
|
getViewReference(specifier?: ViewReferenceSpecifier): ViewReference;
|
|
103
107
|
getViewReferenceId(specifier?: ViewReferenceSpecifier): string;
|
|
@@ -2,7 +2,7 @@ import cache from '../../../cache/cache';
|
|
|
2
2
|
import { loadAndCacheGeometry } from '../../../loaders/geometryLoader';
|
|
3
3
|
import { createAndCacheVolume } from '../../../loaders/volumeLoader';
|
|
4
4
|
import resolveViewportVolumeId from '../../helpers/resolveViewportVolumeId';
|
|
5
|
-
import {
|
|
5
|
+
import { getGenericViewportImageDisplaySet, isGenericViewportImageDisplaySet, } from '../genericViewportDisplaySetAccess';
|
|
6
6
|
export class DefaultVolume3DDataProvider {
|
|
7
7
|
async load(dataId, options) {
|
|
8
8
|
if (!options) {
|
|
@@ -39,7 +39,7 @@ export class DefaultVolume3DDataProvider {
|
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
getDataSet(dataId) {
|
|
42
|
-
const dataSet =
|
|
42
|
+
const dataSet = getGenericViewportImageDisplaySet(dataId);
|
|
43
43
|
if (!isVolume3DRegisteredDataSet(dataSet)) {
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
@@ -47,7 +47,7 @@ export class DefaultVolume3DDataProvider {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
function isVolume3DRegisteredDataSet(value) {
|
|
50
|
-
if (!
|
|
50
|
+
if (!isGenericViewportImageDisplaySet(value)) {
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
53
53
|
return ((value.geometryId === undefined || typeof value.geometryId === 'string') &&
|
|
@@ -3,7 +3,7 @@ import { VIEWPORT_PRESETS } from '../../../constants';
|
|
|
3
3
|
import { Events } from '../../../enums';
|
|
4
4
|
import applyPreset from '../../../utilities/applyPreset';
|
|
5
5
|
import triggerEvent from '../../../utilities/triggerEvent';
|
|
6
|
-
import
|
|
6
|
+
import genericViewportDisplaySetMetadataProvider from '../../../utilities/genericViewportDisplaySetMetadataProvider';
|
|
7
7
|
import { viewportProjection } from '../viewportProjection';
|
|
8
8
|
import VolumeViewport3D from './viewport3D';
|
|
9
9
|
class VolumeViewport3DLegacyAdapter extends VolumeViewport3D {
|
|
@@ -142,7 +142,7 @@ class VolumeViewport3DLegacyAdapter extends VolumeViewport3D {
|
|
|
142
142
|
imageIds: cachedVolume.imageIds,
|
|
143
143
|
volumeId: volumeInput.volumeId,
|
|
144
144
|
};
|
|
145
|
-
|
|
145
|
+
genericViewportDisplaySetMetadataProvider.add(dataId, dataSet);
|
|
146
146
|
this.managedDataIds.add(dataId);
|
|
147
147
|
this.volumeDataIds.set(volumeInput.volumeId, dataId);
|
|
148
148
|
dataIds.push(dataId);
|
|
@@ -268,7 +268,7 @@ class VolumeViewport3DLegacyAdapter extends VolumeViewport3D {
|
|
|
268
268
|
if (!this.managedDataIds.delete(dataId)) {
|
|
269
269
|
return;
|
|
270
270
|
}
|
|
271
|
-
|
|
271
|
+
genericViewportDisplaySetMetadataProvider.remove(dataId);
|
|
272
272
|
this.legacyProperties.delete(dataId);
|
|
273
273
|
this.defaultLegacyProperties.delete(dataId);
|
|
274
274
|
for (const [volumeId, mappedDataId] of this.volumeDataIds.entries()) {
|
|
@@ -279,7 +279,7 @@ class VolumeViewport3DLegacyAdapter extends VolumeViewport3D {
|
|
|
279
279
|
}
|
|
280
280
|
onDestroy() {
|
|
281
281
|
for (const dataId of Array.from(this.managedDataIds)) {
|
|
282
|
-
|
|
282
|
+
genericViewportDisplaySetMetadataProvider.remove(dataId);
|
|
283
283
|
}
|
|
284
284
|
this.managedDataIds.clear();
|
|
285
285
|
this.volumeDataIds.clear();
|
|
@@ -3,7 +3,7 @@ import { ViewportType } from '../../../enums';
|
|
|
3
3
|
import renderingEngineCache from '../../renderingEngineCache';
|
|
4
4
|
import GenericViewport from '../GenericViewport';
|
|
5
5
|
import { getDimensionGroupReferenceContext, } from '../genericViewportReferenceCompatibility';
|
|
6
|
-
import {
|
|
6
|
+
import { getGenericViewportImageDisplaySet, isGenericViewportImageDisplaySet, } from '../genericViewportDisplaySetAccess';
|
|
7
7
|
import { DefaultVolume3DDataProvider } from './DefaultVolume3DDataProvider';
|
|
8
8
|
import { createVolume3DRenderPathResolver } from './Volume3DRenderPathResolver';
|
|
9
9
|
import Volume3DResolvedView from './Volume3DResolvedView';
|
|
@@ -322,7 +322,7 @@ class VolumeViewport3D extends GenericViewport {
|
|
|
322
322
|
return 'vtkGeometry3d';
|
|
323
323
|
}
|
|
324
324
|
getDataSet(dataId) {
|
|
325
|
-
const dataSet =
|
|
325
|
+
const dataSet = getGenericViewportImageDisplaySet(dataId);
|
|
326
326
|
if (!isVolume3DRegisteredDataSet(dataSet)) {
|
|
327
327
|
return;
|
|
328
328
|
}
|
|
@@ -388,7 +388,7 @@ function isVolume3DRendering(rendering) {
|
|
|
388
388
|
rendering.renderMode === 'vtkGeometry3d');
|
|
389
389
|
}
|
|
390
390
|
function isVolume3DRegisteredDataSet(value) {
|
|
391
|
-
if (!
|
|
391
|
+
if (!isGenericViewportImageDisplaySet(value)) {
|
|
392
392
|
return false;
|
|
393
393
|
}
|
|
394
394
|
return ((value.geometryId === undefined || typeof value.geometryId === 'string') &&
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { addWSIMiniNavigationOverlayCss, loadWSIData, } from '../../../utilities/WSIUtilities';
|
|
2
|
-
import {
|
|
2
|
+
import { getGenericViewportWSIDisplaySet } from '../genericViewportDisplaySetAccess';
|
|
3
3
|
export class DefaultWSIDataProvider {
|
|
4
4
|
async load(dataId) {
|
|
5
5
|
const dataSet = this.getDataSet(dataId);
|
|
@@ -26,7 +26,7 @@ export class DefaultWSIDataProvider {
|
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
getDataSet(dataId) {
|
|
29
|
-
const registered =
|
|
29
|
+
const registered = getGenericViewportWSIDisplaySet(dataId);
|
|
30
30
|
if (!registered) {
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MetadataModules } from '../../../enums';
|
|
2
2
|
import * as metaData from '../../../metaData';
|
|
3
|
-
import
|
|
3
|
+
import genericViewportDisplaySetMetadataProvider from '../../../utilities/genericViewportDisplaySetMetadataProvider';
|
|
4
4
|
import { viewportProjection } from '../viewportProjection';
|
|
5
5
|
import { canvasToIndexForWSI } from './wsiTransformUtils';
|
|
6
6
|
import WSIViewport from './WSIViewport';
|
|
@@ -63,7 +63,7 @@ class WSIViewportLegacyAdapter extends WSIViewport {
|
|
|
63
63
|
if (!webClient) {
|
|
64
64
|
throw new Error(`To use setDataIds on WSI data, you must provide metaData.webClient for ${dataId}.`);
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
genericViewportDisplaySetMetadataProvider.add(dataId, {
|
|
67
67
|
imageIds,
|
|
68
68
|
kind: 'wsi',
|
|
69
69
|
options: {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { IImage } from '../../types';
|
|
2
|
+
import type { WSIClientLike } from '../../utilities/WSIUtilities';
|
|
3
|
+
import type { ViewportDataReference } from './ViewportArchitectureTypes';
|
|
4
|
+
export interface GenericViewportImageDisplaySet {
|
|
5
|
+
imageIds: string[];
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
export interface GenericViewportPlanarDisplaySet extends GenericViewportImageDisplaySet {
|
|
9
|
+
kind?: 'planar';
|
|
10
|
+
initialImageIdIndex?: number;
|
|
11
|
+
volumeId?: string;
|
|
12
|
+
image?: IImage;
|
|
13
|
+
reference?: ViewportDataReference;
|
|
14
|
+
}
|
|
15
|
+
export interface GenericViewportSourceAliasDisplaySet {
|
|
16
|
+
kind: 'video' | 'ecg';
|
|
17
|
+
sourceDataId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface GenericViewportWSIDisplaySet {
|
|
20
|
+
kind: 'wsi';
|
|
21
|
+
imageIds: string[];
|
|
22
|
+
options: {
|
|
23
|
+
miniNavigationOverlay?: boolean;
|
|
24
|
+
webClient: WSIClientLike;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export type GenericViewportRegisteredDisplaySet = string | string[] | GenericViewportPlanarDisplaySet | GenericViewportSourceAliasDisplaySet | GenericViewportWSIDisplaySet;
|
|
28
|
+
export declare function getGenericViewportRegisteredDisplaySet(displaySetId: string): GenericViewportRegisteredDisplaySet | undefined;
|
|
29
|
+
export declare function getGenericViewportImageDisplaySet(displaySetId: string): GenericViewportImageDisplaySet | undefined;
|
|
30
|
+
export declare function getGenericViewportPlanarDisplaySet(displaySetId: string): GenericViewportPlanarDisplaySet | undefined;
|
|
31
|
+
export declare function getGenericViewportWSIDisplaySet(displaySetId: string): GenericViewportWSIDisplaySet | undefined;
|
|
32
|
+
export declare function getGenericViewportSourceDataId(displaySetId: string): string;
|
|
33
|
+
export declare function isGenericViewportImageDisplaySet(value: unknown): value is GenericViewportImageDisplaySet;
|
|
34
|
+
export declare function isGenericViewportWSIDisplaySet(value: unknown): value is GenericViewportWSIDisplaySet;
|
|
35
|
+
export declare function isGenericViewportSourceAliasDisplaySet(value: unknown): value is GenericViewportSourceAliasDisplaySet;
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import
|
|
2
|
-
export function
|
|
3
|
-
return
|
|
1
|
+
import genericViewportDisplaySetMetadataProvider from '../../utilities/genericViewportDisplaySetMetadataProvider';
|
|
2
|
+
export function getGenericViewportRegisteredDisplaySet(displaySetId) {
|
|
3
|
+
return genericViewportDisplaySetMetadataProvider.get(genericViewportDisplaySetMetadataProvider.VIEWPORT_V2_DISPLAY_SET, displaySetId);
|
|
4
4
|
}
|
|
5
|
-
export function
|
|
6
|
-
const registered =
|
|
5
|
+
export function getGenericViewportImageDisplaySet(displaySetId) {
|
|
6
|
+
const registered = getGenericViewportRegisteredDisplaySet(displaySetId);
|
|
7
7
|
if (isStringArray(registered)) {
|
|
8
8
|
return {
|
|
9
9
|
imageIds: registered,
|
|
10
10
|
};
|
|
11
11
|
}
|
|
12
|
-
if (!
|
|
12
|
+
if (!isGenericViewportImageDisplaySet(registered)) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
return registered;
|
|
16
16
|
}
|
|
17
|
-
export function
|
|
18
|
-
const registered =
|
|
17
|
+
export function getGenericViewportPlanarDisplaySet(displaySetId) {
|
|
18
|
+
const registered = getGenericViewportRegisteredDisplaySet(displaySetId);
|
|
19
19
|
if (isStringArray(registered)) {
|
|
20
20
|
return {
|
|
21
21
|
imageIds: registered,
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
|
-
if (!
|
|
24
|
+
if (!isGenericViewportImageDisplaySet(registered)) {
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
27
|
if ('kind' in registered && registered.kind && registered.kind !== 'planar') {
|
|
@@ -29,9 +29,9 @@ export function getGenericViewportPlanarDataSet(dataId) {
|
|
|
29
29
|
}
|
|
30
30
|
return registered;
|
|
31
31
|
}
|
|
32
|
-
export function
|
|
33
|
-
const registered =
|
|
34
|
-
if (
|
|
32
|
+
export function getGenericViewportWSIDisplaySet(displaySetId) {
|
|
33
|
+
const registered = getGenericViewportRegisteredDisplaySet(displaySetId);
|
|
34
|
+
if (isGenericViewportWSIDisplaySet(registered)) {
|
|
35
35
|
return registered;
|
|
36
36
|
}
|
|
37
37
|
if (isRecord(registered) &&
|
|
@@ -48,30 +48,30 @@ export function getGenericViewportWSIDataSet(dataId) {
|
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
|
-
export function getGenericViewportSourceDataId(
|
|
52
|
-
const registered =
|
|
51
|
+
export function getGenericViewportSourceDataId(displaySetId) {
|
|
52
|
+
const registered = getGenericViewportRegisteredDisplaySet(displaySetId);
|
|
53
53
|
if (typeof registered === 'string') {
|
|
54
54
|
return registered;
|
|
55
55
|
}
|
|
56
56
|
if (isStringArray(registered) && registered[0]) {
|
|
57
57
|
return registered[0];
|
|
58
58
|
}
|
|
59
|
-
if (
|
|
59
|
+
if (isGenericViewportSourceAliasDisplaySet(registered)) {
|
|
60
60
|
return registered.sourceDataId;
|
|
61
61
|
}
|
|
62
|
-
return
|
|
62
|
+
return displaySetId;
|
|
63
63
|
}
|
|
64
|
-
export function
|
|
64
|
+
export function isGenericViewportImageDisplaySet(value) {
|
|
65
65
|
return isRecord(value) && isStringArray(value.imageIds);
|
|
66
66
|
}
|
|
67
|
-
export function
|
|
67
|
+
export function isGenericViewportWSIDisplaySet(value) {
|
|
68
68
|
return (isRecord(value) &&
|
|
69
69
|
value.kind === 'wsi' &&
|
|
70
70
|
isStringArray(value.imageIds) &&
|
|
71
71
|
isRecord(value.options) &&
|
|
72
72
|
isWSIClientLike(value.options.webClient));
|
|
73
73
|
}
|
|
74
|
-
export function
|
|
74
|
+
export function isGenericViewportSourceAliasDisplaySet(value) {
|
|
75
75
|
return (isRecord(value) &&
|
|
76
76
|
(value.kind === 'video' || value.kind === 'ecg') &&
|
|
77
77
|
typeof value.sourceDataId === 'string');
|
|
@@ -4,7 +4,7 @@ export { ViewportProjectionService, viewportProjection, } from './viewportProjec
|
|
|
4
4
|
export type { BuiltInViewportProjectionByKind, BuiltInViewportProjectionByType, BuiltInViewportProjectionKind, BuiltInViewportProjectionType, ProjectionPresentationForKind, ProjectionPresentationForViewport, ProjectionPresentationForViewportType, ProjectionSnapshotForKind, ProjectionSnapshotForViewport, ProjectionSnapshotForViewportType, ProjectionViewStateForKind, ProjectionViewStateForViewport, ProjectionViewStateForViewportType, } from './viewportProjection';
|
|
5
5
|
export type { ProjectionPosition, ProjectionPresentation, ProjectionRequest, ProjectionScale, ProjectionSnapshot, ProjectionSpaces, ProjectionTransforms, ProjectionWriteOptions, ViewportProjectionAdapter, } from './ViewportProjectionTypes';
|
|
6
6
|
export type { CameraFrame, CameraScale, CameraScaleMode, ViewAnchor, ViewportCameraBase, } from './ViewportCameraTypes';
|
|
7
|
-
export type { BaseViewportRenderContext, BasePresentationProps, DataAddOptions,
|
|
7
|
+
export type { BaseViewportRenderContext, BasePresentationProps, DataAddOptions, DisplaySetId, DataProvider, ICanvasWorldViewport, IFrameOfReferenceViewport, IPanViewport, IZoomViewport, LoadedData, MountedRendering, RenderPathDefinition, RenderPathAttachment, RenderPathResolver, RenderPath, ViewportDataBinding, ViewportDataReference, ViewportController, ViewportId, ViewportRenderContextType, } from './ViewportArchitectureTypes';
|
|
8
8
|
export { viewportHasCanvasWorldTransform, viewportHasFrameOfReferenceUID, viewportHasPan, viewportHasZoom, } from './ViewportArchitectureTypes';
|
|
9
9
|
export { default as ECGViewport } from './ECG';
|
|
10
10
|
export { createDefaultECGRenderPaths, createECGRenderPathResolver, DefaultECGDataProvider, ecgProjection, } from './ECG';
|
|
@@ -142,6 +142,10 @@ declare class StackViewport extends Viewport {
|
|
|
142
142
|
}): vtkImageDataType;
|
|
143
143
|
private _createVTKImageData;
|
|
144
144
|
setStack(imageIds: string[], currentImageIdIndex?: number): Promise<string>;
|
|
145
|
+
setDisplaySets(...entries: Array<{
|
|
146
|
+
displaySetId: string;
|
|
147
|
+
options?: unknown;
|
|
148
|
+
}>): Promise<void>;
|
|
145
149
|
private _throwIfDestroyed;
|
|
146
150
|
private _checkVTKImageDataMatchesCornerstoneImage;
|
|
147
151
|
private _updateVTKImageDataFromCornerstoneImage;
|
|
@@ -8,6 +8,7 @@ import eventTarget from '../eventTarget';
|
|
|
8
8
|
import * as metaData from '../metaData';
|
|
9
9
|
import { getImageDataMetadata as getImageDataMetadataUtil } from '../utilities/getImageDataMetadata';
|
|
10
10
|
import { coreLog } from '../utilities/logger';
|
|
11
|
+
import { getGenericViewportImageDisplaySet } from './GenericViewport/genericViewportDisplaySetAccess';
|
|
11
12
|
import { actorIsA, isImageActor } from '../utilities/actorCheck';
|
|
12
13
|
import * as colormapUtils from '../utilities/colormap';
|
|
13
14
|
import { getTransferFunctionNodes, setTransferFunctionNodes, } from '../utilities/transferFunctionUtils';
|
|
@@ -1304,6 +1305,7 @@ class StackViewport extends Viewport {
|
|
|
1304
1305
|
}
|
|
1305
1306
|
async setStack(imageIds, currentImageIdIndex = 0) {
|
|
1306
1307
|
this._throwIfDestroyed();
|
|
1308
|
+
this.clearDisplaySets();
|
|
1307
1309
|
this.imageIds = imageIds;
|
|
1308
1310
|
if (currentImageIdIndex > imageIds.length) {
|
|
1309
1311
|
throw new Error('Current image index is greater than the number of images in the stack');
|
|
@@ -1341,6 +1343,18 @@ class StackViewport extends Viewport {
|
|
|
1341
1343
|
triggerEvent(this.element, Events.VIEWPORT_NEW_IMAGE_SET, eventDetail);
|
|
1342
1344
|
return imageId;
|
|
1343
1345
|
}
|
|
1346
|
+
async setDisplaySets(...entries) {
|
|
1347
|
+
await this.mountDisplaySets(entries, async (entry) => {
|
|
1348
|
+
const dataSet = getGenericViewportImageDisplaySet(entry.displaySetId);
|
|
1349
|
+
if (!dataSet?.imageIds?.length) {
|
|
1350
|
+
throw new Error(`[StackViewport] No registered imageIds for display set ${entry.displaySetId}`);
|
|
1351
|
+
}
|
|
1352
|
+
const initialImageIdIndex = typeof dataSet.initialImageIdIndex === 'number'
|
|
1353
|
+
? dataSet.initialImageIdIndex
|
|
1354
|
+
: 0;
|
|
1355
|
+
await this.setStack(dataSet.imageIds, initialImageIdIndex);
|
|
1356
|
+
});
|
|
1357
|
+
}
|
|
1344
1358
|
_throwIfDestroyed() {
|
|
1345
1359
|
if (this.isDisabled) {
|
|
1346
1360
|
throw new Error('The stack viewport has been destroyed and is no longer usable. Renderings will not be performed. If you ' +
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { mat4 } from 'gl-matrix';
|
|
2
2
|
import { VideoEnums as VideoViewportEnum } from '../enums';
|
|
3
|
+
import type { DisplaySetId } from './GenericViewport/ViewportArchitectureTypes';
|
|
3
4
|
import type { VideoViewportProperties, Point3, Point2, ICamera, VideoViewportInput, VOIRange, IImage, ViewReferenceSpecifier, ViewReference, ReferenceCompatibleOptions, ImageSetOptions, IStackInput, CPUIImageData, IImageData } from '../types';
|
|
4
5
|
import { Transform } from './helpers/cpuFallback/rendering/transform';
|
|
5
6
|
import Viewport from './Viewport';
|
|
@@ -44,6 +45,15 @@ declare class VideoViewport extends Viewport {
|
|
|
44
45
|
dataId: string;
|
|
45
46
|
options?: Record<string, unknown>;
|
|
46
47
|
}>): Promise<unknown>;
|
|
48
|
+
setDisplaySets(...entries: Array<{
|
|
49
|
+
displaySetId: DisplaySetId;
|
|
50
|
+
options?: {
|
|
51
|
+
frameNumber?: number;
|
|
52
|
+
viewReference?: {
|
|
53
|
+
sliceIndex?: number;
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
}>): Promise<void>;
|
|
47
57
|
setVideo(imageId: string, frameNumber?: number): Promise<unknown>;
|
|
48
58
|
private setVideoURL;
|
|
49
59
|
getImageIds(): string[];
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Events as EVENTS, VideoEnums as VideoViewportEnum } from '../enums';
|
|
2
|
+
import { getGenericViewportSourceDataId } from './GenericViewport/genericViewportDisplaySetAccess';
|
|
2
3
|
import { Transform } from './helpers/cpuFallback/rendering/transform';
|
|
3
4
|
import triggerEvent from '../utilities/triggerEvent';
|
|
4
5
|
import Viewport from './Viewport';
|
|
@@ -204,7 +205,19 @@ class VideoViewport extends Viewport {
|
|
|
204
205
|
}
|
|
205
206
|
return this.setVideo(entries[0].dataId);
|
|
206
207
|
}
|
|
208
|
+
async setDisplaySets(...entries) {
|
|
209
|
+
await this.mountDisplaySets(entries, async (entry) => {
|
|
210
|
+
const sourceDataId = getGenericViewportSourceDataId(entry.displaySetId);
|
|
211
|
+
const { frameNumber, viewReference } = entry.options ?? {};
|
|
212
|
+
const initialFrame = frameNumber ??
|
|
213
|
+
(typeof viewReference?.sliceIndex === 'number'
|
|
214
|
+
? viewReference.sliceIndex + 1
|
|
215
|
+
: undefined);
|
|
216
|
+
await this.setVideo(sourceDataId, initialFrame);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
207
219
|
setVideo(imageId, frameNumber) {
|
|
220
|
+
this.clearDisplaySets();
|
|
208
221
|
this.imageId = Array.isArray(imageId) ? imageId[0] : imageId;
|
|
209
222
|
const stream = loadVideoStreamMetadata(imageId);
|
|
210
223
|
this.modality = stream.modality;
|
|
@@ -28,6 +28,10 @@ declare class Viewport {
|
|
|
28
28
|
sWidth: number;
|
|
29
29
|
sHeight: number;
|
|
30
30
|
_actors: Map<string, ActorEntry>;
|
|
31
|
+
protected _displaySets: Array<{
|
|
32
|
+
displaySetId: string;
|
|
33
|
+
options?: unknown;
|
|
34
|
+
}>;
|
|
31
35
|
readonly defaultOptions: ViewportInputOptions;
|
|
32
36
|
options: ViewportInputOptions;
|
|
33
37
|
_suppressCameraModifiedEvents: boolean;
|
|
@@ -150,6 +154,19 @@ declare class Viewport {
|
|
|
150
154
|
dataId: string;
|
|
151
155
|
options?: DataSetOptions;
|
|
152
156
|
}>): void;
|
|
157
|
+
setDisplaySets(...entries: Array<{
|
|
158
|
+
displaySetId: string;
|
|
159
|
+
options?: unknown;
|
|
160
|
+
}>): void | Promise<void>;
|
|
161
|
+
protected mountDisplaySets<TEntry extends {
|
|
162
|
+
displaySetId: string;
|
|
163
|
+
options?: unknown;
|
|
164
|
+
}>(entries: TEntry[], load: (sourceEntry: TEntry) => void | Promise<void>): Promise<void>;
|
|
165
|
+
getDisplaySets(): Array<{
|
|
166
|
+
displaySetId: string;
|
|
167
|
+
options?: unknown;
|
|
168
|
+
}>;
|
|
169
|
+
protected clearDisplaySets(): void;
|
|
153
170
|
}
|
|
154
171
|
export declare function getVolumeCenterIJK(dimensions: number[], direction: ArrayLike<number>, viewPlaneNormal: ArrayLike<number>): number[];
|
|
155
172
|
export default Viewport;
|
|
@@ -26,6 +26,7 @@ class Viewport {
|
|
|
26
26
|
this.flipHorizontal = false;
|
|
27
27
|
this.flipVertical = false;
|
|
28
28
|
this.viewportStatus = ViewportStatus.NO_DATA;
|
|
29
|
+
this._displaySets = [];
|
|
29
30
|
this._suppressCameraModifiedEvents = false;
|
|
30
31
|
this.hasPixelSpacing = true;
|
|
31
32
|
this.getProperties = () => ({});
|
|
@@ -1189,6 +1190,23 @@ class Viewport {
|
|
|
1189
1190
|
setDataList(_entries) {
|
|
1190
1191
|
throw new Error('Unsupported operation setDataList');
|
|
1191
1192
|
}
|
|
1193
|
+
setDisplaySets(...entries) {
|
|
1194
|
+
this._displaySets = entries;
|
|
1195
|
+
}
|
|
1196
|
+
async mountDisplaySets(entries, load) {
|
|
1197
|
+
const [entry] = entries;
|
|
1198
|
+
if (!entry?.displaySetId) {
|
|
1199
|
+
throw new Error(`${this.constructor.name}: setDisplaySets requires a displaySetId`);
|
|
1200
|
+
}
|
|
1201
|
+
await load(entry);
|
|
1202
|
+
this._displaySets = [entry];
|
|
1203
|
+
}
|
|
1204
|
+
getDisplaySets() {
|
|
1205
|
+
return this._displaySets;
|
|
1206
|
+
}
|
|
1207
|
+
clearDisplaySets() {
|
|
1208
|
+
this._displaySets = [];
|
|
1209
|
+
}
|
|
1192
1210
|
}
|
|
1193
1211
|
Viewport.CameraViewPresentation = {
|
|
1194
1212
|
rotation: true,
|
|
@@ -61,6 +61,10 @@ declare class WSIViewport extends Viewport {
|
|
|
61
61
|
webClient: WSIClientLike;
|
|
62
62
|
}): Promise<void>;
|
|
63
63
|
setWSI(imageIds: string[], client: WSIClientLike): Promise<void>;
|
|
64
|
+
setDisplaySets(...entries: Array<{
|
|
65
|
+
displaySetId: string;
|
|
66
|
+
options?: unknown;
|
|
67
|
+
}>): Promise<void>;
|
|
64
68
|
postrender: () => void;
|
|
65
69
|
scroll(delta: number): void;
|
|
66
70
|
getRotation: () => number;
|
|
@@ -9,6 +9,7 @@ import { EPSILON } from '../constants';
|
|
|
9
9
|
import triggerEvent from '../utilities/triggerEvent';
|
|
10
10
|
import eventTarget from '../eventTarget';
|
|
11
11
|
import imageIdToURI from '../utilities/imageIdToURI';
|
|
12
|
+
import { getGenericViewportWSIDisplaySet } from './GenericViewport/genericViewportDisplaySetAccess';
|
|
12
13
|
import { addWSIMiniNavigationOverlayCss, getDicomMicroscopyViewer, loadWSIData, } from '../utilities/WSIUtilities';
|
|
13
14
|
let WSIUtilFunctions = null;
|
|
14
15
|
const EVENT_POSTRENDER = 'postrender';
|
|
@@ -341,7 +342,7 @@ class WSIViewport extends Viewport {
|
|
|
341
342
|
return;
|
|
342
343
|
}
|
|
343
344
|
const { dataId } = entries[0];
|
|
344
|
-
const dataSet = metaData.get('
|
|
345
|
+
const dataSet = metaData.get('genericViewportDisplaySet', dataId);
|
|
345
346
|
if (dataSet?.imageIds) {
|
|
346
347
|
return this.setDataIds(dataSet.imageIds, {
|
|
347
348
|
webClient: dataSet.options?.webClient,
|
|
@@ -361,6 +362,7 @@ class WSIViewport extends Viewport {
|
|
|
361
362
|
return this.setWSI(imageIds, webClient);
|
|
362
363
|
}
|
|
363
364
|
async setWSI(imageIds, client) {
|
|
365
|
+
this.clearDisplaySets();
|
|
364
366
|
this.microscopyElement.style.background = 'black';
|
|
365
367
|
this.microscopyElement.innerText = 'Loading';
|
|
366
368
|
this.imageIds = imageIds;
|
|
@@ -397,6 +399,18 @@ class WSIViewport extends Viewport {
|
|
|
397
399
|
background: 'none',
|
|
398
400
|
});
|
|
399
401
|
}
|
|
402
|
+
async setDisplaySets(...entries) {
|
|
403
|
+
await this.mountDisplaySets(entries, async (entry) => {
|
|
404
|
+
const dataSet = getGenericViewportWSIDisplaySet(entry.displaySetId);
|
|
405
|
+
if (!dataSet?.imageIds?.length || !dataSet.options?.webClient) {
|
|
406
|
+
throw new Error(`[WSIViewport] No registered WSI dataset (imageIds + webClient) for display set ${entry.displaySetId}`);
|
|
407
|
+
}
|
|
408
|
+
if (dataSet.options.miniNavigationOverlay !== false) {
|
|
409
|
+
addWSIMiniNavigationOverlayCss();
|
|
410
|
+
}
|
|
411
|
+
await WSIViewport.prototype.setWSI.call(this, dataSet.imageIds, dataSet.options.webClient);
|
|
412
|
+
});
|
|
413
|
+
}
|
|
400
414
|
scroll(delta) {
|
|
401
415
|
const camera = this.getCamera();
|
|
402
416
|
this.setCamera({
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
declare const genericViewportDisplaySetMetadataProvider: {
|
|
2
|
+
VIEWPORT_V2_DISPLAY_SET: string;
|
|
3
|
+
add(displaySetId: string, dataSet: unknown): void;
|
|
4
|
+
get(type: string, displaySetId: string): unknown;
|
|
5
|
+
remove(displaySetId: string): void;
|
|
6
|
+
clear(): void;
|
|
7
|
+
};
|
|
8
|
+
export default genericViewportDisplaySetMetadataProvider;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { addProvider } from '../metaData';
|
|
2
|
+
const VIEWPORT_V2_DISPLAY_SET = 'genericViewportDisplaySet';
|
|
3
|
+
const state = new Map();
|
|
4
|
+
const genericViewportDisplaySetMetadataProvider = {
|
|
5
|
+
VIEWPORT_V2_DISPLAY_SET,
|
|
6
|
+
add(displaySetId, dataSet) {
|
|
7
|
+
state.set(displaySetId, dataSet);
|
|
8
|
+
},
|
|
9
|
+
get(type, displaySetId) {
|
|
10
|
+
if (type !== VIEWPORT_V2_DISPLAY_SET) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
return state.get(displaySetId);
|
|
14
|
+
},
|
|
15
|
+
remove(displaySetId) {
|
|
16
|
+
state.delete(displaySetId);
|
|
17
|
+
},
|
|
18
|
+
clear() {
|
|
19
|
+
state.clear();
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
addProvider(genericViewportDisplaySetMetadataProvider.get);
|
|
23
|
+
export default genericViewportDisplaySetMetadataProvider;
|
|
@@ -57,7 +57,7 @@ import { updateVTKImageDataWithCornerstoneImage } from './updateVTKImageDataWith
|
|
|
57
57
|
import ProgressiveIterator from './ProgressiveIterator';
|
|
58
58
|
import decimate from './decimate';
|
|
59
59
|
import imageRetrieveMetadataProvider from './imageRetrieveMetadataProvider';
|
|
60
|
-
import
|
|
60
|
+
import genericViewportDisplaySetMetadataProvider from './genericViewportDisplaySetMetadataProvider';
|
|
61
61
|
import isVideoTransferSyntax from './isVideoTransferSyntax';
|
|
62
62
|
import { getBufferConfiguration } from './getBufferConfiguration';
|
|
63
63
|
import { generateVolumePropsFromImageIds } from './generateVolumePropsFromImageIds';
|
|
@@ -111,4 +111,4 @@ import { getNormalizedAspectRatio } from './getNormalizedAspectRatio';
|
|
|
111
111
|
export { updatePlaneRestriction } from './updatePlaneRestriction';
|
|
112
112
|
declare const getViewportModality: (viewport: IViewport, volumeId?: string) => string;
|
|
113
113
|
export * from './isEqual';
|
|
114
|
-
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, clonePoint3, hasOwn, getRuntimeId, getVOIRangeFromWindowLevel, isOpposite, getViewportModality, windowLevel, convertToGrayscale, convertColorArrayToRgbString, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider,
|
|
114
|
+
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, clonePoint3, hasOwn, getRuntimeId, getVOIRangeFromWindowLevel, isOpposite, getViewportModality, windowLevel, convertToGrayscale, convertColorArrayToRgbString, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, genericViewportDisplaySetMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, handleMultiframe4D, generateFrameImageId, pointInShapeCallback, ECGUtilities, VideoUtilities, WSIUtilities, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getAcquisitionPlaneOrientation, getVolumeDirectionVectors, getVolumeViewReferenceId, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, asArray, viewportSupportsImageSlices, viewportSupportsStackCalibration, viewportSupportsStackCompatibility, viewportSupportsVolumeActors, viewportSupportsVolumeCompatibility, viewportSupportsVolumeId, viewportSupportsVolumeURI, getNormalizedAspectRatio, };
|
|
@@ -57,7 +57,7 @@ import { updateVTKImageDataWithCornerstoneImage } from './updateVTKImageDataWith
|
|
|
57
57
|
import ProgressiveIterator from './ProgressiveIterator';
|
|
58
58
|
import decimate from './decimate';
|
|
59
59
|
import imageRetrieveMetadataProvider from './imageRetrieveMetadataProvider';
|
|
60
|
-
import
|
|
60
|
+
import genericViewportDisplaySetMetadataProvider from './genericViewportDisplaySetMetadataProvider';
|
|
61
61
|
import isVideoTransferSyntax from './isVideoTransferSyntax';
|
|
62
62
|
import { getBufferConfiguration } from './getBufferConfiguration';
|
|
63
63
|
import { generateVolumePropsFromImageIds } from './generateVolumePropsFromImageIds';
|
|
@@ -112,4 +112,4 @@ import { getNormalizedAspectRatio } from './getNormalizedAspectRatio';
|
|
|
112
112
|
export { updatePlaneRestriction } from './updatePlaneRestriction';
|
|
113
113
|
const getViewportModality = (viewport, volumeId) => _getViewportModality(viewport, volumeId, cache.getVolume);
|
|
114
114
|
export * from './isEqual';
|
|
115
|
-
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, clonePoint3, hasOwn, getRuntimeId, getVOIRangeFromWindowLevel, isOpposite, getViewportModality, windowLevel, convertToGrayscale, convertColorArrayToRgbString, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider,
|
|
115
|
+
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, clonePoint3, hasOwn, getRuntimeId, getVOIRangeFromWindowLevel, isOpposite, getViewportModality, windowLevel, convertToGrayscale, convertColorArrayToRgbString, getClosestImageId, getSpacingInNormalDirection, getTargetVolumeAndSpacingInNormalDir, getVolumeActorCorners, indexWithinDimensions, getVolumeViewportsContainingSameVolumes, getViewportsWithVolumeId, transformWorldToIndex, transformIndexToWorld, loadImageToCanvas, renderToCanvasCPU, renderToCanvasGPU, worldToImageCoords, imageToWorldCoords, getVolumeSliceRangeInfo, getVolumeViewportScrollInfo, getSliceRange, snapFocalPointToSlice, getImageSliceDataForVolumeViewport, isImageActor, isPTPrescaledWithSUV, actorIsA, getViewportsWithImageURI, getClosestStackImageIndexForPoint, getCurrentVolumeViewportSlice, calculateViewportsSpatialRegistration, spatialRegistrationMetadataProvider, getViewportImageCornersInWorld, hasNaNValues, applyPreset, deepMerge, PointsManager, getScalingParameters, colormap, getImageLegacy, ProgressiveIterator, decimate, imageRetrieveMetadataProvider, genericViewportDisplaySetMetadataProvider, transferFunctionUtils, updateVTKImageDataWithCornerstoneImage, sortImageIdsAndGetSpacing, makeVolumeMetadata, isValidVolume, genericMetadataProvider, isVideoTransferSyntax, HistoryMemo, generateVolumePropsFromImageIds, getBufferConfiguration, VoxelManager, RLEVoxelMap, convertStackToVolumeViewport, convertVolumeToStackViewport, roundNumber, roundToPrecision, getViewportImageIds, getRandomSampleFromArray, getVolumeId, color, hasFloatScalingParameters, getDynamicVolumeInfo, autoLoad, scaleArray, deepClone, splitImageIdsBy4DTags, handleMultiframe4D, generateFrameImageId, pointInShapeCallback, ECGUtilities, VideoUtilities, WSIUtilities, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getAcquisitionPlaneOrientation, getVolumeDirectionVectors, getVolumeViewReferenceId, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, asArray, viewportSupportsImageSlices, viewportSupportsStackCalibration, viewportSupportsStackCompatibility, viewportSupportsVolumeActors, viewportSupportsVolumeCompatibility, viewportSupportsVolumeId, viewportSupportsVolumeURI, getNormalizedAspectRatio, };
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "5.0
|
|
1
|
+
export declare const version = "5.1.0";
|
package/dist/esm/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.0
|
|
1
|
+
export const version = '5.1.0';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/core",
|
|
3
|
-
"version": "5.0
|
|
3
|
+
"version": "5.1.0",
|
|
4
4
|
"description": "Cornerstone3D Core",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "./dist/esm/index.d.ts",
|
|
@@ -84,18 +84,18 @@
|
|
|
84
84
|
"prepublishOnly": "pnpm run build"
|
|
85
85
|
},
|
|
86
86
|
"dependencies": {
|
|
87
|
-
"@cornerstonejs/utils": "5.0
|
|
87
|
+
"@cornerstonejs/utils": "5.1.0",
|
|
88
88
|
"@kitware/vtk.js": "35.5.3",
|
|
89
89
|
"comlink": "4.4.2",
|
|
90
90
|
"gl-matrix": "3.4.3",
|
|
91
91
|
"loglevel": "1.9.2"
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
|
-
"@cornerstonejs/metadata": "5.0
|
|
94
|
+
"@cornerstonejs/metadata": "5.1.0"
|
|
95
95
|
},
|
|
96
96
|
"peerDependencies": {
|
|
97
|
-
"@cornerstonejs/metadata": "5.0
|
|
98
|
-
"@cornerstonejs/utils": "5.0
|
|
97
|
+
"@cornerstonejs/metadata": "5.1.0",
|
|
98
|
+
"@cornerstonejs/utils": "5.1.0"
|
|
99
99
|
},
|
|
100
100
|
"contributors": [
|
|
101
101
|
{
|
|
@@ -108,5 +108,5 @@
|
|
|
108
108
|
"type": "individual",
|
|
109
109
|
"url": "https://ohif.org/donate"
|
|
110
110
|
},
|
|
111
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "f86b3b590f646412726bfb8bbea8e6724f36cbf1"
|
|
112
112
|
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import type { IImage } from '../../types';
|
|
2
|
-
import type { WSIClientLike } from '../../utilities/WSIUtilities';
|
|
3
|
-
import type { ViewportDataReference } from './ViewportArchitectureTypes';
|
|
4
|
-
export interface GenericViewportImageDataSet {
|
|
5
|
-
imageIds: string[];
|
|
6
|
-
[key: string]: unknown;
|
|
7
|
-
}
|
|
8
|
-
export interface GenericViewportPlanarDataSet extends GenericViewportImageDataSet {
|
|
9
|
-
kind?: 'planar';
|
|
10
|
-
initialImageIdIndex?: number;
|
|
11
|
-
volumeId?: string;
|
|
12
|
-
image?: IImage;
|
|
13
|
-
reference?: ViewportDataReference;
|
|
14
|
-
}
|
|
15
|
-
export interface GenericViewportSourceAliasDataSet {
|
|
16
|
-
kind: 'video' | 'ecg';
|
|
17
|
-
sourceDataId: string;
|
|
18
|
-
}
|
|
19
|
-
export interface GenericViewportWSIDataSet {
|
|
20
|
-
kind: 'wsi';
|
|
21
|
-
imageIds: string[];
|
|
22
|
-
options: {
|
|
23
|
-
miniNavigationOverlay?: boolean;
|
|
24
|
-
webClient: WSIClientLike;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
export type GenericViewportRegisteredData = string | string[] | GenericViewportPlanarDataSet | GenericViewportSourceAliasDataSet | GenericViewportWSIDataSet;
|
|
28
|
-
export declare function getGenericViewportRegisteredData(dataId: string): GenericViewportRegisteredData | undefined;
|
|
29
|
-
export declare function getGenericViewportImageDataSet(dataId: string): GenericViewportImageDataSet | undefined;
|
|
30
|
-
export declare function getGenericViewportPlanarDataSet(dataId: string): GenericViewportPlanarDataSet | undefined;
|
|
31
|
-
export declare function getGenericViewportWSIDataSet(dataId: string): GenericViewportWSIDataSet | undefined;
|
|
32
|
-
export declare function getGenericViewportSourceDataId(dataId: string): string;
|
|
33
|
-
export declare function isGenericViewportImageDataSet(value: unknown): value is GenericViewportImageDataSet;
|
|
34
|
-
export declare function isGenericViewportWSIDataSet(value: unknown): value is GenericViewportWSIDataSet;
|
|
35
|
-
export declare function isGenericViewportSourceAliasDataSet(value: unknown): value is GenericViewportSourceAliasDataSet;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
declare const genericViewportDataSetMetadataProvider: {
|
|
2
|
-
VIEWPORT_V2_DATA_SET: string;
|
|
3
|
-
add(dataId: string, dataSet: unknown): void;
|
|
4
|
-
get(type: string, dataId: string): unknown;
|
|
5
|
-
remove(dataId: string): void;
|
|
6
|
-
clear(): void;
|
|
7
|
-
};
|
|
8
|
-
export default genericViewportDataSetMetadataProvider;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { addProvider } from '../metaData';
|
|
2
|
-
const VIEWPORT_V2_DATA_SET = 'genericViewportDataSet';
|
|
3
|
-
let state = {};
|
|
4
|
-
const genericViewportDataSetMetadataProvider = {
|
|
5
|
-
VIEWPORT_V2_DATA_SET,
|
|
6
|
-
add(dataId, dataSet) {
|
|
7
|
-
state[dataId] = dataSet;
|
|
8
|
-
},
|
|
9
|
-
get(type, dataId) {
|
|
10
|
-
if (type !== VIEWPORT_V2_DATA_SET) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
return state[dataId];
|
|
14
|
-
},
|
|
15
|
-
remove(dataId) {
|
|
16
|
-
delete state[dataId];
|
|
17
|
-
},
|
|
18
|
-
clear() {
|
|
19
|
-
state = {};
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
addProvider(genericViewportDataSetMetadataProvider.get);
|
|
23
|
-
export default genericViewportDataSetMetadataProvider;
|