public async void MouseMove(object sender, MouseEventArgs e) { if (!IsControlDragged) { return; } // shape is being dragged var mousePos = e.GetPosition(_controlParentCanvas); controlCurrentCanvasTop = Canvas.GetTop(_controlElement); var s_gap = (controlSizeBaseWidth - controlSizeWidth) / 2; // gap size between control and border // if dist to init pos is within check, set, otherwise set max var move = mousePos.Y - controlInitCenterTop; var dist = Math.Abs(move); double dist_max = controlSizeBaseHeight / 2 - s_gap - controlSizeHeight / 2; double top; if (dist <= dist_max) { top = mousePos.Y - controlSizeHeight / 2; } else // { //MessageBox.Show(move.ToString()); if (move >= 0) { top = controlInitCanvasTop + controlSizeBaseHeight / 2 - s_gap - controlSizeHeight / 2; Canvas.SetTop(_controlElement, top); } else { top = controlInitCanvasTop - controlSizeBaseHeight / 2 + s_gap + controlSizeHeight / 2; Canvas.SetTop(_controlElement, top); } } Canvas.SetTop(_controlElement, top); var travel = controlCurrentCanvasTop - controlInitCanvasTop; var direction = new MathNet.Spatial.Euclidean.Vector2D(0, travel).Normalize(); if (controlMode == 0) // control height { await Task.Run(() => CameraControl.VerticalMoveCamera(camera, direction, dist / dist_max)); } else if (controlMode == 1) // control zoom { camera.zoomValue = -travel / dist_max; // set zoom value } }
/// <summary> /// Method to Convert a 2D Line to a <see cref="MathNet.Spatial.Euclidean.Vector2D"/> /// </summary> /// <param name="_2DLinetoBeVectored">2D Line which is to be converted to 2D Vector of <see cref="MathNet.Spatial.Euclidean.Vector2D"/></param> /// <returns></returns> public static MathNet.Spatial.Euclidean.Vector2D GetMathNetVector2D(Line _2DLinetoBeVectored) { MathNet.Spatial.Euclidean.Vector2D vector2D = new MathNet.Spatial.Euclidean.Vector2D(_2DLinetoBeVectored.StartPoint.X - _2DLinetoBeVectored.EndPoint.X, _2DLinetoBeVectored.StartPoint.Y - _2DLinetoBeVectored.EndPoint.Y); return(vector2D); }