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());
}
}
}