/// <summary> /// Программа ждёт ввода первой точки /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void InitFirstPointInput(object sender, RoutedEventArgs e) { // Если программа ожидает ввода второй точки - отключаем его, поставив false на соответствующий флаг if (SecondPointWaiting) { SecondPointWaiting = false; } // Говорим пользователю, что запущено ожидание ввода первой точки. Выставляем true на соответствующий флаг mapWindow.SetStatus("Используйте ЛКМ для выбора местоположения первой точки"); FirstPointWaiting = true; // Покажем перекрестие mapWindow.screenCross.Show(); }
/// <summary> /// Стандартный конструктор. Инициализирует панель рассчёта дистанций /// </summary> /// <param name="w">Ссылка на главное окно с отображаемой картой</param> public DistanceMeasureControl(MapWindow w) { InitializeComponent(); mapWindow = w; // Создаём делегаты mouseLMBHandler = new MouseButtonEventHandler(MouseLMBDown); mouseRMBHandler = new MouseButtonEventHandler(MouseRMBDown); // Подписываем их на соответствующие события в главном окне mapWindow.MainPanel.MouseLeftButtonDown += mouseLMBHandler; mapWindow.MainPanel.MouseRightButtonDown += mouseRMBHandler; // Инициализируем DistanceLine, добавляем её на главную панель distanceViewer = new DistanceLine(mapWindow.MapPanel, FIRST_MARKER_BRUSH, SECOND_MARKER_BRUSH); distanceViewer.Hide(); // Инициализируем PointMarker-ы, добавляем их на главную панель firstPointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); firstPointMarker.SetStrokeColor(FIRST_MARKER_BRUSH); firstPointMarker.Hide(); secondPointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); secondPointMarker.SetStrokeColor(SECOND_MARKER_BRUSH); secondPointMarker.Hide(); rmbMenu = this.FindResource("rmbMenu") as ContextMenu; rmbMenu.PlacementTarget = mapWindow.MainPanel; mapWindow.SetStatus("Включён режим: \"Измерение расстояний\""); }
/// <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; } }
public DirectGeodTaskControl(MapWindow w) { InitializeComponent(); mapWindow = w; // Создаём делегаты mouseLMBHandler = new MouseButtonEventHandler(MouseLMBDown); mouseRMBHandler = new MouseButtonEventHandler(MouseRMBDown); // Подписываем их на соответствующие события в главном окне mapWindow.MainPanel.MouseLeftButtonDown += mouseLMBHandler; mapWindow.MainPanel.MouseRightButtonDown += mouseRMBHandler; // Инициализируем PointMarker-ы, добавляем их на главную панель APointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); APointMarker.SetStrokeColor(A_POINT_MARKER_BRUSH); APointMarker.Hide(); BPointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); BPointMarker.SetStrokeColor(B_POINT_MARKER_BRUSH); BPointMarker.Hide(); CPointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); CPointMarker.SetStrokeColor(C_POINT_COLOR_BRUSH); CPointMarker.Hide(); //studAPointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); //studAPointMarker.SetStrokeColor(STUD_A_POINT_MARKER_BRUSH); //studAPointMarker.Hide(); //studBPointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); //studBPointMarker.SetStrokeColor(STUD_B_POINT_MARKER_BRUSH); //studBPointMarker.Hide(); //studCPointMarker = new PointMarker(mapWindow.MapPanel, 0, 0); //studCPointMarker.SetStrokeColor(STUD_C_POINT_MARKER_BRUSH); //studCPointMarker.Hide(); // Выставим соответствующий цвет шрифтов, чтобы маркеры на карте можно было отличить друг от друга APointHint.Foreground = A_POINT_MARKER_BRUSH; BPointHint.Foreground = B_POINT_MARKER_BRUSH; CPointHint.Foreground = C_POINT_COLOR_BRUSH; // Инициализируем DistanceLine-ы, добавим их на панель ABDistanceLine = new DistanceLine(mapWindow.MapPanel, A_POINT_MARKER_BRUSH, B_POINT_MARKER_BRUSH); ABDistanceLine.Hide(); BCDistanceLine = new DistanceLine(mapWindow.MapPanel, B_POINT_MARKER_BRUSH, C_POINT_COLOR_BRUSH); BCDistanceLine.Hide(); CADistanceLine = new DistanceLine(mapWindow.MapPanel, C_POINT_COLOR_BRUSH, A_POINT_MARKER_BRUSH); CADistanceLine.Hide(); //studABDistanceLine = new DistanceLine(mapWindow.MapPanel, STUD_A_POINT_MARKER_BRUSH, STUD_B_POINT_MARKER_BRUSH); //studABDistanceLine.Hide(); //studBCDistanceLine = new DistanceLine(mapWindow.MapPanel, STUD_B_POINT_MARKER_BRUSH, STUD_C_POINT_MARKER_BRUSH); //studBCDistanceLine.Hide(); //studCADistanceLine = new DistanceLine(mapWindow.MapPanel, STUD_C_POINT_MARKER_BRUSH, STUD_A_POINT_MARKER_BRUSH); //studCADistanceLine.Hide(); rmbMenu = this.FindResource("rmbMenu") as ContextMenu; rmbMenu.PlacementTarget = mapWindow.MainPanel; mapWindow.SetStatus("Включён режим: \"Прямая геодезическая задача\""); }