@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
JavaScript
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==