From 061dab5285d3a334a258d8097a6e95b065b30de3 Mon Sep 17 00:00:00 2001 From: bobzel Date: Mon, 29 Nov 2021 14:09:17 -0500 Subject: added moving ink stroke segments. added stretching and rotating ink strokes about opposite end point. --- src/client/views/InkStrokeProperties.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/client/views/InkStrokeProperties.ts') 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 @@ -177,6 +177,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. */ -- cgit v1.2.3-70-g09d2