/// <summary> /// Обработчик нажатий левой кнопки мыши. Подписка идёт при инициализации данного Page на LeftMouseDown на MapWindow.MainPanel /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseLMBDown(object sender, MouseButtonEventArgs e) { if (FirstPointWaiting) { markerFirstPoint = mapWindow.GetPositionOnMap(); FirstPointWaiting = false; Point squareCordFirstPoint = DirectGeodTask.DirectGeodCalculations.PixelsToSquareCords(markerFirstPoint); FirstPointXCordView.Text = $"X: {squareCordFirstPoint.X:f2}"; FirstPointYCordView.Text = $"Y: {squareCordFirstPoint.Y:f2}"; mapWindow.SetStatus($"Первая точка установлена: X:{squareCordFirstPoint.X:f2} Y:{squareCordFirstPoint.Y:f2}"); firstPointMarker.SetLocation(markerFirstPoint); firstPointMarker.Show(); mapWindow.screenCross.Hide(); } if (SecondPointWaiting) { markerSecondPoint = mapWindow.GetPositionOnMap(); SecondPointWaiting = false; Point squareCordSecondPoint = DirectGeodTask.DirectGeodCalculations.PixelsToSquareCords(markerSecondPoint); SecondPointXCordView.Text = $"X: {squareCordSecondPoint.X:f2}"; SecondPointYCordView.Text = $"Y: {squareCordSecondPoint.Y:f2}"; mapWindow.SetStatus($"Вторая точка установлена: X:{squareCordSecondPoint.X:f2} Y:{squareCordSecondPoint.Y:f2}"); secondPointMarker.SetLocation(markerSecondPoint); secondPointMarker.Show(); mapWindow.screenCross.Hide(); } // Если обе точки были заданы, то можно уже рассчитывать расстояние if (markerFirstPoint.X != double.MaxValue && markerSecondPoint.X != double.MaxValue) { DistanceView.Text = $"Растояние: {GeodCalculations.CalcLength(markerFirstPoint, markerSecondPoint):f2}m"; distanceViewer.SetPoints(markerFirstPoint, markerSecondPoint); distanceViewer.Show(); } }
/// <summary> /// То, что будет выполняться по нажатию левой кнопки мыши /// </summary> /// <param name="sender"></param> /// <param name="e"></param> public void MouseLMBDown(object sender, MouseButtonEventArgs e) { if (APointWaiting) { // Добавление новой точки на карте. Получение её координат в пикселях и в метрах APoint = mapWindow.GetPositionOnMap(); APointWaiting = false; // Разместим маркер по полученным координатам, APointMarker.SetLocation(APoint); APointMarker.Show(); // Отобразим координаты точки A Point printingPoint = DirectGeodCalculations.PixelsToSquareCords(APoint); PointAXCord.Text = $"X: {printingPoint.X:f0}"; PointAYCord.Text = $"Y: {printingPoint.Y:f0}"; // Уберём перекрестие mapWindow.screenCross.Hide(); // Уведомим пользователя о том, что точка А обработана mapWindow.SetStatus("Точка А установлена"); } if (BPointWaiting) { // Добавление новой точки на карте. Получение её координат в пикселях и в метрах BPoint = mapWindow.GetPositionOnMap(); BPointWaiting = false; // Разместим маркер по полученным координатам, BPointMarker.SetLocation(BPoint); BPointMarker.Show(); // Отобразим координаты точки A Point printingPoint = DirectGeodCalculations.PixelsToSquareCords(BPoint); PointBXCord.Text = $"X: {printingPoint.X:f0}"; PointBYCord.Text = $"Y: {printingPoint.Y:f0}"; // Уберём перекрестие mapWindow.screenCross.Hide(); // Уведомим пользователя о том, что точка А обработана mapWindow.SetStatus("Точка B установлена"); } if (CPointWaiting) { // Добавление новой точки на карте. Получение её координат в пикселях и в метрах CPoint = mapWindow.GetPositionOnMap(); CPointWaiting = false; // Разместим маркер по полученным координатам, CPointMarker.SetLocation(CPoint); CPointMarker.Show(); // Отобразим координаты точки A Point printingPoint = DirectGeodCalculations.PixelsToSquareCords(CPoint); PointCXCord.Text = $"X: {printingPoint.X:f0}"; PointCYCord.Text = $"Y: {printingPoint.Y:f0}"; // Уберём перекрестие mapWindow.screenCross.Hide(); // Уведомим пользователя о том, что точка А обработана mapWindow.SetStatus("Точка C установлена"); } if (APointMarker.IsVisible && BPointMarker.IsVisible && CPointMarker.IsVisible) { // Отобразим получившийся треугольник ABDistanceLine.SetPoints(APoint, BPoint); BCDistanceLine.SetPoints(BPoint, CPoint); CADistanceLine.SetPoints(CPoint, APoint); ABDistanceLine.Show(); BCDistanceLine.Show(); CADistanceLine.Show(); // Включим возможность ввести собственные расчёты HaveStudentCalculationsTB.Text = "Точки введены"; HaveStudentCalculationsTB.Foreground = Brushes.Green; StartStudentInput.IsEnabled = true; } }