private void MainCanvas_MouseMove(object sender, MouseEventArgs e) { Canvas canvas = sender as Canvas; if (canvas == null) { return; } Point currentMousePosition = e.GetPosition(canvas); Point cartesianPosition = ConvertToCartesianCoords(MainCanvas, currentMousePosition); lbMousePosition.Text = $"X: {cartesianPosition.X} Y:{cartesianPosition.Y}"; if (currentSelection.Any()) { ICanvasObject currentLine = lines[lastClickedLine]; lbEquation.Text = $"Уравнение: {lastClickedLine.GetLineConstants()}"; float radius = 10; bool isMouseNearBegin = Math.Pow(lastClickedLine.X1 - previousMousePosition.X, 2) + Math.Pow(lastClickedLine.Y1 - previousMousePosition.Y, 2) < Math.Pow(radius, 2); bool isMouseNearEnd = Math.Pow(lastClickedLine.X2 - previousMousePosition.X, 2) + Math.Pow(lastClickedLine.Y2 - previousMousePosition.Y, 2) < Math.Pow(radius, 2); if (isMouseNearBegin || isMouseNearEnd) { lastClickedLine.Cursor = Cursors.SizeNWSE; } else { lastClickedLine.Cursor = Cursors.SizeAll; } if (isMousePressed) { if (isMouseNearBegin) { lastClickedLine.X1 = currentMousePosition.X; lastClickedLine.Y1 = currentMousePosition.Y; } else if (isMouseNearEnd) { lastClickedLine.X2 = currentMousePosition.X; lastClickedLine.Y2 = currentMousePosition.Y; } else { Vector delta = previousMousePosition - currentMousePosition; currentLine.Move(delta); } } } previousMousePosition = currentMousePosition; }