UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

169 lines (156 loc) 5.67 kB
import { Bounds, Nullable } from './../../types'; import vtkProp3D, { IProp3DInitialValues } from './Prop3D'; import vtkVolumeMapper from './VolumeMapper'; import vtkVolumeProperty, { IVolumePropertyInitialValues, } from './VolumeProperty'; /** * */ export interface IVolumeInitialValues extends IProp3DInitialValues { mapper?: vtkVolumeMapper; property?: vtkVolumeProperty; bounds?: Bounds; } /** * */ export interface vtkVolume extends vtkProp3D { /** * Get the volume mapper */ getMapper(): Nullable<vtkVolumeMapper>; /** * For some exporters and other other operations we must be able to collect * all the actors or volumes. */ getVolumes(): vtkVolume[]; /** * Get the `Modified Time` which is a monotonic increasing integer * global for all vtkObjects. * * This allow to solve a question such as: * - Is that object created/modified after another one? * - Do I need to re-execute this filter, or not? ... * * @return {Number} the global modified time. */ getMTime(): number; /** * Get the mtime of anything that would cause the rendered image to appear * differently */ getRedrawMTime(): number; /** * Create a new property suitable for use with this type of Actor. * @param {IVolumePropertyInitialValues} [initialValues] (default: {}) */ makeProperty(initialValues?: IVolumePropertyInitialValues): vtkVolumeProperty; /** * Set the volume mapper * @param {vtkVolumeMapper} mapper */ setMapper(mapper: vtkVolumeMapper): boolean; // Inherited from vtkProp3D, but takes a vtkVolumeProperty instead of a generic vtkObject getProperty(mapperInputPort?: number): vtkVolumeProperty; getProperties(): vtkVolumeProperty[]; setProperty(mapperInputPort: number, property: vtkVolumeProperty): boolean; setProperty(property: vtkVolumeProperty): boolean; setProperties(properties: vtkVolumeProperty[]): boolean; } /** * Method use to decorate a given object (publicAPI+model) with vtkVolume characteristics. * * @param publicAPI object on which methods will be bounds (public) * @param model object on which data structure will be bounds (protected) * @param {IVolumeInitialValues} [initialValues] (default: {}) */ export function extend( publicAPI: object, model: object, initialValues?: IVolumeInitialValues ): void; /** * Method use to create a new instance of vtkVolume */ export function newInstance(initialValues?: IVolumeInitialValues): vtkVolume; /** * vtk-js includes support for volume rendering using hardware GPU acceleration. The * capabilities may change over time but as of this writing it includes support * for : * * - multi-component data * - at least 24 bits linear resolution * - support for all native data types, 16 bit, float, etc * - opacity transfer functions * - color transfer functions * - volume interpolation of nearest, fast linear and linear * - automatic intermixing of opaque surfaces with volumes * * Using volume rendering in vtk-js is very much like using it VTK is you are * familiar with VTK. The main objects are : * * - RenderWindow/Renderer as usual * - Volume - similar to Actor, holds the property and mapper * - VolumeMapper - takes an ImageData as input * - VolumeProperty - holds the opacity and color transfer functions * - PiecewiseFunction - a piecewise interpolated function, good for opacity * transfer functions * - ColorTransferFunction - similar to PiecewiseFunction but support an RGB * value at each point. * * @example * ```js * // Load the rendering pieces we want to use (for both WebGL and WebGPU) * import 'vtk.js/Sources/Rendering/Profiles/Volume'; * * import vtkColorTransferFunction from '@kitware/vtk.js/Rendering/Core/ColorTransferFunction'; * import vtkHttpDataSetReader from '@kitware/vtk.js/IO/Core/HttpDataSetReader'; * * import vtkVolume from '@kitware/vtk.js/Rendering/Core/Volume'; * import vtkVolumeMapper from '@kitware/vtk.js/Rendering/Core/VolumeMapper'; * const vol = vtkVolume.newInstance(); * const mapper = vtkVolumeMapper.newInstance(); * mapper.setSampleDistance(2.0); * vol.setMapper(mapper); * * const reader = vtkHttpDataSetReader.newInstance({ fetchGzip: true }); * reader.setUrl(`${__BASE_PATH__}/Data/volume/headsq.vti`).then(() => { * reader.loadData().then(() => { * // we wait until the data is loaded before adding * // the volume to the renderer * renderer.addVolume(actor); * renderer.resetCamera(); * renderWindow.render(); * }); * }); * * // create color and opacity transfer functions * const ctfun = vtkColorTransferFunction.newInstance(); * ctfun.addRGBPoint(200.0, 1.0, 1.0, 1.0); * ctfun.addRGBPoint(2000.0, 0.0, 0.0, 0.0); * * const ofun = vtkPiecewiseFunction.newInstance(); * ofun.addPoint(200.0, 0.0); * ofun.addPoint(1200.0, 0.2); * ofun.addPoint(4000.0, 0.4); * * vol.getProperty().setRGBTransferFunction(0, ctfun); * vol.getProperty().setScalarOpacity(0, ofun); * vol.getProperty().setScalarOpacityUnitDistance(0, 4.5); * vol.getProperty().setInterpolationTypeToFastLinear(); * * mapper.setInputConnection(reader.getOutputPort()); * ``` * * @see [vtkColorTransferFunction](./Rendering_Core_ColorTransferFunction.html) * @see [vtkImageData](./Common_DataModel_ImageData.html) * @see [vtkPiecewiseFunction](./Common_DataModel_PiecewiseFunction.html) * @see [vtkVolumeMapper](./Rendering_Core_VolumeMapper.html) * @see [vtkVolumeProperty](./Rendering_Core_VolumeProperty.html) */ export declare const vtkVolume: { newInstance: typeof newInstance; extend: typeof extend; }; export default vtkVolume;