@cornerstonejs/core 4.22.13 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/RenderingEngine/BaseRenderingEngine.d.ts +4 -5
- package/dist/esm/RenderingEngine/BaseRenderingEngine.js +48 -61
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +10 -17
- package/dist/esm/RenderingEngine/CanvasActor/CanvasMapper.d.ts +1 -0
- package/dist/esm/RenderingEngine/CanvasActor/CanvasMapper.js +3 -0
- package/dist/esm/RenderingEngine/CanvasActor/CanvasProperties.d.ts +10 -2
- package/dist/esm/RenderingEngine/CanvasActor/CanvasProperties.js +64 -6
- package/dist/esm/RenderingEngine/CanvasActor/index.d.ts +4 -0
- package/dist/esm/RenderingEngine/CanvasActor/index.js +59 -48
- package/dist/esm/RenderingEngine/ContextPoolRenderingEngine.d.ts +3 -4
- package/dist/esm/RenderingEngine/ContextPoolRenderingEngine.js +52 -34
- package/dist/esm/RenderingEngine/ECGViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/ECGViewport.js +33 -160
- package/dist/esm/RenderingEngine/GenericViewport/DefaultRenderPathResolver.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/DefaultRenderPathResolver.js +25 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/CanvasECGRenderPath.d.ts +17 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/CanvasECGRenderPath.js +144 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/DefaultECGDataProvider.d.ts +5 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/DefaultECGDataProvider.js +13 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGProjectionTypes.d.ts +42 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGProjectionTypes.js +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGRenderPathResolver.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGRenderPathResolver.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGResolvedView.d.ts +27 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGResolvedView.js +121 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewport.d.ts +55 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewport.js +289 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportLegacyAdapter.d.ts +13 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportLegacyAdapter.js +70 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportTypes.d.ts +69 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ECGViewportTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionAdapter.d.ts +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionAdapter.js +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionPresentation.d.ts +7 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionPresentation.js +52 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionSnapshot.d.ts +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgProjectionSnapshot.js +94 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgViewportCamera.d.ts +27 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/ecgViewportCamera.js +82 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/index.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/ECG/index.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/GenericViewport.d.ts +82 -0
- package/dist/esm/RenderingEngine/GenericViewport/GenericViewport.js +369 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuImageSliceRenderPath.d.ts +24 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuImageSliceRenderPath.js +456 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuVolumeSliceRenderPath.d.ts +25 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/CpuVolumeSliceRenderPath.js +514 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/DefaultPlanarDataProvider.d.ts +6 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/DefaultPlanarDataProvider.js +80 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUScalarViewportSampler.d.ts +47 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUScalarViewportSampler.js +439 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUVolumeSampler.d.ts +98 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarCPUVolumeSampler.js +686 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarLegacyCompatibilityController.d.ts +81 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarLegacyCompatibilityController.js +526 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarMountedData.d.ts +34 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarMountedData.js +111 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarProjectionTypes.d.ts +58 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarProjectionTypes.js +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathDecisionService.d.ts +28 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathDecisionService.js +145 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathResolver.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarRenderPathResolver.js +16 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarResolvedView.d.ts +91 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarResolvedView.js +305 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewReferenceController.d.ts +72 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewReferenceController.js +406 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewport.d.ts +187 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewport.js +1175 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportLegacyAdapter.d.ts +44 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportLegacyAdapter.js +279 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportTypes.d.ts +151 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/PlanarViewportTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkImageMapperRenderPath.d.ts +21 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkImageMapperRenderPath.js +259 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkVolumeSliceRenderPath.d.ts +23 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/VtkVolumeSliceRenderPath.js +289 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/buildPlanarActorEntry.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/buildPlanarActorEntry.js +54 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/index.d.ts +23 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/index.js +20 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarActorCompatibility.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarActorCompatibility.js +42 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarAdapterCoordinateTransforms.d.ts +44 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarAdapterCoordinateTransforms.js +129 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCPUVolumeSamplingUtils.d.ts +11 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCPUVolumeSamplingUtils.js +54 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCameraScale.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCameraScale.js +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuImageTransforms.d.ts +3 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuImageTransforms.js +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuViewportMath.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarCpuViewportMath.js +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarImageEvents.d.ts +22 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarImageEvents.js +28 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarLegacyCompatibility.d.ts +13 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarLegacyCompatibility.js +136 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarMath.d.ts +3 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarMath.js +15 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarOrientationVectors.d.ts +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarOrientationVectors.js +37 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionAdapter.d.ts +7 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionAdapter.js +28 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionFallback.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionFallback.js +25 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionPresentation.d.ts +5 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionPresentation.js +95 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionSnapshot.d.ts +6 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarProjectionSnapshot.js +126 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderCamera.d.ts +46 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderCamera.js +332 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathProjection.d.ts +51 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathProjection.js +96 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathSelector.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRenderPathSelector.js +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRuntimeTypes.d.ts +86 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarRuntimeTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarSliceBasis.d.ts +51 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarSliceBasis.js +330 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewPresentation.d.ts +16 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewPresentation.js +25 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewReference.d.ts +46 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewReference.js +243 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewState.d.ts +5 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarViewState.js +59 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumePresentation.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumePresentation.js +223 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumeSliceBlendMode.d.ts +5 -0
- package/dist/esm/RenderingEngine/GenericViewport/Planar/planarVolumeSliceBlendMode.js +36 -0
- package/dist/esm/RenderingEngine/GenericViewport/ResolvedViewportView.d.ts +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/ResolvedViewportView.js +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/DefaultVideoDataProvider.d.ts +5 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/DefaultVideoDataProvider.js +18 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/HtmlVideoRenderPath.d.ts +19 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/HtmlVideoRenderPath.js +141 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoProjectionTypes.d.ts +45 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoProjectionTypes.js +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoRenderPathResolver.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoRenderPathResolver.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoResolvedView.d.ts +29 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoResolvedView.js +108 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewport.d.ts +59 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewport.js +458 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportLegacyAdapter.d.ts +15 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportLegacyAdapter.js +114 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportTypes.d.ts +45 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/VideoViewportTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/index.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/index.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionAdapter.d.ts +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionAdapter.js +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionPresentation.d.ts +7 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionPresentation.js +66 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionSnapshot.d.ts +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoProjectionSnapshot.js +86 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoViewportCamera.d.ts +30 -0
- package/dist/esm/RenderingEngine/GenericViewport/Video/videoViewportCamera.js +105 -0
- package/dist/esm/RenderingEngine/GenericViewport/ViewportArchitectureTypes.d.ts +126 -0
- package/dist/esm/RenderingEngine/GenericViewport/ViewportArchitectureTypes.js +20 -0
- package/dist/esm/RenderingEngine/GenericViewport/ViewportCameraTypes.d.ts +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/ViewportCameraTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/ViewportProjectionTypes.d.ts +101 -0
- package/dist/esm/RenderingEngine/GenericViewport/ViewportProjectionTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/DefaultVolume3DDataProvider.d.ts +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/DefaultVolume3DDataProvider.js +58 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DProjectionTypes.d.ts +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DProjectionTypes.js +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DRenderPathResolver.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DRenderPathResolver.js +9 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DResolvedView.d.ts +18 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/Volume3DResolvedView.js +42 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VolumeViewport3DLegacyAdapter.d.ts +39 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VolumeViewport3DLegacyAdapter.js +296 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkGeometry3DRenderPath.d.ts +22 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkGeometry3DRenderPath.js +156 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkVolume3DRenderPath.d.ts +23 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/VtkVolume3DRenderPath.js +205 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/applyVolume3DCamera.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/applyVolume3DCamera.js +33 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/index.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/index.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3D.d.ts +60 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3D.js +399 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3DTypes.d.ts +88 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/viewport3DTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionAdapter.d.ts +7 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionAdapter.js +27 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionCamera.d.ts +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionCamera.js +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionPresentation.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionPresentation.js +22 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionSnapshot.d.ts +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/volume3DProjectionSnapshot.js +52 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/vtkVolume3DInitialCamera.d.ts +3 -0
- package/dist/esm/RenderingEngine/GenericViewport/Volume3D/vtkVolume3DInitialCamera.js +110 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/DefaultWSIDataProvider.d.ts +6 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/DefaultWSIDataProvider.js +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/DicomMicroscopyRenderPath.d.ts +16 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/DicomMicroscopyRenderPath.js +125 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIProjectionTypes.d.ts +40 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIProjectionTypes.js +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIRenderPathResolver.d.ts +4 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIRenderPathResolver.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIResolvedView.d.ts +26 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIResolvedView.js +104 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewport.d.ts +69 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewport.js +392 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportLegacyAdapter.d.ts +22 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportLegacyAdapter.js +144 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportTypes.d.ts +58 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/WSIViewportTypes.js +0 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/index.d.ts +10 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/index.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionAdapter.d.ts +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionAdapter.js +12 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionPresentation.d.ts +7 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionPresentation.js +47 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionSnapshot.d.ts +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiProjectionSnapshot.js +90 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiTransformUtils.d.ts +29 -0
- package/dist/esm/RenderingEngine/GenericViewport/WSI/wsiTransformUtils.js +128 -0
- package/dist/esm/RenderingEngine/GenericViewport/genericViewportDataSetAccess.d.ts +35 -0
- package/dist/esm/RenderingEngine/GenericViewport/genericViewportDataSetAccess.js +87 -0
- package/dist/esm/RenderingEngine/GenericViewport/genericViewportReferenceCompatibility.d.ts +18 -0
- package/dist/esm/RenderingEngine/GenericViewport/genericViewportReferenceCompatibility.js +238 -0
- package/dist/esm/RenderingEngine/GenericViewport/index.d.ts +23 -0
- package/dist/esm/RenderingEngine/GenericViewport/index.js +14 -0
- package/dist/esm/RenderingEngine/GenericViewport/setVtkCameraClippingRange.d.ts +2 -0
- package/dist/esm/RenderingEngine/GenericViewport/setVtkCameraClippingRange.js +8 -0
- package/dist/esm/RenderingEngine/GenericViewport/viewportProjection.d.ts +98 -0
- package/dist/esm/RenderingEngine/GenericViewport/viewportProjection.js +81 -0
- package/dist/esm/RenderingEngine/RenderingEngine.d.ts +3 -5
- package/dist/esm/RenderingEngine/RenderingEngine.js +3 -9
- package/dist/esm/RenderingEngine/StackViewport.d.ts +0 -1
- package/dist/esm/RenderingEngine/StackViewport.js +37 -45
- package/dist/esm/RenderingEngine/TiledRenderingEngine.d.ts +1 -0
- package/dist/esm/RenderingEngine/TiledRenderingEngine.js +23 -20
- package/dist/esm/RenderingEngine/VideoViewport.d.ts +5 -13
- package/dist/esm/RenderingEngine/VideoViewport.js +32 -68
- package/dist/esm/RenderingEngine/Viewport.d.ts +14 -5
- package/dist/esm/RenderingEngine/Viewport.js +60 -24
- package/dist/esm/RenderingEngine/VolumeViewport.js +20 -7
- package/dist/esm/RenderingEngine/WSIViewport.d.ts +12 -12
- package/dist/esm/RenderingEngine/WSIViewport.js +28 -101
- package/dist/esm/RenderingEngine/helpers/addVolumesToViewports.js +6 -8
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.d.ts +4 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.js +157 -0
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/index.d.ts +2 -3
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/index.js +2 -3
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/calculateTransform.js +13 -3
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.js +13 -3
- package/dist/esm/RenderingEngine/helpers/createVolumeSliceActor.d.ts +14 -0
- package/dist/esm/RenderingEngine/helpers/createVolumeSliceActor.js +69 -0
- package/dist/esm/RenderingEngine/helpers/getCameraVectors.d.ts +2 -1
- package/dist/esm/RenderingEngine/helpers/getCameraVectors.js +1 -1
- package/dist/esm/RenderingEngine/helpers/planarImageRendering.d.ts +51 -0
- package/dist/esm/RenderingEngine/helpers/planarImageRendering.js +116 -0
- package/dist/esm/RenderingEngine/helpers/planarVolumeRendering.d.ts +22 -0
- package/dist/esm/RenderingEngine/helpers/planarVolumeRendering.js +28 -0
- package/dist/esm/RenderingEngine/helpers/resolveViewportVolumeId.d.ts +1 -0
- package/dist/esm/RenderingEngine/helpers/resolveViewportVolumeId.js +19 -0
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.d.ts +3 -2
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +46 -15
- package/dist/esm/RenderingEngine/helpers/setVolumesForViewports.js +6 -9
- package/dist/esm/RenderingEngine/helpers/stats/RenderModesPanel.d.ts +19 -0
- package/dist/esm/RenderingEngine/helpers/stats/RenderModesPanel.js +228 -0
- package/dist/esm/RenderingEngine/helpers/stats/StatsOverlay.d.ts +22 -3
- package/dist/esm/RenderingEngine/helpers/stats/StatsOverlay.js +192 -18
- package/dist/esm/RenderingEngine/helpers/stats/constants.d.ts +13 -1
- package/dist/esm/RenderingEngine/helpers/stats/constants.js +14 -1
- package/dist/esm/RenderingEngine/helpers/stats/enums.d.ts +2 -1
- package/dist/esm/RenderingEngine/helpers/stats/enums.js +1 -0
- package/dist/esm/RenderingEngine/helpers/stats/types.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/supportsVolumeCompatibilityApi.d.ts +4 -0
- package/dist/esm/RenderingEngine/helpers/supportsVolumeCompatibilityApi.js +7 -0
- package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.d.ts +27 -4
- package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.js +126 -11
- package/dist/esm/RenderingEngine/helpers/viewportTypeUsesCustomRenderingPipeline.d.ts +3 -1
- package/dist/esm/RenderingEngine/helpers/viewportTypeUsesCustomRenderingPipeline.js +9 -2
- package/dist/esm/RenderingEngine/helpers/vtkCanvasCoordinateTransforms.d.ts +12 -0
- package/dist/esm/RenderingEngine/helpers/vtkCanvasCoordinateTransforms.js +57 -0
- package/dist/esm/RenderingEngine/index.d.ts +69 -1
- package/dist/esm/RenderingEngine/index.js +40 -1
- package/dist/esm/RenderingEngine/vtkClasses/index.d.ts +3 -1
- package/dist/esm/RenderingEngine/vtkClasses/index.js +3 -1
- package/dist/esm/RenderingEngine/vtkClasses/vtkSharedImageResliceMapper.d.ts +7 -0
- package/dist/esm/RenderingEngine/vtkClasses/vtkSharedImageResliceMapper.js +21 -0
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLImageResliceMapper.d.ts +7 -0
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLImageResliceMapper.js +420 -0
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLViewNodeFactory.js +7 -0
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +9 -3
- package/dist/esm/cache/cache.d.ts +1 -1
- package/dist/esm/cache/cache.js +4 -1
- package/dist/esm/cache/classes/BaseStreamingImageVolume.js +6 -6
- package/dist/esm/cache/classes/ImageVolume.js +5 -0
- package/dist/esm/enums/CalibrationTypes.d.ts +4 -12
- package/dist/esm/enums/CalibrationTypes.js +3 -13
- package/dist/esm/enums/MetadataModules.d.ts +3 -38
- package/dist/esm/enums/MetadataModules.js +2 -39
- package/dist/esm/enums/ViewportType.d.ts +6 -1
- package/dist/esm/enums/ViewportType.js +5 -0
- package/dist/esm/enums/ViewportTypes.d.ts +5 -0
- package/dist/esm/enums/ViewportTypes.js +23 -0
- package/dist/esm/enums/index.d.ts +2 -1
- package/dist/esm/enums/index.js +2 -1
- package/dist/esm/getEnabledElement.js +4 -1
- package/dist/esm/index.d.ts +72 -2
- package/dist/esm/index.js +41 -2
- package/dist/esm/init.d.ts +2 -1
- package/dist/esm/init.js +14 -1
- package/dist/esm/loaders/ProgressiveRetrieveImages.js +11 -11
- package/dist/esm/loaders/cornerstoneMeshLoader.js +1 -1
- package/dist/esm/loaders/imageLoader.d.ts +2 -1
- package/dist/esm/loaders/imageLoader.js +25 -10
- package/dist/esm/loaders/volumeLoader.js +8 -4
- package/dist/esm/metaData.d.ts +2 -8
- package/dist/esm/metaData.js +2 -75
- package/dist/esm/types/Cornerstone3DConfig.d.ts +11 -0
- package/dist/esm/types/EventTypes.d.ts +3 -3
- package/dist/esm/types/IActor.d.ts +33 -0
- package/dist/esm/types/IActor.js +8 -0
- package/dist/esm/types/ICamera.d.ts +2 -2
- package/dist/esm/types/IEnabledElement.d.ts +1 -1
- package/dist/esm/types/IImageCalibration.d.ts +2 -11
- package/dist/esm/types/IViewport.d.ts +9 -1
- package/dist/esm/types/IWSIViewport.d.ts +3 -2
- package/dist/esm/types/ImagePlaneModule.d.ts +3 -1
- package/dist/esm/types/MetadataModuleTypes.d.ts +1 -70
- package/dist/esm/types/ViewportTypeRegistry.d.ts +33 -0
- package/dist/esm/types/ViewportTypeRegistry.js +0 -0
- package/dist/esm/types/index.d.ts +7 -3
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/utilities/ECGUtilities.d.ts +83 -0
- package/dist/esm/utilities/ECGUtilities.js +228 -0
- package/dist/esm/utilities/FrameRange.js +3 -2
- package/dist/esm/utilities/RLEVoxelMap.js +9 -7
- package/dist/esm/utilities/VideoUtilities.d.ts +34 -0
- package/dist/esm/utilities/VideoUtilities.js +102 -0
- package/dist/esm/utilities/VoxelManager.d.ts +20 -1
- package/dist/esm/utilities/VoxelManager.js +162 -27
- package/dist/esm/utilities/WSIUtilities.d.ts +119 -0
- package/dist/esm/utilities/WSIUtilities.js +110 -0
- package/dist/esm/utilities/buildMetadata.js +23 -23
- package/dist/esm/utilities/calculateSpacingBetweenImageIds.js +6 -5
- package/dist/esm/utilities/calibratedPixelSpacingMetadataProvider.d.ts +5 -5
- package/dist/esm/utilities/calibratedPixelSpacingMetadataProvider.js +2 -15
- package/dist/esm/utilities/clonePoint3.d.ts +3 -0
- package/dist/esm/utilities/clonePoint3.js +3 -0
- package/dist/esm/utilities/colormap.d.ts +2 -1
- package/dist/esm/utilities/colormap.js +43 -4
- package/dist/esm/utilities/deepClone.d.ts +1 -1
- package/dist/esm/utilities/deepClone.js +46 -17
- package/dist/esm/utilities/genericMetadataProvider.js +2 -1
- package/dist/esm/utilities/genericViewportDataSetMetadataProvider.d.ts +8 -0
- package/dist/esm/utilities/genericViewportDataSetMetadataProvider.js +23 -0
- package/dist/esm/utilities/getAcquisitionPlaneOrientation.d.ts +2 -0
- package/dist/esm/utilities/getAcquisitionPlaneOrientation.js +7 -0
- package/dist/esm/utilities/getClosestImageId.js +2 -1
- package/dist/esm/utilities/getClosestStackImageIndexForPoint.js +2 -1
- package/dist/esm/utilities/getPixelSpacingInformation.d.ts +5 -13
- package/dist/esm/utilities/getPixelSpacingInformation.js +4 -93
- package/dist/esm/utilities/getScalingParameters.js +4 -3
- package/dist/esm/utilities/getVOIRangeFromWindowLevel.d.ts +3 -0
- package/dist/esm/utilities/getVOIRangeFromWindowLevel.js +18 -0
- package/dist/esm/utilities/getViewportImageIds.js +1 -1
- package/dist/esm/utilities/getViewportsWithImageURI.d.ts +2 -4
- package/dist/esm/utilities/getViewportsWithImageURI.js +4 -1
- package/dist/esm/utilities/getViewportsWithVolumeId.d.ts +2 -2
- package/dist/esm/utilities/getViewportsWithVolumeId.js +4 -1
- package/dist/esm/utilities/getViewportsWithVolumeURI.d.ts +2 -2
- package/dist/esm/utilities/getViewportsWithVolumeURI.js +4 -1
- package/dist/esm/utilities/getVolumeViewReferenceId.d.ts +6 -0
- package/dist/esm/utilities/getVolumeViewReferenceId.js +6 -0
- package/dist/esm/utilities/getVolumeViewportScrollInfo.d.ts +1 -1
- package/dist/esm/utilities/getVolumeViewportsContainingSameVolumes.d.ts +2 -2
- package/dist/esm/utilities/getVolumeViewportsContainingSameVolumes.js +4 -1
- package/dist/esm/utilities/hasOwn.d.ts +1 -0
- package/dist/esm/utilities/hasOwn.js +3 -0
- package/dist/esm/utilities/imageIdToURI.d.ts +3 -1
- package/dist/esm/utilities/imageIdToURI.js +2 -7
- package/dist/esm/utilities/index.d.ts +11 -1
- package/dist/esm/utilities/index.js +11 -1
- package/dist/esm/utilities/isEqual.d.ts +3 -5
- package/dist/esm/utilities/isEqual.js +3 -48
- package/dist/esm/utilities/isValidVolume.js +19 -4
- package/dist/esm/utilities/isVideoTransferSyntax.d.ts +3 -1
- package/dist/esm/utilities/isVideoTransferSyntax.js +3 -25
- package/dist/esm/utilities/loadImageToCanvas.js +2 -2
- package/dist/esm/utilities/logger.d.ts +3 -14
- package/dist/esm/utilities/logger.js +2 -23
- package/dist/esm/utilities/rotateToViewCoordinates.js +7 -7
- package/dist/esm/utilities/scroll.d.ts +1 -1
- package/dist/esm/utilities/scroll.js +2 -1
- package/dist/esm/utilities/sortImageIdsAndGetSpacing.js +4 -3
- package/dist/esm/utilities/splitImageIdsBy4DTags.d.ts +2 -10
- package/dist/esm/utilities/splitImageIdsBy4DTags.js +2 -312
- package/dist/esm/utilities/toNumber.d.ts +3 -1
- package/dist/esm/utilities/toNumber.js +3 -3
- package/dist/esm/utilities/viewportCapabilities.d.ts +19 -0
- package/dist/esm/utilities/viewportCapabilities.js +32 -0
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/webWorkerManager/webWorkerManager.js +3 -1
- package/package.json +16 -8
|
@@ -5,11 +5,9 @@ import Events from '../enums/Events';
|
|
|
5
5
|
import eventTarget from '../eventTarget';
|
|
6
6
|
import triggerEvent from '../utilities/triggerEvent';
|
|
7
7
|
import ViewportType from '../enums/ViewportType';
|
|
8
|
-
import
|
|
9
|
-
import StackViewport from './StackViewport';
|
|
10
|
-
import VolumeViewport3D from './VolumeViewport3D';
|
|
11
|
-
import viewportTypeUsesCustomRenderingPipeline from './helpers/viewportTypeUsesCustomRenderingPipeline';
|
|
8
|
+
import viewportTypeUsesCustomRenderingPipeline, { viewportUsesCustomRenderingPipeline, } from './helpers/viewportTypeUsesCustomRenderingPipeline';
|
|
12
9
|
import getOrCreateCanvas, { updateCanvasSizeAndAspectRatio, } from './helpers/getOrCreateCanvas';
|
|
10
|
+
import { getViewportClassForInput } from './helpers/viewportTypeToViewportClass';
|
|
13
11
|
class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
14
12
|
constructor(id) {
|
|
15
13
|
super(id);
|
|
@@ -36,11 +34,17 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
36
34
|
}
|
|
37
35
|
});
|
|
38
36
|
};
|
|
39
|
-
const { rendering } = getConfiguration();
|
|
40
|
-
const { webGlContextCount } = rendering;
|
|
41
37
|
if (!this.useCPURendering) {
|
|
38
|
+
this.ensureContextPool();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
ensureContextPool() {
|
|
42
|
+
if (!this.contextPool) {
|
|
43
|
+
const { rendering } = getConfiguration();
|
|
44
|
+
const { webGlContextCount } = rendering;
|
|
42
45
|
this.contextPool = new WebGLContextPool(webGlContextCount);
|
|
43
46
|
}
|
|
47
|
+
return this.contextPool;
|
|
44
48
|
}
|
|
45
49
|
enableVTKjsDrivenViewport(viewportInputEntry) {
|
|
46
50
|
const viewports = this._getViewportsAsArray();
|
|
@@ -53,18 +57,19 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
53
57
|
this.addVtkjsDrivenViewport(internalViewportEntry);
|
|
54
58
|
}
|
|
55
59
|
addVtkjsDrivenViewport(viewportInputEntry) {
|
|
60
|
+
const contextPool = this.ensureContextPool();
|
|
56
61
|
const { element, canvas, viewportId, type, defaultOptions } = viewportInputEntry;
|
|
57
62
|
element.tabIndex = -1;
|
|
58
63
|
let contextIndex = 0;
|
|
59
64
|
if (type === ViewportType.STACK) {
|
|
60
|
-
const contexts =
|
|
65
|
+
const contexts = contextPool.getAllContexts();
|
|
61
66
|
contextIndex = this._viewports.size % contexts.length;
|
|
62
67
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const contextData =
|
|
68
|
+
contextPool.assignViewportToContext(viewportId, contextIndex);
|
|
69
|
+
contextPool.updateViewportSize(viewportId, canvas.width, canvas.height);
|
|
70
|
+
const contextData = contextPool.getContextByIndex(contextIndex);
|
|
66
71
|
const { context: offscreenMultiRenderWindow, container } = contextData;
|
|
67
|
-
const maxSize =
|
|
72
|
+
const maxSize = contextPool.getMaxSizeForContext(contextIndex);
|
|
68
73
|
container.width = maxSize.width;
|
|
69
74
|
container.height = maxSize.height;
|
|
70
75
|
offscreenMultiRenderWindow.resize();
|
|
@@ -87,20 +92,13 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
87
92
|
sHeight: canvas.height,
|
|
88
93
|
defaultOptions: defaultOptions || {},
|
|
89
94
|
};
|
|
90
|
-
|
|
91
|
-
if (
|
|
92
|
-
viewport = new StackViewport(viewportInput);
|
|
93
|
-
}
|
|
94
|
-
else if (type === ViewportType.ORTHOGRAPHIC ||
|
|
95
|
-
type === ViewportType.PERSPECTIVE) {
|
|
96
|
-
viewport = new VolumeViewport(viewportInput);
|
|
97
|
-
}
|
|
98
|
-
else if (type === ViewportType.VOLUME_3D) {
|
|
99
|
-
viewport = new VolumeViewport3D(viewportInput);
|
|
100
|
-
}
|
|
101
|
-
else {
|
|
95
|
+
const ViewportClass = getViewportClassForInput(viewportInputEntry);
|
|
96
|
+
if (!ViewportClass) {
|
|
102
97
|
throw new Error(`Viewport Type ${type} is not supported`);
|
|
103
98
|
}
|
|
99
|
+
const viewport = new ViewportClass(viewportInput);
|
|
100
|
+
viewport.requestedType =
|
|
101
|
+
viewportInputEntry.requestedType ?? type;
|
|
104
102
|
this._viewports.set(viewportId, viewport);
|
|
105
103
|
const eventDetail = {
|
|
106
104
|
element,
|
|
@@ -163,10 +161,17 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
163
161
|
this._resize(vtkDrivenViewports);
|
|
164
162
|
}
|
|
165
163
|
vtkDrivenViewports.forEach((vp) => {
|
|
164
|
+
vp.resize?.();
|
|
166
165
|
const prevCamera = vp.getCamera();
|
|
167
|
-
const rotation = vp.getRotation();
|
|
166
|
+
const rotation = vp.getRotation?.() ?? 0;
|
|
168
167
|
const { flipHorizontal } = prevCamera;
|
|
169
|
-
vp
|
|
168
|
+
const resizeResetViewport = vp;
|
|
169
|
+
if (resizeResetViewport.resetViewStateForResize) {
|
|
170
|
+
resizeResetViewport.resetViewStateForResize();
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
resizeResetViewport.resetCameraForResize?.();
|
|
174
|
+
}
|
|
170
175
|
const displayArea = vp.getDisplayArea();
|
|
171
176
|
if (keepCamera) {
|
|
172
177
|
if (displayArea) {
|
|
@@ -187,11 +192,11 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
187
192
|
}
|
|
188
193
|
}
|
|
189
194
|
renderViewportUsingCustomOrVtkPipeline(viewport) {
|
|
190
|
-
if (
|
|
195
|
+
if (viewportUsesCustomRenderingPipeline(viewport)) {
|
|
191
196
|
const eventDetail = viewport.customRenderViewportToCanvas();
|
|
192
197
|
return eventDetail;
|
|
193
198
|
}
|
|
194
|
-
if (this.
|
|
199
|
+
if (!this.contextPool) {
|
|
195
200
|
throw new Error('GPU not available, and using a viewport with no custom render pipeline.');
|
|
196
201
|
}
|
|
197
202
|
const assignedContextIndex = this.contextPool.getContextIndexForViewport(viewport.id);
|
|
@@ -210,10 +215,10 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
210
215
|
console.warn('Viewport is too small', viewport.sWidth, viewport.sHeight);
|
|
211
216
|
return;
|
|
212
217
|
}
|
|
213
|
-
if (
|
|
218
|
+
if (viewportUsesCustomRenderingPipeline(viewport)) {
|
|
214
219
|
return viewport.customRenderViewportToCanvas();
|
|
215
220
|
}
|
|
216
|
-
if (this.
|
|
221
|
+
if (!this.contextPool) {
|
|
217
222
|
throw new Error('GPU not available, and using a viewport with no custom render pipeline.');
|
|
218
223
|
}
|
|
219
224
|
if (!offscreenMultiRenderWindow.getRenderer(viewport.id)) {
|
|
@@ -241,7 +246,8 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
241
246
|
renderer.setViewport(0, 0, xEnd, yEnd);
|
|
242
247
|
const allRenderers = offscreenMultiRenderWindow.getRenderers();
|
|
243
248
|
allRenderers.forEach(({ renderer: r, id }) => {
|
|
244
|
-
|
|
249
|
+
const baseId = id.split('::')[0];
|
|
250
|
+
r.setDraw(baseId === viewport.id);
|
|
245
251
|
});
|
|
246
252
|
const widgetRenderers = this.getWidgetRenderers();
|
|
247
253
|
widgetRenderers.forEach((viewportId, renderer) => {
|
|
@@ -349,7 +355,13 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
349
355
|
}
|
|
350
356
|
getRenderer(viewportId) {
|
|
351
357
|
const contextIndex = this.contextPool?.getContextIndexForViewport(viewportId);
|
|
358
|
+
if (contextIndex === undefined || !this.contextPool) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
352
361
|
const contextData = this.contextPool.getContextByIndex(contextIndex);
|
|
362
|
+
if (!contextData) {
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
353
365
|
const { context: offscreenMultiRenderWindow } = contextData;
|
|
354
366
|
return offscreenMultiRenderWindow.getRenderer(viewportId);
|
|
355
367
|
}
|
|
@@ -360,7 +372,7 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
360
372
|
}
|
|
361
373
|
super.disableElement(viewportId);
|
|
362
374
|
if (!viewportTypeUsesCustomRenderingPipeline(viewport.type) &&
|
|
363
|
-
|
|
375
|
+
this.contextPool) {
|
|
364
376
|
const contextIndex = this.contextPool.getContextIndexForViewport(viewportId);
|
|
365
377
|
if (contextIndex !== undefined) {
|
|
366
378
|
const contextData = this.contextPool.getContextByIndex(contextIndex);
|
|
@@ -373,17 +385,23 @@ class ContextPoolRenderingEngine extends BaseRenderingEngine {
|
|
|
373
385
|
}
|
|
374
386
|
}
|
|
375
387
|
destroy() {
|
|
388
|
+
super.destroy();
|
|
376
389
|
if (this.contextPool) {
|
|
377
390
|
this.contextPool.destroy();
|
|
378
391
|
}
|
|
379
|
-
super.destroy();
|
|
380
392
|
}
|
|
381
393
|
getOffscreenMultiRenderWindow(viewportId) {
|
|
382
|
-
if (this.
|
|
383
|
-
throw new Error('Offscreen multi render window is not available
|
|
394
|
+
if (!this.contextPool) {
|
|
395
|
+
throw new Error('Offscreen multi render window is not available.');
|
|
384
396
|
}
|
|
385
397
|
const contextIndex = this.contextPool.getContextIndexForViewport(viewportId);
|
|
398
|
+
if (contextIndex === undefined) {
|
|
399
|
+
throw new Error(`Offscreen multi render window is not available for viewport ${viewportId}.`);
|
|
400
|
+
}
|
|
386
401
|
const contextData = this.contextPool.getContextByIndex(contextIndex);
|
|
402
|
+
if (!contextData) {
|
|
403
|
+
throw new Error(`Offscreen multi render window is not available for viewport ${viewportId}.`);
|
|
404
|
+
}
|
|
387
405
|
return contextData.context;
|
|
388
406
|
}
|
|
389
407
|
}
|
|
@@ -78,7 +78,7 @@ declare class ECGViewport extends Viewport {
|
|
|
78
78
|
indexToWorld: (point: Point3) => Point3;
|
|
79
79
|
};
|
|
80
80
|
hasPixelSpacing: boolean;
|
|
81
|
-
calibration: import("
|
|
81
|
+
calibration: import("packages/metadata/dist/esm").IImageCalibration;
|
|
82
82
|
preScale: {
|
|
83
83
|
scaled: boolean;
|
|
84
84
|
};
|
|
@@ -1,31 +1,10 @@
|
|
|
1
|
-
import { Events as EVENTS
|
|
1
|
+
import { Events as EVENTS } from '../enums';
|
|
2
2
|
import { Transform } from './helpers/cpuFallback/rendering/transform';
|
|
3
3
|
import triggerEvent from '../utilities/triggerEvent';
|
|
4
4
|
import Viewport from './Viewport';
|
|
5
5
|
import { getOrCreateCanvas } from './helpers';
|
|
6
|
-
import
|
|
7
|
-
const SECONDS_WIDTH = 150;
|
|
8
|
-
const CHANNEL_SPACING = 5;
|
|
6
|
+
import { ECG_CHANNEL_SPACING, computeECGChannelLayouts, computeECGHeight, drawECGGrid, drawECGLabels, drawECGTraces, ECG_RENDERING_COLORS, ECG_SECONDS_WIDTH, getVisibleECGChannelsByFlag, loadECGWaveform, } from '../utilities/ECGUtilities';
|
|
9
7
|
const ECG_AMPLITUDE_INDEX_SIZE = 65536;
|
|
10
|
-
const COLOR_GRID_MAJOR = '#7f0000';
|
|
11
|
-
const COLOR_GRID_MINOR = '#3f0000';
|
|
12
|
-
const COLOR_BASELINE = '#7F4C00';
|
|
13
|
-
const COLOR_TRACE = '#ffffff';
|
|
14
|
-
const COLOR_LABEL = '#ffff00';
|
|
15
|
-
const COLOR_BACKGROUND = '#000000';
|
|
16
|
-
function computeMinMax(data) {
|
|
17
|
-
let min = 0;
|
|
18
|
-
let max = 0;
|
|
19
|
-
for (let i = 0; i < data.length; i++) {
|
|
20
|
-
if (data[i] < min) {
|
|
21
|
-
min = data[i];
|
|
22
|
-
}
|
|
23
|
-
if (data[i] > max) {
|
|
24
|
-
max = data[i];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
return { min, max };
|
|
28
|
-
}
|
|
29
8
|
class ECGViewport extends Viewport {
|
|
30
9
|
constructor(props) {
|
|
31
10
|
super({
|
|
@@ -155,7 +134,7 @@ class ECGViewport extends Viewport {
|
|
|
155
134
|
const m = transform.getMatrix();
|
|
156
135
|
const ctx = this.canvasContext;
|
|
157
136
|
ctx.resetTransform();
|
|
158
|
-
ctx.fillStyle =
|
|
137
|
+
ctx.fillStyle = ECG_RENDERING_COLORS.background;
|
|
159
138
|
ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
160
139
|
ctx.setTransform(m[0] / dpr, m[1] / dpr, m[2] / dpr, m[3] / dpr, m[4] / dpr, m[5] / dpr);
|
|
161
140
|
const layouts = this.computeChannelLayouts();
|
|
@@ -195,33 +174,19 @@ class ECGViewport extends Viewport {
|
|
|
195
174
|
}
|
|
196
175
|
async setEcg(imageId) {
|
|
197
176
|
this.imageId = imageId;
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const channelArrays = await ecgModule.waveformData.retrieveBulkData();
|
|
204
|
-
this.channels = [];
|
|
205
|
-
for (let i = 0; i < numberOfChannels; i++) {
|
|
206
|
-
const channelDef = channelDefinitions[i] || {};
|
|
207
|
-
const name = channelDef.channelSourceSequence?.codeMeaning ||
|
|
208
|
-
channelDef.ChannelSourceSequence?.CodeMeaning ||
|
|
209
|
-
`Channel ${i + 1}`;
|
|
210
|
-
const data = channelArrays[i] || new Int16Array(0);
|
|
211
|
-
const { min, max } = computeMinMax(data);
|
|
212
|
-
this.channels.push({ name, data, visible: true, min, max });
|
|
213
|
-
}
|
|
177
|
+
const { waveform, calibration } = await loadECGWaveform(imageId);
|
|
178
|
+
this.channels = waveform.channels.map((channel) => ({
|
|
179
|
+
...channel,
|
|
180
|
+
visible: true,
|
|
181
|
+
}));
|
|
214
182
|
this.waveformData = {
|
|
183
|
+
...waveform,
|
|
215
184
|
channels: this.channels,
|
|
216
|
-
|
|
217
|
-
numberOfSamples,
|
|
218
|
-
samplingFrequency,
|
|
219
|
-
bitsAllocated,
|
|
220
|
-
sampleInterpretation,
|
|
221
|
-
multiplexGroupLabel,
|
|
185
|
+
multiplexGroupLabel: waveform.multiplexGroupLabel,
|
|
222
186
|
};
|
|
223
|
-
this.calibration =
|
|
224
|
-
this.ecgWidth = Math.ceil((numberOfSamples *
|
|
187
|
+
this.calibration = calibration;
|
|
188
|
+
this.ecgWidth = Math.ceil((this.waveformData.numberOfSamples * ECG_SECONDS_WIDTH) /
|
|
189
|
+
this.waveformData.samplingFrequency);
|
|
225
190
|
this.computeChannelScale();
|
|
226
191
|
this.recalculateHeight();
|
|
227
192
|
this.refreshRenderValues();
|
|
@@ -249,7 +214,7 @@ class ECGViewport extends Viewport {
|
|
|
249
214
|
return { width: this.ecgWidth, height: this.ecgHeight };
|
|
250
215
|
}
|
|
251
216
|
computeChannelScale() {
|
|
252
|
-
const visibleChannels = this.channels
|
|
217
|
+
const visibleChannels = getVisibleECGChannelsByFlag(this.channels);
|
|
253
218
|
if (visibleChannels.length === 0 || this.ecgWidth === 0) {
|
|
254
219
|
this.channelScale = 0;
|
|
255
220
|
return;
|
|
@@ -263,36 +228,18 @@ class ECGViewport extends Viewport {
|
|
|
263
228
|
? this.canvas.offsetHeight / this.canvas.offsetWidth
|
|
264
229
|
: 2 / 3;
|
|
265
230
|
const targetTotalHeight = this.ecgWidth * canvasAspect;
|
|
266
|
-
const totalSpacing =
|
|
231
|
+
const totalSpacing = ECG_CHANNEL_SPACING * visibleChannels.length;
|
|
267
232
|
const heightPerChannel = (targetTotalHeight - totalSpacing) / visibleChannels.length;
|
|
268
233
|
this.channelScale = heightPerChannel / (maxRange * 1.25);
|
|
269
234
|
}
|
|
270
235
|
recalculateHeight() {
|
|
271
|
-
|
|
272
|
-
let totalHeight = 0;
|
|
273
|
-
for (const channel of this.channels) {
|
|
274
|
-
if (!channel.visible || channel.data.length === 0) {
|
|
275
|
-
continue;
|
|
276
|
-
}
|
|
277
|
-
const itemHeight = (channel.max - channel.min) * scale * 1.25;
|
|
278
|
-
totalHeight += itemHeight + CHANNEL_SPACING;
|
|
279
|
-
}
|
|
280
|
-
this.ecgHeight = totalHeight;
|
|
236
|
+
this.ecgHeight = computeECGHeight(getVisibleECGChannelsByFlag(this.channels), this.channelScale);
|
|
281
237
|
}
|
|
282
238
|
computeChannelLayouts() {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
if (!channel.visible || channel.data.length === 0) {
|
|
288
|
-
continue;
|
|
289
|
-
}
|
|
290
|
-
const itemHeight = (channel.max - channel.min) * scale * 1.25;
|
|
291
|
-
yOffset += itemHeight + CHANNEL_SPACING;
|
|
292
|
-
const baseline = yOffset + channel.min * scale;
|
|
293
|
-
layouts.push({ channel, itemHeight, yOffset, baseline });
|
|
294
|
-
}
|
|
295
|
-
return layouts;
|
|
239
|
+
return computeECGChannelLayouts({
|
|
240
|
+
visibleChannels: getVisibleECGChannelsByFlag(this.channels),
|
|
241
|
+
channelScale: this.channelScale,
|
|
242
|
+
});
|
|
296
243
|
}
|
|
297
244
|
setProperties(props) {
|
|
298
245
|
if (props.visibleChannels !== undefined) {
|
|
@@ -335,7 +282,7 @@ class ECGViewport extends Viewport {
|
|
|
335
282
|
this.ecgCamera.panWorld[1] - panWorldDelta[1],
|
|
336
283
|
];
|
|
337
284
|
}
|
|
338
|
-
this.canvasContext.fillStyle =
|
|
285
|
+
this.canvasContext.fillStyle = ECG_RENDERING_COLORS.background;
|
|
339
286
|
this.canvasContext.fillRect(0, 0, this.canvas.width, this.canvas.height);
|
|
340
287
|
this.renderFrame();
|
|
341
288
|
}
|
|
@@ -416,96 +363,22 @@ class ECGViewport extends Viewport {
|
|
|
416
363
|
return transform;
|
|
417
364
|
}
|
|
418
365
|
drawGrid(ctx) {
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
}
|
|
425
|
-
const MIN_LINE_SPACING = 8;
|
|
426
|
-
let hGridUnit = 100;
|
|
427
|
-
while (hGridUnit * scale < MIN_LINE_SPACING) {
|
|
428
|
-
hGridUnit *= 2;
|
|
429
|
-
}
|
|
430
|
-
const minorH = hGridUnit * scale;
|
|
431
|
-
const majorH = minorH * 5;
|
|
432
|
-
const minorV = SECONDS_WIDTH / 25;
|
|
433
|
-
const majorV = SECONDS_WIDTH / 5;
|
|
434
|
-
ctx.strokeStyle = COLOR_GRID_MINOR;
|
|
435
|
-
ctx.lineWidth = 0.5;
|
|
436
|
-
ctx.beginPath();
|
|
437
|
-
const hLines = Math.floor(pxHeight / minorH);
|
|
438
|
-
for (let h = 1; h <= hLines; h++) {
|
|
439
|
-
if (h % 5 !== 0) {
|
|
440
|
-
const y = h * minorH;
|
|
441
|
-
ctx.moveTo(0, y);
|
|
442
|
-
ctx.lineTo(pxWidth, y);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
const vLines = Math.floor(pxWidth / minorV);
|
|
446
|
-
for (let v = 1; v <= vLines; v++) {
|
|
447
|
-
if (v % 5 !== 0) {
|
|
448
|
-
const x = v * minorV;
|
|
449
|
-
ctx.moveTo(x, 0);
|
|
450
|
-
ctx.lineTo(x, pxHeight);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
ctx.stroke();
|
|
454
|
-
ctx.strokeStyle = COLOR_GRID_MAJOR;
|
|
455
|
-
ctx.lineWidth = 1;
|
|
456
|
-
ctx.beginPath();
|
|
457
|
-
const hMajorLines = Math.floor(pxHeight / majorH);
|
|
458
|
-
for (let h = 1; h <= hMajorLines; h++) {
|
|
459
|
-
const y = h * majorH;
|
|
460
|
-
ctx.moveTo(0, y);
|
|
461
|
-
ctx.lineTo(pxWidth, y);
|
|
462
|
-
}
|
|
463
|
-
const vMajorLines = Math.floor(pxWidth / majorV);
|
|
464
|
-
for (let v = 1; v <= vMajorLines; v++) {
|
|
465
|
-
const x = v * majorV;
|
|
466
|
-
ctx.moveTo(x, 0);
|
|
467
|
-
ctx.lineTo(x, pxHeight);
|
|
468
|
-
}
|
|
469
|
-
ctx.stroke();
|
|
366
|
+
drawECGGrid(ctx, {
|
|
367
|
+
ecgWidth: this.ecgWidth,
|
|
368
|
+
ecgHeight: this.ecgHeight,
|
|
369
|
+
channelScale: this.channelScale,
|
|
370
|
+
});
|
|
470
371
|
}
|
|
471
372
|
drawTraces(ctx, layouts) {
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
ctx.moveTo(0, baseline);
|
|
479
|
-
ctx.lineTo(pxWidth, baseline);
|
|
480
|
-
ctx.stroke();
|
|
481
|
-
ctx.strokeStyle = COLOR_TRACE;
|
|
482
|
-
ctx.lineWidth = 1;
|
|
483
|
-
ctx.beginPath();
|
|
484
|
-
for (let i = 0; i < channel.data.length; i++) {
|
|
485
|
-
const x = (i * pxWidth) / channel.data.length;
|
|
486
|
-
const y = baseline - channel.data[i] * scale;
|
|
487
|
-
if (i === 0) {
|
|
488
|
-
ctx.moveTo(x, y);
|
|
489
|
-
}
|
|
490
|
-
else {
|
|
491
|
-
ctx.lineTo(x, y);
|
|
492
|
-
}
|
|
493
|
-
}
|
|
494
|
-
ctx.stroke();
|
|
495
|
-
}
|
|
373
|
+
drawECGTraces({
|
|
374
|
+
ctx,
|
|
375
|
+
layouts,
|
|
376
|
+
ecgWidth: this.ecgWidth,
|
|
377
|
+
channelScale: this.channelScale,
|
|
378
|
+
});
|
|
496
379
|
}
|
|
497
380
|
drawLabels(ctx, layouts) {
|
|
498
|
-
|
|
499
|
-
const fontSize = 14 / worldToCanvas;
|
|
500
|
-
for (const { channel, itemHeight, yOffset } of layouts) {
|
|
501
|
-
const labelY = yOffset - itemHeight + fontSize;
|
|
502
|
-
ctx.font = `${fontSize}px monospace`;
|
|
503
|
-
const textWidth = ctx.measureText(channel.name).width;
|
|
504
|
-
ctx.fillStyle = COLOR_BACKGROUND;
|
|
505
|
-
ctx.fillRect(5, labelY - fontSize, textWidth + 4, fontSize + 4);
|
|
506
|
-
ctx.fillStyle = COLOR_LABEL;
|
|
507
|
-
ctx.fillText(channel.name, 5, labelY);
|
|
508
|
-
}
|
|
381
|
+
drawECGLabels(ctx, layouts, this.getWorldToCanvasRatio());
|
|
509
382
|
}
|
|
510
383
|
getImageData() {
|
|
511
384
|
if (!this.waveformData) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BaseViewportRenderContext, DataAddOptions, LoadedData, RenderPathDefinition, RenderPathResolver } from './ViewportArchitectureTypes';
|
|
2
|
+
import type ViewportType from '../../enums/ViewportType';
|
|
3
|
+
export declare class DefaultRenderPathResolver implements RenderPathResolver {
|
|
4
|
+
private paths;
|
|
5
|
+
constructor(paths?: ReadonlyArray<RenderPathDefinition>);
|
|
6
|
+
register<TRootContext extends BaseViewportRenderContext, TAdapterContext extends BaseViewportRenderContext>(path: RenderPathDefinition<TRootContext, TAdapterContext>): void;
|
|
7
|
+
private add;
|
|
8
|
+
resolve<TContext extends BaseViewportRenderContext>(type: ViewportType, data: LoadedData, options: DataAddOptions): RenderPathDefinition<TContext, BaseViewportRenderContext>;
|
|
9
|
+
}
|
|
10
|
+
export declare const defaultRenderPathResolver: DefaultRenderPathResolver;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class DefaultRenderPathResolver {
|
|
2
|
+
constructor(paths = []) {
|
|
3
|
+
this.paths = [];
|
|
4
|
+
paths.forEach((path) => this.add(path));
|
|
5
|
+
}
|
|
6
|
+
register(path) {
|
|
7
|
+
this.add(path);
|
|
8
|
+
}
|
|
9
|
+
add(path) {
|
|
10
|
+
const existingPath = this.paths.find((candidate) => candidate.id === path.id);
|
|
11
|
+
if (existingPath) {
|
|
12
|
+
console.debug(`[DefaultRenderPathResolver] Duplicate render path registration ignored for "${path.id}"`);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
this.paths.push(path);
|
|
16
|
+
}
|
|
17
|
+
resolve(type, data, options) {
|
|
18
|
+
const path = this.paths.find((candidate) => candidate.type === type && candidate.matches(data, options));
|
|
19
|
+
if (!path) {
|
|
20
|
+
throw new Error(`No render path for ${type}/${data.type}/${options.renderMode}`);
|
|
21
|
+
}
|
|
22
|
+
return path;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export const defaultRenderPathResolver = new DefaultRenderPathResolver();
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ViewportType } from '../../../enums';
|
|
2
|
+
import type { DataAddOptions, LoadedData, RenderPathAttachment, RenderPathDefinition, RenderPath } from '../ViewportArchitectureTypes';
|
|
3
|
+
import type { ECGCanvasRenderContext, ECGDataPresentation } from './ECGViewportTypes';
|
|
4
|
+
export declare class CanvasECGRenderPath implements RenderPath<ECGCanvasRenderContext> {
|
|
5
|
+
addData(ctx: ECGCanvasRenderContext, data: LoadedData, options: DataAddOptions): Promise<RenderPathAttachment<ECGDataPresentation>>;
|
|
6
|
+
private updateDataPresentation;
|
|
7
|
+
private applyViewState;
|
|
8
|
+
private getFrameOfReferenceUID;
|
|
9
|
+
private render;
|
|
10
|
+
private removeData;
|
|
11
|
+
}
|
|
12
|
+
export declare class CanvasECGPath implements RenderPathDefinition<ECGCanvasRenderContext> {
|
|
13
|
+
readonly id = "ecg:canvas-signal";
|
|
14
|
+
readonly type = ViewportType.ECG_NEXT;
|
|
15
|
+
matches(data: LoadedData, options: DataAddOptions): boolean;
|
|
16
|
+
createRenderPath(): CanvasECGRenderPath;
|
|
17
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { Events as EVENTS, ViewportType } from '../../../enums';
|
|
2
|
+
import triggerEvent from '../../../utilities/triggerEvent';
|
|
3
|
+
import { computeECGChannelLayouts, computeECGRenderMetrics, drawECGGrid, drawECGLabels, drawECGTraces, ensureECGCanvasSize, getVisibleECGChannels, } from '../../../utilities/ECGUtilities';
|
|
4
|
+
import { resolveECGCanvasMapping } from './ecgViewportCamera';
|
|
5
|
+
export class CanvasECGRenderPath {
|
|
6
|
+
async addData(ctx, data, options) {
|
|
7
|
+
const waveform = data;
|
|
8
|
+
const rendering = {
|
|
9
|
+
renderMode: 'signal2d',
|
|
10
|
+
canvas: ctx.canvas,
|
|
11
|
+
canvasContext: ctx.canvasContext,
|
|
12
|
+
metrics: {
|
|
13
|
+
ecgWidth: 1,
|
|
14
|
+
ecgHeight: 1,
|
|
15
|
+
channelScale: 1,
|
|
16
|
+
worldToCanvasRatio: 1,
|
|
17
|
+
xOffsetCanvas: 0,
|
|
18
|
+
yOffsetCanvas: 0,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
rendering,
|
|
23
|
+
updateDataPresentation: (props) => {
|
|
24
|
+
this.updateDataPresentation(rendering, props);
|
|
25
|
+
},
|
|
26
|
+
applyViewState: (camera) => {
|
|
27
|
+
this.applyViewState(rendering, camera);
|
|
28
|
+
},
|
|
29
|
+
getFrameOfReferenceUID: () => {
|
|
30
|
+
return this.getFrameOfReferenceUID(ctx);
|
|
31
|
+
},
|
|
32
|
+
render: () => {
|
|
33
|
+
this.render(ctx, rendering, waveform);
|
|
34
|
+
},
|
|
35
|
+
removeData: () => {
|
|
36
|
+
this.removeData();
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
updateDataPresentation(rendering, props) {
|
|
41
|
+
rendering.currentDataPresentation = props;
|
|
42
|
+
}
|
|
43
|
+
applyViewState(rendering, camera) {
|
|
44
|
+
rendering.currentCamera = camera;
|
|
45
|
+
}
|
|
46
|
+
getFrameOfReferenceUID(ctx) {
|
|
47
|
+
return `ecg-viewport-${ctx.viewportId}`;
|
|
48
|
+
}
|
|
49
|
+
render(ctx, rendering, waveform) {
|
|
50
|
+
drawFrame(ctx, rendering, waveform);
|
|
51
|
+
}
|
|
52
|
+
removeData() {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class CanvasECGPath {
|
|
56
|
+
constructor() {
|
|
57
|
+
this.id = 'ecg:canvas-signal';
|
|
58
|
+
this.type = ViewportType.ECG_NEXT;
|
|
59
|
+
}
|
|
60
|
+
matches(data, options) {
|
|
61
|
+
return data.type === 'ecg' && options.renderMode === 'signal2d';
|
|
62
|
+
}
|
|
63
|
+
createRenderPath() {
|
|
64
|
+
return new CanvasECGRenderPath();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function getEffectiveTransform(metrics, camera, canvas) {
|
|
68
|
+
const mapping = resolveECGCanvasMapping({
|
|
69
|
+
metrics,
|
|
70
|
+
camera,
|
|
71
|
+
canvas,
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
effectiveRatio: mapping.effectiveRatio,
|
|
75
|
+
xOffset: mapping.xOffset,
|
|
76
|
+
yOffset: mapping.yOffset,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function computeTimeWindow(waveform, camera) {
|
|
80
|
+
const durationMs = (waveform.numberOfSamples / waveform.samplingFrequency) * 1000;
|
|
81
|
+
const startMs = Math.max(0, Math.min(camera.timeRange[0], durationMs));
|
|
82
|
+
const requestedEnd = Math.max(startMs + 1, camera.timeRange[1]);
|
|
83
|
+
const endMs = Math.max(startMs + 1, Math.min(requestedEnd, durationMs));
|
|
84
|
+
const startIndex = Math.max(0, Math.min(waveform.numberOfSamples - 1, Math.floor((startMs / 1000) * waveform.samplingFrequency)));
|
|
85
|
+
const endIndex = Math.max(startIndex + 1, Math.min(waveform.numberOfSamples, Math.ceil((endMs / 1000) * waveform.samplingFrequency)));
|
|
86
|
+
return {
|
|
87
|
+
startMs,
|
|
88
|
+
endMs,
|
|
89
|
+
startIndex,
|
|
90
|
+
endIndex,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
function drawFrame(ecgCtx, ecgRendering, waveform) {
|
|
94
|
+
const { canvas, canvasContext, currentCamera, currentDataPresentation } = ecgRendering;
|
|
95
|
+
if (!currentCamera) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const visibleChannels = getVisibleECGChannels(waveform.channels, currentDataPresentation?.visibleChannels);
|
|
99
|
+
ensureECGCanvasSize(canvas);
|
|
100
|
+
const metrics = computeECGRenderMetrics({
|
|
101
|
+
canvas,
|
|
102
|
+
visibleChannels,
|
|
103
|
+
windowMs: Math.max(1, currentCamera.timeRange[1] - currentCamera.timeRange[0]),
|
|
104
|
+
valueRange: currentCamera.valueRange,
|
|
105
|
+
});
|
|
106
|
+
const layouts = computeECGChannelLayouts({
|
|
107
|
+
visibleChannels,
|
|
108
|
+
channelScale: metrics.channelScale,
|
|
109
|
+
});
|
|
110
|
+
const timeWindow = computeTimeWindow(waveform, currentCamera);
|
|
111
|
+
const dpr = window.devicePixelRatio || 1;
|
|
112
|
+
ecgRendering.metrics = metrics;
|
|
113
|
+
const { effectiveRatio, xOffset, yOffset } = getEffectiveTransform(metrics, currentCamera, canvas);
|
|
114
|
+
canvasContext.resetTransform();
|
|
115
|
+
canvasContext.fillStyle = '#000000';
|
|
116
|
+
canvasContext.fillRect(0, 0, canvas.width, canvas.height);
|
|
117
|
+
if (currentDataPresentation?.visible === false) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
canvasContext.globalAlpha = currentDataPresentation?.opacity ?? 1;
|
|
121
|
+
canvasContext.setTransform(effectiveRatio * dpr, 0, 0, effectiveRatio * dpr, xOffset * dpr, yOffset * dpr);
|
|
122
|
+
drawECGGrid(canvasContext, metrics, {
|
|
123
|
+
showGrid: currentDataPresentation?.showGrid,
|
|
124
|
+
});
|
|
125
|
+
drawECGTraces({
|
|
126
|
+
ctx: canvasContext,
|
|
127
|
+
layouts,
|
|
128
|
+
ecgWidth: metrics.ecgWidth,
|
|
129
|
+
channelScale: metrics.channelScale,
|
|
130
|
+
startIndex: timeWindow.startIndex,
|
|
131
|
+
endIndex: timeWindow.endIndex,
|
|
132
|
+
lineWidth: currentDataPresentation?.lineWidth,
|
|
133
|
+
amplitudeScale: currentDataPresentation?.amplitudeScale,
|
|
134
|
+
});
|
|
135
|
+
drawECGLabels(canvasContext, layouts, metrics.worldToCanvasRatio);
|
|
136
|
+
canvasContext.resetTransform();
|
|
137
|
+
canvasContext.globalAlpha = 1;
|
|
138
|
+
triggerEvent(ecgCtx.element, EVENTS.IMAGE_RENDERED, {
|
|
139
|
+
element: ecgCtx.element,
|
|
140
|
+
viewportId: ecgCtx.viewportId,
|
|
141
|
+
renderingEngineId: ecgCtx.renderingEngineId,
|
|
142
|
+
rendering: ecgRendering,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DataProvider, LoadedData } from '../ViewportArchitectureTypes';
|
|
2
|
+
import type { ECGWaveformPayload } from './ECGViewportTypes';
|
|
3
|
+
export declare class DefaultECGDataProvider implements DataProvider {
|
|
4
|
+
load(dataId: string): Promise<LoadedData<ECGWaveformPayload>>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { loadECGWaveform } from '../../../utilities/ECGUtilities';
|
|
2
|
+
import { getGenericViewportSourceDataId } from '../genericViewportDataSetAccess';
|
|
3
|
+
export class DefaultECGDataProvider {
|
|
4
|
+
async load(dataId) {
|
|
5
|
+
const sourceDataId = getGenericViewportSourceDataId(dataId);
|
|
6
|
+
const { waveform } = await loadECGWaveform(sourceDataId);
|
|
7
|
+
return {
|
|
8
|
+
id: dataId,
|
|
9
|
+
type: 'ecg',
|
|
10
|
+
...waveform,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|