Пример #1
0
        protected virtual void UpdateManipulation(ManipulationDelta delta)
        {
            double newHeading  = _headingBeforeManipulation;
            double newZoomFact = _zoomFactorBeforeManipulation * delta.Scale;

            MatrixDouble m = MatrixDouble.Identity;

            if (TranslationEnabled)
            {
                m = MatrixDouble.CreateTranslation(-(delta.Translation.X / _zoomFactorBeforeManipulation), -(delta.Translation.Y / _zoomFactorBeforeManipulation));
                m = m * _reverseRotationMatrix;
            }

            if (ZoomEnabled)
            {
                double scaleFactor = _zoomFactorBeforeManipulation / newZoomFact;
                m = m * MatrixDouble.CreateScale(scaleFactor, _manipulationStartPoint);
            }

            if ((delta.Rotation != 0.0) && RotationEnabled)
            {
                //Add the Rotation from the Manipulation
                MatrixDouble rotation = MatrixDouble.CreateRotation(-TransformHelper.DegToRad(delta.Rotation), _manipulationStartPoint);
                m = m * rotation;

                newHeading = (_headingBeforeManipulation + delta.Rotation) % 360;
                if (newHeading < 0)
                {
                    newHeading += 360;
                }
            }

            double         zoomLevel      = _map.ViewPortProjection.GetZoomLevel(newZoomFact);
            CartesianPoint viewPortCenter = new CartesianPoint(m.Transform(_viewPortCenterBeforeManipulation));

            if (Update != null)
            {
                TouchMapEventArgs eventArgs = new TouchMapEventArgs();
                eventArgs.Heading        = newHeading;
                eventArgs.ZoomLevel      = zoomLevel;
                eventArgs.ViewPortCenter = viewPortCenter;
                OnUpdate(eventArgs);
            }
            if (AutoUpdateMap)
            {
                _map.Heading        = newHeading;
                _map.ZoomLevel      = zoomLevel;
                _map.ViewPortCenter = viewPortCenter;
            }
        }
Пример #2
0
 protected virtual void OnUpdate(TouchMapEventArgs eventArgs)
 {
     Update?.Invoke(this, eventArgs);
 }