mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-07 17:04:58 +01:00
129 lines
2.2 KiB
TypeScript
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';
|
|
|
|
|