aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/Transform.ts
diff options
context:
space:
mode:
authortschicke-brown <tyler_schicke@brown.edu>2019-02-18 23:02:26 -0500
committerGitHub <noreply@github.com>2019-02-18 23:02:26 -0500
commit70f0ba1275fa879e86d05c1aa3bb5b1567e3d04c (patch)
tree7744b7432aa9e65604f18a6a4db9d10c32f30480 /src/client/util/Transform.ts
parent3f98d6ec6050e7faa15179871f0d9669c1188a78 (diff)
parent842f571bfb4952d12804a8dbdc66aedbf2bf6b81 (diff)
Merge pull request #6 from browngraphicslab/transforms
Transforms
Diffstat (limited to 'src/client/util/Transform.ts')
-rw-r--r--src/client/util/Transform.ts73
1 files changed, 46 insertions, 27 deletions
diff --git a/src/client/util/Transform.ts b/src/client/util/Transform.ts
index 7861ed308..9fd4f7bef 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;
@@ -19,56 +23,67 @@ export class Transform {
return this;
}
- translated = (x: number, y: number): Transform => {
- return this.copy().translate(x, y);
- }
-
- preTranslate = (x: number, y: number): Transform => {
- this._translateX += x * this._scale;
- this._translateY += y * this._scale;
+ scale = (scale: number): Transform => {
+ this._scale *= scale;
+ this._translateX *= scale;
+ this._translateY *= scale;
return this;
}
- preTranslated = (x: number, y: number): Transform => {
- return this.copy().preTranslate(x, y);
+ 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;
}
- scale = (scale: number): Transform => {
- this._scale *= scale;
+ transform = (transform: Transform): Transform => {
+ this._translateX = transform._translateX + transform._scale * this._translateX;
+ this._translateY = transform._translateY + transform._scale * this._translateY;
+ this._scale *= transform._scale;
return this;
}
- scaled = (scale: number): Transform => {
- return this.copy().scale(scale);
+ preTranslate = (x: number, y: number): Transform => {
+ this._translateX += this._scale * x;
+ this._translateY += this._scale * y;
+ return this;
}
preScale = (scale: number): Transform => {
this._scale *= scale;
- this._translateX *= scale;
- this._translateY *= scale;
return this;
}
- preScaled = (scale: number): Transform => {
- return this.copy().preScale(scale);
- }
-
- transform = (transform: Transform): Transform => {
+ preTransform = (transform: Transform): Transform => {
this._translateX += transform._translateX * this._scale;
this._translateY += transform._translateY * this._scale;
this._scale *= transform._scale;
return this;
}
- transformed = (transform: Transform): Transform => {
- return this.copy().transform(transform);
+ translated = (x: number, y: number): Transform => {
+ return this.copy().translate(x, y);
}
- preTransform = (transform: Transform): Transform => {
- this._translateX = transform._translateX + this._translateX * transform._scale;
- this._translateY = transform._translateY + this._translateY * transform._scale;
- this._scale *= transform._scale;
- return this;
+ preTranslated = (x: number, y: number): Transform => {
+ return this.copy().preTranslate(x, y);
+ }
+
+ scaled = (scale: number): Transform => {
+ return this.copy().scale(scale);
+ }
+
+ scaledAbout = (scale: number, x: number, y: number): Transform => {
+ return this.copy().scaleAbout(scale, x, y);
+ }
+
+ preScaled = (scale: number): Transform => {
+ return this.copy().preScale(scale);
+ }
+
+ transformed = (transform: Transform): Transform => {
+ return this.copy().transform(transform);
}
preTransformed = (transform: Transform): Transform => {
@@ -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)
}