mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-02-22 00:37:05 +08:00
95 lines
1.5 KiB
TypeScript
95 lines
1.5 KiB
TypeScript
import { type IVec, Vec } from './vec.js';
|
|
|
|
/**
|
|
* PointLocation is an implementation of IVec with in/out vectors and tangent.
|
|
* This is useful when dealing with path.
|
|
*/
|
|
export class PointLocation extends Array<number> implements IVec {
|
|
_in: IVec = [0, 0];
|
|
|
|
_out: IVec = [0, 0];
|
|
|
|
// the tangent belongs to the point on the element outline
|
|
_tangent: IVec = [0, 0];
|
|
|
|
[0]: number;
|
|
|
|
[1]: number;
|
|
|
|
get absIn() {
|
|
return Vec.add(this, this._in);
|
|
}
|
|
|
|
get absOut() {
|
|
return Vec.add(this, this._out);
|
|
}
|
|
|
|
get in() {
|
|
return this._in;
|
|
}
|
|
|
|
set in(value: IVec) {
|
|
this._in = value;
|
|
}
|
|
|
|
override get length() {
|
|
return super.length as 2;
|
|
}
|
|
|
|
get out() {
|
|
return this._out;
|
|
}
|
|
|
|
set out(value: IVec) {
|
|
this._out = value;
|
|
}
|
|
|
|
get tangent() {
|
|
return this._tangent;
|
|
}
|
|
|
|
set tangent(value: IVec) {
|
|
this._tangent = value;
|
|
}
|
|
|
|
constructor(
|
|
point: IVec = [0, 0],
|
|
tangent: IVec = [0, 0],
|
|
inVec: IVec = [0, 0],
|
|
outVec: IVec = [0, 0]
|
|
) {
|
|
super(2);
|
|
this[0] = point[0];
|
|
this[1] = point[1];
|
|
this._tangent = tangent;
|
|
this._in = inVec;
|
|
this._out = outVec;
|
|
}
|
|
|
|
static fromVec(vec: IVec) {
|
|
const point = new PointLocation();
|
|
point[0] = vec[0];
|
|
point[1] = vec[1];
|
|
return point;
|
|
}
|
|
|
|
clone() {
|
|
return new PointLocation(
|
|
this as unknown as IVec,
|
|
this._tangent,
|
|
this._in,
|
|
this._out
|
|
);
|
|
}
|
|
|
|
setVec(vec: IVec) {
|
|
this[0] = vec[0];
|
|
this[1] = vec[1];
|
|
return this;
|
|
}
|
|
|
|
toVec(): IVec {
|
|
return [this[0], this[1]];
|
|
}
|
|
}
|