UNPKG

@deepnest/geometryutil

Version:

This tool is used within Applications provides by [www.deepnest.net](https://www.deepnest.net/).

137 lines (136 loc) 4.71 kB
/*! * General purpose geometry functions for polygon/Bezier calculations * Copyright 2015 Jack Qiao * Converted to TypeScript by Josef Fröhle, 2024 * Licensed under the MIT license */ interface Point { x: number; y: number; marked?: boolean; } interface Polygon extends Array<Point> { offsetx?: number; offsety?: number; x?: number; y?: number; width?: number; height?: number; } declare function _almostEqual(a: number, b: number, tolerance?: number): boolean; declare function _withinDistance(p1: Point, p2: Point, distance: number): boolean; declare function _lineIntersect(A: Point, B: Point, E: Point, F: Point, infinite?: boolean): { x: number; y: number; } | null; export declare const GeometryUtil: { withinDistance: typeof _withinDistance; lineIntersect: typeof _lineIntersect; almostEqual: typeof _almostEqual; almostEqualPoints: (a: Point, b: Point, tolerance?: number) => boolean; QuadraticBezier: { isFlat: (p1: Point, p2: Point, c1: Point, tol: number) => boolean; linearize: (p1: Point, p2: Point, c1: Point, tol: number) => Point[]; subdivide: (p1: Point, p2: Point, c1: Point, t: number) => { p1: Point; p2: Point; c1: Point; }[]; }; CubicBezier: { isFlat: (p1: Point, p2: Point, c1: Point, c2: Point, tol: number) => boolean; linearize: (p1: Point, p2: Point, c1: Point, c2: Point, tol: number) => Point[]; subdivide: (p1: Point, p2: Point, c1: Point, c2: Point, t: number) => ({ p1: Point; p2: { x: number; y: number; }; c1: { x: number; y: number; }; c2: { x: number; y: number; }; } | { p1: { x: number; y: number; }; p2: Point; c1: { x: number; y: number; }; c2: { x: number; y: number; }; })[]; }; Arc: { linearize: (p1: Point, p2: Point, rx: number, ry: number, angle: number, largearc: number, sweep: number, tol: number) => Point[]; centerToSvg: (center: Point, rx: number, ry: number, theta1: number, extent: number, angleDegrees: number) => { p1: { x: number; y: number; }; p2: { x: number; y: number; }; rx: number; ry: number; angle: number; largearc: number; sweep: number; }; svgToCenter: (p1: Point, p2: Point, rx: number, ry: number, angleDegrees: number, largearc: number, sweep: number) => { center: { x: number; y: number; }; rx: number; ry: number; theta: number; extent: number; angle: number; }; }; getPolygonBounds: (polygon: Polygon) => { x: number; y: number; width: number; height: number; } | null; pointInPolygon: (point: Point, polygon: Polygon, tolerance?: number) => boolean | null; polygonArea: (polygon: Polygon) => number; intersect: (A: Polygon, B: Polygon) => boolean; polygonEdge: (polygon: Polygon, normal: Point) => Point[] | null; pointLineDistance: (p: Point, s1: Point, s2: Point, normal: Point, s1inclusive: boolean, s2inclusive: boolean) => number | null; pointDistance: (p: Point, s1: Point, s2: Point, normal: Point, infinite?: boolean) => number | null; segmentDistance: (A: Point, B: Point, E: Point, F: Point, direction: Point) => number | null; polygonSlideDistance: (A: Polygon, B: Polygon, direction: Point, ignoreNegative: boolean) => number | null; polygonProjectionDistance: (A: Polygon, B: Polygon, direction: Point) => number | null; searchStartPoint: (A: Polygon, B: Polygon, inside: boolean, NFP?: Polygon[]) => { x: number; y: number; } | null; isRectangle: (poly: Polygon, tolerance?: number) => boolean; noFitPolygonRectangle: (A: Polygon, B: Polygon) => { x: number; y: number; }[][] | null; noFitPolygon: (A: Polygon, B: Polygon, inside: boolean, searchEdges: boolean) => { x: number; y: number; }[][] | null; polygonHull: (A: Polygon, B: Polygon) => { x: number; y: number; }[] | null; rotatePolygon: (polygon: Polygon, angle: number) => Polygon; }; export {};