@cornerstonejs/core 4.0.0-beta.2 → 4.0.0-beta.4
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/LICENSE +21 -0
- package/dist/esm/RenderingEngine/BaseRenderingEngine.d.ts +55 -0
- package/dist/esm/RenderingEngine/BaseRenderingEngine.js +355 -0
- package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +34 -5
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +179 -17
- package/dist/esm/RenderingEngine/ContextPoolRenderingEngine.d.ts +28 -0
- package/dist/esm/RenderingEngine/ContextPoolRenderingEngine.js +313 -0
- package/dist/esm/RenderingEngine/RenderingEngine.d.ts +7 -39
- package/dist/esm/RenderingEngine/RenderingEngine.js +42 -613
- package/dist/esm/RenderingEngine/StackViewport.d.ts +6 -3
- package/dist/esm/RenderingEngine/StackViewport.js +92 -8
- package/dist/esm/RenderingEngine/TiledRenderingEngine.d.ts +24 -0
- package/dist/esm/RenderingEngine/TiledRenderingEngine.js +287 -0
- package/dist/esm/RenderingEngine/VideoViewport.js +1 -1
- package/dist/esm/RenderingEngine/Viewport.d.ts +2 -1
- package/dist/esm/RenderingEngine/Viewport.js +38 -1
- package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +1 -0
- package/dist/esm/RenderingEngine/VolumeViewport3D.js +24 -1
- package/dist/esm/RenderingEngine/WSIViewport.js +4 -7
- package/dist/esm/RenderingEngine/WebGLContextPool.d.ts +17 -0
- package/dist/esm/RenderingEngine/WebGLContextPool.js +45 -0
- package/dist/esm/RenderingEngine/helpers/createVolumeMapper.js +3 -1
- package/dist/esm/RenderingEngine/helpers/isContextPoolRenderingEngine.d.ts +1 -0
- package/dist/esm/RenderingEngine/helpers/isContextPoolRenderingEngine.js +7 -0
- package/dist/esm/RenderingEngine/helpers/stats/StatsOverlay.d.ts +28 -0
- package/dist/esm/RenderingEngine/helpers/stats/StatsOverlay.js +137 -0
- package/dist/esm/RenderingEngine/helpers/stats/StatsPanel.d.ts +24 -0
- package/dist/esm/RenderingEngine/helpers/stats/StatsPanel.js +101 -0
- package/dist/esm/RenderingEngine/helpers/stats/constants.d.ts +44 -0
- package/dist/esm/RenderingEngine/helpers/stats/constants.js +36 -0
- package/dist/esm/RenderingEngine/helpers/stats/enums.d.ts +6 -0
- package/dist/esm/RenderingEngine/helpers/stats/enums.js +7 -0
- package/dist/esm/RenderingEngine/helpers/stats/index.d.ts +2 -0
- package/dist/esm/RenderingEngine/helpers/stats/index.js +2 -0
- package/dist/esm/RenderingEngine/helpers/stats/types.d.ts +22 -0
- package/dist/esm/RenderingEngine/helpers/stats/types.js +0 -0
- package/dist/esm/RenderingEngine/index.d.ts +4 -1
- package/dist/esm/RenderingEngine/index.js +4 -1
- package/dist/esm/cache/cache.js +0 -1
- package/dist/esm/cache/classes/BaseStreamingImageVolume.d.ts +2 -0
- package/dist/esm/cache/classes/BaseStreamingImageVolume.js +8 -0
- package/dist/esm/cache/classes/StreamingDynamicImageVolume.d.ts +1 -0
- package/dist/esm/enums/RenderingEngineModeEnum.d.ts +5 -0
- package/dist/esm/enums/RenderingEngineModeEnum.js +6 -0
- package/dist/esm/enums/index.d.ts +2 -1
- package/dist/esm/enums/index.js +2 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/init.js +12 -0
- package/dist/esm/loaders/volumeLoader.js +2 -2
- package/dist/esm/types/Cornerstone3DConfig.d.ts +16 -7
- package/dist/esm/types/IRenderingEngine.d.ts +1 -1
- package/dist/esm/types/IViewport.d.ts +9 -2
- package/dist/esm/types/OrientationVectors.d.ts +1 -1
- package/dist/esm/types/RenderingEngineMode.d.ts +2 -0
- package/dist/esm/types/RenderingEngineMode.js +0 -0
- package/dist/esm/types/ViewportProperties.d.ts +1 -0
- package/dist/esm/types/VtkOffscreenMultiRenderWindow.d.ts +37 -0
- package/dist/esm/types/VtkOffscreenMultiRenderWindow.js +5 -0
- package/dist/esm/types/index.d.ts +3 -1
- package/dist/esm/utilities/asArray.d.ts +1 -0
- package/dist/esm/utilities/asArray.js +6 -0
- package/dist/esm/utilities/colormap.js +4 -2
- package/dist/esm/utilities/getPixelSpacingInformation.js +4 -1
- package/dist/esm/utilities/historyMemo/index.d.ts +10 -1
- package/dist/esm/utilities/historyMemo/index.js +62 -20
- package/dist/esm/utilities/index.d.ts +3 -1
- package/dist/esm/utilities/index.js +3 -1
- package/dist/esm/utilities/isEqual.d.ts +5 -5
- package/dist/esm/utilities/isEqual.js +5 -5
- package/dist/esm/utilities/renderToCanvasGPU.js +2 -2
- package/dist/esm/utilities/updatePlaneRestriction.d.ts +2 -0
- package/dist/esm/utilities/updatePlaneRestriction.js +41 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/package.json +4 -3
package/dist/esm/enums/index.js
CHANGED
|
@@ -16,4 +16,5 @@ import * as VideoEnums from './VideoEnums';
|
|
|
16
16
|
import MetadataModules from './MetadataModules';
|
|
17
17
|
import { GenerateImageType } from './GenerateImageType';
|
|
18
18
|
import VoxelManagerEnum from './VoxelManagerEnum';
|
|
19
|
-
|
|
19
|
+
import RenderingEngineModeEnum from './RenderingEngineModeEnum';
|
|
20
|
+
export { Events, BlendModes, CalibrationTypes, InterpolationType, RequestType, ViewportType, OrientationAxis, GeometryType, ContourType, MeshType, VOILUTFunctionType, DynamicOperatorType, ViewportStatus, VideoEnums, MetadataModules, ImageQualityStatus, VoxelManagerEnum, GenerateImageType, RenderingEngineModeEnum, };
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Enums from './enums';
|
|
2
2
|
import * as CONSTANTS from './constants';
|
|
3
3
|
import { Events } from './enums';
|
|
4
|
-
import RenderingEngine from './RenderingEngine';
|
|
4
|
+
import RenderingEngine, { BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine } from './RenderingEngine';
|
|
5
5
|
import createVolumeActor from './RenderingEngine/helpers/createVolumeActor';
|
|
6
6
|
import createVolumeMapper, { convertMapperToNotSharedMapper } from './RenderingEngine/helpers/createVolumeMapper';
|
|
7
7
|
export * from './RenderingEngine/helpers/getOrCreateCanvas';
|
|
@@ -37,4 +37,4 @@ import { cornerstoneStreamingDynamicImageVolumeLoader } from './loaders/cornerst
|
|
|
37
37
|
import { cornerstoneMeshLoader } from './loaders/cornerstoneMeshLoader';
|
|
38
38
|
import { setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports } from './RenderingEngine/helpers';
|
|
39
39
|
export type { Types, IRetrieveConfiguration, RetrieveOptions, RetrieveStage, ImageLoadListener, IImagesLoader, };
|
|
40
|
-
export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
|
|
40
|
+
export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
|
package/dist/esm/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Enums from './enums';
|
|
2
2
|
import * as CONSTANTS from './constants';
|
|
3
3
|
import { Events } from './enums';
|
|
4
|
-
import RenderingEngine from './RenderingEngine';
|
|
4
|
+
import RenderingEngine, { BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, } from './RenderingEngine';
|
|
5
5
|
import createVolumeActor from './RenderingEngine/helpers/createVolumeActor';
|
|
6
6
|
import createVolumeMapper, { convertMapperToNotSharedMapper, } from './RenderingEngine/helpers/createVolumeMapper';
|
|
7
7
|
export * from './RenderingEngine/helpers/getOrCreateCanvas';
|
|
@@ -34,4 +34,4 @@ import { cornerstoneStreamingImageVolumeLoader } from './loaders/cornerstoneStre
|
|
|
34
34
|
import { cornerstoneStreamingDynamicImageVolumeLoader } from './loaders/cornerstoneStreamingDynamicImageVolumeLoader';
|
|
35
35
|
import { cornerstoneMeshLoader } from './loaders/cornerstoneMeshLoader';
|
|
36
36
|
import { setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, } from './RenderingEngine/helpers';
|
|
37
|
-
export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
|
|
37
|
+
export { init, isCornerstoneInitialized, peerImport, resetInitialization, getConfiguration, setConfiguration, getWebWorkerManager, canRenderFloatTextures, Enums, CONSTANTS, Events as EVENTS, Settings, BaseVolumeViewport, VolumeViewport, VolumeViewport3D, Viewport, StackViewport, VideoViewport, WSIViewport, RenderingEngine, BaseRenderingEngine, TiledRenderingEngine, ContextPoolRenderingEngine, ImageVolume, Surface, getRenderingEngine, getRenderingEngines, getEnabledElement, getEnabledElementByIds, getEnabledElements, getEnabledElementByViewportId, createVolumeActor, createVolumeMapper, cache, eventTarget, triggerEvent, imageLoader, registerImageLoader, volumeLoader, metaData, utilities, setVolumesForViewports, addVolumesToViewports, addImageSlicesToViewports, imageLoadPoolManager as requestPoolManager, imageRetrievalPoolManager, imageLoadPoolManager, getShouldUseCPURendering, setUseCPURendering, setPreferSizeOverAccuracy, resetUseCPURendering, geometryLoader, cornerstoneMeshLoader, ProgressiveRetrieveImages, cornerstoneStreamingImageVolumeLoader, cornerstoneStreamingDynamicImageVolumeLoader, StreamingDynamicImageVolume, StreamingImageVolume, convertMapperToNotSharedMapper, version, };
|
package/dist/esm/init.js
CHANGED
|
@@ -3,6 +3,7 @@ let csRenderInitialized = false;
|
|
|
3
3
|
import deepMerge from './utilities/deepMerge';
|
|
4
4
|
import CentralizedWebWorkerManager from './webWorkerManager/webWorkerManager';
|
|
5
5
|
import { getSupportedTextureFormats } from './utilities/textureSupport';
|
|
6
|
+
import { RenderingEngineModeEnum } from './enums';
|
|
6
7
|
const defaultConfig = {
|
|
7
8
|
gpuTier: { tier: 2 },
|
|
8
9
|
isMobile: false,
|
|
@@ -10,6 +11,14 @@ const defaultConfig = {
|
|
|
10
11
|
useCPURendering: false,
|
|
11
12
|
preferSizeOverAccuracy: false,
|
|
12
13
|
strictZSpacingForVolumeViewport: true,
|
|
14
|
+
renderingEngineMode: RenderingEngineModeEnum.ContextPool,
|
|
15
|
+
webGlContextCount: 7,
|
|
16
|
+
volumeRendering: {
|
|
17
|
+
sampleDistanceMultiplier: 1,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
debug: {
|
|
21
|
+
statsOverlay: false,
|
|
13
22
|
},
|
|
14
23
|
peerImport: (moduleId) => null,
|
|
15
24
|
};
|
|
@@ -50,6 +59,9 @@ function init(configuration = config) {
|
|
|
50
59
|
}
|
|
51
60
|
canUseNorm16Texture = _hasNorm16TextureSupport();
|
|
52
61
|
config = deepMerge(defaultConfig, configuration);
|
|
62
|
+
if (config.isMobile) {
|
|
63
|
+
config.rendering.webGlContextCount = 1;
|
|
64
|
+
}
|
|
53
65
|
if (isIOS()) {
|
|
54
66
|
if (configuration.rendering?.preferSizeOverAccuracy) {
|
|
55
67
|
config.rendering.preferSizeOverAccuracy = true;
|
|
@@ -72,7 +72,7 @@ export function createAndCacheDerivedVolume(referencedVolumeId, options) {
|
|
|
72
72
|
const { metadata, dimensions, spacing, origin, direction } = referencedVolume;
|
|
73
73
|
const referencedImageIds = referencedVolume.isDynamicVolume()
|
|
74
74
|
? referencedVolume.getCurrentDimensionGroupImageIds()
|
|
75
|
-
: referencedVolume.imageIds ?? [];
|
|
75
|
+
: (referencedVolume.imageIds ?? []);
|
|
76
76
|
const derivedImages = createAndCacheDerivedImages(referencedImageIds, {
|
|
77
77
|
targetBuffer: options.targetBuffer,
|
|
78
78
|
voxelRepresentation,
|
|
@@ -150,7 +150,7 @@ export function createLocalVolume(volumeId, options = {}) {
|
|
|
150
150
|
const sliceLength = dimensions[0] * dimensions[1];
|
|
151
151
|
const dataType = scalarData
|
|
152
152
|
? scalarData.constructor.name
|
|
153
|
-
: targetBuffer?.type ?? 'Float32Array';
|
|
153
|
+
: (targetBuffer?.type ?? 'Float32Array');
|
|
154
154
|
const totalNumberOfVoxels = sliceLength * dimensions[2];
|
|
155
155
|
let byteLength;
|
|
156
156
|
switch (dataType) {
|
|
@@ -1,12 +1,21 @@
|
|
|
1
|
+
import type { RenderingEngineModeType } from '../types';
|
|
1
2
|
interface Cornerstone3DConfig {
|
|
2
|
-
gpuTier
|
|
3
|
-
tier
|
|
3
|
+
gpuTier?: {
|
|
4
|
+
tier?: number;
|
|
4
5
|
};
|
|
5
|
-
isMobile
|
|
6
|
-
rendering
|
|
7
|
-
preferSizeOverAccuracy
|
|
8
|
-
useCPURendering
|
|
9
|
-
strictZSpacingForVolumeViewport
|
|
6
|
+
isMobile?: boolean;
|
|
7
|
+
rendering?: {
|
|
8
|
+
preferSizeOverAccuracy?: boolean;
|
|
9
|
+
useCPURendering?: boolean;
|
|
10
|
+
strictZSpacingForVolumeViewport?: boolean;
|
|
11
|
+
renderingEngineMode?: RenderingEngineModeType;
|
|
12
|
+
webGlContextCount?: number;
|
|
13
|
+
volumeRendering?: {
|
|
14
|
+
sampleDistanceMultiplier?: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
debug: {
|
|
18
|
+
statsOverlay?: boolean;
|
|
10
19
|
};
|
|
11
20
|
peerImport?: (moduleId: string) => Promise<any>;
|
|
12
21
|
}
|
|
@@ -24,8 +24,15 @@ export interface ReferenceCompatibleOptions {
|
|
|
24
24
|
export type ReferencedImageRange = ViewReference & {
|
|
25
25
|
referencedImageId: string;
|
|
26
26
|
};
|
|
27
|
-
export type
|
|
27
|
+
export type PlaneRestriction = {
|
|
28
|
+
FrameOfReferenceUID: string;
|
|
29
|
+
point: Point3;
|
|
30
|
+
inPlaneVector1?: Point3;
|
|
31
|
+
inPlaneVector2?: Point3;
|
|
32
|
+
};
|
|
33
|
+
export interface ViewReference {
|
|
28
34
|
FrameOfReferenceUID?: string;
|
|
35
|
+
planeRestriction?: PlaneRestriction;
|
|
29
36
|
referencedImageId?: string;
|
|
30
37
|
referencedImageURI?: string;
|
|
31
38
|
multiSliceReference?: ReferencedImageRange;
|
|
@@ -35,7 +42,7 @@ export type ViewReference = {
|
|
|
35
42
|
sliceIndex?: number;
|
|
36
43
|
volumeId?: string;
|
|
37
44
|
bounds?: BoundsLPS;
|
|
38
|
-
}
|
|
45
|
+
}
|
|
39
46
|
export interface ViewPresentation {
|
|
40
47
|
slabThickness?: number;
|
|
41
48
|
rotation?: number;
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { vtkObject } from '@kitware/vtk.js/interfaces';
|
|
2
|
+
import type vtkStreamingOpenGLRenderWindow from '../RenderingEngine/vtkClasses/vtkStreamingOpenGLRenderWindow';
|
|
3
|
+
import type vtkRenderer from '@kitware/vtk.js/Rendering/Core/Renderer';
|
|
4
|
+
import type vtkRenderWindow from '@kitware/vtk.js/Rendering/Core/RenderWindow';
|
|
5
|
+
import type vtkRenderWindowInteractor from '@kitware/vtk.js/Rendering/Core/RenderWindowInteractor';
|
|
6
|
+
import '@kitware/vtk.js/Common/Core/Points';
|
|
7
|
+
import '@kitware/vtk.js/Common/Core/DataArray';
|
|
8
|
+
import '@kitware/vtk.js/Common/DataModel/PolyData';
|
|
9
|
+
import '@kitware/vtk.js/Rendering/Core/Actor';
|
|
10
|
+
import '@kitware/vtk.js/Rendering/Core/Mapper';
|
|
11
|
+
type Viewport = [number, number, number, number];
|
|
12
|
+
interface RendererConfig {
|
|
13
|
+
id: string;
|
|
14
|
+
viewport: Viewport;
|
|
15
|
+
background?: [number, number, number];
|
|
16
|
+
}
|
|
17
|
+
export interface VtkOffscreenMultiRenderWindow extends vtkObject {
|
|
18
|
+
renderWindow: vtkRenderWindow;
|
|
19
|
+
getRenderWindow: () => vtkRenderWindow;
|
|
20
|
+
openGLRenderWindow: ReturnType<typeof vtkStreamingOpenGLRenderWindow.newInstance>;
|
|
21
|
+
getOpenGLRenderWindow: () => ReturnType<typeof vtkStreamingOpenGLRenderWindow.newInstance>;
|
|
22
|
+
interactor: vtkRenderWindowInteractor;
|
|
23
|
+
getInteractor: () => vtkRenderWindowInteractor;
|
|
24
|
+
container: HTMLDivElement | null;
|
|
25
|
+
getContainer: () => HTMLDivElement | null;
|
|
26
|
+
addRenderer: (config: RendererConfig) => void;
|
|
27
|
+
removeRenderer: (id: string) => void;
|
|
28
|
+
getRenderer: (id: string) => vtkRenderer;
|
|
29
|
+
getRenderers: () => Array<{
|
|
30
|
+
id: string;
|
|
31
|
+
renderer: vtkRenderer;
|
|
32
|
+
}>;
|
|
33
|
+
resize: () => void;
|
|
34
|
+
setContainer: (el: HTMLDivElement) => void;
|
|
35
|
+
destroy: () => void;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
@@ -101,4 +101,6 @@ import type { IBaseVolumeViewport } from './IBaseVolumeViewport';
|
|
|
101
101
|
import type ScrollOptions from './ScrollOptions';
|
|
102
102
|
import type JumpToSliceOptions from './JumpToSliceOptions';
|
|
103
103
|
import type GeometryLoaderFn from './GeometryLoaderFn';
|
|
104
|
-
|
|
104
|
+
import type { RenderingEngineModeType } from './RenderingEngineMode';
|
|
105
|
+
import type { VtkOffscreenMultiRenderWindow } from './VtkOffscreenMultiRenderWindow';
|
|
106
|
+
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, PublicMeshData, MeshData, IMesh, RGB, ColormapPublic, ColormapRegistration, PixelDataTypedArray, PixelDataTypedArrayString, ImagePixelModule, ImagePlaneModule, AffineMatrix, ImageLoadListener, InternalVideoCamera, VideoViewportInput, BoundsIJK, BoundsLPS, Color, ColorLUT, VolumeProps, IImageFrame, DicomDateObject, DicomTimeObject, GeneralSeriesModuleMetadata, ImagePlaneModuleMetadata, SopCommonModuleMetadata, ImagePixelModuleMetadata, PatientStudyModuleMetadata, TransferSyntaxMetadata, LocalVolumeOptions, IVoxelManager, IRLEVoxelMap, RLERun, ViewportInput, ImageLoadRequests, IBaseVolumeViewport, GeometryLoaderFn, ScrollOptions, JumpToSliceOptions, Memo, HistoryMemo, VoxelManager, RLEVoxelMap, RenderingEngineModeType, VtkOffscreenMultiRenderWindow, };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function asArray<T>(item: T | T[]): T[];
|
|
@@ -51,10 +51,12 @@ function findMatchingColormap(rgbPoints, actor) {
|
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
const result = {
|
|
55
55
|
name: matchedColormap.Name,
|
|
56
|
-
opacity,
|
|
56
|
+
...(Array.isArray(opacity) && opacity.length > 0 && { opacity }),
|
|
57
|
+
...(typeof opacity === 'number' && { opacity }),
|
|
57
58
|
};
|
|
59
|
+
return result;
|
|
58
60
|
}
|
|
59
61
|
export function setColorMapTransferFunctionForVolumeActor(volumeInfo) {
|
|
60
62
|
const { volumeActor, preset, opacity = 0.9, threshold = null, colorRange = [0, 5], } = volumeInfo;
|
|
@@ -72,7 +72,10 @@ function calculateUSPixelSpacing(instance) {
|
|
|
72
72
|
const { PhysicalDeltaX, PhysicalDeltaY } = isArrayOfSequences
|
|
73
73
|
? SequenceOfUltrasoundRegions[0]
|
|
74
74
|
: SequenceOfUltrasoundRegions;
|
|
75
|
-
const USPixelSpacing = [
|
|
75
|
+
const USPixelSpacing = [
|
|
76
|
+
Math.abs(PhysicalDeltaX) * 10,
|
|
77
|
+
Math.abs(PhysicalDeltaY) * 10,
|
|
78
|
+
];
|
|
76
79
|
return {
|
|
77
80
|
PixelSpacing: USPixelSpacing,
|
|
78
81
|
};
|
|
@@ -14,12 +14,21 @@ export declare class HistoryMemo {
|
|
|
14
14
|
private redoAvailable;
|
|
15
15
|
private undoAvailable;
|
|
16
16
|
private ring;
|
|
17
|
+
private isRecordingGrouped;
|
|
17
18
|
constructor(label?: string, size?: number);
|
|
18
19
|
get size(): number;
|
|
19
20
|
set size(newSize: number);
|
|
21
|
+
get canUndo(): boolean;
|
|
22
|
+
get canRedo(): boolean;
|
|
20
23
|
undo(items?: number): void;
|
|
21
|
-
undoIf(condition: (item: Memo) => boolean): boolean;
|
|
24
|
+
undoIf(condition: (item: Memo | Memo[]) => boolean): boolean;
|
|
25
|
+
private dispatchHistoryEvent;
|
|
22
26
|
redo(items?: number): void;
|
|
27
|
+
private initializeGroupItem;
|
|
28
|
+
startGroupRecording(): void;
|
|
29
|
+
private rollbackUnusedGroupItem;
|
|
30
|
+
endGroupRecording(): void;
|
|
31
|
+
private pushGrouped;
|
|
23
32
|
push(item: Memo | Memoable): Memo;
|
|
24
33
|
}
|
|
25
34
|
declare const DefaultHistoryMemo: HistoryMemo;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import eventTarget from '../../eventTarget';
|
|
2
|
+
import { asArray } from '../asArray';
|
|
2
3
|
const Events = {
|
|
3
4
|
HISTORY_UNDO: 'CORNERSTONE_TOOLS_HISTORY_UNDO',
|
|
4
5
|
HISTORY_REDO: 'CORNERSTONE_TOOLS_HISTORY_REDO',
|
|
@@ -9,6 +10,7 @@ export class HistoryMemo {
|
|
|
9
10
|
this.redoAvailable = 0;
|
|
10
11
|
this.undoAvailable = 0;
|
|
11
12
|
this.ring = new Array();
|
|
13
|
+
this.isRecordingGrouped = false;
|
|
12
14
|
this.label = label;
|
|
13
15
|
this._size = size;
|
|
14
16
|
}
|
|
@@ -22,19 +24,18 @@ export class HistoryMemo {
|
|
|
22
24
|
this.redoAvailable = 0;
|
|
23
25
|
this.undoAvailable = 0;
|
|
24
26
|
}
|
|
27
|
+
get canUndo() {
|
|
28
|
+
return this.undoAvailable > 0;
|
|
29
|
+
}
|
|
30
|
+
get canRedo() {
|
|
31
|
+
return this.redoAvailable > 0;
|
|
32
|
+
}
|
|
25
33
|
undo(items = 1) {
|
|
26
34
|
while (items > 0 && this.undoAvailable > 0) {
|
|
27
35
|
const item = this.ring[this.position];
|
|
28
|
-
item.
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
detail: {
|
|
32
|
-
isUndo: true,
|
|
33
|
-
id: item.id,
|
|
34
|
-
operationType: item.operationType || 'annotation',
|
|
35
|
-
memo: item,
|
|
36
|
-
},
|
|
37
|
-
}));
|
|
36
|
+
for (const subitem of asArray(item).reverse()) {
|
|
37
|
+
subitem.restoreMemo(true);
|
|
38
|
+
this.dispatchHistoryEvent({ item: subitem, isUndo: true });
|
|
38
39
|
}
|
|
39
40
|
items--;
|
|
40
41
|
this.redoAvailable++;
|
|
@@ -49,20 +50,25 @@ export class HistoryMemo {
|
|
|
49
50
|
}
|
|
50
51
|
return false;
|
|
51
52
|
}
|
|
53
|
+
dispatchHistoryEvent({ item, isUndo }) {
|
|
54
|
+
if (item.id) {
|
|
55
|
+
eventTarget.dispatchEvent(new CustomEvent(isUndo ? Events.HISTORY_UNDO : Events.HISTORY_REDO, {
|
|
56
|
+
detail: {
|
|
57
|
+
isUndo,
|
|
58
|
+
id: item.id,
|
|
59
|
+
operationType: item.operationType || 'annotation',
|
|
60
|
+
memo: item,
|
|
61
|
+
},
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
52
65
|
redo(items = 1) {
|
|
53
66
|
while (items > 0 && this.redoAvailable > 0) {
|
|
54
67
|
const newPosition = (this.position + 1) % this.size;
|
|
55
68
|
const item = this.ring[newPosition];
|
|
56
|
-
item.
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
detail: {
|
|
60
|
-
isUndo: false,
|
|
61
|
-
id: item.id,
|
|
62
|
-
operationType: item.operationType || 'annotation',
|
|
63
|
-
memo: item,
|
|
64
|
-
},
|
|
65
|
-
}));
|
|
69
|
+
for (const subitem of asArray(item).reverse()) {
|
|
70
|
+
subitem.restoreMemo(false);
|
|
71
|
+
this.dispatchHistoryEvent({ item: subitem, isUndo: false });
|
|
66
72
|
}
|
|
67
73
|
items--;
|
|
68
74
|
this.position = newPosition;
|
|
@@ -70,6 +76,39 @@ export class HistoryMemo {
|
|
|
70
76
|
this.redoAvailable--;
|
|
71
77
|
}
|
|
72
78
|
}
|
|
79
|
+
initializeGroupItem() {
|
|
80
|
+
this.redoAvailable = 0;
|
|
81
|
+
if (this.undoAvailable < this._size) {
|
|
82
|
+
this.undoAvailable++;
|
|
83
|
+
}
|
|
84
|
+
this.position = (this.position + 1) % this._size;
|
|
85
|
+
this.ring[this.position] = [];
|
|
86
|
+
}
|
|
87
|
+
startGroupRecording() {
|
|
88
|
+
this.isRecordingGrouped = true;
|
|
89
|
+
this.initializeGroupItem();
|
|
90
|
+
}
|
|
91
|
+
rollbackUnusedGroupItem() {
|
|
92
|
+
this.ring[this.position] = undefined;
|
|
93
|
+
this.position = (this.position - 1) % this._size;
|
|
94
|
+
this.undoAvailable--;
|
|
95
|
+
}
|
|
96
|
+
endGroupRecording() {
|
|
97
|
+
this.isRecordingGrouped = false;
|
|
98
|
+
const lastItem = this.ring[this.position];
|
|
99
|
+
const lastItemIsEmpty = Array.isArray(lastItem) && lastItem.length === 0;
|
|
100
|
+
if (lastItemIsEmpty) {
|
|
101
|
+
this.rollbackUnusedGroupItem();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
pushGrouped(memo) {
|
|
105
|
+
const lastMemo = this.ring[this.position];
|
|
106
|
+
if (Array.isArray(lastMemo)) {
|
|
107
|
+
lastMemo.push(memo);
|
|
108
|
+
return memo;
|
|
109
|
+
}
|
|
110
|
+
throw new Error('Last item should be an array for grouped memos.');
|
|
111
|
+
}
|
|
73
112
|
push(item) {
|
|
74
113
|
if (!item) {
|
|
75
114
|
return;
|
|
@@ -80,6 +119,9 @@ export class HistoryMemo {
|
|
|
80
119
|
if (!memo) {
|
|
81
120
|
return;
|
|
82
121
|
}
|
|
122
|
+
if (this.isRecordingGrouped) {
|
|
123
|
+
return this.pushGrouped(memo);
|
|
124
|
+
}
|
|
83
125
|
this.redoAvailable = 0;
|
|
84
126
|
if (this.undoAvailable < this._size) {
|
|
85
127
|
this.undoAvailable++;
|
|
@@ -93,6 +93,8 @@ import calculateSpacingBetweenImageIds from './calculateSpacingBetweenImageIds';
|
|
|
93
93
|
export * as logger from './logger';
|
|
94
94
|
import { calculateNeighborhoodStats } from './calculateNeighborhoodStats';
|
|
95
95
|
import getPixelSpacingInformation from './getPixelSpacingInformation';
|
|
96
|
+
import { asArray } from './asArray';
|
|
97
|
+
export { updatePlaneRestriction } from './updatePlaneRestriction';
|
|
96
98
|
declare const getViewportModality: (viewport: IViewport, volumeId?: string) => string;
|
|
97
99
|
export * from './isEqual';
|
|
98
|
-
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, 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, 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, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, };
|
|
100
|
+
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, 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, 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, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, asArray, };
|
|
@@ -94,6 +94,8 @@ import calculateSpacingBetweenImageIds from './calculateSpacingBetweenImageIds';
|
|
|
94
94
|
export * as logger from './logger';
|
|
95
95
|
import { calculateNeighborhoodStats } from './calculateNeighborhoodStats';
|
|
96
96
|
import getPixelSpacingInformation from './getPixelSpacingInformation';
|
|
97
|
+
import { asArray } from './asArray';
|
|
98
|
+
export { updatePlaneRestriction } from './updatePlaneRestriction';
|
|
97
99
|
const getViewportModality = (viewport, volumeId) => _getViewportModality(viewport, volumeId, cache.getVolume);
|
|
98
100
|
export * from './isEqual';
|
|
99
|
-
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, 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, 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, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, };
|
|
101
|
+
export { FrameRange, eventListener, csUtils as invertRgbTransferFunction, createSigmoidRGBTransferFunction, getVoiFromSigmoidRGBTransferFunction, createLinearRGBTransferFunction, scaleRgbTransferFunction, triggerEvent, imageIdToURI, fnv1aHash, calibratedPixelSpacingMetadataProvider, clamp, uuidv4, getMinMax, getRuntimeId, isOpposite, getViewportModality, windowLevel, convertToGrayscale, 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, 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, pointInShapeCallback, deepEqual, jumpToSlice, scroll, clip, transformWorldToIndexContinuous, createSubVolume, getVolumeDirectionVectors, calculateSpacingBetweenImageIds, getImageDataMetadata, buildMetadata, calculateNeighborhoodStats, getPixelSpacingInformation, asArray, };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
declare const isEqualNegative: <ValueType>(v1: ValueType, v2: ValueType, tolerance?: any) => boolean;
|
|
3
|
-
declare const isEqualAbs: <ValueType>(v1: ValueType, v2: ValueType, tolerance?: any) => boolean;
|
|
4
|
-
declare function isNumber(n: number[] | number): boolean;
|
|
5
|
-
export
|
|
1
|
+
export declare function isEqual<ValueType>(v1: ValueType, v2: ValueType, tolerance?: number): boolean;
|
|
2
|
+
export declare const isEqualNegative: <ValueType>(v1: ValueType, v2: ValueType, tolerance?: any) => boolean;
|
|
3
|
+
export declare const isEqualAbs: <ValueType>(v1: ValueType, v2: ValueType, tolerance?: any) => boolean;
|
|
4
|
+
export declare function isNumber(n: number[] | number): boolean;
|
|
5
|
+
export default isEqual;
|
|
@@ -23,7 +23,7 @@ function isNumberArrayLike(value) {
|
|
|
23
23
|
value.length > 0 &&
|
|
24
24
|
typeof value[0] === 'number');
|
|
25
25
|
}
|
|
26
|
-
export
|
|
26
|
+
export function isEqual(v1, v2, tolerance = 1e-5) {
|
|
27
27
|
if (typeof v1 !== typeof v2 || v1 === null || v2 === null) {
|
|
28
28
|
return false;
|
|
29
29
|
}
|
|
@@ -37,12 +37,12 @@ export default function isEqual(v1, v2, tolerance = 1e-5) {
|
|
|
37
37
|
}
|
|
38
38
|
const negative = (v) => typeof v === 'number' ? -v : v?.map ? v.map(negative) : !v;
|
|
39
39
|
const abs = (v) => typeof v === 'number' ? Math.abs(v) : v?.map ? v.map(abs) : v;
|
|
40
|
-
const isEqualNegative = (v1, v2, tolerance = undefined) => isEqual(v1, negative(v2), tolerance);
|
|
41
|
-
const isEqualAbs = (v1, v2, tolerance = undefined) => isEqual(abs(v1), abs(v2), tolerance);
|
|
42
|
-
function isNumber(n) {
|
|
40
|
+
export const isEqualNegative = (v1, v2, tolerance = undefined) => isEqual(v1, negative(v2), tolerance);
|
|
41
|
+
export const isEqualAbs = (v1, v2, tolerance = undefined) => isEqual(abs(v1), abs(v2), tolerance);
|
|
42
|
+
export function isNumber(n) {
|
|
43
43
|
if (Array.isArray(n)) {
|
|
44
44
|
return isNumber(n[0]);
|
|
45
45
|
}
|
|
46
46
|
return isFinite(n) && !isNaN(n);
|
|
47
47
|
}
|
|
48
|
-
export
|
|
48
|
+
export default isEqual;
|
|
@@ -2,7 +2,7 @@ import { vec3 } from 'gl-matrix';
|
|
|
2
2
|
import getOrCreateCanvas, { EPSILON, } from '../RenderingEngine/helpers/getOrCreateCanvas';
|
|
3
3
|
import { ViewportType, Events } from '../enums';
|
|
4
4
|
import { getRenderingEngine } from '../RenderingEngine/getRenderingEngine';
|
|
5
|
-
import
|
|
5
|
+
import TiledRenderingEngine from '../RenderingEngine/TiledRenderingEngine';
|
|
6
6
|
import isPTPrescaledWithSUV from './isPTPrescaledWithSUV';
|
|
7
7
|
export default function renderToCanvasGPU(canvas, imageOrVolume, modality = undefined, renderingEngineId = '_thumbnails', viewportOptions = {
|
|
8
8
|
displayArea: { imageArea: [1, 1] },
|
|
@@ -31,7 +31,7 @@ export default function renderToCanvasGPU(canvas, imageOrVolume, modality = unde
|
|
|
31
31
|
element.setAttribute('viewport-id-for-remove', uniqueId);
|
|
32
32
|
const temporaryCanvas = getOrCreateCanvas(element);
|
|
33
33
|
const renderingEngine = getRenderingEngine(renderingEngineId) ||
|
|
34
|
-
new
|
|
34
|
+
new TiledRenderingEngine(renderingEngineId);
|
|
35
35
|
let viewport = renderingEngine.getViewport(viewportId);
|
|
36
36
|
if (!viewport) {
|
|
37
37
|
const viewportInput = {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { isEqual } from '../utilities/isEqual';
|
|
2
|
+
import { vec3 } from 'gl-matrix';
|
|
3
|
+
const ORTHOGONAL_TEST_VALUE = 0.95;
|
|
4
|
+
export function updatePlaneRestriction(points, reference) {
|
|
5
|
+
if (!points?.length || !reference.FrameOfReferenceUID) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
reference.planeRestriction ||= {
|
|
9
|
+
FrameOfReferenceUID: reference.FrameOfReferenceUID,
|
|
10
|
+
point: points[0],
|
|
11
|
+
inPlaneVector1: null,
|
|
12
|
+
inPlaneVector2: null,
|
|
13
|
+
};
|
|
14
|
+
const { planeRestriction } = reference;
|
|
15
|
+
if (points.length === 1) {
|
|
16
|
+
planeRestriction.inPlaneVector1 = null;
|
|
17
|
+
planeRestriction.inPlaneVector2 = null;
|
|
18
|
+
return planeRestriction;
|
|
19
|
+
}
|
|
20
|
+
const v1 = vec3.sub(vec3.create(), points[0], points[Math.floor(points.length / 2)]);
|
|
21
|
+
vec3.normalize(v1, v1);
|
|
22
|
+
planeRestriction.inPlaneVector1 = v1;
|
|
23
|
+
planeRestriction.inPlaneVector2 = null;
|
|
24
|
+
const n = points.length;
|
|
25
|
+
if (n > 2) {
|
|
26
|
+
for (let i = Math.floor(n / 3); i < n; i++) {
|
|
27
|
+
const testVector = vec3.sub(vec3.create(), points[i], points[0]);
|
|
28
|
+
const length = vec3.length(testVector);
|
|
29
|
+
if (isEqual(length, 0)) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (vec3.dot(testVector, planeRestriction.inPlaneVector1) <
|
|
33
|
+
length * ORTHOGONAL_TEST_VALUE) {
|
|
34
|
+
vec3.normalize(testVector, testVector);
|
|
35
|
+
planeRestriction.inPlaneVector2 = testVector;
|
|
36
|
+
return planeRestriction;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return planeRestriction;
|
|
41
|
+
}
|
package/dist/esm/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "
|
|
1
|
+
export declare const version = "4.0.0-beta.4";
|
package/dist/esm/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '
|
|
1
|
+
export const version = '4.0.0-beta.4';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cornerstonejs/core",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.4",
|
|
4
4
|
"description": "Cornerstone3D Core",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "./dist/esm/index.d.ts",
|
|
@@ -76,8 +76,8 @@
|
|
|
76
76
|
"build": "yarn run build:esm",
|
|
77
77
|
"build:all": "yarn run build:esm",
|
|
78
78
|
"dev": "tsc --project ./tsconfig.json --watch",
|
|
79
|
-
"format-check": "npx eslint ./src --quiet",
|
|
80
79
|
"api-check": "api-extractor --debug run ",
|
|
80
|
+
"lint": "oxlint .",
|
|
81
81
|
"prepublishOnly": "yarn run build"
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
@@ -96,5 +96,6 @@
|
|
|
96
96
|
"funding": {
|
|
97
97
|
"type": "individual",
|
|
98
98
|
"url": "https://ohif.org/donate"
|
|
99
|
-
}
|
|
99
|
+
},
|
|
100
|
+
"gitHead": "bd2215216a08cc0c953c6523b16892b3aee6f9be"
|
|
100
101
|
}
|