Пример #1
0
        private void DoZoom(double deltaZoom, int mod, Point origoPosition, Point startHandlePosition, Point targetHandlePosition, bool setDelta = false)
        {
            var startZoom   = Zoom;
            var currentZoom = setDelta ? deltaZoom : (mod == -1 ? (startZoom / deltaZoom) : (startZoom * deltaZoom));

            currentZoom = Math.Max(MinZoom, Math.Min(MaxZoom, currentZoom));

            var startTranslate = new Point(TranslateX, TranslateY);

            var v       = startHandlePosition.Subtract(origoPosition);
            var vTarget = targetHandlePosition.Subtract(origoPosition);

            var targetPoint          = v.Subtract(startTranslate).Div(startZoom);
            var zoomedTargetPointPos = targetPoint.Mul(currentZoom).Sum(startTranslate);
            var endTranslate         = vTarget.Subtract(zoomedTargetPointPos);


            if (setDelta)
            {
                var transformX = GetCoercedTranslate(endTranslate.X);
                var transformY = GetCoercedTranslate(endTranslate.Y);
                DoZoomAnimation(currentZoom, transformX, transformY);
            }
            else
            {
                var transformX = GetCoercedTranslate(TranslateX + endTranslate.X);
                var transformY = GetCoercedTranslate(TranslateY + endTranslate.Y);
                DoZoomAnimation(currentZoom, transformX, transformY);
            }
            Mode = ZoomControlModes.Custom;
        }
Пример #2
0
        private void DoZoom(double deltaZoom, int mod, Point origoPosition, Point startHandlePosition, Point targetHandlePosition, bool setDelta = false)
        {
            var startZoom = Zoom;
            var currentZoom = setDelta ? deltaZoom : (mod == -1 ? (startZoom / deltaZoom) : (startZoom * deltaZoom));
            currentZoom = Math.Max(MinZoom, Math.Min(MaxZoom, currentZoom));

            var startTranslate = new Point(TranslateX, TranslateY);

            var v = startHandlePosition.Subtract(origoPosition);
            var vTarget = targetHandlePosition.Subtract(origoPosition);

            var targetPoint = v.Subtract(startTranslate).Div(startZoom);
            var zoomedTargetPointPos = targetPoint.Mul(currentZoom).Sum(startTranslate);
            var endTranslate = vTarget.Subtract(zoomedTargetPointPos);


            if (setDelta)
            {
                var transformX = GetCoercedTranslate(endTranslate.X);
                var transformY = GetCoercedTranslate(endTranslate.Y);
                DoZoomAnimation(currentZoom, transformX, transformY);
            }
            else
            {
                var transformX = GetCoercedTranslate(TranslateX + endTranslate.X);
                var transformY = GetCoercedTranslate(TranslateY + endTranslate.Y);
                DoZoomAnimation(currentZoom, transformX, transformY);
            }
            Mode = ZoomControlModes.Custom;
        }