@thewtex/vtk.js-esm
Version:
Visualization Toolkit for the Web
360 lines (315 loc) • 10.7 kB
TypeScript
import { mat3, mat4, ReadonlyVec3, vec3 } from 'gl-matrix';
import { Bounds } from '@kitware/vtk.js/types';
import vtkDataSet from '@kitware/vtk.js/Common/DataModel/DataSet';
/**
*
*/
interface IImageDataInitialValues {
spacing?: number[];
origin?: number[];
extent?: number[];
}
interface IComputeHistogram {
minimum: number;
maximum: number;
average: number;
variance: number;
sigma: number;
}
export interface vtkImageData extends vtkDataSet {
/**
* Returns an object with `{ minimum, maximum, average, variance, sigma }`
* of the imageData points found within the provided `worldBounds`.
*
* `voxelFunc(index, bounds)` is an optional function that is called with
* the `[i,j,k]` index and index `bounds`, expected to return truthy if the
* data point should be counted in the histogram, and falsey if not.
* @param {Number[]} worldBounds The bounds of the world.
* @param [voxelFunc]
*/
computeHistogram(worldBounds: number[], voxelFunc?: any): IComputeHistogram;
/**
* Returns an `array[3]` of values to multiply an `[i,j,k]` index to convert
* into the actual data array index, from the provided extent.
* `numberOfComponents` should match the Scalar components.
* @internal
* @param {Number[]} extent
* @param {Number} [numberOfComponents]
*/
computeIncrements(extent: number[], numberOfComponents?: number): number[]
/**
* Converts an `[i,j,k]` index to the flat data array index. Returns `NaN`
* if any of the i,j,k bounds are outside the data Extent.
* @internal
* @param {Number[]} ijk The localized `[i,j,k]` pixel array position. Float values will be rounded.
* @return {Number} the corresponding flattened index in the scalar array
*/
computeOffsetIndex(ijk: number[]): number;
/**
* Calculates the `indexToWorld` and `worldToIndex` conversion matrices from
* the origin, direction, and spacing. Shouldn't need to call this as it is
* handled internally, and updated whenever the vtkImageData is modified.
* @internal
*/
computeTransforms(): void;
/**
* Returns a bounds array from a given Extent, useful if you need to
* calculate the world bounds of a subset of the imageData's data.
* @internal
* @param {Number[]} ex
*/
extentToBounds(ex: number[]): number[];
/**
* The Bounds of a vtkImage are returned as pairs of world coordinates
* ```[x_min, x_max, y_min, y_max, z_min, z_max]``` these are calculated
* from the Extent, Origin, and Spacing, defined
* through
* ```js
* bounds[6] =
* [
* i_min*Spacing[0] + Origin[0], i_max*Spacing[0] + Origin[0],
* j_min*Spacing[1] + Origin[1], j_max*Spacing[1] + Origin[1],
* k_min*Spacing[2] + Origin[2], k_max*Spacing[2] + Origin[2]
* ];
* ```
* You can't directly set the bounds. First you need to decide how many
* pixels across your image will be (i.e. what the extent should be), and
* then you must find the origin and spacing that will produce the bounds
* that you need from the extent that you have. This is simple algebra. In
* general, always set the extent to start at zero, e.g. `[0, 9, 0, 9, 0,
* 9]` for a 10x10x10 image. Calling `setDimensions(10,10,10)` does exactly
* the same thing as `setExtent(0,9,0,9,0,9)` but you should always do the
* latter to be explicit about where your extent starts.
* @return {Bounds} The bounds for the mapper.
*/
getBounds(): Bounds;
/**
* Get the `[x,y,z]` location of the center of the imageData.
*/
getCenter(): number[];
/**
* Get dimensions of this structured points dataset. It is the number of
* points on each axis. Dimensions are computed from Extents during this
* call.
*/
getDimensions(): number[];
/**
* Direction is a `mat3` matrix corresponding to the axes directions in
* world coordinates for the I, J, K axes of the image. Direction must form
* an orthonormal basis.
*/
getDirection(): mat3;
/**
* The maximal extent of the projection.
* @default [0, -1, 0, -1, 0, -1]
*/
getExtent(): number[];
/**
*
* @default [0, -1, 0, -1, 0, -1]
*/
getExtentByReference(): number[];
/**
* Returns the data array index for the point at the provided world position.
* @param {Number[]} xyz The [x,y,z] array in world coordinates.
* @return {number|NaN} the corresponding pixel's index in the scalar array.
*/
getOffsetIndexFromWorld(xyz: number[]): number;
/**
*
*/
getNumberOfCells(): number;
/**
* Get the number of points composing the dataset.
*/
getNumberOfPoints(): number;
/**
* Get the world position of a data point. Index is the point's index in the
* 1D data array.
* @param index
*/
getPoint(index: number): number[];
/**
* Get the origin of the dataset. The origin is the position in world
* coordinates of the point of extent (0,0,0). This point does not have to
* be part of the dataset, in other words, the dataset extent does not have
* to start at (0,0,0) and the origin can be outside of the dataset bounding
* box. The origin plus spacing determine the position in space of the
* points.
*/
getOrigin(): number[];
/**
* Get the origin of the dataset. The origin is the position in world
*/
getOriginByReference(): number[];
/**
* Returns the scalar value for the point at the provided world position, or
* `NaN` if the world bounds are outside the volumeData bounds. `comp` is
* the scalar component index, for multi-component scalar data.
* @param {Number[]} xyz The [x,y,z] array in world coordinates.
* @param {Number} [comp] The scalar component index for multi-component scalars.
* @return {number|NaN} The corresponding pixel's scalar value.
*/
getScalarValueFromWorld(xyz: number[], comp?: number): number;
/**
* Set the spacing [width, height, length] of the cubical cells that compose
* the data set.
*/
getSpacing(): number[];
/**
*
*/
getSpacingByReference(): number[];
/**
* Returns the `mat4` matrices used to convert between world and index.
* `worldToIndex` is the inverse matrix of `indexToWorld`. Both are made
* with `Float64Array`.
*/
getIndexToWorld(): null | mat4;
/**
* Returns the `mat4` matrices used to convert between world and index.
* `worldToIndex` is the inverse matrix of `indexToWorld`. Both are made
* with `Float64Array`.
*/
getWorldToIndex(): null | mat4;
/**
* this is the fast version, requires vec3 arguments
* @param {ReadonlyVec3} vin
* @param {vec3} vout
*/
indexToWorldVec3(vin: ReadonlyVec3, vout: vec3): vec3;
/**
* Converts the input index vector `[i,j,k]` to world values `[x,y,z]`.
* Modifies the out vector array in place, but also returns it.
* @param {ReadonlyVec3} ain
* @param {vec3} aout
*/
indexToWorld(ain: ReadonlyVec3, aout: vec3): vec3;
/**
* Calculate the corresponding world bounds for the given index bounds
* `[i_min, i_max, j_min, j_max, k_min, k_max]`. Modifies `out` in place if
* provided, or returns a new array.
* @param {Number[]} bin
* @param {Number[]} [bout]
*/
indexToWorldBounds(bin: number[], bout?: number[]): number[];
/**
* Set the values of the extent, from `0` to `(i-1)`, etc.
* @param dims
*/
setDimensions(dims: number[]): void;
/**
* Set the values of the extent, from `0` to `(i-1)`, etc.
* @param i
* @param j
* @param k
*/
setDimensions(i: number, j: number, k: number): void;
/**
* The direction matrix is a 3x3 basis for the I, J, K axes
* of the image. The rows of the matrix correspond to the
* axes directions in world coordinates. Direction must
* form an orthonormal basis, results are undefined if
* it is not.
* @param {mat3} direction
*/
setDirection(direction: mat3): boolean;
/**
* The direction matrix is a 3x3 basis for the I, J, K axes
* of the image. The rows of the matrix correspond to the
* axes directions in world coordinates. Direction must
* form an orthonormal basis, results are undefined if
* it is not.
* @param e00
* @param e01
* @param e02
* @param e10
* @param e11
* @param e12
* @param e20
* @param e21
* @param e22
*/
setDirection(e00: number, e01: number, e02: number, e10: number, e11: number, e12: number, e20: number, e21: number, e22: number): boolean;
/**
* Set the extent.
* @param extent
*/
setExtent(extent: number[]): boolean;
/**
*
* @param x1
* @param x2
* @param y1
* @param y2
* @param z1
* @param z2
*/
setExtent(x1: number, x2: number, y1: number, y2: number, z1: number, z2: number): void;
/**
*
* @param origin
*/
setOrigin(origin: number[]): boolean;
/**
*
* @param origin
*/
setOriginFrom(origin: number[]): boolean;
/**
*
* @param spacing
*/
setSpacing(spacing: number[]): boolean;
/**
*
* @param spacing
*/
setSpacingFrom(spacing: number[]): boolean;
/**
* this is the fast version, requires vec3 arguments
* @param vin
* @param vout
*/
worldToIndexVec3(vin: ReadonlyVec3, vout: vec3): vec3;
/**
* Converts the input world vector `[x,y,z]` to approximate index values
* `[i,j,k]`. Should be rounded to integers before attempting to access the
* index. Modifies the out vector array in place, but also returns it.
* @param ain
* @param aout
*/
worldToIndex(ain: ReadonlyVec3, aout: vec3): vec3;
/**
* Calculate the corresponding index bounds for the given world bounds
* `[x_min, x_max, y_min, y_max, z_min, z_max]`. Modifies `out` in place if
* provided, or returns a new array.
* @param {Number[]} bin
* @param {Number[]} [bout]
*/
worldToIndexBounds(bin: number[], bout?: number[]): number[];
}
/**
* Method used to decorate a given object (publicAPI+model) with vtkImageData characteristics.
*
* @param publicAPI object on which methods will be bounds (public)
* @param model object on which data structure will be bounds (protected)
* @param {IImageDataInitialValues} [initialValues] (default: {})
*/
export function extend(publicAPI: object, model: object, initialValues?: IImageDataInitialValues): void;
/**
* Method used to create a new instance of vtkImageData.
* @param {IImageDataInitialValues} [initialValues] for pre-setting some of its content
*/
export function newInstance(initialValues?: IImageDataInitialValues): vtkImageData;
/**
* vtkImageData is a data object that is a concrete implementation of
* vtkDataSet. vtkImageData represents a geometric structure that is a
* topological and geometrical regular array of points. Examples include volumes
* (voxel data) and pixmaps. All vtkDataSet functions are inherited.
*/
export declare const vtkImageData: {
newInstance: typeof newInstance,
extend: typeof extend,
};
export default vtkImageData;