Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | 1x 1x 1x 1x 1x 1x 2x 2x 2x 6x 1x 1x | import { BlendModes, OrientationAxis, Events } from '../enums'; import { RENDERING_DEFAULTS } from '../constants'; import cache from '../cache'; import setDefaultVolumeVOI from './helpers/setDefaultVolumeVOI'; import { triggerEvent, isImageActor } from '../utilities'; import { setTransferFunctionNodes } from '../utilities/transferFunctionUtils'; import type vtkVolume from '@kitware/vtk.js/Rendering/Core/Volume'; import type { ViewportInput } from '../types/IViewport'; import type { ImageActor } from '../types/IActor'; import BaseVolumeViewport from './BaseVolumeViewport'; /** * An object representing a 3-dimensional volume viewport. VolumeViewport3Ds are used to render * 3D volumes in their entirety, and not just load a single slice at a time. * * For setting volumes on viewports you need to use {@link addVolumesToViewports} * which will add volumes to the specified viewports. */ class VolumeViewport3D extends BaseVolumeViewport { constructor(props: ViewportInput) { super(props); const { parallelProjection, orientation } = this.options; const activeCamera = this.getVtkActiveCamera(); Iif (parallelProjection != null) { activeCamera.setParallelProjection(parallelProjection); } Eif (orientation && orientation !== OrientationAxis.ACQUISITION) { this.applyViewOrientation(orientation); } } public resetCamera( resetPan = true, resetZoom = true, resetToCenter = true ): boolean { super.resetCamera(resetPan, resetZoom, resetToCenter); this.resetVolumeViewportClippingRange(); return; } getRotation = (): number => 0; getCurrentImageIdIndex = (): number | undefined => { return undefined; }; getCurrentImageId = (): string => { return null; }; setSlabThickness( slabThickness: number, filterActorUIDs?: Array<string> ): void { return null; } setBlendMode( blendMode: BlendModes, filterActorUIDs?: string[], immediate?: boolean ): void { return null; } /** * Resets the properties of the volume to their default values. * * @param [volumeId] - The id of the volume to reset. If not provided, the default volume will be reset. */ resetProperties(volumeId?: string): void { const volumeActor = volumeId ? this.getActor(volumeId) : this.getDefaultActor(); if (!volumeActor) { throw new Error(`No actor found for the given volumeId: ${volumeId}`); } // if a custom slabThickness was set, we need to reset it if (volumeActor.slabThickness) { volumeActor.slabThickness = RENDERING_DEFAULTS.MINIMUM_SLAB_THICKNESS; this.viewportProperties.slabThickness = undefined; this.updateClippingPlanesForActors(this.getCamera()); } const imageVolume = cache.getVolume(volumeActor.uid); if (!imageVolume) { throw new Error( `imageVolume with id: ${volumeActor.uid} does not exist in cache` ); } setDefaultVolumeVOI(volumeActor.actor as vtkVolume, imageVolume, false); if (isImageActor(volumeActor)) { const transferFunction = (volumeActor.actor as ImageActor) .getProperty() .getRGBTransferFunction(0); setTransferFunctionNodes( transferFunction, this.initialTransferFunctionNodes ); } this.setCamera(this.initialCamera); triggerEvent( this.element, Events.VOI_MODIFIED, super.getVOIModifiedEventDetail(volumeId) ); } resetSlabThickness(): void { return null; } } export default VolumeViewport3D; |