UNPKG

@kitware/vtk.js

Version:

Visualization Toolkit for the Web

108 lines (97 loc) 3.19 kB
import { vtkObject } from './../../interfaces'; import { Bounds, TypedArray, Vector3 } from './../../types'; export interface IPolygonInitialValues { firstPoint?: Vector3; pointCount?: number; tris?: Vector3[]; } /** * Different states which pointInPolygon could return. */ export enum PolygonIntersectionState { FAILURE, OUTSIDE, INSIDE, INTERSECTION, ON_LINE, } export interface vtkPolygon extends vtkObject { /** * Get the array of triangles that triangulate the polygon. */ getPointArray(): Vector3[]; /** * Set the polygon's points. * @param {Vector3[]} points The polygon's points. */ setPoints(points: Vector3[]): void; /** * Triangulate this polygon. * The output data must be accessed through `getPointArray`. * The output data contains points by group of three: each three-group * defines one triangle. */ triangulate(): void; } /** * Determine whether a point is inside a polygon. The function uses a winding * number calculation generalized to the 3D plane one which the polygon * resides. Returns 0 if point is not in the polygon; 1 if it is inside. Can * also return -1 to indicate a degenerate polygon. This implementation is * inspired by Dan Sunday's algorithm found in the book Practical Geometry * Algorithms. * * @param {Vector3} point Point to check * @param {Array<Number>|TypedArray} vertices Vertices of the polygon * @param {Bounds} bounds Bounds of the vertices * @param {Vector3} normal Normal vector of the polygon * @returns {PolygonIntersectionState} Integer indicating the type of intersection */ export function pointInPolygon( point: Vector3, vertices: Array<number> | TypedArray, bounds: Bounds, normal: Vector3 ): PolygonIntersectionState; /** * Compute the centroid of a polygon. * @param {Array<number>} poly - Array of point indices for the polygon * @param {vtkPoints} points - vtkPoints instance * @param {Vector3} [centroid] - Optional output array (length 3) * @returns {Vector3} The centroid as [x, y, z] */ export function computeCentroid( poly: Array<number>, points: TypedArray, centroid?: Vector3 ): Vector3; /** * Method used to decorate a given object (publicAPI+model) with vtkPolygon characteristics. * * @param publicAPI object on which methods will be bounds (public) * @param model object on which data structure will be bounds (protected) * @param {IPolygonInitialValues} [initialValues] (default: {}) */ export function extend( publicAPI: object, model: object, initialValues?: IPolygonInitialValues ): void; /** * Method used to create a new instance of vtkPolygon. * @param {IPolygonInitialValues} [initialValues] for pre-setting some of its content */ export function newInstance(initialValues?: IPolygonInitialValues): vtkPolygon; /** * vtkPolygon represents a 2D n-sided polygon. * * The polygons cannot have any internal holes, and cannot self-intersect. * Define the polygon with n-points ordered in the counter-clockwise direction. * Do not repeat the last point. */ export declare const vtkPolygon: { newInstance: typeof newInstance; extend: typeof extend; // static }; export default vtkPolygon;