UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

502 lines (451 loc) 14.6 kB
import { vtkObject, vtkRange } from './../../interfaces'; import { float, int, Nullable, Range, TypedArray } from './../../types'; /** * Output of the rangeHelper instance */ interface VtkStatisticInformation { min: number; max: number; count: number; sum: number; mean: number; } /** * Helper class used to compute data range of a set of numbers */ interface vtkRangeHelper { add(value: number): void; get(): VtkStatisticInformation; getRange(): vtkRange; } /** * The inital values of a vtkDataArray. */ export interface IDataArrayInitialValues { dataType?: string; empty?: boolean; name?: string; numberOfComponents?: number; rangeTuple?: Range; size?: number; values?: Array<number> | TypedArray; } export interface vtkDataArray extends vtkObject { /** * Get the size, in bytes, of the lowest-level element of an array. */ getElementComponentSize(): number; /** * Get the component for a given tupleIdx. * @param {Number} tupleIdx * @param {Number} [componentIndex] (default: 0) */ getComponent(tupleIdx: number, componentIndex?: number): number; /** * Set the component value for a given tupleIdx and componentIndex. * @param {Number} tupleIdx * @param {Number} componentIndex * @param {Number} value */ setComponent(tupleIdx: number, componentIndex: number, value: number): void; /** * */ getData(): number[] | TypedArray; /** * Call this method when the underlying data has changed * This method calls `modified()` * For example, when you need to modify chunks of the array, it is faster * to get the underlying array with `getData()`, modify it, and then call * `dataChange()`. */ dataChange(): void; /** * Get the range of the given component. * * @param {Number} componentIndex (default: -1) */ getRange(componentIndex?: number): Range; /** * * @param {vtkRange} rangeValue * @param {Number} componentIndex */ setRange(rangeValue: vtkRange, componentIndex: number): Range; /** * Returns an array of the ranges for each component of the DataArray. * Defaults to computing all the ranges if they aren't already computed. * * If the number of components is greater than 1, the last element in the * ranges array is the min,max magnitude of the dataset. This is the same as * calling `getRange(-1)`. * * Passing `getRanges(false)` will return a clone of the ranges that have * already been computed. This is useful when you want to avoid recomputing * the ranges, which can be expensive. * * @param {boolean} [computeRanges] (default: true) * @returns {vtkRange[]} */ getRanges(computeRanges: boolean): vtkRange[]; /** * Set the given tuple at the given index. * @param {Number} idx * @param {Array<Number>|TypedArray} tuple */ setTuple(idx: number, tuple: Array<number> | TypedArray): void; /** * Set the given tuples starting at the given index. * @param {Number} idx * @param {Array<Number>|TypedArray} tuples */ setTuples(idx: number, tuples: Array<number> | TypedArray): void; /** * Get the tuple at the given index. * * For performance reasons, it is advised to pass a 'tupleToFill': * `const x = [];` * `for (int i = 0; i < N; ++i) { * ` dataArray.getTuple(idx, x);` * ` ...` * instead of: * `for (int i = 0; i < N; ++i) { * ` const x = dataArray.getTuple(idx);` * `...` * @param {Number} idx * @param {Number[]|TypedArray} [tupleToFill] (default []) * @returns {Number[]|TypedArray} */ getTuple( idx: number, tupleToFill?: number[] | TypedArray ): number[] | TypedArray; /** * Get the tuples between fromId (inclusive) and toId (exclusive). * * If fromId or toId is negative, it refers to a tuple index from the * end of the underlying typedArray. * If the range between fromId and toId is invalid, getTuples returns * null. * * NOTE: Any changes to the returned TypedArray will result in changes to * this DataArray's underlying TypedArray. * * @param {Number} [fromId] (default: 0) * @param {Number} [toId] (default: publicAPI.getNumberOfTuples()) * @returns {Nullable<TypedArray>} */ getTuples(fromId?: number, toId?: number): Nullable<TypedArray>; /** * Insert the given tuple at the given index. * NOTE: May resize the data values array. "Safe" version of setTuple. * * A typical usage is when `vtkDataArray` is initialized with * `initialValues = { size: 0, values: new Uint8Array(1000) }`, where * an empty but pre-allocated array with 1'000 components is created. * The component values can then be inserted with `insertTuple()` or * `insertNextTuple()` without requiring new memory allocation until * the size of 1'000 is exceeded (e.g. after inserting the 250th * 4-component tuple). * * `insertTuple` increases the number of tuples (`getNumberOfTuples()`). * * @see insertNextTuple * @see getNumberOfTuples * @see allocate * * @param {Number} idx * @param {Array<Number>|TypedArray} tuple * @returns {Number} Index of the inserted tuple */ insertTuple(idx: number, tuple: Array<number> | TypedArray): number; /** * Insert tuples starting at the given idx. * * @param {Number} idx * @param {Array<Number>|TypedArray} tuples Flat array of tuples to insert * @returns The index of the last inserted tuple */ insertTuples(idx: number, tuples: Array<number> | TypedArray): number; /** * Insert the given tuple at the next available slot and return the index of the insertion. * NOTE: May resize the data values array. "Safe" version of setTuple. * * @see insertTuple * @see allocate * * @param {Array<Number>|TypedArray} tuple * @returns {Number} Index of the inserted tuple. */ insertNextTuple(tuple: Array<number> | TypedArray): number; /** * Convenience function to insert an array of tuples with insertNextTuple. * NOTE: tuples.length must be a multiple of `getNumberOfComponents`. * @param {Array<Number>|TypedArray} tuples * @returns The index of the last inserted tuple */ insertNextTuples(tuples: Array<number> | TypedArray): number; /** * * @param {Number} [idx] (default: 1) * @returns {Number} */ getTupleLocation(idx?: number): number; /** * Get the dimension (n) of the components. * @returns {Number} */ getNumberOfComponents(): number; /** * Get the actual number of values in the array, which is equal to `getNumberOfTuples() * getNumberOfComponents()`. * @returns {Number} */ getNumberOfValues(): number; /** * Get the actual number of complete tuples (a component group) in the array. * @returns {Number} */ getNumberOfTuples(): number; /** * Convenient method to search the index of the first matching tuple in the array. * This is a naïve search, consider using a "locator" instead. * @param {Array<Number>|TypedArray} tupleToSearch * @param {Number} precision (1e-6 by default) * @returns {Number} the index of the tuple if found, -1 otherwise. */ findTuple( tupleToSearch: Array<number> | TypedArray, precision?: number ): number; /** * Get the data type of this array as a string. * @returns {String} */ getDataType(): string; /** * Return a clone of this array. * @returns {vtkDataArray} */ newClone(): vtkDataArray; /** * Get the name of the array. * @returns {String} */ getName(): string; /** * Set the data of this array. * Optionally pass ´numberOfComponents´ to overwrite this dataArray's * numberOfComponents. * If this dataArray's numberOfComponents doesn't divide the given array's * length, this dataArray's numberOfComponents is set to 1. * * @param {Number[]|TypedArray} typedArray The Array value. * @param {Number} [numberOfComponents] */ setData(typedArray: number[] | TypedArray, numberOfComponents?: number): void; /** * Get the state of this array. * @returns {object} */ getState(): object; /** * Deep copy of another vtkDataArray into this one. * @param {vtkDataArray} other */ deepCopy(other: vtkDataArray): void; /** * Interpolate between the tuples retrieved from source1 * and source2 with the resp. indices and set the * resulting tuple to the idx of this DataArray. * * @param {int} idx, * @param {vtkDataArray} source1, * @param {int} source1Idx, * @param {vtkDataArray} source2, * @param {int} source2Idx, * @param {float} t */ interpolateTuple( idx: int, source1: vtkDataArray, source1Idx: int, source2: vtkDataArray, source2Idx: int, t: float ): void; /** * Resize the array to the requested number of extra tuples * (added to the current number of tuples) and preserve data. * model.size WILL NOT be modified. * This is useful before multiple calls to `insertNextTuple()` or `insertNextTuples()`. * @param {Number} extraNumTuples Number of tuples to allocate memory wise. * @see insertNextTuple * @see insertNextTuples * @see allocate */ allocate(extraNumTuples: number): void; /** * Resize the array to the requested number of tuples and preserve data. * Increasing the array size may allocate extra memory beyond what was * requested. * Decreasing the array size will trim memory to the requested size. * model.size WILL be modified according ot the new size. * If requestedNumTuples > getNumberOfTuples(), * it creates a new typed array and copies the old values to the new array. * If requestedNumTuples < getNumberOfTuples(), the typed array is untouched, * only model.size is modified. * @param {Number} requestedNumTuples Final expected number of tuples; must be >= 0 * @returns {Boolean} True if a resize occured, false otherwise * @see insertNextTuple * @see insertNextTuples * @see initialize * @see allocate */ resize(requestedNumTuples: number): boolean; /** * Reset this array. * NOTE: This won't touch the actual memory of the underlying typedArray. * @see insertNextTuple * @see insertNextTuples */ initialize(): void; // --- via macro -- /** * Set the name of this array. * @param {String} name * @returns {Boolean} */ setName(name: string): boolean; /** * Set the dimension (n) of the components. * @param {Number} numberOfComponents */ setNumberOfComponents(numberOfComponents: number): boolean; } // ---------------------------------------------------------------------------- // Static API // ---------------------------------------------------------------------------- /** * Compute range of a given array. The array could be composed of tuples and * individual component range could be computed as well as magnitude. * * ```js * const array = [x0, y0, z0, x1, y1, z1, ..., xn, yn, zn]; * const { min: yMin, max: yMax } = computeRange(array, 1, 3); * const { min: minMagnitude, max: maxMagnitude } = computeRange(array, -1, 3); * ``` * * @param {Number[]} values Array to go through to extract the range from * @param {Number} [component] (default: 0) indice to use inside tuple size * @param {Number} [numberOfComponents] (default: 1) size of the tuple */ export function computeRange( values: ArrayLike<number>, component?: number, numberOfComponents?: number ): vtkRange; /** * Compute range of a given array, it only supports 1D arrays. * * @param {Number[]} values Array to go through to extract the range from * @param {Number} offset offset index to select the desired component in the tuple * @param {Number} numberOfComponents size of tuple in a multi-channel array */ export function fastComputeRange( values: ArrayLike<number>, offset: number, numberOfComponents: number ): vtkRange; /** * @deprecated please use `fastComputeRange` instead * Create helper object that can be used to gather min, max, count, sum of * a set of values. */ export function createRangeHelper(): vtkRangeHelper; /** * Return the name of a typed array * * ```js * const isFloat32 = ('Float32Array' === getDataType(array)); * const clone = new macro.TYPED_ARRAYS[getDataType(array)](array.length); * ``` * * @param typedArray to extract its type from */ export function getDataType(typedArray: TypedArray): string; /** * Return the max norm of a given vtkDataArray * * @param dataArray to process */ export function getMaxNorm(dataArray: vtkDataArray): number; /** * Method use to decorate a given object (publicAPI+model) with vtkDataArray characteristics. * * @param publicAPI object on which methods will be bounds (public) * @param model object on which data structure will be bounds (protected) * @param {object} [initialValues] (default: {}) Must pass a number > 0 for `size` except if `empty: true` is also passed or a non-empty typed array for `values`. */ export function extend( publicAPI: object, model: object, initialValues?: IDataArrayInitialValues ): void; // ---------------------------------------------------------------------------- /** * Method use to create a new instance of vtkDataArray * * If the provided `values` is a plain Array and `dataType` is not explicitly provided, * then the vtkDataArray data type will be a Float32Array. * * @param {object} [initialValues] for pre-setting some of its content */ export function newInstance(initialValues?: object): vtkDataArray; /** * Constants capturing the number of bytes per element based on its data type. */ export enum DataTypeByteSize { Int8Array, Uint8Array, Uint8ClampedArray, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, } /** * Constants capturing the various VTK data types. */ export enum VtkDataTypes { VOID, CHAR, SIGNED_CHAR, UNSIGNED_CHAR, SHORT, UNSIGNED_SHORT, INT, UNSIGNED_INT, FLOAT, DOUBLE, } /** * vtkDataArray is an abstract superclass for data array objects containing * numeric data. */ export declare const vtkDataArray: { newInstance: typeof newInstance; extend: typeof extend; // static computeRange: typeof computeRange; createRangeHelper: typeof createRangeHelper; fastComputeRange: typeof fastComputeRange; getDataType: typeof getDataType; getMaxNorm: typeof getMaxNorm; // constants DataTypeByteSize: typeof DataTypeByteSize; VtkDataTypes: typeof VtkDataTypes; DefaultDataType: VtkDataTypes; }; export default vtkDataArray;