UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

385 lines (334 loc) 12.2 kB
import vtkPiecewiseFunction from './../../Common/DataModel/PiecewiseFunction'; import { Bounds, Range, Extent } from './../../types'; import vtkAbstractMapper3D, { IAbstractMapper3DInitialValues, } from './AbstractMapper3D'; import { BlendMode, FilterMode } from './VolumeMapper/Constants'; /** * */ export interface IVolumeMapperInitialValues extends IAbstractMapper3DInitialValues { anisotropy?: number; autoAdjustSampleDistances?: boolean; averageIPScalarRange?: Range; blendMode?: BlendMode; bounds?: Bounds; computeNormalFromOpacity?: boolean; getVolumeShadowSamplingDistFactor?: number; globalIlluminationReach?: number; imageSampleDistance?: number; localAmbientOcclusion?: boolean; maximumSamplesPerRay?: number; sampleDistance?: number; LAOKernelRadius?: number; LAOKernelSize?: number; } export interface vtkVolumeMapper extends vtkAbstractMapper3D { /** * Get the bounds for this mapper as [xmin, xmax, ymin, ymax,zmin, zmax]. * @return {Bounds} The bounds for the mapper. */ getBounds(): Bounds; /** * */ getBlendMode(): BlendMode; /** * */ getBlendModeAsString(): string; /** * Get the distance between samples used for rendering * @default 1.0 */ getSampleDistance(): number; /** * Sampling distance in the XY image dimensions. * Default value of 1 meaning 1 ray cast per pixel. If set to 0.5, 4 rays will be cast per pixel. * If set to 2.0, 1 ray will be cast for every 4 (2 by 2) pixels. T * @default 1.0 */ getImageSampleDistance(): number; /** * * @default 1000 */ getMaximumSamplesPerRay(): number; /** * * @default true */ getAutoAdjustSampleDistances(): boolean; /** * Get at what scale the quality is reduced when interacting for the first time with the volume * It should should be set before any call to render for this volume * The higher the scale is, the lower the quality of rendering is during interaction * @default 1 */ getInitialInteractionScale(): number; /** * Get by how much the sample distance should be increased when interacting * This feature is only implemented in the OpenGL volume mapper * @default 1 */ getInteractionSampleDistanceFactor(): number; /** * */ getAverageIPScalarRange(): Range; /** * */ getAverageIPScalarRangeByReference(): Range; /** * Get the blending coefficient that interpolates between surface and volume rendering * @default 0.0 */ getVolumetricScatteringBlending(): number; /** * Get the global illumination reach of volume shadow * @default 0.0 */ getGlobalIlluminationReach(): number; /** * Get the multipler for volume shadow sampling distance * @default 5.0 */ getVolumeShadowSamplingDistFactor(): number; /** * Get anisotropy of volume shadow scatter * @default 0.0 */ getAnisotropy(): number; /** * Get local ambient occlusion flag * @default false */ getLocalAmbientOcclusion(): boolean; /** * Get kernel size for local ambient occlusion * @default 15 */ getLAOKernelSize(): number; /** * Get kernel radius for local ambient occlusion * @default 7 */ getLAOKernelRadius(): number; /** * * @param x * @param y */ setAverageIPScalarRange(x: number, y: number): boolean; /** * * @param {Range} averageIPScalarRange */ setAverageIPScalarRangeFrom(averageIPScalarRange: Range): boolean; /** * Set blend mode to COMPOSITE_BLEND * @param {BlendMode} blendMode */ setBlendMode(blendMode: BlendMode): void; /** * Set blend mode to COMPOSITE_BLEND */ setBlendModeToComposite(): void; /** * Set blend mode to MAXIMUM_INTENSITY_BLEND */ setBlendModeToMaximumIntensity(): void; /** * Set blend mode to MINIMUM_INTENSITY_BLEND */ setBlendModeToMinimumIntensity(): void; /** * Set blend mode to AVERAGE_INTENSITY_BLEND */ setBlendModeToAverageIntensity(): void; /** * Set blend mode to RADON_TRANSFORM_BLEND */ setBlendModeToRadonTransform(): void; /** * Get the distance between samples used for rendering * @param sampleDistance */ setSampleDistance(sampleDistance: number): boolean; /** * * @param imageSampleDistance */ setImageSampleDistance(imageSampleDistance: number): boolean; /** * * @param maximumSamplesPerRay */ setMaximumSamplesPerRay(maximumSamplesPerRay: number): boolean; /** * * @param autoAdjustSampleDistances */ setAutoAdjustSampleDistances(autoAdjustSampleDistances: boolean): boolean; /** * * @param initialInteractionScale */ setInitialInteractionScale(initialInteractionScale: number): boolean; /** * * @param interactionSampleDistanceFactor */ setInteractionSampleDistanceFactor( interactionSampleDistanceFactor: number ): boolean; /** * Set the normal computation to be dependent on the transfer function. * By default, the mapper relies on the scalar gradient for computing normals at sample locations * for lighting calculations. This is an approximation and can lead to inaccurate results. * When enabled, this property makes the mapper compute normals based on the accumulated opacity * at sample locations. This can generate a more accurate representation of edge structures in the * data but adds an overhead and drops frame rate. * @param computeNormalFromOpacity */ setComputeNormalFromOpacity(computeNormalFromOpacity: boolean): boolean; /** * Set the blending coefficient that determines the interpolation between surface and volume rendering. * Default value of 0.0 means shadow effect is computed with phong model. * Value of 1.0 means shadow is created by volume occlusion. * @param volumeScatterBlendCoef */ setVolumetricScatteringBlending(volumeScatterBlendCoef: number): void; /** * Set the global illumination reach of volume shadow. This function is only effective when volumeScatterBlendCoef is greater than 0. * Default value of 0.0 means only the neighboring voxel is considered when creating global shadow. * Value of 1.0 means the shadow ray traverses through the entire volume. * @param globalIlluminationReach */ setGlobalIlluminationReach(globalIlluminationReach: number): void; /** * Set the multipler for volume shadow sampling distance. This function is only effective when volumeScatterBlendCoef is greater than 0. * For VSSampleDistanceFactor >= 1.0, volume shadow sampling distance = VSSampleDistanceFactor * SampleDistance. * @param VSSampleDistanceFactor */ setVolumeShadowSamplingDistFactor(VSSampleDistanceFactor: number): void; /** * Set anisotropy of volume shadow scatter. This function is only effective when volumeScatterBlendCoef is greater than 0. * Default value of 0.0 means light scatters uniformly in all directions. * Value of -1.0 means light scatters backward, value of 1.0 means light scatters forward. * @param anisotropy */ setAnisotropy(anisotropy: number): void; /** * Set whether to turn on local ambient occlusion (LAO). LAO is only effective if shading is on and volumeScatterBlendCoef is set to 0. * LAO effect is added to ambient lighting, so the ambient component of the actor needs to be great than 0. * @param localAmbientOcclusion */ setLocalAmbientOcclusion(localAmbientOcclusion: boolean): void; /** * Set kernel size for local ambient occlusion. It specifies the number of rays that are randomly sampled in the hemisphere. * Value is clipped between 1 and 32. * @param LAOKernelSize */ setLAOKernelSize(LAOKernelSize: number): void; /** * Set kernel radius for local ambient occlusion. It specifies the number of samples that are considered on each random ray. * Value must be greater than or equal to 1. * @param LAOKernelRadius */ setLAOKernelRadius(LAOKernelRadius: number): void; /** * Set kernel size for local ambient occlusion. It specifies the number of rays that are randomly sampled in the hemisphere. * Value is clipped between 1 and 32. * @param LAOKernelSize */ setLAOKernelSize(LAOKernelSize: number): void; /** * Set kernel radius for local ambient occlusion. It specifies the number of samples that are considered on each random ray. * Value must be greater than or equal to 1. * @param LAOKernelRadius */ setLAOKernelRadius(LAOKernelRadius: number): void; /** * Tells the mapper to only update the specified extents. * * If there are zero extents, the mapper updates the entire volume texture. * Otherwise, the mapper will only update the texture by the specified extents * during the next render call. * * This array is cleared after a successful render. * @param extents */ setUpdatedExtents(extents: Extent[]): boolean; /** * Retrieves the updated extents. * * This array is cleared after every successful render. */ getUpdatedExtents(): Extent[]; /** * */ update(): void; } /** * Create an absorption transfer function to set to the mapper when blend mode is RADON. * The transfer function is a linear ramp between the lowest material with absorption and * the material with maximum absorption. Voxel values lower than the lowest material with * absorption will have no absorption associated. Voxel values higher than the maximum * absorbent material will have the same absorption than the max absorbent material. * The associated color transfer function is typically black to white between 0 and 1. * An alternative is to create your own transfer function with HU/absorption pairs. e.g. * const ofun = vtkPiecewiseFunction.newInstance(); * ofun.addPointLong(-1000,0, 1, 1); // air, "1, 1)" to flatten the function * ofun.addPoint(-10, 0.01); // fat * ofun.addPoint(-10, 0.015); // water * ofun.addPointLong(1000, 0.03, 1, 1); // bone * ofun.addPoint(3000, 1); // silver * @static * @param {number} firstAbsorbentMaterialHounsfieldValue: Define minimum voxel value (in hounsfield unit) with non zero absorption (e.g. water (0), fat(-10)...). * Any voxel value lower than this parameter will have no absorption (absorption === 0) * @param {number} firstAbsorbentMaterialAbsorption: Absorption attributed to voxels with firstAbsorbentMaterialHounsfieldValue (e.g. 0 or 0.01) * @param {number} maxAbsorbentMaterialHounsfieldValue: Define maximum voxel value (in hounsfield unit) with increasing absorption (e.g. bone (1000)) * @param {number} maxAbsorbentMaterialAbsorption: Absorption attributed to voxels >= maxAbsorbentMaterialHounsfieldValue (e.g. 0.03) * @param {vtkPiecewiseFunction} outputTransferFunction: To provide optionally to avoid instantiating a new transfer function each time. * @return {vtkPiecewiseFunction} the created absorption transfer function to set on VolumeMapper scalarOpacity. */ export function createRadonTransferFunction( firstAbsorbentMaterialHounsfieldValue: number, firstAbsorbentMaterialAbsorption: number, maxAbsorbentMaterialHounsfieldValue: number, maxAbsorbentMaterialAbsorption: number, outputTransferFunction?: vtkPiecewiseFunction ): vtkPiecewiseFunction; /** * Method use to decorate a given object (publicAPI+model) with vtkVolumeMapper characteristics. * * @param publicAPI object on which methods will be bounds (public) * @param model object on which data structure will be bounds (protected) * @param {IVolumeMapperInitialValues} [initialValues] (default: {}) */ export function extend( publicAPI: object, model: object, initialValues?: IVolumeMapperInitialValues ): void; /** * Method use to create a new instance of vtkVolumeMapper */ export function newInstance( initialValues?: IVolumeMapperInitialValues ): vtkVolumeMapper; /** * vtkVolumeMapper inherits from vtkMapper. * A volume mapper that performs ray casting on the GPU using fragment programs. */ export declare const vtkVolumeMapper: { newInstance: typeof newInstance; extend: typeof extend; BlendMode: typeof BlendMode; FilterMode: typeof FilterMode; }; export default vtkVolumeMapper;