jsketcher/web/app/sketcher/shapes/point.ts
2022-08-15 23:47:20 -07:00

129 lines
2.2 KiB
TypeScript

import {SketchObject, SketchObjectSerializationData} from './sketch-object'
import {DrawPoint} from './draw-utils'
import Vector from 'math/vector';
import {Param} from "./param";
import {ConstraintDefinitions} from "../constr/ANConstraints";
import {dfs} from "gems/traverse";
import {SketchSegmentSerializationData} from "./segment";
export class EndPoint extends SketchObject {
params : {
x: Param,
y: Param
};
constructor(x, y, id?) {
super(id);
this.params = {
x: new Param(x, 'X'),
y: new Param(y, 'Y')
};
}
get x() {
return this.params.x.get();
}
set x(val) {
this.params.x.set(val);
}
get y() {
return this.params.y.get();
}
set y(val) {
this.params.y.set(val);
}
visitParams(callback) {
callback(this.params.x);
callback(this.params.y);
}
normalDistance(aim) {
return aim.minus(new Vector(this.x, this.y)).length();
}
getReferencePoint() {
return this;
}
translateImpl(dx, dy) {
this.x += dx;
this.y += dy;
}
visitLinked(cb) {
dfs(this, (obj, chCb) => obj.constraints.forEach(c => {
if (c.schema.id === ConstraintDefinitions.PCoincident.id) {
c.objects.forEach(chCb);
}
}), cb);
}
drawImpl(ctx, scale) {
DrawPoint(ctx, this.x, this.y, 3, scale)
}
setXY(x, y) {
this.x = x;
this.y = y;
}
setFromPoint(p) {
this.setXY(p.x, p.y);
}
setFromArray(arr) {
this.setXY(arr[0], arr[1]);
}
toVectorArray() {
return [this.x, this.y];
}
toVector() {
return new Vector(this.x, this.y);
}
get labelCenter() {
return this.toVector();
}
copy() {
return new EndPoint(this.x, this.y);
}
mirror(dest, mirroringFunc) {
const {x, y} = mirroringFunc(this.x, this.y);
dest.x = x;
dest.y = y;
}
write(): SketchPointSerializationData {
return {
x: this.x,
y: this.y
}
}
static read(id: string, data: SketchPointSerializationData): EndPoint {
return new EndPoint(
data.x,
data.y,
id
)
}
}
export interface SketchPointSerializationData extends SketchObjectSerializationData {
x: number;
y: number;
}
EndPoint.prototype._class = 'TCAD.TWO.EndPoint';
EndPoint.prototype.TYPE = 'Point';