@cornerstonejs/core 2.0.0-beta.23 → 2.0.0-beta.24
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 +1 -0
- package/dist/esm/RenderingEngine/StackViewport.js +4 -3
- package/dist/esm/cache/cache.d.ts +1 -1
- package/dist/esm/cache/cache.js +1 -1
- package/dist/esm/cache/classes/BaseStreamingImageVolume.js +0 -1
- package/dist/esm/loaders/volumeLoader.js +0 -8
- package/dist/esm/types/IBaseVolumeViewport.d.ts +2 -0
- package/dist/esm/types/IBaseVolumeViewport.js +1 -0
- package/dist/esm/types/IStackViewport.d.ts +2 -69
- package/dist/esm/types/IVideoViewport.d.ts +2 -40
- package/dist/esm/types/IViewport.d.ts +2 -88
- 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 -1
- package/dist/esm/utilities/VoxelManager.d.ts +6 -5
- package/dist/esm/utilities/VoxelManager.js +12 -3
- 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 +2 -2
|
@@ -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, IBaseVolumeViewport } from '../types';
|
|
4
4
|
import type { VoiModifiedEventDetail } from '../types/EventTypes';
|
|
5
5
|
import type { ViewportInput } from '../types/IViewport';
|
|
6
6
|
import type { TransferFunctionNodes } from '../types/ITransferFunctionNode';
|
|
7
7
|
import Viewport from './Viewport';
|
|
8
|
-
declare abstract class BaseVolumeViewport extends Viewport implements
|
|
8
|
+
declare abstract class BaseVolumeViewport extends Viewport implements IBaseVolumeViewport {
|
|
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] };
|
|
@@ -1663,9 +1663,10 @@ class StackViewport extends Viewport {
|
|
|
1663
1663
|
return options.asVolume;
|
|
1664
1664
|
}
|
|
1665
1665
|
let testIndex = this.getCurrentImageIdIndex();
|
|
1666
|
-
|
|
1666
|
+
let currentImageId = this.imageIds[testIndex];
|
|
1667
1667
|
if (options.withNavigation && typeof sliceIndex === 'number') {
|
|
1668
1668
|
testIndex = sliceIndex;
|
|
1669
|
+
currentImageId = this.imageIds[testIndex];
|
|
1669
1670
|
}
|
|
1670
1671
|
if (!currentImageId) {
|
|
1671
1672
|
return false;
|
|
@@ -1822,17 +1823,17 @@ class StackViewport extends Viewport {
|
|
|
1822
1823
|
}
|
|
1823
1824
|
_getImagePlaneModule(imageId) {
|
|
1824
1825
|
const imagePlaneModule = metaData.get(MetadataModules.IMAGE_PLANE, imageId);
|
|
1826
|
+
this.hasPixelSpacing =
|
|
1827
|
+
!imagePlaneModule.usingDefaultValues || this.calibration?.scale > 0;
|
|
1825
1828
|
this.calibration ||= imagePlaneModule.calibration;
|
|
1826
1829
|
const newImagePlaneModule = {
|
|
1827
1830
|
...imagePlaneModule,
|
|
1828
1831
|
};
|
|
1829
1832
|
if (!newImagePlaneModule.columnPixelSpacing) {
|
|
1830
1833
|
newImagePlaneModule.columnPixelSpacing = 1;
|
|
1831
|
-
this.hasPixelSpacing = this.calibration?.scale > 0;
|
|
1832
1834
|
}
|
|
1833
1835
|
if (!newImagePlaneModule.rowPixelSpacing) {
|
|
1834
1836
|
newImagePlaneModule.rowPixelSpacing = 1;
|
|
1835
|
-
this.hasPixelSpacing = this.calibration?.scale > 0;
|
|
1836
1837
|
}
|
|
1837
1838
|
if (!newImagePlaneModule.columnCosines) {
|
|
1838
1839
|
newImagePlaneModule.columnCosines = [0, 1, 0];
|
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) {
|
|
@@ -68,14 +68,6 @@ export function createAndCacheDerivedVolume(referencedVolumeId, options) {
|
|
|
68
68
|
}
|
|
69
69
|
const { metadata, dimensions, spacing, origin, direction } = referencedVolume;
|
|
70
70
|
const referencedImageIds = referencedVolume.imageIds ?? [];
|
|
71
|
-
const byteLength = referencedImageIds.reduce((total, imageId) => {
|
|
72
|
-
const image = cache.getImage(imageId);
|
|
73
|
-
return total + image.sizeInBytes;
|
|
74
|
-
}, 0);
|
|
75
|
-
const isCacheable = cache.isCacheable(byteLength);
|
|
76
|
-
if (!isCacheable) {
|
|
77
|
-
throw new Error(`Cannot created derived volume: Referenced volume with id ${referencedVolumeId} does not exist.`);
|
|
78
|
-
}
|
|
79
71
|
const derivedImages = createAndCacheDerivedImages(referencedImageIds, {
|
|
80
72
|
targetBufferType: options.targetBufferType,
|
|
81
73
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,69 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
import type ICamera from './ICamera';
|
|
4
|
-
import type IImage from './IImage';
|
|
5
|
-
import type IImageData from './IImageData';
|
|
6
|
-
import type { IStackInput } from './IStackInput';
|
|
7
|
-
import type { IViewport } from './IViewport';
|
|
8
|
-
import type Point2 from './Point2';
|
|
9
|
-
import type Point3 from './Point3';
|
|
10
|
-
import type { Scaling } from './ScalingParameters';
|
|
11
|
-
import type StackViewportProperties from './StackViewportProperties';
|
|
12
|
-
import type { ViewReference, ViewReferenceSpecifier, ReferenceCompatibleOptions } from '../types/IViewport';
|
|
13
|
-
import type { ImageDataMetaData } from '../RenderingEngine/StackViewport';
|
|
14
|
-
import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
|
|
15
|
-
export default interface IStackViewport extends IViewport {
|
|
16
|
-
setUseCPURendering(value: boolean): void;
|
|
17
|
-
updateRenderingPipeline(): void;
|
|
18
|
-
getImageData(): IImageData | CPUIImageData;
|
|
19
|
-
getCamera(): ICamera;
|
|
20
|
-
setCamera(cameraInterface: ICamera, storeAsInitialCamera?: boolean): void;
|
|
21
|
-
getRotation(): number;
|
|
22
|
-
unsetColormap(): void;
|
|
23
|
-
getImageIds(): string[];
|
|
24
|
-
setStack(imageIds: string[], imageIdIndex?: number): Promise<string>;
|
|
25
|
-
resetCamera(options?: unknown): boolean;
|
|
26
|
-
canvasToWorld(canvasPos: Point2): Point3;
|
|
27
|
-
worldToCanvas(worldPos: Point3): Point2;
|
|
28
|
-
getRenderer(): vtkRenderer;
|
|
29
|
-
getDefaultActor(): ActorEntry;
|
|
30
|
-
getActors(): ActorEntry[];
|
|
31
|
-
getActor(actorUID: string): ActorEntry;
|
|
32
|
-
setActors(actors: ActorEntry[]): void;
|
|
33
|
-
addActors(actors: ActorEntry[]): void;
|
|
34
|
-
addActor(actorEntry: ActorEntry): void;
|
|
35
|
-
removeAllActors(): void;
|
|
36
|
-
getFrameOfReferenceUID(): string;
|
|
37
|
-
addImages(images: IStackInput[], immediateRender?: boolean, suppressEvents?: boolean): void;
|
|
38
|
-
renderImageObject(image: unknown): void;
|
|
39
|
-
setProperties(properties: StackViewportProperties, suppressEvents?: boolean): void;
|
|
40
|
-
getCurrentImageId(): string;
|
|
41
|
-
getImageDataMetadata(image: IImage): ImageDataMetaData;
|
|
42
|
-
resize(): void;
|
|
43
|
-
setDefaultProperties(ViewportProperties: StackViewportProperties, imageId?: string): void;
|
|
44
|
-
clearDefaultProperties(imageId?: string): void;
|
|
45
|
-
getDefaultProperties(imageId?: string): StackViewportProperties;
|
|
46
|
-
getProperties(): StackViewportProperties;
|
|
47
|
-
getCurrentImageIdIndex(): number;
|
|
48
|
-
hasImageId(imageId: string): boolean;
|
|
49
|
-
hasImageURI(imageURI: string): boolean;
|
|
50
|
-
customRenderViewportToCanvas(): {
|
|
51
|
-
canvas: HTMLCanvasElement;
|
|
52
|
-
element: HTMLDivElement;
|
|
53
|
-
viewportId: string;
|
|
54
|
-
renderingEngineId: string;
|
|
55
|
-
};
|
|
56
|
-
getCornerstoneImage(): IImage;
|
|
57
|
-
resetToDefaultProperties(): void;
|
|
58
|
-
resetProperties(): void;
|
|
59
|
-
setImageIdIndex(imageIdIndex: number): Promise<string>;
|
|
60
|
-
calibrateSpacing(imageId: string): void;
|
|
61
|
-
isReferenceViewable(viewRef: ViewReference, options?: ReferenceCompatibleOptions): boolean | unknown;
|
|
62
|
-
getViewReference(viewRefSpecifier?: ViewReferenceSpecifier): ViewReference;
|
|
63
|
-
setViewReference(viewRef: ViewReference): void;
|
|
64
|
-
getViewReferenceId(specifier?: ViewReferenceSpecifier): string;
|
|
65
|
-
modality: string;
|
|
66
|
-
scaling: Scaling;
|
|
67
|
-
stackActorReInitialized: boolean;
|
|
68
|
-
scroll(delta: number, debounceLoading?: boolean, loop?: boolean): void;
|
|
69
|
-
}
|
|
1
|
+
import type { StackViewport } from '../RenderingEngine';
|
|
2
|
+
export type { StackViewport as default };
|
|
@@ -1,40 +1,2 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
import type VideoViewportProperties from './VideoViewportProperties';
|
|
4
|
-
import type { VOIRange } from './voi';
|
|
5
|
-
import type { SpeedUnit } from '../enums/VideoEnums';
|
|
6
|
-
import type IImageData from './IImageData';
|
|
7
|
-
import type CPUIImageData from './CPUIImageData';
|
|
8
|
-
export interface IVideoViewport extends IViewport {
|
|
9
|
-
modality: string;
|
|
10
|
-
canvasContext: CanvasRenderingContext2D;
|
|
11
|
-
setVideo(imageId: string, frameNumber?: number): Promise<unknown>;
|
|
12
|
-
setVideoURL(videoURL: string): Promise<unknown>;
|
|
13
|
-
togglePlayPause(): boolean;
|
|
14
|
-
play(): Promise<void>;
|
|
15
|
-
pause(): void;
|
|
16
|
-
scroll(delta?: number): Promise<void>;
|
|
17
|
-
start(): Promise<void>;
|
|
18
|
-
end(): Promise<void>;
|
|
19
|
-
setTime(timeInSeconds: number): Promise<void>;
|
|
20
|
-
setFrameNumber(frame: number): Promise<void>;
|
|
21
|
-
setFrameRange(frameRange: number[]): void;
|
|
22
|
-
getFrameRange(): [number, number];
|
|
23
|
-
setProperties(props: VideoViewportProperties): void;
|
|
24
|
-
setPlaybackRate(rate?: number): void;
|
|
25
|
-
setScrollSpeed(scrollSpeed?: number, unit?: SpeedUnit): void;
|
|
26
|
-
getProperties(): VideoViewportProperties;
|
|
27
|
-
resetProperties(): void;
|
|
28
|
-
setVOI(voiRange: VOIRange): void;
|
|
29
|
-
setWindowLevel(windowWidth?: number, windowCenter?: number): void;
|
|
30
|
-
setAverageWhite(averageWhite: [number, number, number]): void;
|
|
31
|
-
getFrameNumber(): number;
|
|
32
|
-
getFrameRate(): number;
|
|
33
|
-
getMiddleSliceData(): PixelDataTypedArray;
|
|
34
|
-
getImageData(): IImageData | CPUIImageData;
|
|
35
|
-
getCurrentImageId(): string;
|
|
36
|
-
hasImageURI(imageURI: string): boolean;
|
|
37
|
-
getNumberOfSlices(): number;
|
|
38
|
-
customRenderViewportToCanvas(): void;
|
|
39
|
-
useCustomRenderingPipeline: boolean;
|
|
40
|
-
}
|
|
1
|
+
import type VideoViewport from '../RenderingEngine/VideoViewport';
|
|
2
|
+
export type IVideoViewport = VideoViewport;
|
|
@@ -1,17 +1,10 @@
|
|
|
1
|
-
import type ICamera from './ICamera';
|
|
2
1
|
import type Point2 from './Point2';
|
|
3
2
|
import type Point3 from './Point3';
|
|
4
3
|
import type ViewportInputOptions from './ViewportInputOptions';
|
|
5
|
-
import type { ActorEntry } from './IActor';
|
|
6
4
|
import type ViewportType from '../enums/ViewportType';
|
|
7
|
-
import type ViewportStatus from '../enums/ViewportStatus';
|
|
8
5
|
import type DisplayArea from './displayArea';
|
|
9
6
|
import type { BoundsLPS } from './BoundsLPS';
|
|
10
|
-
import type
|
|
11
|
-
import type IRenderingEngine from './IRenderingEngine';
|
|
12
|
-
import type IImageData from './IImageData';
|
|
13
|
-
import type CPUIImageData from './CPUIImageData';
|
|
14
|
-
import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
|
|
7
|
+
import type Viewport from '../RenderingEngine/Viewport';
|
|
15
8
|
export interface ViewReferenceSpecifier {
|
|
16
9
|
sliceIndex?: number | [number, number];
|
|
17
10
|
forFrameOfReference?: boolean;
|
|
@@ -56,86 +49,7 @@ export interface DataSetOptions {
|
|
|
56
49
|
viewSelector?: ViewPresentationSelector;
|
|
57
50
|
viewReference?: ViewReferenceSpecifier;
|
|
58
51
|
}
|
|
59
|
-
|
|
60
|
-
id: string;
|
|
61
|
-
getImageData: () => IImageData | CPUIImageData | undefined;
|
|
62
|
-
getWidget: (id: string) => unknown;
|
|
63
|
-
addWidget: (id: string, widget: unknown) => void;
|
|
64
|
-
getWidgets: () => unknown;
|
|
65
|
-
removeWidgets: () => void;
|
|
66
|
-
renderingEngineId: string;
|
|
67
|
-
type: ViewportType;
|
|
68
|
-
canvas: HTMLCanvasElement;
|
|
69
|
-
element: HTMLDivElement;
|
|
70
|
-
sx: number;
|
|
71
|
-
sy: number;
|
|
72
|
-
sWidth: number;
|
|
73
|
-
sHeight: number;
|
|
74
|
-
_actors: Map<string, unknown>;
|
|
75
|
-
defaultOptions: unknown;
|
|
76
|
-
options: ViewportInputOptions;
|
|
77
|
-
suppressEvents: boolean;
|
|
78
|
-
isDisabled: boolean;
|
|
79
|
-
viewportStatus: ViewportStatus;
|
|
80
|
-
getRotation: () => number;
|
|
81
|
-
getFrameOfReferenceUID: () => string;
|
|
82
|
-
canvasToWorld: (canvasPos: Point2) => Point3;
|
|
83
|
-
worldToCanvas: (worldPos: Point3) => Point2;
|
|
84
|
-
getDefaultActor(): ActorEntry;
|
|
85
|
-
getActors(): ActorEntry[];
|
|
86
|
-
getActor(actorUID: string): ActorEntry;
|
|
87
|
-
getActorUIDByIndex(index: number): string;
|
|
88
|
-
getActorByIndex(index: number): ActorEntry;
|
|
89
|
-
setActors(actors: ActorEntry[]): void;
|
|
90
|
-
addActors(actors: ActorEntry[]): void;
|
|
91
|
-
addActor(actorEntry: ActorEntry): void;
|
|
92
|
-
getActorUIDs(): string[];
|
|
93
|
-
removeAllActors(): void;
|
|
94
|
-
removeActors(actorUIDs: string[]): void;
|
|
95
|
-
getRenderingEngine(): IRenderingEngine;
|
|
96
|
-
getRenderer(): vtkRenderer;
|
|
97
|
-
render(): void;
|
|
98
|
-
setOptions(options: ViewportInputOptions, immediate: boolean): void;
|
|
99
|
-
setDisplayArea(displayArea: DisplayArea, callResetCamera?: boolean, suppressEvents?: boolean): any;
|
|
100
|
-
getDisplayArea(): DisplayArea | undefined;
|
|
101
|
-
reset(immediate: boolean): void;
|
|
102
|
-
getCanvas(): HTMLCanvasElement;
|
|
103
|
-
getCamera(): ICamera;
|
|
104
|
-
setRendered(): void;
|
|
105
|
-
getZoom(): number;
|
|
106
|
-
setZoom(zoom: number, storeAsInitialCamera?: boolean): any;
|
|
107
|
-
getPan(): Point2;
|
|
108
|
-
setPan(pan: Point2, storeAsInitialCamera?: boolean): any;
|
|
109
|
-
setCamera(cameraInterface: ICamera, storeAsInitialCamera?: boolean): void;
|
|
110
|
-
resetCamera({ resetPan, resetZoom, resetToCenter, storeAsInitialCamera, }?: {
|
|
111
|
-
resetPan?: boolean;
|
|
112
|
-
resetZoom?: boolean;
|
|
113
|
-
resetToCenter?: boolean;
|
|
114
|
-
storeAsInitialCamera?: boolean;
|
|
115
|
-
}): boolean;
|
|
116
|
-
getNumberOfSlices(): number;
|
|
117
|
-
getCurrentImageIdIndex(): number;
|
|
118
|
-
getSliceIndex(): number;
|
|
119
|
-
getSliceViewInfo(): {
|
|
120
|
-
width: number;
|
|
121
|
-
height: number;
|
|
122
|
-
sliceIndex: number;
|
|
123
|
-
slicePlane: number;
|
|
124
|
-
sliceToIndexMatrix: mat4;
|
|
125
|
-
indexToSliceMatrix: mat4;
|
|
126
|
-
};
|
|
127
|
-
getViewReferenceId(viewRefSpecifier?: ViewReferenceSpecifier): string;
|
|
128
|
-
getViewReference(viewRefSpecifier?: ViewReferenceSpecifier): ViewReference;
|
|
129
|
-
isReferenceViewable(viewRef: ViewReference, options?: ReferenceCompatibleOptions): boolean | unknown;
|
|
130
|
-
getViewPresentation(viewPresSel?: ViewPresentationSelector): ViewPresentation;
|
|
131
|
-
setViewReference(viewRef: ViewReference): any;
|
|
132
|
-
setViewPresentation(viewPres: ViewPresentation): any;
|
|
133
|
-
customRenderViewportToCanvas: () => unknown;
|
|
134
|
-
_getCorners(bounds: number[]): number[][];
|
|
135
|
-
updateRenderingPipeline: () => void;
|
|
136
|
-
getTargetId?: () => string;
|
|
137
|
-
setDataIds(dataIds: string[], options?: DataSetOptions): void;
|
|
138
|
-
}
|
|
52
|
+
type IViewport = Viewport;
|
|
139
53
|
interface PublicViewportInput {
|
|
140
54
|
element: HTMLDivElement;
|
|
141
55
|
viewportId: string;
|
|
@@ -1,45 +1,3 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import type { IVolumeInput } from './IVolumeInput';
|
|
5
|
-
import type FlipDirection from './FlipDirection';
|
|
6
|
-
import type IImageData from './IImageData';
|
|
7
|
-
import type { BlendModes, OrientationAxis } from '../enums';
|
|
8
|
-
import type VolumeViewportProperties from './VolumeViewportProperties';
|
|
9
|
-
export default interface IVolumeViewport extends IViewport {
|
|
10
|
-
useCPURendering: boolean;
|
|
11
|
-
getFrameOfReferenceUID: () => string;
|
|
12
|
-
getDefaultProperties: (volumeId?: string) => VolumeViewportProperties;
|
|
13
|
-
getProperties: (volumeId?: string) => VolumeViewportProperties;
|
|
14
|
-
canvasToWorld: (canvasPos: Point2) => Point3;
|
|
15
|
-
worldToCanvas: (worldPos: Point3) => Point2;
|
|
16
|
-
getImageIds: (volumeId?: string) => string[];
|
|
17
|
-
getCurrentImageIdIndex: () => number;
|
|
18
|
-
hasVolumeId: (volumeId: string) => boolean;
|
|
19
|
-
hasImageURI: (imageURI: string) => boolean;
|
|
20
|
-
getCurrentImageId: () => string | undefined;
|
|
21
|
-
setDefaultProperties(ViewportProperties: VolumeViewportProperties, volumeId?: string): void;
|
|
22
|
-
clearDefaultProperties(volumeId?: string): void;
|
|
23
|
-
setProperties({ voiRange }: VolumeViewportProperties, volumeId?: string, suppressEvents?: boolean): void;
|
|
24
|
-
resetProperties(volumeId: string): void;
|
|
25
|
-
setVolumes(volumeInputArray: IVolumeInput[], immediate?: boolean, suppressEvents?: boolean): Promise<void>;
|
|
26
|
-
addVolumes(volumeInputArray: IVolumeInput[], immediate?: boolean, suppressEvents?: boolean): Promise<void>;
|
|
27
|
-
removeVolumeActors(actorUIDs: string[], immediate?: boolean): void;
|
|
28
|
-
getIntensityFromWorld(point: Point3): number;
|
|
29
|
-
getBounds(): number[];
|
|
30
|
-
flip(flipDirection: FlipDirection): void;
|
|
31
|
-
resetCamera({ resetPan, resetZoom, resetToCenter, resetRotation, suppressEvents, }?: {
|
|
32
|
-
resetPan?: boolean;
|
|
33
|
-
resetZoom?: boolean;
|
|
34
|
-
resetToCenter?: boolean;
|
|
35
|
-
resetRotation?: boolean;
|
|
36
|
-
suppressEvents?: boolean;
|
|
37
|
-
}): boolean;
|
|
38
|
-
resetSlabThickness(): void;
|
|
39
|
-
setBlendMode(blendMode: BlendModes, filterActorUIDs?: string[], immediate?: boolean): void;
|
|
40
|
-
setSlabThickness(slabThickness: number, filterActorUIDs?: string[]): void;
|
|
41
|
-
getSlabThickness(): number;
|
|
42
|
-
getImageData: (volumeId?: string) => IImageData | undefined;
|
|
43
|
-
setOrientation(orientation: OrientationAxis): void;
|
|
44
|
-
getVolumeId(): string | undefined;
|
|
45
|
-
}
|
|
1
|
+
import type { VolumeViewport } from '../RenderingEngine';
|
|
2
|
+
type IVolumeViewport = VolumeViewport;
|
|
3
|
+
export type { IVolumeViewport as default };
|
|
@@ -1,54 +1,2 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
interface IVoxelManager<T> {
|
|
4
|
-
_get: (index: number) => T;
|
|
5
|
-
_set: (index: number, v: T) => boolean | void;
|
|
6
|
-
modifiedSlices: Set<number>;
|
|
7
|
-
boundsIJK: BoundsIJK;
|
|
8
|
-
map: Map<number, T> | IRLEVoxelMap<T>;
|
|
9
|
-
sourceVoxelManager: IVoxelManager<T>;
|
|
10
|
-
isInObject: (pointLPS: Point3, pointIJK: Point3) => boolean;
|
|
11
|
-
readonly dimensions: Point3;
|
|
12
|
-
numberOfComponents: number;
|
|
13
|
-
getCompleteScalarDataArray?: () => ArrayLike<number>;
|
|
14
|
-
setCompleteScalarDataArray?: (scalarData: ArrayLike<number>) => void;
|
|
15
|
-
getRange: () => [number, number];
|
|
16
|
-
points: Set<number>;
|
|
17
|
-
width: number;
|
|
18
|
-
frameSize: number;
|
|
19
|
-
getAtIJK(i: number, j: number, k: number): T;
|
|
20
|
-
setAtIJK(i: number, j: number, k: number, v: T): void;
|
|
21
|
-
getAtIJKPoint(point: Point3): T;
|
|
22
|
-
setAtIJKPoint(point: Point3, v: T): void;
|
|
23
|
-
getAtIndex(index: number): T;
|
|
24
|
-
setAtIndex(index: number, v: T): void;
|
|
25
|
-
toIJK(index: number): Point3;
|
|
26
|
-
getMiddleSliceData(): PixelDataTypedArray;
|
|
27
|
-
toIndex(ijk: Point3): number;
|
|
28
|
-
getBoundsIJK(): BoundsIJK;
|
|
29
|
-
forEach(callback: (args: {
|
|
30
|
-
value: unknown;
|
|
31
|
-
index: number;
|
|
32
|
-
pointIJK: Point3;
|
|
33
|
-
pointLPS: Point3;
|
|
34
|
-
}) => void, options?: {
|
|
35
|
-
boundsIJK?: BoundsIJK;
|
|
36
|
-
isInObject?: (pointLPS: Point3, pointIJK: Point3) => boolean;
|
|
37
|
-
returnPoints?: boolean;
|
|
38
|
-
imageData?: vtkImageData | CPUImageData;
|
|
39
|
-
}): unknown[];
|
|
40
|
-
getScalarData(): PixelDataTypedArray;
|
|
41
|
-
getScalarDataLength(): number;
|
|
42
|
-
get sizeInBytes(): number;
|
|
43
|
-
get bytePerVoxel(): number;
|
|
44
|
-
clear(): void;
|
|
45
|
-
getConstructor(): new (length: number) => PixelDataTypedArray;
|
|
46
|
-
getArrayOfSlices(): number[];
|
|
47
|
-
addPoint(point: Point3 | number): void;
|
|
48
|
-
getPoints(): Point3[];
|
|
49
|
-
getSliceData(args: {
|
|
50
|
-
sliceIndex: number;
|
|
51
|
-
slicePlane: number;
|
|
52
|
-
}): PixelDataTypedArray;
|
|
53
|
-
}
|
|
54
|
-
export type { IVoxelManager };
|
|
1
|
+
import type { VoxelManager } from '../utilities';
|
|
2
|
+
export type IVoxelManager<T> = VoxelManager<T>;
|
|
@@ -1,16 +1,3 @@
|
|
|
1
|
-
import type
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
resize: () => void;
|
|
5
|
-
setProperties(props: WSIViewportProperties, suppressEvents?: boolean): void;
|
|
6
|
-
getProperties: () => WSIViewportProperties;
|
|
7
|
-
setWSI: (imageIds: string[], client: any) => Promise<unknown>;
|
|
8
|
-
resetProperties(): void;
|
|
9
|
-
getCurrentImageId(): string;
|
|
10
|
-
getFrameNumber(): number;
|
|
11
|
-
setFrameNumber(frameNo: number): any;
|
|
12
|
-
resetCamera(options?: {
|
|
13
|
-
resetPan?: boolean;
|
|
14
|
-
resetZoom?: boolean;
|
|
15
|
-
}): boolean;
|
|
16
|
-
}
|
|
1
|
+
import type WSIViewport from '../RenderingEngine/WSIViewport';
|
|
2
|
+
type IWSIViewport = WSIViewport;
|
|
3
|
+
export type { IWSIViewport as default };
|
|
@@ -93,4 +93,5 @@ import type { DicomDateObject, DicomTimeObject, GeneralSeriesModuleMetadata, Ima
|
|
|
93
93
|
import type { IVoxelManager } from './IVoxelManager';
|
|
94
94
|
import type { IRLEVoxelMap, RLERun } from './IRLEVoxelMap';
|
|
95
95
|
import type ImageLoadRequests from './ImageLoadRequests';
|
|
96
|
-
|
|
96
|
+
import type { IBaseVolumeViewport } from './IBaseVolumeViewport';
|
|
97
|
+
export type { Cornerstone3DConfig, ICamera, IStackViewport, IVideoViewport, IWSIViewport, IVolumeViewport, IEnabledElement, ICache, IVolume, IViewportId, IImageVolume, ImageVolumeProps, IDynamicImageVolume, IRenderingEngine, ScalingParameters, PTScaling, IPointsManager, PolyDataPointConfiguration, Scaling, IStreamingImageVolume, IImage, IImageData, IImageCalibration, CPUIImageData, CPUImageData, EventTypes, ImageLoaderFn, VolumeLoaderFn, IRegisterImageLoader, IStreamingVolumeProperties, IViewport, ViewReference, DataSetOptions as ImageSetOptions, ViewPresentation, ViewPresentationSelector, ReferenceCompatibleOptions, ViewReferenceSpecifier, StackViewportProperties, VolumeViewportProperties, ViewportProperties, PublicViewportInput, VolumeActor, Actor, ActorEntry, ImageActor, ICanvasActor, IImageLoadObject, IVolumeLoadObject, IVolumeInput, VolumeInputCallback, IStackInput, StackInputCallback, ViewportPreset, Metadata, OrientationVectors, AABB2, AABB3, Point2, Point3, PointsXYZ, Point4, Mat3, Plane, ViewportInputOptions, VideoViewportProperties, WSIViewportProperties, VOIRange, VOI, DisplayArea, FlipDirection, ICachedImage, ICachedVolume, CPUFallbackEnabledElement, CPUFallbackViewport, CPUFallbackTransform, CPUFallbackColormapData, CPUFallbackViewportDisplayedArea, CPUFallbackColormapsData, CPUFallbackColormap, TransformMatrix2D, CPUFallbackLookupTable, CPUFallbackLUT, CPUFallbackRenderingTools, CustomEventType, ActorSliceRange, ImageSliceData, IGeometry, IGeometryLoadObject, ICachedGeometry, PublicContourSetData, ContourSetData, ContourData, IContourSet, IContour, PublicSurfaceData, SurfaceData, ISurface, RGB, ColormapPublic, ColormapRegistration, PixelDataTypedArray, PixelDataTypedArrayString, ImagePixelModule, ImagePlaneModule, AffineMatrix, ImageLoadListener, InternalVideoCamera, VideoViewportInput, WSIViewportInput, BoundsIJK, BoundsLPS, Color, ColorLUT, VolumeProps, IImageFrame, DicomDateObject, DicomTimeObject, GeneralSeriesModuleMetadata, ImagePlaneModuleMetadata, SopCommonModuleMetadata, ImagePixelModuleMetadata, PatientStudyModuleMetadata, TransferSyntaxMetadata, LocalVolumeOptions, IVoxelManager, IRLEVoxelMap, RLERun, ViewportInput, ImageLoadRequests, IBaseVolumeViewport, };
|
|
@@ -17,7 +17,7 @@ export default class VoxelManager<T> implements IVoxelManager<T> {
|
|
|
17
17
|
width: number;
|
|
18
18
|
frameSize: number;
|
|
19
19
|
_get: (index: number) => T;
|
|
20
|
-
_set: (index: number, v: T) => boolean
|
|
20
|
+
_set: (index: number, v: T) => boolean;
|
|
21
21
|
_getConstructor?: () => new (length: number) => PixelDataTypedArray;
|
|
22
22
|
_getScalarDataLength?: () => number;
|
|
23
23
|
_getScalarData?: () => PixelDataTypedArray;
|
|
@@ -25,13 +25,13 @@ export default class VoxelManager<T> implements IVoxelManager<T> {
|
|
|
25
25
|
sliceIndex: number;
|
|
26
26
|
slicePlane: number;
|
|
27
27
|
}) => PixelDataTypedArray;
|
|
28
|
-
constructor(dimensions: any, _get: (index: number) => T, _set?: (index: number, v: T) => boolean
|
|
28
|
+
constructor(dimensions: any, _get: (index: number) => T, _set?: (index: number, v: T) => boolean);
|
|
29
29
|
getAtIJK: (i: any, j: any, k: any) => T;
|
|
30
|
-
setAtIJK: (i: number, j: number, k: number, v: any) =>
|
|
30
|
+
setAtIJK: (i: number, j: number, k: number, v: any) => boolean;
|
|
31
31
|
getAtIJKPoint: ([i, j, k]: [any, any, any]) => T;
|
|
32
32
|
setAtIJKPoint: ([i, j, k]: Point3, v: any) => void;
|
|
33
33
|
getAtIndex: (index: any) => T;
|
|
34
|
-
setAtIndex: (index: any, v: any) =>
|
|
34
|
+
setAtIndex: (index: any, v: any) => boolean;
|
|
35
35
|
toIJK(index: number): Point3;
|
|
36
36
|
getMiddleSliceData: () => PixelDataTypedArray;
|
|
37
37
|
toIndex(ijk: Point3): number;
|
|
@@ -53,7 +53,8 @@ export default class VoxelManager<T> implements IVoxelManager<T> {
|
|
|
53
53
|
get bytePerVoxel(): number;
|
|
54
54
|
clear(): void;
|
|
55
55
|
getConstructor(): new (length: number) => PixelDataTypedArray;
|
|
56
|
-
|
|
56
|
+
getArrayOfModifiedSlices(): number[];
|
|
57
|
+
resetModifiedSlices(): void;
|
|
57
58
|
static addBounds(bounds: BoundsIJK, point: Point3): void;
|
|
58
59
|
addPoint(point: Point3 | number): void;
|
|
59
60
|
getPoints(): Point3[];
|
|
@@ -20,10 +20,12 @@ export default class VoxelManager {
|
|
|
20
20
|
};
|
|
21
21
|
this.setAtIJK = (i, j, k, v) => {
|
|
22
22
|
const index = this.toIndex([i, j, k]);
|
|
23
|
-
|
|
23
|
+
const changed = this._set(index, v);
|
|
24
|
+
if (changed) {
|
|
24
25
|
this.modifiedSlices.add(k);
|
|
25
26
|
VoxelManager.addBounds(this.boundsIJK, [i, j, k]);
|
|
26
27
|
}
|
|
28
|
+
return changed;
|
|
27
29
|
};
|
|
28
30
|
this.getAtIJKPoint = ([i, j, k]) => this.getAtIJK(i, j, k);
|
|
29
31
|
this.setAtIJKPoint = ([i, j, k], v) => {
|
|
@@ -31,11 +33,13 @@ export default class VoxelManager {
|
|
|
31
33
|
};
|
|
32
34
|
this.getAtIndex = (index) => this._get(index);
|
|
33
35
|
this.setAtIndex = (index, v) => {
|
|
34
|
-
|
|
36
|
+
const changed = this._set(index, v);
|
|
37
|
+
if (changed) {
|
|
35
38
|
const pointIJK = this.toIJK(index);
|
|
36
39
|
this.modifiedSlices.add(pointIJK[2]);
|
|
37
40
|
VoxelManager.addBounds(this.boundsIJK, pointIJK);
|
|
38
41
|
}
|
|
42
|
+
return changed;
|
|
39
43
|
};
|
|
40
44
|
this.getMiddleSliceData = () => {
|
|
41
45
|
const middleSliceIndex = Math.floor(this.dimensions[2] / 2);
|
|
@@ -263,9 +267,12 @@ export default class VoxelManager {
|
|
|
263
267
|
console.warn('No scalar data available or can be used to get the constructor');
|
|
264
268
|
return Float32Array;
|
|
265
269
|
}
|
|
266
|
-
|
|
270
|
+
getArrayOfModifiedSlices() {
|
|
267
271
|
return Array.from(this.modifiedSlices);
|
|
268
272
|
}
|
|
273
|
+
resetModifiedSlices() {
|
|
274
|
+
this.modifiedSlices.clear();
|
|
275
|
+
}
|
|
269
276
|
static addBounds(bounds, point) {
|
|
270
277
|
if (!bounds) {
|
|
271
278
|
bounds = [
|
|
@@ -613,6 +620,7 @@ export default class VoxelManager {
|
|
|
613
620
|
map.set(k, layer);
|
|
614
621
|
}
|
|
615
622
|
layer[index % planeSize] = v;
|
|
623
|
+
return true;
|
|
616
624
|
});
|
|
617
625
|
voxelManager.map = map;
|
|
618
626
|
return voxelManager;
|
|
@@ -622,6 +630,7 @@ export default class VoxelManager {
|
|
|
622
630
|
const map = new RLEVoxelMap(width, height, depth);
|
|
623
631
|
const voxelManager = new VoxelManager(dimensions, (index) => map.get(index), (index, v) => {
|
|
624
632
|
map.set(index, v);
|
|
633
|
+
return true;
|
|
625
634
|
});
|
|
626
635
|
voxelManager.map = map;
|
|
627
636
|
voxelManager.getPixelData = map.getPixelData.bind(map);
|
|
@@ -14,7 +14,7 @@ function generateVolumePropsFromImageIds(imageIds, volumeId) {
|
|
|
14
14
|
const { zSpacing, origin, sortedImageIds } = sortImageIdsAndGetSpacing(imageIds, scanAxisNormal);
|
|
15
15
|
const numFrames = imageIds.length;
|
|
16
16
|
const spacing = [PixelSpacing[1], PixelSpacing[0], zSpacing];
|
|
17
|
-
const dimensions = [Columns, Rows, numFrames];
|
|
17
|
+
const dimensions = [Columns, Rows, numFrames].map((it) => Math.floor(it));
|
|
18
18
|
const direction = [
|
|
19
19
|
...rowCosineVec,
|
|
20
20
|
...colCosineVec,
|
|
@@ -34,7 +34,7 @@ function generateVolumePropsFromImageIds(imageIds, volumeId) {
|
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
function _determineDataType(imageIds, volumeMetadata) {
|
|
37
|
-
const { BitsAllocated, PixelRepresentation,
|
|
37
|
+
const { BitsAllocated, PixelRepresentation, x } = volumeMetadata;
|
|
38
38
|
const signed = PixelRepresentation === 1;
|
|
39
39
|
const imageIdIndex = Math.floor(imageIds.length / 2);
|
|
40
40
|
const imageId = imageIds[imageIdIndex];
|