@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.
Files changed (223) hide show
  1. package/dist/cjs/utilities/getSliceRange.js +2 -1
  2. package/dist/cjs/utilities/getSliceRange.js.map +1 -1
  3. package/dist/esm/utilities/getSliceRange.js +2 -1
  4. package/dist/esm/utilities/getSliceRange.js.map +1 -1
  5. package/dist/umd/index.js +1 -1
  6. package/dist/umd/index.js.map +1 -1
  7. package/package.json +4 -3
  8. package/src/RenderingEngine/BaseVolumeViewport.ts +847 -0
  9. package/src/RenderingEngine/RenderingEngine.ts +1364 -0
  10. package/src/RenderingEngine/StackViewport.ts +2690 -0
  11. package/src/RenderingEngine/Viewport.ts +1244 -0
  12. package/src/RenderingEngine/VolumeViewport.ts +420 -0
  13. package/src/RenderingEngine/VolumeViewport3D.ts +42 -0
  14. package/src/RenderingEngine/getRenderingEngine.ts +34 -0
  15. package/src/RenderingEngine/helpers/addVolumesToViewports.ts +52 -0
  16. package/src/RenderingEngine/helpers/cpuFallback/colors/colormap.ts +343 -0
  17. package/src/RenderingEngine/helpers/cpuFallback/colors/index.ts +4 -0
  18. package/src/RenderingEngine/helpers/cpuFallback/colors/lookupTable.ts +469 -0
  19. package/src/RenderingEngine/helpers/cpuFallback/drawImageSync.ts +58 -0
  20. package/src/RenderingEngine/helpers/cpuFallback/rendering/calculateTransform.ts +136 -0
  21. package/src/RenderingEngine/helpers/cpuFallback/rendering/canvasToPixel.ts +25 -0
  22. package/src/RenderingEngine/helpers/cpuFallback/rendering/computeAutoVoi.ts +47 -0
  23. package/src/RenderingEngine/helpers/cpuFallback/rendering/correctShift.ts +38 -0
  24. package/src/RenderingEngine/helpers/cpuFallback/rendering/createViewport.ts +64 -0
  25. package/src/RenderingEngine/helpers/cpuFallback/rendering/doesImageNeedToBeRendered.ts +36 -0
  26. package/src/RenderingEngine/helpers/cpuFallback/rendering/fitToWindow.ts +22 -0
  27. package/src/RenderingEngine/helpers/cpuFallback/rendering/generateColorLUT.ts +60 -0
  28. package/src/RenderingEngine/helpers/cpuFallback/rendering/generateLut.ts +83 -0
  29. package/src/RenderingEngine/helpers/cpuFallback/rendering/getDefaultViewport.ts +88 -0
  30. package/src/RenderingEngine/helpers/cpuFallback/rendering/getImageFitScale.ts +52 -0
  31. package/src/RenderingEngine/helpers/cpuFallback/rendering/getImageSize.ts +55 -0
  32. package/src/RenderingEngine/helpers/cpuFallback/rendering/getLut.ts +53 -0
  33. package/src/RenderingEngine/helpers/cpuFallback/rendering/getModalityLut.ts +55 -0
  34. package/src/RenderingEngine/helpers/cpuFallback/rendering/getTransform.ts +17 -0
  35. package/src/RenderingEngine/helpers/cpuFallback/rendering/getVOILut.ts +74 -0
  36. package/src/RenderingEngine/helpers/cpuFallback/rendering/initializeRenderCanvas.ts +37 -0
  37. package/src/RenderingEngine/helpers/cpuFallback/rendering/lutMatches.ts +21 -0
  38. package/src/RenderingEngine/helpers/cpuFallback/rendering/now.ts +13 -0
  39. package/src/RenderingEngine/helpers/cpuFallback/rendering/pixelToCanvas.ts +22 -0
  40. package/src/RenderingEngine/helpers/cpuFallback/rendering/renderColorImage.ts +193 -0
  41. package/src/RenderingEngine/helpers/cpuFallback/rendering/renderGrayscaleImage.ts +166 -0
  42. package/src/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.ts +203 -0
  43. package/src/RenderingEngine/helpers/cpuFallback/rendering/resetCamera.ts +32 -0
  44. package/src/RenderingEngine/helpers/cpuFallback/rendering/resize.ts +109 -0
  45. package/src/RenderingEngine/helpers/cpuFallback/rendering/saveLastRendered.ts +36 -0
  46. package/src/RenderingEngine/helpers/cpuFallback/rendering/setDefaultViewport.ts +17 -0
  47. package/src/RenderingEngine/helpers/cpuFallback/rendering/setToPixelCoordinateSystem.ts +32 -0
  48. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedColorPixelDataToCanvasImageData.ts +58 -0
  49. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageData.ts +76 -0
  50. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataColorLUT.ts +60 -0
  51. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPET.ts +50 -0
  52. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUT.ts +66 -0
  53. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUTPET.ts +68 -0
  54. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataRGBA.ts +81 -0
  55. package/src/RenderingEngine/helpers/cpuFallback/rendering/storedRGBAPixelDataToCanvasImageData.ts +56 -0
  56. package/src/RenderingEngine/helpers/cpuFallback/rendering/transform.ts +126 -0
  57. package/src/RenderingEngine/helpers/cpuFallback/rendering/validator.ts +31 -0
  58. package/src/RenderingEngine/helpers/createVolumeActor.ts +103 -0
  59. package/src/RenderingEngine/helpers/createVolumeMapper.ts +37 -0
  60. package/src/RenderingEngine/helpers/getOrCreateCanvas.ts +58 -0
  61. package/src/RenderingEngine/helpers/index.ts +15 -0
  62. package/src/RenderingEngine/helpers/isRgbaSourceRgbDest.ts +1 -0
  63. package/src/RenderingEngine/helpers/setDefaultVolumeVOI.ts +227 -0
  64. package/src/RenderingEngine/helpers/setVolumesForViewports.ts +52 -0
  65. package/src/RenderingEngine/helpers/viewportTypeToViewportClass.ts +14 -0
  66. package/src/RenderingEngine/helpers/viewportTypeUsesCustomRenderingPipeline.ts +7 -0
  67. package/src/RenderingEngine/helpers/volumeNewImageEventDispatcher.ts +75 -0
  68. package/src/RenderingEngine/index.ts +23 -0
  69. package/src/RenderingEngine/renderingEngineCache.ts +43 -0
  70. package/src/RenderingEngine/vtkClasses/index.js +11 -0
  71. package/src/RenderingEngine/vtkClasses/vtkOffscreenMultiRenderWindow.js +149 -0
  72. package/src/RenderingEngine/vtkClasses/vtkSharedVolumeMapper.js +52 -0
  73. package/src/RenderingEngine/vtkClasses/vtkSlabCamera.d.ts +781 -0
  74. package/src/RenderingEngine/vtkClasses/vtkSlabCamera.js +155 -0
  75. package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLRenderWindow.js +47 -0
  76. package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLTexture.js +272 -0
  77. package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLViewNodeFactory.js +159 -0
  78. package/src/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +319 -0
  79. package/src/Settings.ts +294 -0
  80. package/src/cache/cache.ts +854 -0
  81. package/src/cache/classes/Contour.ts +70 -0
  82. package/src/cache/classes/ContourSet.ts +151 -0
  83. package/src/cache/classes/ImageVolume.ts +155 -0
  84. package/src/cache/index.ts +5 -0
  85. package/src/constants/cpuColormaps.ts +1537 -0
  86. package/src/constants/epsilon.ts +3 -0
  87. package/src/constants/index.ts +13 -0
  88. package/src/constants/mprCameraValues.ts +20 -0
  89. package/src/constants/rendering.ts +8 -0
  90. package/src/constants/viewportPresets.ts +357 -0
  91. package/src/enums/BlendModes.ts +23 -0
  92. package/src/enums/ContourType.ts +6 -0
  93. package/src/enums/Events.ts +196 -0
  94. package/src/enums/GeometryType.ts +5 -0
  95. package/src/enums/InterpolationType.ts +13 -0
  96. package/src/enums/OrientationAxis.ts +8 -0
  97. package/src/enums/RequestType.ts +13 -0
  98. package/src/enums/SharedArrayBufferModes.ts +11 -0
  99. package/src/enums/VOILUTFunctionType.ts +10 -0
  100. package/src/enums/ViewportType.ts +21 -0
  101. package/src/enums/index.ts +23 -0
  102. package/src/eventTarget.ts +67 -0
  103. package/src/getEnabledElement.ts +105 -0
  104. package/src/global.ts +8 -0
  105. package/src/index.ts +123 -0
  106. package/src/init.ts +247 -0
  107. package/src/loaders/geometryLoader.ts +108 -0
  108. package/src/loaders/imageLoader.ts +298 -0
  109. package/src/loaders/volumeLoader.ts +477 -0
  110. package/src/metaData.ts +84 -0
  111. package/src/requestPool/imageLoadPoolManager.ts +43 -0
  112. package/src/requestPool/imageRetrievalPoolManager.ts +25 -0
  113. package/src/requestPool/requestPoolManager.ts +329 -0
  114. package/src/types/ActorSliceRange.ts +17 -0
  115. package/src/types/CPUFallbackColormap.ts +23 -0
  116. package/src/types/CPUFallbackColormapData.ts +12 -0
  117. package/src/types/CPUFallbackColormapsData.ts +7 -0
  118. package/src/types/CPUFallbackEnabledElement.ts +71 -0
  119. package/src/types/CPUFallbackLUT.ts +5 -0
  120. package/src/types/CPUFallbackLookupTable.ts +17 -0
  121. package/src/types/CPUFallbackRenderingTools.ts +25 -0
  122. package/src/types/CPUFallbackTransform.ts +16 -0
  123. package/src/types/CPUFallbackViewport.ts +29 -0
  124. package/src/types/CPUFallbackViewportDisplayedArea.ts +15 -0
  125. package/src/types/CPUIImageData.ts +47 -0
  126. package/src/types/ContourData.ts +19 -0
  127. package/src/types/Cornerstone3DConfig.ts +31 -0
  128. package/src/types/CustomEventType.ts +14 -0
  129. package/src/types/EventTypes.ts +403 -0
  130. package/src/types/FlipDirection.ts +9 -0
  131. package/src/types/IActor.ts +23 -0
  132. package/src/types/ICache.ts +28 -0
  133. package/src/types/ICachedGeometry.ts +13 -0
  134. package/src/types/ICachedImage.ts +13 -0
  135. package/src/types/ICachedVolume.ts +12 -0
  136. package/src/types/ICamera.ts +36 -0
  137. package/src/types/IContour.ts +18 -0
  138. package/src/types/IContourSet.ts +56 -0
  139. package/src/types/IDynamicImageVolume.ts +18 -0
  140. package/src/types/IEnabledElement.ts +21 -0
  141. package/src/types/IGeometry.ts +12 -0
  142. package/src/types/IImage.ts +113 -0
  143. package/src/types/IImageData.ts +45 -0
  144. package/src/types/IImageVolume.ts +78 -0
  145. package/src/types/ILoadObject.ts +36 -0
  146. package/src/types/IRegisterImageLoader.ts +10 -0
  147. package/src/types/IRenderingEngine.ts +28 -0
  148. package/src/types/IStackViewport.ts +138 -0
  149. package/src/types/IStreamingImageVolume.ts +13 -0
  150. package/src/types/IStreamingVolumeProperties.ts +14 -0
  151. package/src/types/IViewport.ts +149 -0
  152. package/src/types/IViewportId.ts +9 -0
  153. package/src/types/IVolume.ts +45 -0
  154. package/src/types/IVolumeInput.ts +36 -0
  155. package/src/types/IVolumeViewport.ts +141 -0
  156. package/src/types/ImageLoaderFn.ts +16 -0
  157. package/src/types/ImageSliceData.ts +6 -0
  158. package/src/types/Mat3.ts +16 -0
  159. package/src/types/Metadata.ts +39 -0
  160. package/src/types/OrientationVectors.ts +36 -0
  161. package/src/types/Plane.ts +6 -0
  162. package/src/types/Point2.ts +6 -0
  163. package/src/types/Point3.ts +6 -0
  164. package/src/types/Point4.ts +6 -0
  165. package/src/types/ScalingParameters.ts +27 -0
  166. package/src/types/StackViewportProperties.ts +25 -0
  167. package/src/types/TransformMatrix2D.ts +4 -0
  168. package/src/types/ViewportInputOptions.ts +21 -0
  169. package/src/types/ViewportPreset.ts +14 -0
  170. package/src/types/VolumeLoaderFn.ts +18 -0
  171. package/src/types/VolumeViewportProperties.ts +14 -0
  172. package/src/types/index.ts +157 -0
  173. package/src/types/voi.ts +15 -0
  174. package/src/utilities/actorCheck.ts +24 -0
  175. package/src/utilities/applyPreset.ts +132 -0
  176. package/src/utilities/calculateViewportsSpatialRegistration.ts +74 -0
  177. package/src/utilities/calibratedPixelSpacingMetadataProvider.ts +38 -0
  178. package/src/utilities/createFloat32SharedArray.ts +45 -0
  179. package/src/utilities/createInt16SharedArray.ts +43 -0
  180. package/src/utilities/createLinearRGBTransferFunction.ts +22 -0
  181. package/src/utilities/createSigmoidRGBTransferFunction.ts +63 -0
  182. package/src/utilities/createUInt16SharedArray.ts +43 -0
  183. package/src/utilities/createUint8SharedArray.ts +45 -0
  184. package/src/utilities/deepFreeze.ts +19 -0
  185. package/src/utilities/deepMerge.ts +81 -0
  186. package/src/utilities/getClosestImageId.ts +80 -0
  187. package/src/utilities/getClosestStackImageIndexForPoint.ts +116 -0
  188. package/src/utilities/getImageSliceDataForVolumeViewport.ts +61 -0
  189. package/src/utilities/getMinMax.ts +31 -0
  190. package/src/utilities/getRuntimeId.ts +54 -0
  191. package/src/utilities/getScalarDataType.ts +31 -0
  192. package/src/utilities/getScalingParameters.ts +35 -0
  193. package/src/utilities/getSliceRange.ts +86 -0
  194. package/src/utilities/getSpacingInNormalDirection.ts +44 -0
  195. package/src/utilities/getTargetVolumeAndSpacingInNormalDir.ts +126 -0
  196. package/src/utilities/getViewportImageCornersInWorld.ts +102 -0
  197. package/src/utilities/getViewportsWithImageURI.ts +46 -0
  198. package/src/utilities/getViewportsWithVolumeId.ts +38 -0
  199. package/src/utilities/getVoiFromSigmoidRGBTransferFunction.ts +23 -0
  200. package/src/utilities/getVolumeActorCorners.ts +24 -0
  201. package/src/utilities/getVolumeSliceRangeInfo.ts +52 -0
  202. package/src/utilities/getVolumeViewportScrollInfo.ts +32 -0
  203. package/src/utilities/getVolumeViewportsContainingSameVolumes.ts +58 -0
  204. package/src/utilities/hasNaNValues.ts +12 -0
  205. package/src/utilities/imageIdToURI.ts +10 -0
  206. package/src/utilities/imageToWorldCoords.ts +54 -0
  207. package/src/utilities/index.ts +100 -0
  208. package/src/utilities/indexWithinDimensions.ts +27 -0
  209. package/src/utilities/invertRgbTransferFunction.ts +36 -0
  210. package/src/utilities/isEqual.ts +27 -0
  211. package/src/utilities/isOpposite.ts +23 -0
  212. package/src/utilities/isTypedArray.ts +20 -0
  213. package/src/utilities/loadImageToCanvas.ts +80 -0
  214. package/src/utilities/planar.ts +91 -0
  215. package/src/utilities/renderToCanvas.ts +32 -0
  216. package/src/utilities/scaleRgbTransferFunction.ts +37 -0
  217. package/src/utilities/snapFocalPointToSlice.ts +78 -0
  218. package/src/utilities/spatialRegistrationMetadataProvider.ts +50 -0
  219. package/src/utilities/transformWorldToIndex.ts +16 -0
  220. package/src/utilities/triggerEvent.ts +38 -0
  221. package/src/utilities/uuidv4.ts +13 -0
  222. package/src/utilities/windowLevel.ts +39 -0
  223. package/src/utilities/worldToImageCoords.ts +64 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * SharedArrayBuffer Modes
3
+ */
4
+ enum SharedArrayBufferModes {
5
+ TRUE = 'true',
6
+ FALSE = 'false',
7
+ /** use SharedArrayBuffer if avalaible */
8
+ AUTO = 'auto',
9
+ }
10
+
11
+ export default SharedArrayBufferModes;
@@ -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
@@ -0,0 +1,8 @@
1
+ declare global {
2
+ interface Window {
3
+ crossOriginIsolated: unknown;
4
+ SharedArrayBuffer: unknown;
5
+ }
6
+ }
7
+
8
+ export default global;
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
+ };