/// <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("Включён режим: \"Измерение расстояний\"");
        }
Example #3
0
        /// <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;
            }
        }
Example #4
0
        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("Включён режим: \"Прямая геодезическая задача\"");
        }