constructor()

in src/component/tag/geometry/PolygonGeometry.ts [32:86]


    constructor(polygon: number[][], holes?: number[][][]) {
        super();

        let polygonLength: number = polygon.length;

        if (polygonLength < 3) {
            throw new GeometryTagError("A polygon must have three or more positions.");
        }

        if (polygon[0][0] !== polygon[polygonLength - 1][0] ||
            polygon[0][1] !== polygon[polygonLength - 1][1]) {
            throw new GeometryTagError("First and last positions must be equivalent.");
        }

        this._polygon = [];
        for (let vertex of polygon) {
            if (vertex[0] < 0 || vertex[0] > 1 ||
                vertex[1] < 0 || vertex[1] > 1) {
                throw new GeometryTagError("Basic coordinates of polygon must be on the interval [0, 1].");
            }

            this._polygon.push(vertex.slice());
        }

        this._holes = [];

        if (holes == null) {
            return;
        }

        for (let i: number = 0; i < holes.length; i++) {
            let hole: number[][] = holes[i];
            let holeLength: number = hole.length;

            if (holeLength < 3) {
                throw new GeometryTagError("A polygon hole must have three or more positions.");
            }

            if (hole[0][0] !== hole[holeLength - 1][0] ||
                hole[0][1] !== hole[holeLength - 1][1]) {
                throw new GeometryTagError("First and last positions of hole must be equivalent.");
            }

            this._holes.push([]);

            for (let vertex of hole) {
                if (vertex[0] < 0 || vertex[0] > 1 ||
                    vertex[1] < 0 || vertex[1] > 1) {
                    throw new GeometryTagError("Basic coordinates of hole must be on the interval [0, 1].");
                }

                this._holes[i].push(vertex.slice());
            }
        }
    }