UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

718 lines (636 loc) 17.3 kB
import { mat4 } from 'gl-matrix'; import { Bounds, TypedArray, Vector2, Vector3 } from './../../types'; import vtkPoints from './../Core/Points'; import { Nullable } from './../../types'; /** * Tests whether two bounds equal. * @param {Bounds} a * @param {Bounds} b */ export function equals(a: Bounds, b: Bounds): boolean; /** * Tests whether a given bounds is valid. * @param {Bounds} bounds */ export function isValid(bounds: Bounds): boolean; /** * Sets a bounding box from another bounding box. * @param {Bounds} bounds * @param {Bounds} other */ export function setBounds(bounds: Bounds, other: Bounds): Bounds; /** * Resets a bounds to infinity. * @param {Bounds} bounds */ export function reset(bounds: Bounds): Bounds; /** * Adds points to a bounding box. * @param {Bounds} bounds * @param {number} x * @param {number} y * @param {number} z */ export function addPoint( bounds: Bounds, x: number, y: number, z: number ): Bounds; /** * Adds points to a bounding box. * @param {Bounds} bounds * @param {number[]} points A flattened array of 3D coordinates. */ export function addPoints(bounds: Bounds, points: number[]): Bounds; /** * Adds two bounding boxes together. * @param {Bounds} bounds * @param {number} xMin * @param {number} xMax * @param {number} yMin * @param {number} yMax * @param {number} zMin * @param {number} zMax */ export function addBounds( bounds: Bounds, xMin: number, xMax: number, yMin: number, yMax: number, zMin: number, zMax: number ): Bounds; /** * Sets the min point of a bounding box. * @param {Bounds} bounds * @param {number} x * @param {number} y * @param {number} z */ export function setMinPoint( bounds: Bounds, x: number, y: number, z: number ): boolean; /** * Sets the max point of a bounding box. * @param {Bounds} bounds * @param {number} x * @param {number} y * @param {number} z */ export function setMaxPoint( bounds: Bounds, x: number, y: number, z: number ): boolean; /** * Inflates a bounding box. * @param {Bounds} bounds * @param {number} delta */ export function inflate(bounds: Bounds, delta: number): Bounds; /** * Scales a bounding box. * @param {Bounds} bounds * @param {number} sx * @param {number} sy * @param {number} sz */ export function scale( bounds: Bounds, sx: number, sy: number, sz: number ): boolean; /** * Gets the center of a bounding box. * @param {Bounds} bounds */ export function getCenter(bounds: Bounds): Vector3; /** * Scales a bounding box around its center. * @param {Bounds} bounds * @param {number} sx * @param {number} sy * @param {number} sz */ export function scaleAboutCenter( bounds: Bounds, sx: number, sy: number, sz: number ): boolean; /** * Gets the bounding box side length. * @param {Bounds} bounds * @param {number} index */ export function getLength(bounds: Bounds, index: number): number; /** * Gets the lengths of all sides. * @param {Bounds} bounds */ export function getLengths(bounds: Bounds): Vector3; /** * Gets the x range of a bounding box. * @param {Bounds} bounds */ export function getXRange(bounds: Bounds): Vector2; /** * Gets the y range of a bounding box. * @param {Bounds} bounds */ export function getYRange(bounds: Bounds): Vector2; /** * Gets the z range of a bounding box. * @param {Bounds} bounds */ export function getZRange(bounds: Bounds): Vector2; /** * Gets the maximum side length of the bounding box. * @param {Bounds} bounds */ export function getMaxLength(bounds: Bounds): number; /** * Gets the diagonal length of the bounding box. * @param {Bounds} bounds */ export function getDiagonalLength(bounds: Bounds): Nullable<number>; /** * Gets the squared diagonal length of the bounding box. * @param {Bounds} bounds */ export function getDiagonalLength2(bounds: Bounds): Nullable<number>; /** * Gets the min point. * @param {Bounds} bounds */ export function getMinPoint(bounds: Bounds): Vector3; /** * Gets the max point. * @param {Bounds} bounds */ export function getMaxPoint(bounds: Bounds): Vector3; /** * Gets the corners of a bounding box. * @param {Bounds} bounds * @param {Vector3[]} corners */ export function getCorners(bounds: Bounds, corners: Vector3[]): Vector3[]; /** * Computes the two corner points with min and max coords. * @param {Bounds} bounds * @param {Vector3} point1 * @param {Vector3} point2 */ export function computeCornerPoints( bounds: Bounds, point1: Vector3, point2: Vector3 ): Vector3; /** * Transforms a bounding box. * @param {Bounds} bounds * @param {mat4} transform * @param {Bounds} out */ export function transformBounds( bounds: Bounds, transform: mat4, out: Bounds ): ReturnType<typeof addPoints>; export function computeScale3(bounds: Bounds, scale3: Vector3): Vector3; /** * Compute local bounds. * Not as fast as vtkPoints.getBounds() if u, v, w form a natural basis. * @param {vtkPoints} points * @param {array} u first vector * @param {array} v second vector * @param {array} w third vector */ export function computeLocalBounds( points: vtkPoints, u: Vector3, v: Vector3, w: Vector3 ): Bounds; /** * The method returns a non-zero value if the bounding box is hit. * Origin[3] starts the ray, dir[3] is the vector components of the ray in the x-y-z * directions, coord[3] is the location of hit, and t is the parametric * coordinate along line. (Notes: the intersection ray dir[3] is NOT * normalized. Valid intersections will only occur between 0<=t<=1.) * @param {Bounds} bounds * @param {Vector3} origin * @param {Vector3} dir * @param {Vector3} coord * @param {number} tolerance */ export function intersectBox( bounds: Bounds, origin: Vector3, dir: Vector3, coord: Vector3, tolerance: number ): boolean; /** * Plane intersection with box * The plane is infinite in extent and defined by an origin and normal.The function indicates * whether the plane intersects, not the particulars of intersection points and such * The function returns non-zero if the plane and box intersect; zero otherwise. * @param {Bounds} bounds * @param {Vector3} origin * @param {Vector3} normal */ export function intersectPlane( bounds: Bounds, origin: Vector3, normal: Vector3 ): boolean; /** * Do two bounding boxes intersect. * @param {Bounds} bounds * @param bBounds */ export function intersect(bounds: Bounds, bBounds: Bounds): boolean; /** * Do two bounding boxes intersect. * @param {Bounds} bounds * @param {Bounds} bBounds */ export function intersects(bounds: Bounds, bBounds: Bounds): boolean; /** * Does the bbox contain a given point. * @param {Bounds} bounds * @param {number} x * @param {number} y * @param {number} z */ export function containsPoint( bounds: Bounds, x: number, y: number, z: number ): boolean; /** * Is a bbox contained in another bbox. * @param {Bounds} bounds * @param {Bounds} other */ export function contains(bounds: Bounds, other: Bounds): boolean; /** * Does a plane intersect a boox. * @param {Bounds} bounds * @param {Vector3} origin * @param {Vector3} normal */ export function cutWithPlane( bounds: Bounds, origin: Vector3, normal: Vector3 ): boolean; /** * Clamp the divisions to ensure the total number doesn't exceed targetBins * @param {Number} targetBins - Maximum number of bins allowed * @param {Number[]} divs - Divisions array to adjust [divX, divY, divZ] */ export function clampDivisions(targetBins: number, divs: number[]): void; /** * Compute the number of divisions given the current bounding box and a * target number of buckets/bins. Handles degenerate bounding boxes properly. * @param {Bounds} bounds - The bounding box * @param {Number} totalBins - Target number of bins * @param {Number[]} divs - Output array to store divisions [divX, divY, divZ] * @param {Bounds} [adjustedBounds] - Output array to store adjusted bounds if needed * @returns {Number} The actual total number of bins */ export function computeDivisions( bounds: Bounds, totalBins: number, divs: number[], adjustedBounds?: Bounds ): number; /** * Calculate the squared distance from point x to the specified bounds. * @param {Vector3} x The point coordinates * @param {Bounds} bounds The bounding box coordinates * @returns {Number} The squared distance to the bounds */ export function distance2ToBounds(x: Vector3, bounds: Bounds): number; declare class BoundingBox { getBounds(): Bounds; /** * Tests whether two bounds equal. * @param {Bounds} a * @param {Bounds} b */ equals(a: Bounds, b: Bounds): boolean; /** * Tests whether a given bounds is valid. * @param {Bounds} bounds */ isValid(bounds: Bounds): boolean; /** * Sets a bounding box from another bounding box. * @param {Bounds} bounds * @param {Bounds} other */ setBounds(bounds: Bounds, other: Bounds): Bounds; /** * Resets a bounds to infinity. * @param {Bounds} bounds */ reset(bounds: Bounds): Bounds; /** * Adds points to a bounding box. * @param {Bounds} bounds * @param {number|Number[]|TypedArray} xOrPoint * @param {number} y * @param {number} z */ addPoint( bounds: Bounds, xOrPoint: number | number[] | TypedArray, y?: number, z?: number ): Bounds; /** * Adds points to a bounding box. * @param {Bounds} bounds * @param {number[]} points A flattened array of 3D coordinates. */ addPoints(bounds: Bounds, points: number[]): Bounds; /** * Adds two bounding boxes together. * @param {Bounds} bounds * @param {number} xMin * @param {number} xMax * @param {number} yMin * @param {number} yMax * @param {number} zMin * @param {number} zMax */ addBounds( bounds: Bounds, xMin: number, xMax: number, yMin: number, yMax: number, zMin: number, zMax: number ): Bounds; /** * Sets the min point of a bounding box. * @param {Bounds} bounds * @param {number} x * @param {number} y * @param {number} z */ setMinPoint(bounds: Bounds, x: number, y: number, z: number): boolean; /** * Sets the max point of a bounding box. * @param {Bounds} bounds * @param {number} x * @param {number} y * @param {number} z */ setMaxPoint(bounds: Bounds, x: number, y: number, z: number): boolean; /** * Inflates a bounding box. * @param {number} [delta] The amount to inflate the bounding box by. */ inflate(delta?: number): Bounds; /** * Scales a bounding box. * @param {Bounds} bounds * @param {number} sx * @param {number} sy * @param {number} sz */ scale(bounds: Bounds, sx: number, sy: number, sz: number): boolean; /** * Gets the center of a bounding box. * @param {Bounds} bounds */ getCenter(bounds: Bounds): Vector3; /** * Scales a bounding box around its center. * @param {Bounds} bounds * @param {number} sx * @param {number} sy * @param {number} sz */ scaleAboutCenter(bounds: Bounds, sx: number, sy: number, sz: number): boolean; /** * Gets the bounding box side length. * @param {Bounds} bounds * @param {number} index */ getLength(bounds: Bounds, index: number): number; /** * Gets the lengths of all sides. * @param {Bounds} bounds */ getLengths(bounds: Bounds): Vector3; /** * Gets the x range of a bounding box. * @param {Bounds} bounds */ getXRange(bounds: Bounds): Vector2; /** * Gets the y range of a bounding box. * @param {Bounds} bounds */ getYRange(bounds: Bounds): Vector2; /** * Gets the z range of a bounding box. * @param {Bounds} bounds */ getZRange(bounds: Bounds): Vector2; /** * Gets the maximum side length of the bounding box. * @param {Bounds} bounds */ getMaxLength(bounds: Bounds): number; /** * Gets the diagonal length of the bounding box. * @param {Bounds} bounds */ getDiagonalLength(bounds: Bounds): Nullable<number>; /** * Gets the squared diagonal length of the bounding box. * @param {Bounds} bounds */ getDiagonalLength2(bounds: Bounds): Nullable<number>; /** * Gets the min point. * @param {Bounds} bounds */ getMinPoint(bounds: Bounds): Vector3; /** * Gets the max point. * @param {Bounds} bounds */ getMaxPoint(bounds: Bounds): Vector3; /** * Gets the corners of a bounding box. * @param {Bounds} bounds * @param {Vector3[]} corners */ getCorners(bounds: Bounds, corners: Vector3[]): Vector3[]; /** * Computes the two corner points with min and max coords. * @param {Bounds} bounds * @param {Vector3} point1 * @param {Vector3} point2 */ computeCornerPoints( bounds: Bounds, point1: Vector3, point2: Vector3 ): Vector3; /** * Transforms a bounding box. * @param {Bounds} bounds * @param {mat4} transform * @param {Bounds} out */ transformBounds( bounds: Bounds, transform: mat4, out: Bounds ): ReturnType<typeof addPoints>; computeScale3(bounds: Bounds, scale3: Vector3): Vector3; /** * Compute local bounds. * Not as fast as vtkPoints.getBounds() if u, v, w form a natural basis. * @param {vtkPoints} points * @param {array} u first vector * @param {array} v second vector * @param {array} w third vector */ computeLocalBounds( points: vtkPoints, u: Vector3, v: Vector3, w: Vector3 ): Bounds; /** * The method returns a non-zero value if the bounding box is hit. * Origin[3] starts the ray, dir[3] is the vector components of the ray in the x-y-z * directions, coord[3] is the location of hit, and t is the parametric * coordinate along line. (Notes: the intersection ray dir[3] is NOT * normalized. Valid intersections will only occur between 0<=t<=1.) * @param {Bounds} bounds * @param {Vector3} origin * @param {Vector3} dir * @param {Vector3} coord * @param {number} tolerance */ intersectBox( bounds: Bounds, origin: Vector3, dir: Vector3, coord: Vector3, tolerance: number ): boolean; /** * Plane intersection with box * The plane is infinite in extent and defined by an origin and normal.The function indicates * whether the plane intersects, not the particulars of intersection points and such * The function returns non-zero if the plane and box intersect; zero otherwise. * @param {Bounds} bounds * @param {Vector3} origin * @param {Vector3} normal */ intersectPlane(bounds: Bounds, origin: Vector3, normal: Vector3): boolean; /** * Do two bounding boxes intersect. * @param {Bounds} bounds * @param bBounds */ intersect(bounds: Bounds, bBounds: Bounds): boolean; /** * Do two bounding boxes intersect. * @param {Bounds} bounds * @param {Bounds} bBounds */ intersects(bounds: Bounds, bBounds: Bounds): boolean; /** * Does the bbox contain a given point. * @param {Bounds} bounds * @param {number} x * @param {number} y * @param {number} z */ containsPoint(bounds: Bounds, x: number, y: number, z: number): boolean; /** * Is a bbox contained in another bbox. * @param {Bounds} bounds * @param {Bounds} other */ contains(bounds: Bounds, other: Bounds): boolean; /** * Does a plane intersect a boox. * @param {Bounds} bounds * @param {Vector3} origin * @param {Vector3} normal */ cutWithPlane(bounds: Bounds, origin: Vector3, normal: Vector3): boolean; /** * Calculate the squared distance from point x to the specified bounds. * @param {Vector3} x The point coordinates * @param {Bounds} bounds The bounding box coordinates * @returns {Number} The squared distance to the bounds */ distance2ToBounds(x: Vector3, bounds: Bounds): number; } export interface IBoundingBoxInitialValues { bounds?: Bounds; } declare const vtkBoundingBox: { newInstance: (initialValues: IBoundingBoxInitialValues) => BoundingBox; equals: typeof equals; isValid: typeof isValid; setBounds: typeof setBounds; reset: typeof reset; addPoint: typeof addPoint; addPoints: typeof addPoints; addBounds: typeof addBounds; setMinPoint: typeof setMinPoint; setMaxPoint: typeof setMaxPoint; inflate: typeof inflate; scale: typeof scale; scaleAboutCenter: typeof scaleAboutCenter; getCenter: typeof getCenter; getLength: typeof getLength; getLengths: typeof getLengths; getMaxLength: typeof getMaxLength; getDiagonalLength: typeof getDiagonalLength; getDiagonalLength2: typeof getDiagonalLength2; getMinPoint: typeof getMinPoint; getMaxPoint: typeof getMaxPoint; getXRange: typeof getXRange; getYRange: typeof getYRange; getZRange: typeof getZRange; getCorners: typeof getCorners; computeCornerPoints: typeof computeCornerPoints; computeLocalBounds: typeof computeLocalBounds; transformBounds: typeof transformBounds; computeScale3: typeof computeScale3; cutWithPlane: typeof cutWithPlane; intersectBox: typeof intersectBox; intersectPlane: typeof intersectPlane; intersect: typeof intersect; intersects: typeof intersects; containsPoint: typeof containsPoint; contains: typeof contains; distance2ToBounds: typeof distance2ToBounds; INIT_BOUNDS: Bounds; }; export default vtkBoundingBox;