@cornerstonejs/core 0.36.3 → 0.36.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/dist/cjs/utilities/getSliceRange.js +2 -1
- package/dist/cjs/utilities/getSliceRange.js.map +1 -1
- package/dist/esm/utilities/getSliceRange.js +2 -1
- package/dist/esm/utilities/getSliceRange.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +4 -3
- package/src/RenderingEngine/BaseVolumeViewport.ts +847 -0
- package/src/RenderingEngine/RenderingEngine.ts +1364 -0
- package/src/RenderingEngine/StackViewport.ts +2690 -0
- package/src/RenderingEngine/Viewport.ts +1244 -0
- package/src/RenderingEngine/VolumeViewport.ts +420 -0
- package/src/RenderingEngine/VolumeViewport3D.ts +42 -0
- package/src/RenderingEngine/getRenderingEngine.ts +34 -0
- package/src/RenderingEngine/helpers/addVolumesToViewports.ts +52 -0
- package/src/RenderingEngine/helpers/cpuFallback/colors/colormap.ts +343 -0
- package/src/RenderingEngine/helpers/cpuFallback/colors/index.ts +4 -0
- package/src/RenderingEngine/helpers/cpuFallback/colors/lookupTable.ts +469 -0
- package/src/RenderingEngine/helpers/cpuFallback/drawImageSync.ts +58 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/calculateTransform.ts +136 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/canvasToPixel.ts +25 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/computeAutoVoi.ts +47 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/correctShift.ts +38 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/createViewport.ts +64 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/doesImageNeedToBeRendered.ts +36 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/fitToWindow.ts +22 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/generateColorLUT.ts +60 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/generateLut.ts +83 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/getDefaultViewport.ts +88 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/getImageFitScale.ts +52 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/getImageSize.ts +55 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/getLut.ts +53 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/getModalityLut.ts +55 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/getTransform.ts +17 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/getVOILut.ts +74 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/initializeRenderCanvas.ts +37 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/lutMatches.ts +21 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/now.ts +13 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/pixelToCanvas.ts +22 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/renderColorImage.ts +193 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/renderGrayscaleImage.ts +166 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.ts +203 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/resetCamera.ts +32 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/resize.ts +109 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/saveLastRendered.ts +36 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/setDefaultViewport.ts +17 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/setToPixelCoordinateSystem.ts +32 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedColorPixelDataToCanvasImageData.ts +58 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageData.ts +76 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataColorLUT.ts +60 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPET.ts +50 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUT.ts +66 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUTPET.ts +68 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataRGBA.ts +81 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/storedRGBAPixelDataToCanvasImageData.ts +56 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/transform.ts +126 -0
- package/src/RenderingEngine/helpers/cpuFallback/rendering/validator.ts +31 -0
- package/src/RenderingEngine/helpers/createVolumeActor.ts +103 -0
- package/src/RenderingEngine/helpers/createVolumeMapper.ts +37 -0
- package/src/RenderingEngine/helpers/getOrCreateCanvas.ts +58 -0
- package/src/RenderingEngine/helpers/index.ts +15 -0
- package/src/RenderingEngine/helpers/isRgbaSourceRgbDest.ts +1 -0
- package/src/RenderingEngine/helpers/setDefaultVolumeVOI.ts +227 -0
- package/src/RenderingEngine/helpers/setVolumesForViewports.ts +52 -0
- package/src/RenderingEngine/helpers/viewportTypeToViewportClass.ts +14 -0
- package/src/RenderingEngine/helpers/viewportTypeUsesCustomRenderingPipeline.ts +7 -0
- package/src/RenderingEngine/helpers/volumeNewImageEventDispatcher.ts +75 -0
- package/src/RenderingEngine/index.ts +23 -0
- package/src/RenderingEngine/renderingEngineCache.ts +43 -0
- package/src/RenderingEngine/vtkClasses/index.js +11 -0
- package/src/RenderingEngine/vtkClasses/vtkOffscreenMultiRenderWindow.js +149 -0
- package/src/RenderingEngine/vtkClasses/vtkSharedVolumeMapper.js +52 -0
- package/src/RenderingEngine/vtkClasses/vtkSlabCamera.d.ts +781 -0
- package/src/RenderingEngine/vtkClasses/vtkSlabCamera.js +155 -0
- package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLRenderWindow.js +47 -0
- package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLTexture.js +272 -0
- package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLViewNodeFactory.js +159 -0
- package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +319 -0
- package/src/Settings.ts +294 -0
- package/src/cache/cache.ts +854 -0
- package/src/cache/classes/Contour.ts +70 -0
- package/src/cache/classes/ContourSet.ts +151 -0
- package/src/cache/classes/ImageVolume.ts +155 -0
- package/src/cache/index.ts +5 -0
- package/src/constants/cpuColormaps.ts +1537 -0
- package/src/constants/epsilon.ts +3 -0
- package/src/constants/index.ts +13 -0
- package/src/constants/mprCameraValues.ts +20 -0
- package/src/constants/rendering.ts +8 -0
- package/src/constants/viewportPresets.ts +357 -0
- package/src/enums/BlendModes.ts +23 -0
- package/src/enums/ContourType.ts +6 -0
- package/src/enums/Events.ts +196 -0
- package/src/enums/GeometryType.ts +5 -0
- package/src/enums/InterpolationType.ts +13 -0
- package/src/enums/OrientationAxis.ts +8 -0
- package/src/enums/RequestType.ts +13 -0
- package/src/enums/SharedArrayBufferModes.ts +11 -0
- package/src/enums/VOILUTFunctionType.ts +10 -0
- package/src/enums/ViewportType.ts +21 -0
- package/src/enums/index.ts +23 -0
- package/src/eventTarget.ts +67 -0
- package/src/getEnabledElement.ts +105 -0
- package/src/global.ts +8 -0
- package/src/index.ts +123 -0
- package/src/init.ts +247 -0
- package/src/loaders/geometryLoader.ts +108 -0
- package/src/loaders/imageLoader.ts +298 -0
- package/src/loaders/volumeLoader.ts +477 -0
- package/src/metaData.ts +84 -0
- package/src/requestPool/imageLoadPoolManager.ts +43 -0
- package/src/requestPool/imageRetrievalPoolManager.ts +25 -0
- package/src/requestPool/requestPoolManager.ts +329 -0
- package/src/types/ActorSliceRange.ts +17 -0
- package/src/types/CPUFallbackColormap.ts +23 -0
- package/src/types/CPUFallbackColormapData.ts +12 -0
- package/src/types/CPUFallbackColormapsData.ts +7 -0
- package/src/types/CPUFallbackEnabledElement.ts +71 -0
- package/src/types/CPUFallbackLUT.ts +5 -0
- package/src/types/CPUFallbackLookupTable.ts +17 -0
- package/src/types/CPUFallbackRenderingTools.ts +25 -0
- package/src/types/CPUFallbackTransform.ts +16 -0
- package/src/types/CPUFallbackViewport.ts +29 -0
- package/src/types/CPUFallbackViewportDisplayedArea.ts +15 -0
- package/src/types/CPUIImageData.ts +47 -0
- package/src/types/ContourData.ts +19 -0
- package/src/types/Cornerstone3DConfig.ts +31 -0
- package/src/types/CustomEventType.ts +14 -0
- package/src/types/EventTypes.ts +403 -0
- package/src/types/FlipDirection.ts +9 -0
- package/src/types/IActor.ts +23 -0
- package/src/types/ICache.ts +28 -0
- package/src/types/ICachedGeometry.ts +13 -0
- package/src/types/ICachedImage.ts +13 -0
- package/src/types/ICachedVolume.ts +12 -0
- package/src/types/ICamera.ts +36 -0
- package/src/types/IContour.ts +18 -0
- package/src/types/IContourSet.ts +56 -0
- package/src/types/IDynamicImageVolume.ts +18 -0
- package/src/types/IEnabledElement.ts +21 -0
- package/src/types/IGeometry.ts +12 -0
- package/src/types/IImage.ts +113 -0
- package/src/types/IImageData.ts +45 -0
- package/src/types/IImageVolume.ts +78 -0
- package/src/types/ILoadObject.ts +36 -0
- package/src/types/IRegisterImageLoader.ts +10 -0
- package/src/types/IRenderingEngine.ts +28 -0
- package/src/types/IStackViewport.ts +138 -0
- package/src/types/IStreamingImageVolume.ts +13 -0
- package/src/types/IStreamingVolumeProperties.ts +14 -0
- package/src/types/IViewport.ts +149 -0
- package/src/types/IViewportId.ts +9 -0
- package/src/types/IVolume.ts +45 -0
- package/src/types/IVolumeInput.ts +36 -0
- package/src/types/IVolumeViewport.ts +141 -0
- package/src/types/ImageLoaderFn.ts +16 -0
- package/src/types/ImageSliceData.ts +6 -0
- package/src/types/Mat3.ts +16 -0
- package/src/types/Metadata.ts +39 -0
- package/src/types/OrientationVectors.ts +36 -0
- package/src/types/Plane.ts +6 -0
- package/src/types/Point2.ts +6 -0
- package/src/types/Point3.ts +6 -0
- package/src/types/Point4.ts +6 -0
- package/src/types/ScalingParameters.ts +27 -0
- package/src/types/StackViewportProperties.ts +25 -0
- package/src/types/TransformMatrix2D.ts +4 -0
- package/src/types/ViewportInputOptions.ts +21 -0
- package/src/types/ViewportPreset.ts +14 -0
- package/src/types/VolumeLoaderFn.ts +18 -0
- package/src/types/VolumeViewportProperties.ts +14 -0
- package/src/types/index.ts +157 -0
- package/src/types/voi.ts +15 -0
- package/src/utilities/actorCheck.ts +24 -0
- package/src/utilities/applyPreset.ts +132 -0
- package/src/utilities/calculateViewportsSpatialRegistration.ts +74 -0
- package/src/utilities/calibratedPixelSpacingMetadataProvider.ts +38 -0
- package/src/utilities/createFloat32SharedArray.ts +45 -0
- package/src/utilities/createInt16SharedArray.ts +43 -0
- package/src/utilities/createLinearRGBTransferFunction.ts +22 -0
- package/src/utilities/createSigmoidRGBTransferFunction.ts +63 -0
- package/src/utilities/createUInt16SharedArray.ts +43 -0
- package/src/utilities/createUint8SharedArray.ts +45 -0
- package/src/utilities/deepFreeze.ts +19 -0
- package/src/utilities/deepMerge.ts +81 -0
- package/src/utilities/getClosestImageId.ts +80 -0
- package/src/utilities/getClosestStackImageIndexForPoint.ts +116 -0
- package/src/utilities/getImageSliceDataForVolumeViewport.ts +61 -0
- package/src/utilities/getMinMax.ts +31 -0
- package/src/utilities/getRuntimeId.ts +54 -0
- package/src/utilities/getScalarDataType.ts +31 -0
- package/src/utilities/getScalingParameters.ts +35 -0
- package/src/utilities/getSliceRange.ts +86 -0
- package/src/utilities/getSpacingInNormalDirection.ts +44 -0
- package/src/utilities/getTargetVolumeAndSpacingInNormalDir.ts +126 -0
- package/src/utilities/getViewportImageCornersInWorld.ts +102 -0
- package/src/utilities/getViewportsWithImageURI.ts +46 -0
- package/src/utilities/getViewportsWithVolumeId.ts +38 -0
- package/src/utilities/getVoiFromSigmoidRGBTransferFunction.ts +23 -0
- package/src/utilities/getVolumeActorCorners.ts +24 -0
- package/src/utilities/getVolumeSliceRangeInfo.ts +52 -0
- package/src/utilities/getVolumeViewportScrollInfo.ts +32 -0
- package/src/utilities/getVolumeViewportsContainingSameVolumes.ts +58 -0
- package/src/utilities/hasNaNValues.ts +12 -0
- package/src/utilities/imageIdToURI.ts +10 -0
- package/src/utilities/imageToWorldCoords.ts +54 -0
- package/src/utilities/index.ts +100 -0
- package/src/utilities/indexWithinDimensions.ts +27 -0
- package/src/utilities/invertRgbTransferFunction.ts +36 -0
- package/src/utilities/isEqual.ts +27 -0
- package/src/utilities/isOpposite.ts +23 -0
- package/src/utilities/isTypedArray.ts +20 -0
- package/src/utilities/loadImageToCanvas.ts +80 -0
- package/src/utilities/planar.ts +91 -0
- package/src/utilities/renderToCanvas.ts +32 -0
- package/src/utilities/scaleRgbTransferFunction.ts +37 -0
- package/src/utilities/snapFocalPointToSlice.ts +78 -0
- package/src/utilities/spatialRegistrationMetadataProvider.ts +50 -0
- package/src/utilities/transformWorldToIndex.ts +16 -0
- package/src/utilities/triggerEvent.ts +38 -0
- package/src/utilities/uuidv4.ts +13 -0
- package/src/utilities/windowLevel.ts +39 -0
- package/src/utilities/worldToImageCoords.ts +64 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interpolation types for image rendering
|
|
3
|
+
*/
|
|
4
|
+
enum VOILUTFunctionType {
|
|
5
|
+
LINEAR = 'LINEAR',
|
|
6
|
+
SAMPLED_SIGMOID = 'SIGMOID', // SIGMOID is sampled in 1024 even steps so we call it SAMPLED_SIGMOID
|
|
7
|
+
// EXACT_LINEAR = 'EXACT_LINEAR', TODO: Add EXACT_LINEAR option from DICOM NEMA
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default VOILUTFunctionType;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ViewportType enum for cornerstone-render which defines the type of viewport.
|
|
3
|
+
* It can be either STACK, PERSPECTIVE, ORTHOGRAPHIC.
|
|
4
|
+
*/
|
|
5
|
+
enum ViewportType {
|
|
6
|
+
/**
|
|
7
|
+
* - Suitable for rendering a stack of images, that might or might not belong to the same image.
|
|
8
|
+
* - Stack can include 2D images of different shapes, size and direction
|
|
9
|
+
*/
|
|
10
|
+
STACK = 'stack',
|
|
11
|
+
/**
|
|
12
|
+
* - Suitable for rendering a volumetric data which is considered as one 3D image.
|
|
13
|
+
* - Having a VolumeViewport enables Multi-planar reformation or reconstruction (MPR) by design, in which you can visualize the volume from various different orientations without addition of performance costs.
|
|
14
|
+
*/
|
|
15
|
+
ORTHOGRAPHIC = 'orthographic',
|
|
16
|
+
/** Perspective Viewport: Not Implemented yet */
|
|
17
|
+
PERSPECTIVE = 'perspective',
|
|
18
|
+
VOLUME_3D = 'volume3d',
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export default ViewportType;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import Events from './Events';
|
|
2
|
+
import RequestType from './RequestType';
|
|
3
|
+
import ViewportType from './ViewportType';
|
|
4
|
+
import InterpolationType from './InterpolationType';
|
|
5
|
+
import BlendModes from './BlendModes';
|
|
6
|
+
import OrientationAxis from './OrientationAxis';
|
|
7
|
+
import SharedArrayBufferModes from './SharedArrayBufferModes';
|
|
8
|
+
import GeometryType from './GeometryType';
|
|
9
|
+
import ContourType from './ContourType';
|
|
10
|
+
import VOILUTFunctionType from './VOILUTFunctionType';
|
|
11
|
+
|
|
12
|
+
export {
|
|
13
|
+
Events,
|
|
14
|
+
BlendModes,
|
|
15
|
+
InterpolationType,
|
|
16
|
+
RequestType,
|
|
17
|
+
ViewportType,
|
|
18
|
+
OrientationAxis,
|
|
19
|
+
SharedArrayBufferModes,
|
|
20
|
+
GeometryType,
|
|
21
|
+
ContourType,
|
|
22
|
+
VOILUTFunctionType,
|
|
23
|
+
};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EventTarget - Provides the [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) interface
|
|
3
|
+
*/
|
|
4
|
+
class CornerstoneEventTarget implements EventTarget {
|
|
5
|
+
private listeners;
|
|
6
|
+
|
|
7
|
+
constructor() {
|
|
8
|
+
this.listeners = {};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public reset() {
|
|
12
|
+
this.listeners = {};
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public addEventListener(type, callback) {
|
|
16
|
+
if (!this.listeners[type]) {
|
|
17
|
+
this.listeners[type] = [];
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// prevent multiple callbacks from firing
|
|
21
|
+
if (this.listeners[type].indexOf(callback) !== -1) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
this.listeners[type].push(callback);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public removeEventListener(type, callback) {
|
|
29
|
+
if (!this.listeners[type]) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
const stack = this.listeners[type];
|
|
34
|
+
const stackLength = stack.length;
|
|
35
|
+
|
|
36
|
+
for (let i = 0; i < stackLength; i++) {
|
|
37
|
+
if (stack[i] === callback) {
|
|
38
|
+
stack.splice(i, 1);
|
|
39
|
+
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
dispatchEvent(event) {
|
|
46
|
+
if (!this.listeners[event.type]) {
|
|
47
|
+
//console.warn(`Skipping dispatch since there are no listeners for ${event.type}`);
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const stack = this.listeners[event.type].slice();
|
|
52
|
+
const stackLength = stack.length;
|
|
53
|
+
|
|
54
|
+
for (let i = 0; i < stackLength; i++) {
|
|
55
|
+
stack[i].call(this, event);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
return !event.defaultPrevented;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* EventTarget - Provides the [EventTarget](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget) interface
|
|
64
|
+
*/
|
|
65
|
+
const eventTarget = new CornerstoneEventTarget();
|
|
66
|
+
|
|
67
|
+
export default eventTarget;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import getRenderingEngine, {
|
|
2
|
+
getRenderingEngines,
|
|
3
|
+
} from './RenderingEngine/getRenderingEngine';
|
|
4
|
+
import { IEnabledElement } from './types';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* A convenience method to find an EnabledElement given a reference to its
|
|
8
|
+
* associated element. Commonly used in code that's handling a custom
|
|
9
|
+
* event emitted by this library.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* Using the renderingEngine to find the enabled element:
|
|
13
|
+
* ```javascript
|
|
14
|
+
* const element = getRenderingEngine(renderingEngineId)
|
|
15
|
+
* .getViewport(viewportId)
|
|
16
|
+
* .element
|
|
17
|
+
*
|
|
18
|
+
* const enabledElement = getEnabledElement(element)
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* Using a cornerstone event's "element"
|
|
23
|
+
* ```javascript
|
|
24
|
+
* // Our "cornerstone events" contain the source element, which is
|
|
25
|
+
* // raised on the viewport's div element
|
|
26
|
+
* const { element } = evt.detail
|
|
27
|
+
* const enabledElement = getEnabledElement(element)
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @param element - a reference to an EnabledElement/Viewport's div element
|
|
31
|
+
* @returns the associated EnabledElement, or undefined if no matching EnabledElement
|
|
32
|
+
* can be found
|
|
33
|
+
*/
|
|
34
|
+
export default function getEnabledElement(
|
|
35
|
+
element: HTMLDivElement | undefined
|
|
36
|
+
): IEnabledElement | undefined {
|
|
37
|
+
if (!element) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const { viewportUid, renderingEngineUid } = element.dataset;
|
|
42
|
+
|
|
43
|
+
return getEnabledElementByIds(viewportUid, renderingEngineUid);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Similar to {@link getEnabledElement}, but takes the IDs of the
|
|
48
|
+
* renderingEngine and viewport as parameters to return the associated
|
|
49
|
+
* EnabledElement.
|
|
50
|
+
*
|
|
51
|
+
* @param viewportId - The Id of the viewport
|
|
52
|
+
* @param renderingEngineId - The Id of the rendering engine.
|
|
53
|
+
* @returns The enabled element which is an object that contains the viewport, rendering
|
|
54
|
+
* engine, viewport Id, rendering engine Id, and the Frame of Reference UID.
|
|
55
|
+
*/
|
|
56
|
+
export function getEnabledElementByIds(
|
|
57
|
+
viewportId: string,
|
|
58
|
+
renderingEngineId: string
|
|
59
|
+
): IEnabledElement {
|
|
60
|
+
if (!renderingEngineId || !viewportId) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const renderingEngine = getRenderingEngine(renderingEngineId);
|
|
65
|
+
|
|
66
|
+
if (!renderingEngine || renderingEngine.hasBeenDestroyed) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const viewport = renderingEngine.getViewport(viewportId);
|
|
71
|
+
|
|
72
|
+
if (!viewport) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const FrameOfReferenceUID = viewport.getFrameOfReferenceUID();
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
viewport,
|
|
80
|
+
renderingEngine,
|
|
81
|
+
viewportId,
|
|
82
|
+
renderingEngineId,
|
|
83
|
+
FrameOfReferenceUID,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Get all the enabled elements from all the rendering engines
|
|
89
|
+
* @returns An array of enabled elements.
|
|
90
|
+
*/
|
|
91
|
+
export function getEnabledElements(): IEnabledElement[] {
|
|
92
|
+
const enabledElements = [];
|
|
93
|
+
|
|
94
|
+
const renderingEngines = getRenderingEngines();
|
|
95
|
+
|
|
96
|
+
renderingEngines.forEach((renderingEngine) => {
|
|
97
|
+
const viewports = renderingEngine.getViewports();
|
|
98
|
+
|
|
99
|
+
viewports.forEach(({ element }) => {
|
|
100
|
+
enabledElements.push(getEnabledElement(element));
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
return enabledElements;
|
|
105
|
+
}
|
package/src/global.ts
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import * as Enums from './enums';
|
|
2
|
+
import * as CONSTANTS from './constants';
|
|
3
|
+
import { Events } from './enums';
|
|
4
|
+
//
|
|
5
|
+
import {
|
|
6
|
+
createVolumeActor,
|
|
7
|
+
createVolumeMapper,
|
|
8
|
+
getOrCreateCanvas,
|
|
9
|
+
} from './RenderingEngine';
|
|
10
|
+
import RenderingEngine from './RenderingEngine';
|
|
11
|
+
import VolumeViewport from './RenderingEngine/VolumeViewport';
|
|
12
|
+
import VolumeViewport3D from './RenderingEngine/VolumeViewport3D';
|
|
13
|
+
import BaseVolumeViewport from './RenderingEngine/BaseVolumeViewport';
|
|
14
|
+
import StackViewport from './RenderingEngine/StackViewport';
|
|
15
|
+
import Viewport from './RenderingEngine/Viewport';
|
|
16
|
+
import eventTarget from './eventTarget';
|
|
17
|
+
import {
|
|
18
|
+
getRenderingEngine,
|
|
19
|
+
getRenderingEngines,
|
|
20
|
+
} from './RenderingEngine/getRenderingEngine';
|
|
21
|
+
import cache, { ImageVolume } from './cache';
|
|
22
|
+
import imageRetrievalPoolManager from './requestPool/imageRetrievalPoolManager';
|
|
23
|
+
import imageLoadPoolManager from './requestPool/imageLoadPoolManager';
|
|
24
|
+
|
|
25
|
+
import getEnabledElement, {
|
|
26
|
+
getEnabledElementByIds,
|
|
27
|
+
getEnabledElements,
|
|
28
|
+
} from './getEnabledElement';
|
|
29
|
+
import * as metaData from './metaData';
|
|
30
|
+
import {
|
|
31
|
+
init,
|
|
32
|
+
getShouldUseCPURendering,
|
|
33
|
+
getShouldUseSharedArrayBuffer,
|
|
34
|
+
isCornerstoneInitialized,
|
|
35
|
+
setUseCPURendering,
|
|
36
|
+
setUseSharedArrayBuffer,
|
|
37
|
+
resetUseCPURendering,
|
|
38
|
+
resetUseSharedArrayBuffer,
|
|
39
|
+
getConfiguration,
|
|
40
|
+
setConfiguration,
|
|
41
|
+
} from './init';
|
|
42
|
+
|
|
43
|
+
// Classes
|
|
44
|
+
import Settings from './Settings';
|
|
45
|
+
|
|
46
|
+
// Namespaces
|
|
47
|
+
import * as volumeLoader from './loaders/volumeLoader';
|
|
48
|
+
import * as imageLoader from './loaders/imageLoader';
|
|
49
|
+
import * as geometryLoader from './loaders/geometryLoader';
|
|
50
|
+
import * as Types from './types';
|
|
51
|
+
import * as utilities from './utilities';
|
|
52
|
+
import { registerImageLoader } from './loaders/imageLoader'; // since it is used by CSWIL right now
|
|
53
|
+
|
|
54
|
+
import triggerEvent from './utilities/triggerEvent';
|
|
55
|
+
|
|
56
|
+
import {
|
|
57
|
+
setVolumesForViewports,
|
|
58
|
+
addVolumesToViewports,
|
|
59
|
+
} from './RenderingEngine/helpers';
|
|
60
|
+
|
|
61
|
+
export type { Types };
|
|
62
|
+
|
|
63
|
+
export {
|
|
64
|
+
// init
|
|
65
|
+
init,
|
|
66
|
+
isCornerstoneInitialized,
|
|
67
|
+
// configs
|
|
68
|
+
getConfiguration,
|
|
69
|
+
setConfiguration,
|
|
70
|
+
// enums
|
|
71
|
+
Enums,
|
|
72
|
+
CONSTANTS,
|
|
73
|
+
Events as EVENTS, // CornerstoneWADOImageLoader uses this, Todo: remove it after fixing wado
|
|
74
|
+
//
|
|
75
|
+
Settings,
|
|
76
|
+
// Rendering Engine
|
|
77
|
+
BaseVolumeViewport,
|
|
78
|
+
VolumeViewport,
|
|
79
|
+
VolumeViewport3D,
|
|
80
|
+
Viewport,
|
|
81
|
+
StackViewport,
|
|
82
|
+
RenderingEngine,
|
|
83
|
+
ImageVolume,
|
|
84
|
+
// Helpers
|
|
85
|
+
getRenderingEngine,
|
|
86
|
+
getRenderingEngines,
|
|
87
|
+
getEnabledElement,
|
|
88
|
+
getEnabledElementByIds,
|
|
89
|
+
getEnabledElements,
|
|
90
|
+
createVolumeActor,
|
|
91
|
+
getOrCreateCanvas,
|
|
92
|
+
createVolumeMapper,
|
|
93
|
+
// cache
|
|
94
|
+
cache,
|
|
95
|
+
// event helpers
|
|
96
|
+
eventTarget,
|
|
97
|
+
triggerEvent,
|
|
98
|
+
// Image Loader
|
|
99
|
+
imageLoader,
|
|
100
|
+
registerImageLoader, // Todo: remove this after CSWIL uses imageLoader now
|
|
101
|
+
// Volume Loader
|
|
102
|
+
volumeLoader,
|
|
103
|
+
//
|
|
104
|
+
metaData,
|
|
105
|
+
//
|
|
106
|
+
utilities,
|
|
107
|
+
setVolumesForViewports,
|
|
108
|
+
addVolumesToViewports,
|
|
109
|
+
//
|
|
110
|
+
imageLoadPoolManager as requestPoolManager,
|
|
111
|
+
imageRetrievalPoolManager,
|
|
112
|
+
imageLoadPoolManager,
|
|
113
|
+
// CPU Rendering
|
|
114
|
+
getShouldUseCPURendering,
|
|
115
|
+
setUseCPURendering,
|
|
116
|
+
resetUseCPURendering,
|
|
117
|
+
// SharedArrayBuffer
|
|
118
|
+
getShouldUseSharedArrayBuffer,
|
|
119
|
+
setUseSharedArrayBuffer,
|
|
120
|
+
resetUseSharedArrayBuffer,
|
|
121
|
+
// Geometry Loader
|
|
122
|
+
geometryLoader,
|
|
123
|
+
};
|
package/src/init.ts
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { getGPUTier } from 'detect-gpu';
|
|
2
|
+
import { SharedArrayBufferModes } from './enums';
|
|
3
|
+
let csRenderInitialized = false;
|
|
4
|
+
let useSharedArrayBuffer = true;
|
|
5
|
+
let sharedArrayBufferMode = SharedArrayBufferModes.TRUE;
|
|
6
|
+
import { deepMerge } from './utilities';
|
|
7
|
+
import { Cornerstone3DConfig } from './types';
|
|
8
|
+
// TODO: move sharedArrayBuffer into config.
|
|
9
|
+
// TODO: change config into a class with methods to better control get/set
|
|
10
|
+
const defaultConfig = {
|
|
11
|
+
detectGPU: {},
|
|
12
|
+
rendering: {
|
|
13
|
+
preferSizeOverAccuracy: false,
|
|
14
|
+
useCPURendering: false,
|
|
15
|
+
useNorm16Texture: false, // _hasNorm16TextureSupport(),
|
|
16
|
+
},
|
|
17
|
+
// cache
|
|
18
|
+
// ...
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
let config = {
|
|
22
|
+
detectGPU: {},
|
|
23
|
+
rendering: {
|
|
24
|
+
preferSizeOverAccuracy: false,
|
|
25
|
+
useCPURendering: false,
|
|
26
|
+
useNorm16Texture: false, // _hasNorm16TextureSupport(),
|
|
27
|
+
},
|
|
28
|
+
// cache
|
|
29
|
+
// ...
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
function _getGLContext(): RenderingContext {
|
|
33
|
+
// Create canvas element. The canvas is not added to the
|
|
34
|
+
// document itself, so it is never displayed in the
|
|
35
|
+
// browser window.
|
|
36
|
+
const canvas = document.createElement('canvas');
|
|
37
|
+
// Get WebGLRenderingContext from canvas element.
|
|
38
|
+
const gl =
|
|
39
|
+
canvas.getContext('webgl2') ||
|
|
40
|
+
canvas.getContext('webgl') ||
|
|
41
|
+
canvas.getContext('experimental-webgl');
|
|
42
|
+
|
|
43
|
+
return gl;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/By_example/Detect_WebGL
|
|
47
|
+
function _hasActiveWebGLContext() {
|
|
48
|
+
const gl = _getGLContext();
|
|
49
|
+
|
|
50
|
+
// Report the result.
|
|
51
|
+
if (gl && (gl as WebGL2RenderingContext).getExtension) {
|
|
52
|
+
const ext = (gl as WebGL2RenderingContext).getExtension(
|
|
53
|
+
'EXT_texture_norm16'
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
if (ext) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function hasSharedArrayBuffer() {
|
|
65
|
+
try {
|
|
66
|
+
/*eslint-disable no-constant-condition */
|
|
67
|
+
if (new SharedArrayBuffer(0)) {
|
|
68
|
+
return true;
|
|
69
|
+
} else {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
} catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function _hasNorm16TextureSupport() {
|
|
78
|
+
const gl = _getGLContext();
|
|
79
|
+
|
|
80
|
+
if (gl) {
|
|
81
|
+
const ext = (gl as WebGL2RenderingContext).getExtension(
|
|
82
|
+
'EXT_texture_norm16'
|
|
83
|
+
);
|
|
84
|
+
|
|
85
|
+
if (ext) {
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Initialize the cornerstone-core. If the browser has a webgl context and
|
|
95
|
+
* the detected gpu (by detect-gpu library) indicates the GPU is not low end we
|
|
96
|
+
* will use webgl GPU rendering. Otherwise we will use cpu rendering.
|
|
97
|
+
*
|
|
98
|
+
* @param configuration - A configuration object
|
|
99
|
+
* @returns A promise that resolves to true cornerstone has been initialized successfully.
|
|
100
|
+
* @category Initialization
|
|
101
|
+
*/
|
|
102
|
+
async function init(configuration = {}): Promise<boolean> {
|
|
103
|
+
if (csRenderInitialized) {
|
|
104
|
+
return csRenderInitialized;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// merge configs
|
|
108
|
+
config = deepMerge(defaultConfig, configuration);
|
|
109
|
+
|
|
110
|
+
// detectGPU
|
|
111
|
+
const hasWebGLContext = _hasActiveWebGLContext();
|
|
112
|
+
if (!hasWebGLContext) {
|
|
113
|
+
console.log('CornerstoneRender: GPU not detected, using CPU rendering');
|
|
114
|
+
config.rendering.useCPURendering = true;
|
|
115
|
+
} else {
|
|
116
|
+
const gpuTier = await getGPUTier();
|
|
117
|
+
config.detectGPU = gpuTier;
|
|
118
|
+
console.log(
|
|
119
|
+
'CornerstoneRender: Using detect-gpu to get the GPU benchmark:',
|
|
120
|
+
gpuTier
|
|
121
|
+
);
|
|
122
|
+
if (gpuTier.tier < 1) {
|
|
123
|
+
console.log(
|
|
124
|
+
'CornerstoneRender: GPU is not powerful enough, using CPU rendering'
|
|
125
|
+
);
|
|
126
|
+
config.rendering.useCPURendering = true;
|
|
127
|
+
} else {
|
|
128
|
+
console.log('CornerstoneRender: using GPU rendering');
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
setUseSharedArrayBuffer(sharedArrayBufferMode);
|
|
133
|
+
|
|
134
|
+
csRenderInitialized = true;
|
|
135
|
+
return csRenderInitialized;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* It sets the useCPURenderingOnlyForDebugOrTests variable to the status value.
|
|
140
|
+
* This only should be used for debugging or tests. DO NOT USE IT IF YOU ARE NOT
|
|
141
|
+
* SURE WHAT YOU ARE DOING.
|
|
142
|
+
* @param status - boolean
|
|
143
|
+
* @category Initialization
|
|
144
|
+
*
|
|
145
|
+
*/
|
|
146
|
+
function setUseCPURendering(status: boolean): void {
|
|
147
|
+
config.rendering.useCPURendering = status;
|
|
148
|
+
csRenderInitialized = true;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Resets the cornerstone-core init state if it has been manually
|
|
153
|
+
* initialized to force use the cpu rendering (e.g., for tests)
|
|
154
|
+
* @category Initialization
|
|
155
|
+
*
|
|
156
|
+
*/
|
|
157
|
+
function resetUseCPURendering(): void {
|
|
158
|
+
config.rendering.useCPURendering = !_hasActiveWebGLContext();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Returns whether or not we are using CPU rendering.
|
|
163
|
+
* @returns true if we are using CPU rendering.
|
|
164
|
+
* @category Initialization
|
|
165
|
+
*
|
|
166
|
+
*/
|
|
167
|
+
function getShouldUseCPURendering(): boolean {
|
|
168
|
+
return config.rendering.useCPURendering;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function setUseSharedArrayBuffer(mode: SharedArrayBufferModes | boolean): void {
|
|
172
|
+
if (mode == SharedArrayBufferModes.AUTO) {
|
|
173
|
+
sharedArrayBufferMode = SharedArrayBufferModes.AUTO;
|
|
174
|
+
const hasSharedBuffer = hasSharedArrayBuffer();
|
|
175
|
+
if (!hasSharedBuffer) {
|
|
176
|
+
useSharedArrayBuffer = false;
|
|
177
|
+
console.warn(
|
|
178
|
+
`CornerstoneRender: SharedArray Buffer not allowed, performance may be slower.
|
|
179
|
+
Try ensuring page is cross-origin isolated to enable SharedArrayBuffer.`
|
|
180
|
+
);
|
|
181
|
+
} else {
|
|
182
|
+
useSharedArrayBuffer = true;
|
|
183
|
+
// eslint-disable-next-line no-console
|
|
184
|
+
console.log('CornerstoneRender: using SharedArrayBuffer');
|
|
185
|
+
}
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (mode == SharedArrayBufferModes.TRUE || mode == true) {
|
|
190
|
+
sharedArrayBufferMode = SharedArrayBufferModes.TRUE;
|
|
191
|
+
useSharedArrayBuffer = true;
|
|
192
|
+
return;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
if (mode == SharedArrayBufferModes.FALSE || mode == false) {
|
|
196
|
+
sharedArrayBufferMode = SharedArrayBufferModes.FALSE;
|
|
197
|
+
useSharedArrayBuffer = false;
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function resetUseSharedArrayBuffer(): void {
|
|
203
|
+
setUseSharedArrayBuffer(sharedArrayBufferMode);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function getShouldUseSharedArrayBuffer(): boolean {
|
|
207
|
+
return useSharedArrayBuffer;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
*
|
|
212
|
+
* Returns whether or not cornerstone-core has been initialized.
|
|
213
|
+
* @returns true if the cornerstone render has been initialized.
|
|
214
|
+
* @category Initialization
|
|
215
|
+
*
|
|
216
|
+
*/
|
|
217
|
+
function isCornerstoneInitialized(): boolean {
|
|
218
|
+
return csRenderInitialized;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* This function returns a copy of the config object. This is used to prevent the
|
|
223
|
+
* config object from being modified by other parts of the program.
|
|
224
|
+
* @returns A copy of the config object.
|
|
225
|
+
*/
|
|
226
|
+
function getConfiguration(): Cornerstone3DConfig {
|
|
227
|
+
// return a copy
|
|
228
|
+
// return JSON.parse(JSON.stringify(config));
|
|
229
|
+
return config;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function setConfiguration(c: Cornerstone3DConfig) {
|
|
233
|
+
config = c;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export {
|
|
237
|
+
init,
|
|
238
|
+
getShouldUseCPURendering,
|
|
239
|
+
getShouldUseSharedArrayBuffer,
|
|
240
|
+
isCornerstoneInitialized,
|
|
241
|
+
setUseCPURendering,
|
|
242
|
+
setUseSharedArrayBuffer,
|
|
243
|
+
resetUseCPURendering,
|
|
244
|
+
resetUseSharedArrayBuffer,
|
|
245
|
+
getConfiguration,
|
|
246
|
+
setConfiguration,
|
|
247
|
+
};
|