@cornerstonejs/core 2.0.0-beta.20 → 2.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/RenderingEngine/BaseVolumeViewport.d.ts +23 -13
- package/dist/esm/RenderingEngine/BaseVolumeViewport.js +36 -44
- package/dist/esm/RenderingEngine/CanvasActor/CanvasMapper.d.ts +1 -1
- package/dist/esm/RenderingEngine/CanvasActor/CanvasProperties.d.ts +1 -1
- package/dist/esm/RenderingEngine/CanvasActor/index.js +2 -1
- package/dist/esm/RenderingEngine/RenderingEngine.d.ts +7 -8
- package/dist/esm/RenderingEngine/RenderingEngine.js +18 -17
- package/dist/esm/RenderingEngine/StackViewport.d.ts +29 -18
- package/dist/esm/RenderingEngine/StackViewport.js +66 -50
- package/dist/esm/RenderingEngine/VideoViewport.d.ts +19 -28
- package/dist/esm/RenderingEngine/VideoViewport.js +59 -22
- package/dist/esm/RenderingEngine/Viewport.d.ts +25 -14
- package/dist/esm/RenderingEngine/Viewport.js +20 -14
- package/dist/esm/RenderingEngine/VolumeViewport.d.ts +21 -9
- package/dist/esm/RenderingEngine/VolumeViewport.js +88 -8
- package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +3 -3
- package/dist/esm/RenderingEngine/VolumeViewport3D.js +10 -3
- package/dist/esm/RenderingEngine/WSIViewport.d.ts +58 -0
- package/dist/esm/RenderingEngine/WSIViewport.js +414 -0
- package/dist/esm/RenderingEngine/helpers/addImageSlicesToViewports.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/addImageSlicesToViewports.js +3 -3
- package/dist/esm/RenderingEngine/helpers/addVolumesToViewports.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/colormap.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/lookupTable.d.ts +2 -2
- package/dist/esm/RenderingEngine/helpers/cpuFallback/colors/lookupTable.js +15 -5
- package/dist/esm/RenderingEngine/helpers/cpuFallback/drawImageSync.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/calculateTransform.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/canvasToPixel.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/correctShift.d.ts +3 -3
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/createViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/doesImageNeedToBeRendered.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/fitToWindow.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateColorLUT.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateColorLUT.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateLut.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/generateLut.js +2 -2
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getDefaultViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getImageFitScale.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getImageSize.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getLut.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getLut.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/getTransform.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/initializeRenderCanvas.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/lutMatches.d.ts +2 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/lutMatches.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/pixelToCanvas.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderColorImage.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderColorImage.js +3 -4
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderGrayscaleImage.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderGrayscaleImage.js +2 -3
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/renderPseudoColorImage.js +2 -2
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/resetCamera.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/resize.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/saveLastRendered.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/setDefaultViewport.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/setToPixelCoordinateSystem.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedColorPixelDataToCanvasImageData.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedColorPixelDataToCanvasImageData.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageData.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageData.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataColorLUT.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPET.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPET.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUT.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataPseudocolorLUTPET.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataRGBA.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedPixelDataToCanvasImageDataRGBA.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedRGBAPixelDataToCanvasImageData.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/storedRGBAPixelDataToCanvasImageData.js +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/transform.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/cpuFallback/rendering/validator.d.ts +2 -2
- package/dist/esm/RenderingEngine/helpers/createVolumeActor.d.ts +3 -3
- package/dist/esm/RenderingEngine/helpers/createVolumeActor.js +3 -6
- package/dist/esm/RenderingEngine/helpers/createVolumeMapper.d.ts +4 -1
- package/dist/esm/RenderingEngine/helpers/getOrCreateCanvas.js +5 -4
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.d.ts +2 -2
- package/dist/esm/RenderingEngine/helpers/setDefaultVolumeVOI.js +10 -35
- package/dist/esm/RenderingEngine/helpers/setVolumesForViewports.d.ts +1 -1
- package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.d.ts +2 -0
- package/dist/esm/RenderingEngine/helpers/viewportTypeToViewportClass.js +2 -0
- package/dist/esm/RenderingEngine/helpers/volumeNewImageEventDispatcher.d.ts +1 -1
- package/dist/esm/RenderingEngine/renderingEngineCache.d.ts +1 -1
- package/dist/esm/RenderingEngine/vtkClasses/vtkSlabCamera.d.ts +4 -2
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLTexture.js +87 -78
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLViewNodeFactory.js +1 -1
- package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +83 -42
- package/dist/esm/Settings.d.ts +1 -1
- package/dist/esm/cache/cache.d.ts +15 -19
- package/dist/esm/cache/cache.js +110 -56
- package/dist/esm/cache/classes/Contour.d.ts +4 -4
- package/dist/esm/cache/classes/ContourSet.d.ts +3 -3
- package/dist/esm/cache/classes/ImageVolume.d.ts +19 -19
- package/dist/esm/cache/classes/ImageVolume.js +48 -254
- package/dist/esm/cache/classes/Surface.d.ts +3 -3
- package/dist/esm/constants/cpuColormaps.d.ts +1 -1
- package/dist/esm/constants/viewportPresets.d.ts +1 -1
- package/dist/esm/enums/GenerateImageType.d.ts +5 -0
- package/dist/esm/enums/GenerateImageType.js +6 -0
- package/dist/esm/enums/MetadataModules.d.ts +2 -1
- package/dist/esm/enums/MetadataModules.js +1 -0
- package/dist/esm/enums/ViewportType.d.ts +2 -1
- package/dist/esm/enums/ViewportType.js +1 -0
- package/dist/esm/enums/index.d.ts +2 -2
- package/dist/esm/enums/index.js +2 -2
- package/dist/esm/eventTarget.js +2 -3
- package/dist/esm/getEnabledElement.d.ts +1 -1
- package/dist/esm/global.d.ts +0 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +3 -2
- package/dist/esm/init.d.ts +5 -8
- package/dist/esm/init.js +21 -82
- package/dist/esm/loaders/ProgressiveRetrieveImages.d.ts +5 -5
- package/dist/esm/loaders/ProgressiveRetrieveImages.js +3 -1
- package/dist/esm/loaders/configuration/interleavedRetrieve.d.ts +1 -1
- package/dist/esm/loaders/fillNearbyFrames.d.ts +2 -2
- package/dist/esm/loaders/geometryLoader.d.ts +3 -3
- package/dist/esm/loaders/imageLoader.d.ts +12 -17
- package/dist/esm/loaders/imageLoader.js +174 -95
- package/dist/esm/loaders/utils/contourSet/createContourSet.d.ts +1 -1
- package/dist/esm/loaders/utils/contourSet/validateContourSet.d.ts +1 -1
- package/dist/esm/loaders/utils/surface/createSurface.d.ts +1 -1
- package/dist/esm/loaders/utils/surface/validateSurface.d.ts +1 -1
- package/dist/esm/loaders/volumeLoader.d.ts +14 -22
- package/dist/esm/loaders/volumeLoader.js +62 -210
- package/dist/esm/metaData.d.ts +2 -4
- package/dist/esm/requestPool/requestPoolManager.d.ts +7 -9
- package/dist/esm/types/AABB2.d.ts +2 -2
- package/dist/esm/types/AABB3.d.ts +2 -2
- package/dist/esm/types/ActorSliceRange.d.ts +5 -5
- package/dist/esm/types/BoundsIJK.d.ts +1 -1
- package/dist/esm/types/BoundsLPS.d.ts +1 -1
- package/dist/esm/types/CPUFallbackColormap.d.ts +3 -3
- package/dist/esm/types/CPUFallbackColormapData.d.ts +4 -4
- package/dist/esm/types/CPUFallbackColormapsData.d.ts +3 -5
- package/dist/esm/types/CPUFallbackEnabledElement.d.ts +14 -11
- package/dist/esm/types/CPUFallbackLUT.d.ts +4 -3
- package/dist/esm/types/CPUFallbackLookupTable.d.ts +2 -2
- package/dist/esm/types/CPUFallbackRenderingTools.d.ts +5 -5
- package/dist/esm/types/CPUFallbackTransform.d.ts +3 -3
- package/dist/esm/types/CPUFallbackViewport.d.ts +6 -6
- package/dist/esm/types/CPUFallbackViewportDisplayedArea.d.ts +3 -3
- package/dist/esm/types/CPUIImageData.d.ts +17 -9
- package/dist/esm/types/Color.d.ts +1 -1
- package/dist/esm/types/Colormap.d.ts +7 -7
- package/dist/esm/types/ContourData.d.ts +6 -6
- package/dist/esm/types/Cornerstone3DConfig.d.ts +7 -7
- package/dist/esm/types/CustomEventType.d.ts +2 -2
- package/dist/esm/types/EventTypes.d.ts +55 -55
- package/dist/esm/types/FlipDirection.d.ts +3 -3
- package/dist/esm/types/IActor.d.ts +3 -3
- package/dist/esm/types/ICache.d.ts +4 -4
- package/dist/esm/types/ICachedGeometry.d.ts +3 -3
- package/dist/esm/types/ICachedImage.d.ts +3 -2
- package/dist/esm/types/ICachedVolume.d.ts +3 -2
- package/dist/esm/types/ICamera.d.ts +3 -3
- package/dist/esm/types/IContour.d.ts +4 -3
- package/dist/esm/types/IContourSet.d.ts +5 -2
- package/dist/esm/types/IDynamicImageVolume.d.ts +3 -3
- package/dist/esm/types/IEnabledElement.d.ts +2 -2
- package/dist/esm/types/IGeometry.d.ts +4 -4
- package/dist/esm/types/IImage.d.ts +12 -10
- package/dist/esm/types/IImageCalibration.d.ts +2 -2
- package/dist/esm/types/IImageData.d.ts +11 -4
- package/dist/esm/types/IImageFrame.d.ts +42 -0
- package/dist/esm/types/IImageFrame.js +1 -0
- package/dist/esm/types/IImageVolume.d.ts +17 -14
- package/dist/esm/types/ILoadObject.d.ts +3 -3
- package/dist/esm/types/IPointsManager.d.ts +23 -0
- package/dist/esm/types/IPointsManager.js +1 -0
- package/dist/esm/types/IRLEVoxelMap.d.ts +16 -0
- package/dist/esm/types/IRLEVoxelMap.js +1 -0
- package/dist/esm/types/IRegisterImageLoader.d.ts +2 -2
- package/dist/esm/types/IRenderingEngine.d.ts +11 -12
- package/dist/esm/types/IRetrieveConfiguration.d.ts +6 -6
- package/dist/esm/types/IStackInput.d.ts +1 -1
- package/dist/esm/types/IStackViewport.d.ts +69 -2
- package/dist/esm/types/IStreamingImageVolume.d.ts +3 -4
- package/dist/esm/types/IStreamingVolumeProperties.d.ts +5 -5
- package/dist/esm/types/ISurface.d.ts +1 -1
- package/dist/esm/types/ITransferFunctionNode.d.ts +9 -0
- package/dist/esm/types/ITransferFunctionNode.js +1 -0
- package/dist/esm/types/IVideoViewport.d.ts +40 -2
- package/dist/esm/types/IViewport.d.ts +62 -41
- package/dist/esm/types/IVolume.d.ts +2 -2
- package/dist/esm/types/IVolumeInput.d.ts +2 -2
- package/dist/esm/types/IVolumeViewport.d.ts +17 -16
- package/dist/esm/types/IVoxelManager.d.ts +54 -0
- package/dist/esm/types/IVoxelManager.js +1 -0
- package/dist/esm/types/IWSIViewport.d.ts +16 -0
- package/dist/esm/types/IWSIViewport.js +1 -0
- package/dist/esm/types/ImageLoadListener.d.ts +2 -2
- package/dist/esm/types/ImageLoaderFn.d.ts +3 -3
- package/dist/esm/types/ImagePixelModule.d.ts +1 -1
- package/dist/esm/types/ImagePlaneModule.d.ts +2 -2
- package/dist/esm/types/ImageSliceData.d.ts +3 -3
- package/dist/esm/types/ImageVolumeProps.d.ts +4 -4
- package/dist/esm/types/Mat3.d.ts +1 -1
- package/dist/esm/types/Metadata.d.ts +6 -6
- package/dist/esm/types/MetadataModuleTypes.d.ts +65 -0
- package/dist/esm/types/MetadataModuleTypes.js +1 -0
- package/dist/esm/types/OrientationVectors.d.ts +4 -4
- package/dist/esm/types/Plane.d.ts +1 -1
- package/dist/esm/types/Point2.d.ts +1 -1
- package/dist/esm/types/Point3.d.ts +3 -3
- package/dist/esm/types/Point4.d.ts +1 -1
- package/dist/esm/types/RGB.d.ts +1 -1
- package/dist/esm/types/ScalingParameters.d.ts +7 -7
- package/dist/esm/types/StackViewportProperties.d.ts +3 -3
- package/dist/esm/types/SurfaceData.d.ts +5 -5
- package/dist/esm/types/TransformMatrix2D.d.ts +1 -1
- package/dist/esm/types/VideoViewportProperties.d.ts +3 -3
- package/dist/esm/types/VideoViewportTypes.d.ts +7 -7
- package/dist/esm/types/ViewportInputOptions.d.ts +7 -7
- package/dist/esm/types/ViewportPreset.d.ts +1 -1
- package/dist/esm/types/ViewportProperties.d.ts +5 -5
- package/dist/esm/types/VolumeLoaderFn.d.ts +4 -3
- package/dist/esm/types/VolumeProps.d.ts +10 -5
- package/dist/esm/types/VolumeViewportProperties.d.ts +3 -3
- package/dist/esm/types/WSIViewportProperties.d.ts +3 -0
- package/dist/esm/types/WSIViewportProperties.js +1 -0
- package/dist/esm/types/WSIViewportTypes.d.ts +13 -0
- package/dist/esm/types/WSIViewportTypes.js +1 -0
- package/dist/esm/types/displayArea.d.ts +4 -4
- package/dist/esm/types/index.d.ts +16 -8
- package/dist/esm/types/voi.d.ts +4 -4
- package/dist/esm/utilities/PointsManager.d.ts +8 -10
- package/dist/esm/utilities/ProgressiveIterator.d.ts +1 -1
- package/dist/esm/utilities/ProgressiveIterator.js +3 -1
- package/dist/esm/utilities/RLEVoxelMap.d.ts +3 -8
- package/dist/esm/utilities/RLEVoxelMap.js +19 -19
- package/dist/esm/utilities/VoxelManager.d.ts +82 -20
- package/dist/esm/utilities/VoxelManager.js +466 -60
- package/dist/esm/utilities/actorCheck.d.ts +1 -1
- package/dist/esm/utilities/applyPreset.d.ts +2 -2
- package/dist/esm/utilities/calculateViewportsSpatialRegistration.d.ts +1 -1
- package/dist/esm/utilities/calculateViewportsSpatialRegistration.js +4 -4
- package/dist/esm/utilities/calibratedPixelSpacingMetadataProvider.d.ts +1 -1
- package/dist/esm/utilities/colormap.d.ts +1 -1
- package/dist/esm/utilities/convertStackToVolumeViewport.d.ts +2 -2
- package/dist/esm/utilities/convertStackToVolumeViewport.js +4 -4
- package/dist/esm/utilities/convertVolumeToStackViewport.d.ts +1 -1
- package/dist/esm/utilities/convertVolumeToStackViewport.js +1 -1
- package/dist/esm/utilities/createLinearRGBTransferFunction.d.ts +1 -1
- package/dist/esm/utilities/createLinearRGBTransferFunction.js +1 -3
- package/dist/esm/utilities/createSigmoidRGBTransferFunction.d.ts +2 -3
- package/dist/esm/utilities/createSigmoidRGBTransferFunction.js +8 -7
- package/dist/esm/utilities/decimate.d.ts +1 -1
- package/dist/esm/utilities/eventListener/TargetEventListeners.js +5 -3
- package/dist/esm/utilities/generateVolumePropsFromImageIds.d.ts +1 -1
- package/dist/esm/utilities/generateVolumePropsFromImageIds.js +33 -80
- package/dist/esm/utilities/genericMetadataProvider.d.ts +9 -2
- package/dist/esm/utilities/genericMetadataProvider.js +7 -1
- package/dist/esm/utilities/getBufferConfiguration.d.ts +2 -3
- package/dist/esm/utilities/getBufferConfiguration.js +5 -15
- package/dist/esm/utilities/getClosestImageId.js +1 -1
- package/dist/esm/utilities/getClosestStackImageIndexForPoint.d.ts +1 -1
- package/dist/esm/utilities/getCurrentVolumeViewportSlice.d.ts +4 -5
- package/dist/esm/utilities/getCurrentVolumeViewportSlice.js +8 -58
- package/dist/esm/utilities/getImageLegacy.d.ts +1 -1
- package/dist/esm/utilities/getImageSliceDataForVolumeViewport.d.ts +1 -1
- package/dist/esm/utilities/getMinMax.d.ts +2 -1
- package/dist/esm/utilities/getScalingParameters.d.ts +1 -1
- package/dist/esm/utilities/getSpacingInNormalDirection.d.ts +2 -2
- package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.d.ts +1 -1
- package/dist/esm/utilities/getTargetVolumeAndSpacingInNormalDir.js +2 -2
- package/dist/esm/utilities/getViewportImageCornersInWorld.d.ts +1 -1
- package/dist/esm/utilities/getViewportImageIds.d.ts +1 -1
- package/dist/esm/utilities/getViewportModality.d.ts +7 -3
- package/dist/esm/utilities/getViewportModality.js +9 -6
- package/dist/esm/utilities/getViewportsWithImageURI.d.ts +2 -2
- package/dist/esm/utilities/getViewportsWithVolumeId.d.ts +2 -2
- package/dist/esm/utilities/getViewportsWithVolumeId.js +3 -7
- package/dist/esm/utilities/getVoiFromSigmoidRGBTransferFunction.d.ts +1 -1
- package/dist/esm/utilities/getVolumeActorCorners.d.ts +2 -2
- package/dist/esm/utilities/getVolumeId.js +2 -2
- package/dist/esm/utilities/getVolumeSliceRangeInfo.d.ts +1 -1
- package/dist/esm/utilities/getVolumeViewportScrollInfo.d.ts +1 -1
- package/dist/esm/utilities/getVolumeViewportsContainingSameVolumes.d.ts +2 -2
- package/dist/esm/utilities/hasFloatScalingParameters.d.ts +1 -1
- package/dist/esm/utilities/imageRetrieveMetadataProvider.d.ts +1 -1
- package/dist/esm/utilities/imageToWorldCoords.d.ts +1 -1
- package/dist/esm/utilities/index.d.ts +3 -8
- package/dist/esm/utilities/index.js +4 -8
- package/dist/esm/utilities/indexWithinDimensions.d.ts +1 -1
- package/dist/esm/utilities/invertRgbTransferFunction.d.ts +2 -1
- package/dist/esm/utilities/isEqual.js +6 -1
- package/dist/esm/utilities/isPTPrescaledWithSUV.d.ts +1 -1
- package/dist/esm/utilities/isPTPrescaledWithSUV.js +1 -1
- package/dist/esm/utilities/isTypedArray.d.ts +1 -1
- package/dist/esm/utilities/loadImageToCanvas.d.ts +6 -6
- package/dist/esm/utilities/makeVolumeMetadata.d.ts +2 -2
- package/dist/esm/utilities/planar.d.ts +2 -2
- package/dist/esm/utilities/renderToCanvasCPU.d.ts +1 -1
- package/dist/esm/utilities/renderToCanvasGPU.d.ts +2 -2
- package/dist/esm/utilities/renderToCanvasGPU.js +1 -1
- package/dist/esm/utilities/scaleRgbTransferFunction.d.ts +2 -1
- package/dist/esm/utilities/snapFocalPointToSlice.d.ts +1 -1
- package/dist/esm/utilities/sortImageIdsAndGetSpacing.d.ts +5 -5
- package/dist/esm/utilities/transformCanvasToIJK.d.ts +2 -2
- package/dist/esm/utilities/transformIJKToCanvas.d.ts +1 -1
- package/dist/esm/utilities/triggerEvent.js +1 -1
- package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.d.ts +2 -2
- package/dist/esm/utilities/updateVTKImageDataWithCornerstoneImage.js +1 -1
- package/dist/esm/utilities/uuidv4.js +3 -1
- package/dist/esm/utilities/worldToImageCoords.d.ts +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +5 -6
- package/dist/esm/cache/utils/restoreImagesFromBuffer.d.ts +0 -2
- package/dist/esm/cache/utils/restoreImagesFromBuffer.js +0 -28
- package/dist/esm/enums/SharedArrayBufferModes.d.ts +0 -6
- package/dist/esm/enums/SharedArrayBufferModes.js +0 -7
- package/dist/esm/utilities/cacheUtils.d.ts +0 -2
- package/dist/esm/utilities/cacheUtils.js +0 -86
- package/dist/esm/utilities/createFloat32SharedArray.d.ts +0 -2
- package/dist/esm/utilities/createFloat32SharedArray.js +0 -27
- package/dist/esm/utilities/createInt16SharedArray.d.ts +0 -2
- package/dist/esm/utilities/createInt16SharedArray.js +0 -11
- package/dist/esm/utilities/createUInt16SharedArray.d.ts +0 -2
- package/dist/esm/utilities/createUInt16SharedArray.js +0 -11
- package/dist/esm/utilities/createUint8SharedArray.d.ts +0 -2
- package/dist/esm/utilities/createUint8SharedArray.js +0 -12
- package/dist/esm/utilities/getScalarDataType.d.ts +0 -2
- package/dist/esm/utilities/getScalarDataType.js +0 -19
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { vec3 } from 'gl-matrix';
|
|
2
|
+
import cache from '../cache';
|
|
1
3
|
import RLEVoxelMap from './RLEVoxelMap';
|
|
2
4
|
import isEqual from './isEqual';
|
|
3
5
|
const DEFAULT_RLE_SIZE = 5 * 1024;
|
|
@@ -9,20 +11,24 @@ export default class VoxelManager {
|
|
|
9
11
|
[Infinity, -Infinity],
|
|
10
12
|
[Infinity, -Infinity],
|
|
11
13
|
];
|
|
12
|
-
this.
|
|
14
|
+
this.numberOfComponents = 1;
|
|
15
|
+
this.scalarData = null;
|
|
16
|
+
this._sliceDataCache = null;
|
|
13
17
|
this.getAtIJK = (i, j, k) => {
|
|
14
|
-
const index = i
|
|
18
|
+
const index = this.toIndex([i, j, k]);
|
|
15
19
|
return this._get(index);
|
|
16
20
|
};
|
|
17
21
|
this.setAtIJK = (i, j, k, v) => {
|
|
18
|
-
const index = i
|
|
22
|
+
const index = this.toIndex([i, j, k]);
|
|
19
23
|
if (this._set(index, v) !== false) {
|
|
20
24
|
this.modifiedSlices.add(k);
|
|
21
25
|
VoxelManager.addBounds(this.boundsIJK, [i, j, k]);
|
|
22
26
|
}
|
|
23
27
|
};
|
|
24
28
|
this.getAtIJKPoint = ([i, j, k]) => this.getAtIJK(i, j, k);
|
|
25
|
-
this.setAtIJKPoint = ([i, j, k], v) =>
|
|
29
|
+
this.setAtIJKPoint = ([i, j, k], v) => {
|
|
30
|
+
this.setAtIJK(i, j, k, v);
|
|
31
|
+
};
|
|
26
32
|
this.getAtIndex = (index) => this._get(index);
|
|
27
33
|
this.setAtIndex = (index, v) => {
|
|
28
34
|
if (this._set(index, v) !== false) {
|
|
@@ -31,60 +37,167 @@ export default class VoxelManager {
|
|
|
31
37
|
VoxelManager.addBounds(this.boundsIJK, pointIJK);
|
|
32
38
|
}
|
|
33
39
|
};
|
|
40
|
+
this.getMiddleSliceData = () => {
|
|
41
|
+
const middleSliceIndex = Math.floor(this.dimensions[2] / 2);
|
|
42
|
+
return this.getSliceData({
|
|
43
|
+
sliceIndex: middleSliceIndex,
|
|
44
|
+
slicePlane: 2,
|
|
45
|
+
});
|
|
46
|
+
};
|
|
34
47
|
this.forEach = (callback, options) => {
|
|
35
|
-
const boundsIJK = options
|
|
36
|
-
const
|
|
48
|
+
const boundsIJK = options.boundsIJK || this.getBoundsIJK();
|
|
49
|
+
const isInObject = options.isInObject || this.isInObject || (() => true);
|
|
50
|
+
const returnPoints = options.returnPoints || false;
|
|
51
|
+
const useLPSTransform = options.imageData;
|
|
52
|
+
const iMin = boundsIJK[0][0];
|
|
53
|
+
const iMax = boundsIJK[0][1];
|
|
54
|
+
const jMin = boundsIJK[1][0];
|
|
55
|
+
const jMax = boundsIJK[1][1];
|
|
56
|
+
const kMin = boundsIJK[2][0];
|
|
57
|
+
const kMax = boundsIJK[2][1];
|
|
58
|
+
const pointsInShape = [];
|
|
59
|
+
if (useLPSTransform) {
|
|
60
|
+
const { imageData } = options;
|
|
61
|
+
const direction = imageData.getDirection();
|
|
62
|
+
const rowCosines = direction.slice(0, 3);
|
|
63
|
+
const columnCosines = direction.slice(3, 6);
|
|
64
|
+
const scanAxisNormal = direction.slice(6, 9);
|
|
65
|
+
const spacing = imageData.getSpacing();
|
|
66
|
+
const [rowSpacing, columnSpacing, scanAxisSpacing] = spacing;
|
|
67
|
+
const start = vec3.fromValues(iMin, jMin, kMin);
|
|
68
|
+
const worldPosStart = imageData.indexToWorld(start);
|
|
69
|
+
const rowStep = vec3.fromValues(rowCosines[0] * rowSpacing, rowCosines[1] * rowSpacing, rowCosines[2] * rowSpacing);
|
|
70
|
+
const columnStep = vec3.fromValues(columnCosines[0] * columnSpacing, columnCosines[1] * columnSpacing, columnCosines[2] * columnSpacing);
|
|
71
|
+
const scanAxisStep = vec3.fromValues(scanAxisNormal[0] * scanAxisSpacing, scanAxisNormal[1] * scanAxisSpacing, scanAxisNormal[2] * scanAxisSpacing);
|
|
72
|
+
const currentPos = vec3.clone(worldPosStart);
|
|
73
|
+
for (let k = kMin; k <= kMax; k++) {
|
|
74
|
+
const startPosJ = vec3.clone(currentPos);
|
|
75
|
+
for (let j = jMin; j <= jMax; j++) {
|
|
76
|
+
const startPosI = vec3.clone(currentPos);
|
|
77
|
+
for (let i = iMin; i <= iMax; i++) {
|
|
78
|
+
const pointIJK = [i, j, k];
|
|
79
|
+
if (isInObject(currentPos, pointIJK)) {
|
|
80
|
+
const index = this.toIndex(pointIJK);
|
|
81
|
+
const value = this._get(index);
|
|
82
|
+
if (returnPoints) {
|
|
83
|
+
pointsInShape.push({
|
|
84
|
+
value,
|
|
85
|
+
index,
|
|
86
|
+
pointIJK,
|
|
87
|
+
pointLPS: currentPos.slice(),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (callback) {
|
|
91
|
+
callback({ value, index, pointIJK, pointLPS: currentPos });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
vec3.add(currentPos, currentPos, rowStep);
|
|
95
|
+
}
|
|
96
|
+
vec3.copy(currentPos, startPosI);
|
|
97
|
+
vec3.add(currentPos, currentPos, columnStep);
|
|
98
|
+
}
|
|
99
|
+
vec3.copy(currentPos, startPosJ);
|
|
100
|
+
vec3.add(currentPos, currentPos, scanAxisStep);
|
|
101
|
+
}
|
|
102
|
+
return pointsInShape;
|
|
103
|
+
}
|
|
37
104
|
if (this.map) {
|
|
38
105
|
for (const index of this.map.keys()) {
|
|
39
106
|
const pointIJK = this.toIJK(index);
|
|
40
|
-
|
|
41
|
-
const callbackArguments = { value, index, pointIJK };
|
|
42
|
-
if (isWithinObject?.(callbackArguments) === false) {
|
|
107
|
+
if (!isInObject(null, pointIJK)) {
|
|
43
108
|
continue;
|
|
44
109
|
}
|
|
45
|
-
|
|
110
|
+
const value = this._get(index);
|
|
111
|
+
if (returnPoints) {
|
|
112
|
+
pointsInShape.push({
|
|
113
|
+
value,
|
|
114
|
+
index,
|
|
115
|
+
pointIJK,
|
|
116
|
+
pointLPS: null,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
callback({ value, index, pointIJK, pointLPS: null });
|
|
46
120
|
}
|
|
121
|
+
return pointsInShape;
|
|
47
122
|
}
|
|
48
123
|
else {
|
|
49
|
-
for (let k =
|
|
124
|
+
for (let k = kMin; k <= kMax; k++) {
|
|
50
125
|
const kIndex = k * this.frameSize;
|
|
51
|
-
for (let j =
|
|
126
|
+
for (let j = jMin; j <= jMax; j++) {
|
|
52
127
|
const jIndex = kIndex + j * this.width;
|
|
53
|
-
for (let i =
|
|
128
|
+
for (let i = iMin, index = jIndex + i; i <= iMax; i++, index++) {
|
|
54
129
|
const value = this.getAtIndex(index);
|
|
55
|
-
const
|
|
56
|
-
if (
|
|
130
|
+
const pointIJK = [i, j, k];
|
|
131
|
+
if (!isInObject(null, pointIJK)) {
|
|
57
132
|
continue;
|
|
58
133
|
}
|
|
59
|
-
|
|
134
|
+
if (returnPoints) {
|
|
135
|
+
pointsInShape.push({
|
|
136
|
+
value,
|
|
137
|
+
index,
|
|
138
|
+
pointIJK,
|
|
139
|
+
pointLPS: null,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
callback({ value, index, pointIJK: [i, j, k], pointLPS: null });
|
|
60
143
|
}
|
|
61
144
|
}
|
|
62
145
|
}
|
|
146
|
+
return pointsInShape;
|
|
63
147
|
}
|
|
64
148
|
};
|
|
149
|
+
this.getSliceData = ({ sliceIndex, slicePlane, }) => {
|
|
150
|
+
const [width, height, depth] = this.dimensions;
|
|
151
|
+
const frameSize = width * height;
|
|
152
|
+
const startIndex = sliceIndex * frameSize;
|
|
153
|
+
let sliceSize;
|
|
154
|
+
const SliceDataConstructor = this.getConstructor();
|
|
155
|
+
function isValidConstructor(ctor) {
|
|
156
|
+
return typeof ctor === 'function';
|
|
157
|
+
}
|
|
158
|
+
if (!isValidConstructor(SliceDataConstructor)) {
|
|
159
|
+
return new Uint8Array(0);
|
|
160
|
+
}
|
|
161
|
+
let sliceData;
|
|
162
|
+
switch (slicePlane) {
|
|
163
|
+
case 0:
|
|
164
|
+
sliceSize = height * depth;
|
|
165
|
+
sliceData = new SliceDataConstructor(sliceSize);
|
|
166
|
+
for (let i = 0; i < height; i++) {
|
|
167
|
+
for (let j = 0; j < depth; j++) {
|
|
168
|
+
const index = sliceIndex + i * width + j * frameSize;
|
|
169
|
+
this.setSliceDataValue(sliceData, i * depth + j, this._get(index));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
case 1:
|
|
174
|
+
sliceSize = width * depth;
|
|
175
|
+
sliceData = new SliceDataConstructor(sliceSize);
|
|
176
|
+
for (let i = 0; i < width; i++) {
|
|
177
|
+
for (let j = 0; j < depth; j++) {
|
|
178
|
+
const index = i + sliceIndex * width + j * frameSize;
|
|
179
|
+
this.setSliceDataValue(sliceData, i + j * width, this._get(index));
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
break;
|
|
183
|
+
case 2:
|
|
184
|
+
sliceSize = width * height;
|
|
185
|
+
sliceData = new SliceDataConstructor(sliceSize);
|
|
186
|
+
for (let i = 0; i < sliceSize; i++) {
|
|
187
|
+
this.setSliceDataValue(sliceData, i, this._get(startIndex + i));
|
|
188
|
+
}
|
|
189
|
+
break;
|
|
190
|
+
default:
|
|
191
|
+
throw new Error('Oblique plane - todo - implement as ortho normal vector');
|
|
192
|
+
}
|
|
193
|
+
return sliceData;
|
|
194
|
+
};
|
|
65
195
|
this.dimensions = dimensions;
|
|
66
196
|
this.width = dimensions[0];
|
|
67
197
|
this.frameSize = this.width * dimensions[1];
|
|
68
198
|
this._get = _get;
|
|
69
199
|
this._set = _set;
|
|
70
200
|
}
|
|
71
|
-
addPoint(point) {
|
|
72
|
-
const index = Array.isArray(point)
|
|
73
|
-
? point[0] + this.width * point[1] + this.frameSize * point[2]
|
|
74
|
-
: point;
|
|
75
|
-
if (!this.points) {
|
|
76
|
-
this.points = new Set();
|
|
77
|
-
}
|
|
78
|
-
this.points.add(index);
|
|
79
|
-
}
|
|
80
|
-
getPoints() {
|
|
81
|
-
return this.points
|
|
82
|
-
? [...this.points].map((index) => this.toIJK(index))
|
|
83
|
-
: [];
|
|
84
|
-
}
|
|
85
|
-
getPointIndices() {
|
|
86
|
-
return this.points ? [...this.points] : [];
|
|
87
|
-
}
|
|
88
201
|
toIJK(index) {
|
|
89
202
|
return [
|
|
90
203
|
index % this.width,
|
|
@@ -101,6 +214,34 @@ export default class VoxelManager {
|
|
|
101
214
|
}
|
|
102
215
|
return this.dimensions.map((dimension) => [0, dimension - 1]);
|
|
103
216
|
}
|
|
217
|
+
getScalarData() {
|
|
218
|
+
if (this.scalarData) {
|
|
219
|
+
return this.scalarData;
|
|
220
|
+
}
|
|
221
|
+
if (this._getScalarData) {
|
|
222
|
+
return this._getScalarData();
|
|
223
|
+
}
|
|
224
|
+
throw new Error('No scalar data available');
|
|
225
|
+
}
|
|
226
|
+
getScalarDataLength() {
|
|
227
|
+
if (this.scalarData) {
|
|
228
|
+
return this.scalarData.length;
|
|
229
|
+
}
|
|
230
|
+
if (this._getScalarDataLength) {
|
|
231
|
+
return this._getScalarDataLength();
|
|
232
|
+
}
|
|
233
|
+
throw new Error('No scalar data available');
|
|
234
|
+
}
|
|
235
|
+
get sizeInBytes() {
|
|
236
|
+
return this.getScalarDataLength() * this.bytePerVoxel;
|
|
237
|
+
}
|
|
238
|
+
get bytePerVoxel() {
|
|
239
|
+
if (this.scalarData) {
|
|
240
|
+
return this.scalarData.BYTES_PER_ELEMENT;
|
|
241
|
+
}
|
|
242
|
+
const value = this._get(0);
|
|
243
|
+
return value.BYTES_PER_ELEMENT;
|
|
244
|
+
}
|
|
104
245
|
clear() {
|
|
105
246
|
if (this.map) {
|
|
106
247
|
this.map.clear();
|
|
@@ -112,6 +253,16 @@ export default class VoxelManager {
|
|
|
112
253
|
this.modifiedSlices.clear();
|
|
113
254
|
this.points?.clear();
|
|
114
255
|
}
|
|
256
|
+
getConstructor() {
|
|
257
|
+
if (this.scalarData) {
|
|
258
|
+
return this.scalarData.constructor;
|
|
259
|
+
}
|
|
260
|
+
if (this._getConstructor) {
|
|
261
|
+
return this._getConstructor();
|
|
262
|
+
}
|
|
263
|
+
console.warn('No scalar data available or can be used to get the constructor');
|
|
264
|
+
return Float32Array;
|
|
265
|
+
}
|
|
115
266
|
getArrayOfSlices() {
|
|
116
267
|
return Array.from(this.modifiedSlices);
|
|
117
268
|
}
|
|
@@ -130,9 +281,42 @@ export default class VoxelManager {
|
|
|
130
281
|
bounds[2][0] = Math.min(point[2], bounds[2][0]);
|
|
131
282
|
bounds[2][1] = Math.max(point[2], bounds[2][1]);
|
|
132
283
|
}
|
|
133
|
-
|
|
284
|
+
addPoint(point) {
|
|
285
|
+
const index = Array.isArray(point)
|
|
286
|
+
? point[0] + this.width * point[1] + this.frameSize * point[2]
|
|
287
|
+
: point;
|
|
288
|
+
if (!this.points) {
|
|
289
|
+
this.points = new Set();
|
|
290
|
+
}
|
|
291
|
+
this.points.add(index);
|
|
292
|
+
}
|
|
293
|
+
getPoints() {
|
|
294
|
+
return this.points
|
|
295
|
+
? [...this.points].map((index) => this.toIJK(index))
|
|
296
|
+
: [];
|
|
297
|
+
}
|
|
298
|
+
setSliceDataValue(sliceData, index, value) {
|
|
299
|
+
if (Array.isArray(value)) {
|
|
300
|
+
for (let i = 0; i < value.length; i++) {
|
|
301
|
+
sliceData[index * value.length + i] = this.toNumber(value[i]);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
sliceData[index] = this.toNumber(value);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
toNumber(value) {
|
|
309
|
+
if (typeof value === 'number') {
|
|
310
|
+
return value;
|
|
311
|
+
}
|
|
312
|
+
if (Array.isArray(value)) {
|
|
313
|
+
return value[0] || 0;
|
|
314
|
+
}
|
|
315
|
+
return 0;
|
|
316
|
+
}
|
|
317
|
+
static _createRGBScalarVolumeVoxelManager({ dimensions, scalarData, numberOfComponents = 3, }) {
|
|
134
318
|
const voxels = new VoxelManager(dimensions, (index) => {
|
|
135
|
-
index *=
|
|
319
|
+
index *= numberOfComponents;
|
|
136
320
|
return [scalarData[index++], scalarData[index++], scalarData[index++]];
|
|
137
321
|
}, (index, v) => {
|
|
138
322
|
index *= 3;
|
|
@@ -142,42 +326,261 @@ export default class VoxelManager {
|
|
|
142
326
|
scalarData[index++] = v[2];
|
|
143
327
|
return isChanged;
|
|
144
328
|
});
|
|
145
|
-
voxels.
|
|
329
|
+
voxels.numberOfComponents = numberOfComponents;
|
|
146
330
|
voxels.scalarData = scalarData;
|
|
147
331
|
return voxels;
|
|
148
332
|
}
|
|
149
|
-
static
|
|
333
|
+
static createImageVolumeVoxelManager({ dimensions, imageIds, numberOfComponents = 1, }) {
|
|
334
|
+
const pixelsPerSlice = dimensions[0] * dimensions[1];
|
|
335
|
+
function getPixelInfo(index) {
|
|
336
|
+
const sliceIndex = Math.floor(index / pixelsPerSlice);
|
|
337
|
+
const imageId = imageIds[sliceIndex];
|
|
338
|
+
const image = cache.getImage(imageId);
|
|
339
|
+
if (!image) {
|
|
340
|
+
console.warn(`Image not found for imageId: ${imageId}`);
|
|
341
|
+
return { pixelData: null, pixelIndex: null };
|
|
342
|
+
}
|
|
343
|
+
const pixelData = image.voxelManager.getScalarData();
|
|
344
|
+
const pixelIndex = (index % pixelsPerSlice) * numberOfComponents;
|
|
345
|
+
return { pixelData, pixelIndex };
|
|
346
|
+
}
|
|
347
|
+
function getVoxelValue(index) {
|
|
348
|
+
const { pixelData, pixelIndex } = getPixelInfo(index);
|
|
349
|
+
if (!pixelData || pixelIndex === null) {
|
|
350
|
+
return null;
|
|
351
|
+
}
|
|
352
|
+
if (numberOfComponents === 1) {
|
|
353
|
+
return pixelData[pixelIndex];
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
return [
|
|
357
|
+
pixelData[pixelIndex],
|
|
358
|
+
pixelData[pixelIndex + 1],
|
|
359
|
+
pixelData[pixelIndex + 2],
|
|
360
|
+
];
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function setVoxelValue(index, v) {
|
|
364
|
+
const { pixelData, pixelIndex } = getPixelInfo(index);
|
|
365
|
+
if (!pixelData || pixelIndex === null) {
|
|
366
|
+
return false;
|
|
367
|
+
}
|
|
368
|
+
let isChanged = false;
|
|
369
|
+
if (numberOfComponents === 1) {
|
|
370
|
+
if (pixelData[pixelIndex] !== v) {
|
|
371
|
+
pixelData[pixelIndex] = v;
|
|
372
|
+
isChanged = true;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
else {
|
|
376
|
+
const rgbValue = v;
|
|
377
|
+
for (let i = 0; i < numberOfComponents; i++) {
|
|
378
|
+
if (pixelData[pixelIndex + i] !== rgbValue[i]) {
|
|
379
|
+
pixelData[pixelIndex + i] = rgbValue[i];
|
|
380
|
+
isChanged = true;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
return isChanged;
|
|
385
|
+
}
|
|
386
|
+
const voxelManager = new VoxelManager(dimensions, (index) => getVoxelValue(index), (index, v) => setVoxelValue(index, v));
|
|
387
|
+
voxelManager.numberOfComponents = numberOfComponents;
|
|
388
|
+
voxelManager._getConstructor = () => {
|
|
389
|
+
const { pixelData } = getPixelInfo(0);
|
|
390
|
+
return pixelData.constructor;
|
|
391
|
+
};
|
|
392
|
+
voxelManager.getMiddleSliceData = () => {
|
|
393
|
+
const middleSliceIndex = Math.floor(dimensions[2] / 2);
|
|
394
|
+
return voxelManager.getSliceData({
|
|
395
|
+
sliceIndex: middleSliceIndex,
|
|
396
|
+
slicePlane: 2,
|
|
397
|
+
});
|
|
398
|
+
};
|
|
399
|
+
voxelManager.getRange = () => {
|
|
400
|
+
let minValue, maxValue;
|
|
401
|
+
for (const imageId of imageIds) {
|
|
402
|
+
const image = cache.getImage(imageId);
|
|
403
|
+
if (image.minPixelValue < minValue) {
|
|
404
|
+
minValue = image.minPixelValue;
|
|
405
|
+
}
|
|
406
|
+
if (image.maxPixelValue > maxValue) {
|
|
407
|
+
maxValue = image.maxPixelValue;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
return [minValue, maxValue];
|
|
411
|
+
};
|
|
412
|
+
voxelManager._getScalarDataLength = () => {
|
|
413
|
+
const { pixelData } = getPixelInfo(0);
|
|
414
|
+
return pixelData.length * dimensions[2];
|
|
415
|
+
};
|
|
416
|
+
voxelManager.getCompleteScalarDataArray = () => {
|
|
417
|
+
const ScalarDataConstructor = voxelManager._getConstructor();
|
|
418
|
+
const dataLength = voxelManager.getScalarDataLength();
|
|
419
|
+
const scalarData = new ScalarDataConstructor(dataLength);
|
|
420
|
+
const sliceSize = dimensions[0] * dimensions[1] * numberOfComponents;
|
|
421
|
+
for (let sliceIndex = 0; sliceIndex < dimensions[2]; sliceIndex++) {
|
|
422
|
+
const { pixelData } = getPixelInfo((sliceIndex * sliceSize) / numberOfComponents);
|
|
423
|
+
if (pixelData) {
|
|
424
|
+
const sliceStart = sliceIndex * sliceSize;
|
|
425
|
+
if (numberOfComponents === 1) {
|
|
426
|
+
scalarData.set(pixelData, sliceStart);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
for (let i = 0; i < pixelData.length; i += numberOfComponents) {
|
|
430
|
+
for (let j = 0; j < numberOfComponents; j++) {
|
|
431
|
+
scalarData[sliceStart + i + j] = pixelData[i + j];
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return scalarData;
|
|
438
|
+
};
|
|
439
|
+
voxelManager.setCompleteScalarDataArray = (scalarData) => {
|
|
440
|
+
const sliceSize = dimensions[0] * dimensions[1] * numberOfComponents;
|
|
441
|
+
const SliceDataConstructor = voxelManager._getConstructor();
|
|
442
|
+
for (let sliceIndex = 0; sliceIndex < dimensions[2]; sliceIndex++) {
|
|
443
|
+
const { pixelData } = getPixelInfo((sliceIndex * sliceSize) / numberOfComponents);
|
|
444
|
+
if (pixelData && SliceDataConstructor) {
|
|
445
|
+
const sliceStart = sliceIndex * sliceSize;
|
|
446
|
+
const sliceEnd = sliceStart + sliceSize;
|
|
447
|
+
const sliceData = new SliceDataConstructor(sliceSize);
|
|
448
|
+
sliceData.set(scalarData.subarray(sliceStart, sliceEnd));
|
|
449
|
+
pixelData.set(sliceData);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
for (let k = 0; k < dimensions[2]; k++) {
|
|
453
|
+
voxelManager.modifiedSlices.add(k);
|
|
454
|
+
}
|
|
455
|
+
voxelManager.boundsIJK = [
|
|
456
|
+
[0, dimensions[0] - 1],
|
|
457
|
+
[0, dimensions[1] - 1],
|
|
458
|
+
[0, dimensions[2] - 1],
|
|
459
|
+
];
|
|
460
|
+
};
|
|
461
|
+
return voxelManager;
|
|
462
|
+
}
|
|
463
|
+
static createScalarVolumeVoxelManager({ dimensions, scalarData, numberOfComponents = 1, }) {
|
|
150
464
|
if (dimensions.length !== 3) {
|
|
151
465
|
throw new Error('Dimensions must be provided as [number, number, number] for [width, height, depth]');
|
|
152
466
|
}
|
|
153
|
-
if (!
|
|
154
|
-
|
|
467
|
+
if (!numberOfComponents) {
|
|
468
|
+
numberOfComponents =
|
|
155
469
|
scalarData.length / dimensions[0] / dimensions[1] / dimensions[2];
|
|
156
|
-
if (
|
|
157
|
-
|
|
470
|
+
if (numberOfComponents > 4 ||
|
|
471
|
+
numberOfComponents < 1 ||
|
|
472
|
+
numberOfComponents === 2) {
|
|
473
|
+
throw new Error(`Number of components ${numberOfComponents} must be 1, 3 or 4`);
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
if (numberOfComponents > 1) {
|
|
477
|
+
return VoxelManager._createRGBScalarVolumeVoxelManager({
|
|
478
|
+
dimensions,
|
|
479
|
+
scalarData,
|
|
480
|
+
numberOfComponents,
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
return VoxelManager._createNumberVolumeVoxelManager({
|
|
484
|
+
dimensions,
|
|
485
|
+
scalarData,
|
|
486
|
+
});
|
|
487
|
+
}
|
|
488
|
+
static createScalarDynamicVolumeVoxelManager({ imageIdGroups, dimensions, timePoint = 0, numberOfComponents = 1, }) {
|
|
489
|
+
if (!numberOfComponents) {
|
|
490
|
+
const firstImage = cache.getImage(imageIdGroups[0][0]);
|
|
491
|
+
if (!firstImage) {
|
|
492
|
+
throw new Error('Unable to determine number of components: No image found');
|
|
493
|
+
}
|
|
494
|
+
numberOfComponents =
|
|
495
|
+
firstImage.getPixelData().length / (dimensions[0] * dimensions[1]);
|
|
496
|
+
if (numberOfComponents > 4 ||
|
|
497
|
+
numberOfComponents < 1 ||
|
|
498
|
+
numberOfComponents === 2) {
|
|
499
|
+
throw new Error(`Number of components ${numberOfComponents} must be 1, 3 or 4`);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
const voxelGroups = imageIdGroups.map((imageIds) => {
|
|
503
|
+
return VoxelManager.createImageVolumeVoxelManager({
|
|
504
|
+
dimensions,
|
|
505
|
+
imageIds,
|
|
506
|
+
numberOfComponents,
|
|
507
|
+
});
|
|
508
|
+
});
|
|
509
|
+
const voxelManager = new VoxelManager(dimensions, (index) => voxelGroups[timePoint]._get(index), (index, v) => voxelGroups[timePoint]._set(index, v));
|
|
510
|
+
voxelManager.numberOfComponents = numberOfComponents;
|
|
511
|
+
voxelManager.getScalarDataLength = () => {
|
|
512
|
+
return voxelGroups[timePoint].getScalarDataLength();
|
|
513
|
+
};
|
|
514
|
+
voxelManager.getConstructor = () => {
|
|
515
|
+
return voxelGroups[timePoint].getConstructor();
|
|
516
|
+
};
|
|
517
|
+
voxelManager.getRange = () => {
|
|
518
|
+
return voxelGroups[timePoint].getRange();
|
|
519
|
+
};
|
|
520
|
+
voxelManager.getMiddleSliceData = () => {
|
|
521
|
+
return voxelGroups[timePoint].getMiddleSliceData();
|
|
522
|
+
};
|
|
523
|
+
voxelManager.setTimePoint = (newTimePoint) => {
|
|
524
|
+
timePoint = newTimePoint;
|
|
525
|
+
voxelManager._get = (index) => voxelGroups[timePoint]._get(index);
|
|
526
|
+
voxelManager._set = (index, v) => voxelGroups[timePoint]._set(index, v);
|
|
527
|
+
};
|
|
528
|
+
voxelManager.getAtIndexAndTimePoint = (index, tp) => {
|
|
529
|
+
return voxelGroups[tp]._get(index);
|
|
530
|
+
};
|
|
531
|
+
voxelManager.getTimePointScalarData = (tp) => {
|
|
532
|
+
return voxelGroups[tp].getCompleteScalarDataArray();
|
|
533
|
+
};
|
|
534
|
+
voxelManager.getCurrentTimePointScalarData = () => {
|
|
535
|
+
return voxelGroups[timePoint].getCompleteScalarDataArray();
|
|
536
|
+
};
|
|
537
|
+
return voxelManager;
|
|
538
|
+
}
|
|
539
|
+
static createImageVoxelManager({ width, height, scalarData, numberOfComponents = 1, }) {
|
|
540
|
+
const dimensions = [width, height, 1];
|
|
541
|
+
if (!numberOfComponents) {
|
|
542
|
+
numberOfComponents = scalarData.length / width / height;
|
|
543
|
+
if (numberOfComponents > 4 ||
|
|
544
|
+
numberOfComponents < 1 ||
|
|
545
|
+
numberOfComponents === 2) {
|
|
546
|
+
throw new Error(`Number of components ${numberOfComponents} must be 1, 3 or 4`);
|
|
158
547
|
}
|
|
159
548
|
}
|
|
160
|
-
if (
|
|
161
|
-
return VoxelManager.
|
|
549
|
+
if (numberOfComponents > 1) {
|
|
550
|
+
return VoxelManager._createRGBScalarVolumeVoxelManager({
|
|
551
|
+
dimensions,
|
|
552
|
+
scalarData,
|
|
553
|
+
numberOfComponents,
|
|
554
|
+
});
|
|
162
555
|
}
|
|
163
|
-
return VoxelManager.
|
|
556
|
+
return VoxelManager._createNumberVolumeVoxelManager({
|
|
557
|
+
dimensions,
|
|
558
|
+
scalarData,
|
|
559
|
+
});
|
|
164
560
|
}
|
|
165
|
-
static
|
|
561
|
+
static _createNumberVolumeVoxelManager({ dimensions, scalarData, }) {
|
|
166
562
|
const voxels = new VoxelManager(dimensions, (index) => scalarData[index], (index, v) => {
|
|
167
563
|
const isChanged = scalarData[index] !== v;
|
|
168
564
|
scalarData[index] = v;
|
|
169
565
|
return isChanged;
|
|
170
566
|
});
|
|
171
567
|
voxels.scalarData = scalarData;
|
|
568
|
+
voxels.getMiddleSliceData = () => {
|
|
569
|
+
const middleSliceIndex = Math.floor(dimensions[2] / 2);
|
|
570
|
+
return voxels.getSliceData({
|
|
571
|
+
sliceIndex: middleSliceIndex,
|
|
572
|
+
slicePlane: 2,
|
|
573
|
+
});
|
|
574
|
+
};
|
|
172
575
|
return voxels;
|
|
173
576
|
}
|
|
174
|
-
static createMapVoxelManager(dimension) {
|
|
577
|
+
static createMapVoxelManager({ dimension, }) {
|
|
175
578
|
const map = new Map();
|
|
176
579
|
const voxelManager = new VoxelManager(dimension, map.get.bind(map), (index, v) => map.set(index, v) && true);
|
|
177
580
|
voxelManager.map = map;
|
|
178
581
|
return voxelManager;
|
|
179
582
|
}
|
|
180
|
-
static createHistoryVoxelManager(sourceVoxelManager) {
|
|
583
|
+
static createHistoryVoxelManager({ sourceVoxelManager, }) {
|
|
181
584
|
const map = new Map();
|
|
182
585
|
const { dimensions } = sourceVoxelManager;
|
|
183
586
|
const voxelManager = new VoxelManager(dimensions, (index) => map.get(index), function (index, v) {
|
|
@@ -198,11 +601,11 @@ export default class VoxelManager {
|
|
|
198
601
|
voxelManager.sourceVoxelManager = sourceVoxelManager;
|
|
199
602
|
return voxelManager;
|
|
200
603
|
}
|
|
201
|
-
static createLazyVoxelManager(dimensions, planeFactory) {
|
|
604
|
+
static createLazyVoxelManager({ dimensions, planeFactory, }) {
|
|
202
605
|
const map = new Map();
|
|
203
|
-
const [width, height
|
|
606
|
+
const [width, height] = dimensions;
|
|
204
607
|
const planeSize = width * height;
|
|
205
|
-
const voxelManager = new VoxelManager(dimensions, (index) => map.get(Math.floor(index / planeSize))
|
|
608
|
+
const voxelManager = new VoxelManager(dimensions, (index) => map.get(Math.floor(index / planeSize))[index % planeSize], (index, v) => {
|
|
206
609
|
const k = Math.floor(index / planeSize);
|
|
207
610
|
let layer = map.get(k);
|
|
208
611
|
if (!layer) {
|
|
@@ -214,26 +617,29 @@ export default class VoxelManager {
|
|
|
214
617
|
voxelManager.map = map;
|
|
215
618
|
return voxelManager;
|
|
216
619
|
}
|
|
217
|
-
static createRLEVoxelManager(dimensions) {
|
|
620
|
+
static createRLEVoxelManager({ dimensions, }) {
|
|
218
621
|
const [width, height, depth] = dimensions;
|
|
219
622
|
const map = new RLEVoxelMap(width, height, depth);
|
|
220
|
-
const voxelManager = new VoxelManager(dimensions, (index) => map.get(index), (index, v) =>
|
|
623
|
+
const voxelManager = new VoxelManager(dimensions, (index) => map.get(index), (index, v) => {
|
|
624
|
+
map.set(index, v);
|
|
625
|
+
});
|
|
221
626
|
voxelManager.map = map;
|
|
222
627
|
voxelManager.getPixelData = map.getPixelData.bind(map);
|
|
223
628
|
return voxelManager;
|
|
224
629
|
}
|
|
225
630
|
static addInstanceToImage(image) {
|
|
226
631
|
const { width, height } = image;
|
|
227
|
-
const scalarData = image.
|
|
228
|
-
if (scalarData
|
|
229
|
-
image.voxelManager = VoxelManager.
|
|
632
|
+
const scalarData = image.voxelManager.getScalarData();
|
|
633
|
+
if (scalarData.length >= width * height) {
|
|
634
|
+
image.voxelManager = VoxelManager.createScalarVolumeVoxelManager({
|
|
635
|
+
dimensions: [width, height, 1],
|
|
636
|
+
scalarData,
|
|
637
|
+
});
|
|
230
638
|
return;
|
|
231
639
|
}
|
|
232
|
-
image.voxelManager = VoxelManager.createRLEVoxelManager(
|
|
233
|
-
width,
|
|
234
|
-
|
|
235
|
-
1,
|
|
236
|
-
]);
|
|
640
|
+
image.voxelManager = VoxelManager.createRLEVoxelManager({
|
|
641
|
+
dimensions: [width, height, 1],
|
|
642
|
+
});
|
|
237
643
|
image.getPixelData = image.voxelManager.getPixelData;
|
|
238
644
|
image.sizeInBytes = DEFAULT_RLE_SIZE;
|
|
239
645
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Types } from '..';
|
|
1
|
+
import type { Types } from '..';
|
|
2
2
|
type actorTypes = 'vtkActor' | 'vtkVolume' | 'vtkImageSlice';
|
|
3
3
|
export declare function isImageActor(actorEntry: Types.ActorEntry): boolean;
|
|
4
4
|
export declare function actorIsA(actorEntry: Types.ActorEntry | Types.Actor, actorType: actorTypes): boolean;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ViewportPreset } from '../types';
|
|
2
|
-
import { VolumeActor } from '../types/IActor';
|
|
1
|
+
import type { ViewportPreset } from '../types';
|
|
2
|
+
import type { VolumeActor } from '../types/IActor';
|
|
3
3
|
export default function applyPreset(actor: VolumeActor, preset: ViewportPreset): void;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { IStackViewport, IVolumeViewport } from '../types';
|
|
1
|
+
import type { IStackViewport, IVolumeViewport } from '../types';
|
|
2
2
|
declare function calculateViewportsSpatialRegistration(viewport1: IStackViewport | IVolumeViewport, viewport2: IStackViewport | IVolumeViewport): void;
|
|
3
3
|
export default calculateViewportsSpatialRegistration;
|