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; } }
protected virtual void OnUpdate(TouchMapEventArgs eventArgs) { Update?.Invoke(this, eventArgs); }