aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/Transform.ts
diff options
context:
space:
mode:
authorMonika Hedman <monika_hedman@brown.edu>2019-02-12 16:27:45 -0500
committerMonika Hedman <monika_hedman@brown.edu>2019-02-12 16:27:45 -0500
commit39a61758f87f59366a3464b72fdf249a39a78955 (patch)
tree3bdcb59110a7eedfef3215439e77a09c1eeee0b4 /src/client/util/Transform.ts
parent05a710e2a541a07347d1626489a1811874126c79 (diff)
parent6ef7d8f10b2ec78491b66ea4e2f6cebce3b0230a (diff)
Merge branch 'transforms' of https://github.com/browngraphicslab/Dash-Web into hedmanLocal
Diffstat (limited to 'src/client/util/Transform.ts')
-rw-r--r--src/client/util/Transform.ts19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/client/util/Transform.ts b/src/client/util/Transform.ts
index 7861ed308..3edc8d569 100644
--- a/src/client/util/Transform.ts
+++ b/src/client/util/Transform.ts
@@ -7,6 +7,10 @@ export class Transform {
return new Transform(0, 0, 1);
}
+ get TranslateX(): number { return this._translateX; }
+ get TranslateY(): number { return this._translateY; }
+ get Scale(): number { return this._scale; }
+
constructor(x: number, y: number, scale: number) {
this._translateX = x;
this._translateY = y;
@@ -42,6 +46,17 @@ export class Transform {
return this.copy().scale(scale);
}
+ scaleAbout = (scale: number, x: number, y: number): Transform => {
+ this._translateX += x * this._scale - x * this._scale * scale;
+ this._translateY += y * this._scale - y * this._scale * scale;
+ this._scale *= scale;
+ return this;
+ }
+
+ scaledAbout = (scale: number, x: number, y: number): Transform => {
+ return this.copy().scaleAbout(scale, x, y);
+ }
+
preScale = (scale: number): Transform => {
this._scale *= scale;
this._translateX *= scale;
@@ -83,6 +98,10 @@ export class Transform {
return [x, y];
}
+ transformDirection = (x: number, y: number): [number, number] => {
+ return [x * this._scale, y * this._scale];
+ }
+
inverse = () => {
return new Transform(-this._translateX / this._scale, -this._translateY / this._scale, 1 / this._scale)
}