aboutsummaryrefslogtreecommitdiff
path: root/src/client/views/InkStrokeProperties.ts
diff options
context:
space:
mode:
authorbobzel <zzzman@gmail.com>2021-11-29 14:09:17 -0500
committerbobzel <zzzman@gmail.com>2021-11-29 14:09:17 -0500
commit061dab5285d3a334a258d8097a6e95b065b30de3 (patch)
tree0f77cdacae4330e0588538b3ba5f3445616a0530 /src/client/views/InkStrokeProperties.ts
parent7e6baacfe6c1b55a3fe1807903455f9ff3844d74 (diff)
added moving ink stroke segments. added stretching and rotating ink strokes about opposite end point.
Diffstat (limited to 'src/client/views/InkStrokeProperties.ts')
-rw-r--r--src/client/views/InkStrokeProperties.ts24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/client/views/InkStrokeProperties.ts b/src/client/views/InkStrokeProperties.ts
index 02288bbb5..8ad4864f9 100644
--- a/src/client/views/InkStrokeProperties.ts
+++ b/src/client/views/InkStrokeProperties.ts
@@ -178,6 +178,30 @@ export class InkStrokeProperties {
}
/**
+ * Rotates ink stroke(s) about a point
+ * @param inkStrokes set of ink documentViews to rotate
+ * @param angle The angle at which to rotate the ink in radians.
+ * @param scrpt The center point of the rotation in screen coordinates
+ */
+ @undoBatch
+ @action
+ stretchInk = (inkStrokes: DocumentView[], scaling: number, scrpt: { x: number, y: number }, scrVec: { x: number, y: number }) => {
+ this.applyFunction(inkStrokes, (view: DocumentView, ink: InkData, xScale: number, yScale: number, inkStrokeWidth: number) => {
+ const ptFromScreen = view.ComponentView?.ptFromScreen;
+ const ptToScreen = view.ComponentView?.ptToScreen;
+ return !ptToScreen || !ptFromScreen ? ink :
+ ink.map(i => ptToScreen(i)).map(i => {
+ const pvec = { X: i.X - scrpt.x, Y: i.Y - scrpt.y };
+ const svec = pvec.X * scrVec.x * scaling + pvec.Y * scrVec.y * scaling;
+ const ovec = -pvec.X * scrVec.y + pvec.Y * (scrVec.x);
+ const newscrpt = { X: scrpt.x + svec * scrVec.x - ovec * scrVec.y, Y: scrpt.y + svec * scrVec.y + ovec * scrVec.x };
+ const newpt = ptFromScreen!(newscrpt);
+ return newpt;
+ });
+ });
+ }
+
+ /**
* Handles the movement/scaling of a control point.
*/
@undoBatch