in src/component/tag/geometry/PointsGeometry.ts [160:222]
public getRect2d(transform: Transform): number[] {
let minX: number = 1;
let maxX: number = 0;
let minY: number = 1;
let maxY: number = 0;
const points: number[][] = this._points;
for (const point of points) {
if (point[0] < minX) {
minX = point[0];
}
if (point[0] > maxX) {
maxX = point[0];
}
if (point[1] < minY) {
minY = point[1];
}
if (point[1] > maxY) {
maxY = point[1];
}
}
if (isSpherical(transform.cameraType)) {
const indices: number[] = [];
for (let i: number = 0; i < points.length; i++) {
indices[i] = i;
}
indices.sort(
(a, b): number => {
return points[a][0] < points[b][0] ?
-1 :
points[a][0] > points[b][0] ?
1 :
a < b ? -1 : 1;
});
let maxDistanceX: number = points[indices[0]][0] + 1 - points[indices[indices.length - 1]][0];
let leftMostIndex: number = 0;
for (let i: number = 0; i < indices.length - 1; i++) {
const index1: number = indices[i];
const index2: number = indices[i + 1];
const distanceX: number = points[index2][0] - points[index1][0];
if (distanceX > maxDistanceX) {
maxDistanceX = distanceX;
leftMostIndex = i + 1;
}
}
if (leftMostIndex > 0) {
minX = points[indices[leftMostIndex]][0];
maxX = points[indices[leftMostIndex - 1]][0];
}
}
return [minX, minY, maxX, maxY];
}