in src/component/tag/geometry/RectGeometry.ts [312:387]
public setVertex2d(index: number, value: number[], transform: Transform): void {
let original: number[] = this._rect.slice();
let changed: number[] = [
Math.max(0, Math.min(1, value[0])),
Math.max(0, Math.min(1, value[1])),
];
let rect: number[] = [];
if (index === 0) {
rect[0] = changed[0];
rect[1] = original[1];
rect[2] = original[2];
rect[3] = changed[1];
} else if (index === 1) {
rect[0] = changed[0];
rect[1] = changed[1];
rect[2] = original[2];
rect[3] = original[3];
} else if (index === 2) {
rect[0] = original[0];
rect[1] = changed[1];
rect[2] = changed[0];
rect[3] = original[3];
} else if (index === 3) {
rect[0] = original[0];
rect[1] = original[1];
rect[2] = changed[0];
rect[3] = changed[1];
}
if (isSpherical(transform.cameraType)) {
let passingBoundaryLeftward: boolean =
index < 2 && changed[0] > 0.75 && original[0] < 0.25 ||
index >= 2 && this._inverted && changed[0] > 0.75 && original[2] < 0.25;
let passingBoundaryRightward: boolean =
index < 2 && this._inverted && changed[0] < 0.25 && original[0] > 0.75 ||
index >= 2 && changed[0] < 0.25 && original[2] > 0.75;
if (passingBoundaryLeftward || passingBoundaryRightward) {
this._inverted = !this._inverted;
} else {
if (rect[0] - original[0] < -0.25) {
rect[0] = original[0];
}
if (rect[2] - original[2] > 0.25) {
rect[2] = original[2];
}
}
if (!this._inverted && rect[0] > rect[2] ||
this._inverted && rect[0] < rect[2]) {
rect[0] = original[0];
rect[2] = original[2];
}
} else {
if (rect[0] > rect[2]) {
rect[0] = original[0];
rect[2] = original[2];
}
}
if (rect[1] > rect[3]) {
rect[1] = original[1];
rect[3] = original[3];
}
this._rect[0] = rect[0];
this._rect[1] = rect[1];
this._rect[2] = rect[2];
this._rect[3] = rect[3];
this._notifyChanged$.next(this);
}