UNPKG

@foblex/2d

Version:

An Angular library for 2D geometric computations, providing classes and utilities for manipulating points, lines, vectors, rectangles, arcs, and transformations.

38 lines 7.4 kB
import { Arc } from './arc'; import { Line } from './line'; export class ShapeParser { // public static getSegments(rect: IRoundedRect): (Arc | Line)[] { // return this.parseRect(rect); // } /** * Parses the rounded rectangle into its constituent segments (arcs and lines). * @param rect - The rounded rectangle to parse. * @returns An array of arcs and lines representing the rectangle. */ static parseRoundedRect(rect) { const degree90 = Math.PI * 0.5; const x0 = rect.x; const y0 = rect.y; const x1 = rect.x + rect.width; const y1 = rect.y + rect.height; const topLeftX = rect.x + rect.radius1; const topLeftY = rect.y + rect.radius1; const topRightX = rect.x + rect.width - rect.radius2; const topRightY = rect.y + rect.radius2; const bottomRightX = rect.x + rect.width - rect.radius3; const bottomRightY = rect.y + rect.height - rect.radius3; const bottomLeftX = rect.x + rect.radius4; const bottomLeftY = rect.y + rect.height - rect.radius4; return [ new Arc({ x: topLeftX, y: topLeftY }, rect.radius1, rect.radius1, 2 * degree90, 3 * degree90), new Line({ x: topLeftX, y: y0 }, { x: topRightX, y: y0 }), new Arc({ x: topRightX, y: topRightY }, rect.radius2, rect.radius2, 3 * degree90, 4 * degree90), new Line({ x: x1, y: topRightY }, { x: x1, y: bottomRightY }), new Arc({ x: bottomRightX, y: bottomRightY }, rect.radius3, rect.radius3, 0, degree90), new Line({ x: bottomRightX, y: y1 }, { x: bottomLeftX, y: y1 }), new Arc({ x: bottomLeftX, y: bottomLeftY }, rect.radius4, rect.radius4, degree90, 2 * degree90), new Line({ x: x0, y: bottomLeftY }, { x: x0, y: topLeftY }), ]; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcGUtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvZm9ibGV4MmQvc3JjL3NoYXBlLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFOUIsTUFBTSxPQUFPLFdBQVc7SUFFdEIsa0VBQWtFO0lBQ2xFLGlDQUFpQztJQUNqQyxJQUFJO0lBRUo7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFrQjtRQUMvQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUUvQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQy9CLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUVoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDMUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFFeEQsT0FBTztZQUNMLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUM3RixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDekQsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQy9GLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQztZQUM3RCxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDO1lBQ3RGLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUMvRCxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMvRixJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDNUQsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElSb3VuZGVkUmVjdCB9IGZyb20gJy4vcm91bmRlZC1yZWN0JztcbmltcG9ydCB7IEFyYyB9IGZyb20gJy4vYXJjJztcbmltcG9ydCB7IExpbmUgfSBmcm9tICcuL2xpbmUnO1xuXG5leHBvcnQgY2xhc3MgU2hhcGVQYXJzZXIge1xuXG4gIC8vIHB1YmxpYyBzdGF0aWMgZ2V0U2VnbWVudHMocmVjdDogSVJvdW5kZWRSZWN0KTogKEFyYyB8IExpbmUpW10ge1xuICAvLyAgIHJldHVybiB0aGlzLnBhcnNlUmVjdChyZWN0KTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgdGhlIHJvdW5kZWQgcmVjdGFuZ2xlIGludG8gaXRzIGNvbnN0aXR1ZW50IHNlZ21lbnRzIChhcmNzIGFuZCBsaW5lcykuXG4gICAqIEBwYXJhbSByZWN0IC0gVGhlIHJvdW5kZWQgcmVjdGFuZ2xlIHRvIHBhcnNlLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhcmNzIGFuZCBsaW5lcyByZXByZXNlbnRpbmcgdGhlIHJlY3RhbmdsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VSb3VuZGVkUmVjdChyZWN0OiBJUm91bmRlZFJlY3QpOiAoQXJjIHwgTGluZSlbXSB7XG4gICAgY29uc3QgZGVncmVlOTAgPSBNYXRoLlBJICogMC41O1xuXG4gICAgY29uc3QgeDAgPSByZWN0Lng7XG4gICAgY29uc3QgeTAgPSByZWN0Lnk7XG4gICAgY29uc3QgeDEgPSByZWN0LnggKyByZWN0LndpZHRoO1xuICAgIGNvbnN0IHkxID0gcmVjdC55ICsgcmVjdC5oZWlnaHQ7XG5cbiAgICBjb25zdCB0b3BMZWZ0WCA9IHJlY3QueCArIHJlY3QucmFkaXVzMTtcbiAgICBjb25zdCB0b3BMZWZ0WSA9IHJlY3QueSArIHJlY3QucmFkaXVzMTtcbiAgICBjb25zdCB0b3BSaWdodFggPSByZWN0LnggKyByZWN0LndpZHRoIC0gcmVjdC5yYWRpdXMyO1xuICAgIGNvbnN0IHRvcFJpZ2h0WSA9IHJlY3QueSArIHJlY3QucmFkaXVzMjtcbiAgICBjb25zdCBib3R0b21SaWdodFggPSByZWN0LnggKyByZWN0LndpZHRoIC0gcmVjdC5yYWRpdXMzO1xuICAgIGNvbnN0IGJvdHRvbVJpZ2h0WSA9IHJlY3QueSArIHJlY3QuaGVpZ2h0IC0gcmVjdC5yYWRpdXMzO1xuICAgIGNvbnN0IGJvdHRvbUxlZnRYID0gcmVjdC54ICsgcmVjdC5yYWRpdXM0O1xuICAgIGNvbnN0IGJvdHRvbUxlZnRZID0gcmVjdC55ICsgcmVjdC5oZWlnaHQgLSByZWN0LnJhZGl1czQ7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbmV3IEFyYyh7IHg6IHRvcExlZnRYLCB5OiB0b3BMZWZ0WSB9LCByZWN0LnJhZGl1czEsIHJlY3QucmFkaXVzMSwgMiAqIGRlZ3JlZTkwLCAzICogZGVncmVlOTApLFxuICAgICAgbmV3IExpbmUoeyB4OiB0b3BMZWZ0WCwgeTogeTAgfSwgeyB4OiB0b3BSaWdodFgsIHk6IHkwIH0pLFxuICAgICAgbmV3IEFyYyh7IHg6IHRvcFJpZ2h0WCwgeTogdG9wUmlnaHRZIH0sIHJlY3QucmFkaXVzMiwgcmVjdC5yYWRpdXMyLCAzICogZGVncmVlOTAsIDQgKiBkZWdyZWU5MCksXG4gICAgICBuZXcgTGluZSh7IHg6IHgxLCB5OiB0b3BSaWdodFkgfSwgeyB4OiB4MSwgeTogYm90dG9tUmlnaHRZIH0pLFxuICAgICAgbmV3IEFyYyh7IHg6IGJvdHRvbVJpZ2h0WCwgeTogYm90dG9tUmlnaHRZIH0sIHJlY3QucmFkaXVzMywgcmVjdC5yYWRpdXMzLCAwLCBkZWdyZWU5MCksXG4gICAgICBuZXcgTGluZSh7IHg6IGJvdHRvbVJpZ2h0WCwgeTogeTEgfSwgeyB4OiBib3R0b21MZWZ0WCwgeTogeTEgfSksXG4gICAgICBuZXcgQXJjKHsgeDogYm90dG9tTGVmdFgsIHk6IGJvdHRvbUxlZnRZIH0sIHJlY3QucmFkaXVzNCwgcmVjdC5yYWRpdXM0LCBkZWdyZWU5MCwgMiAqIGRlZ3JlZTkwKSxcbiAgICAgIG5ldyBMaW5lKHsgeDogeDAsIHk6IGJvdHRvbUxlZnRZIH0sIHsgeDogeDAsIHk6IHRvcExlZnRZIH0pLFxuICAgIF07XG4gIH1cbn1cbiJdfQ==