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;
|