Esempio n. 1
0
        private void addModel(Geometry.Figures.Point point)
        {
            //if (comboBox.SelectedItem != null)
            //{
            //    string unitType = comboBox.SelectedItem.ToString();
            //    switch (unitType)
            //    {
            //        case "System.Windows.Controls.ComboBoxItem: Бочка":
            //            {
            //                var item = new GameEngine.Item(GameEngine.ItemType.Barrel, point);
            //                UserInterface.Presenters.GameItemsPresenter itemPres = new UserInterface.Presenters.GameItemsPresenter(item);
            //                map.Items.Add(item);
            //                UI.GamePresenter.Map.VisibleItems.Add(itemPres);
            //                break;
            //            }
            //        case "System.Windows.Controls.ComboBoxItem: БА-6":
            //            {
            //                var item = new GameEngine.Item(GameEngine.ItemType.BA_6, point);
            //                UserInterface.Presenters.GameItemsPresenter itemPres = new UserInterface.Presenters.GameItemsPresenter(item);
            //                map.Items.Add(item);
            //                UI.GamePresenter.Map.VisibleItems.Add(itemPres);
            //                break;
            //            }
            //        case "System.Windows.Controls.ComboBoxItem: ГАЗ-АА":
            //            {
            //                var item = new GameEngine.Item(GameEngine.ItemType.GAZ_AA, point);
            //                UserInterface.Presenters.GameItemsPresenter itemPres = new UserInterface.Presenters.GameItemsPresenter(item);
            //                map.Items.Add(item);
            //                UI.GamePresenter.Map.VisibleItems.Add(itemPres);
            //                break;
            //            }
            //        case "System.Windows.Controls.ComboBoxItem: СУ-12-1":
            //            {
            //                var item = new GameEngine.Item(GameEngine.ItemType.SU_12_1, point);
            //                UserInterface.Presenters.GameItemsPresenter itemPres = new UserInterface.Presenters.GameItemsPresenter(item);
            //                map.Items.Add(item);
            //                UI.GamePresenter.Map.VisibleItems.Add(itemPres);
            //                break;
            //            }
            //        case "System.Windows.Controls.ComboBoxItem: Т-37":
            //            {
            //                var item = new GameEngine.Item(GameEngine.ItemType.T_37, point);
            //                UserInterface.Presenters.GameItemsPresenter itemPres = new UserInterface.Presenters.GameItemsPresenter(item);
            //                map.Items.Add(item);
            //                UI.GamePresenter.Map.VisibleItems.Add(itemPres);
            //                break;
            //            }
            //        case "System.Windows.Controls.ComboBoxItem: 122мм":
            //            {
            //                var item = new GameEngine.Item(GameEngine.ItemType.GUN122MM, point);
            //                UserInterface.Presenters.GameItemsPresenter itemPres = new UserInterface.Presenters.GameItemsPresenter(item);
            //                map.Items.Add(item);
            //                UI.GamePresenter.Map.VisibleItems.Add(itemPres);
            //                break;
            //            }
            //    }

            //    reDrawMap();
            //}
        }
Esempio n. 2
0
        /// <summary>
        /// Calculates a displaced center of a figure according to current Transformer state.
        /// </summary>
        /// <remarks>
        /// A center is displaced equally by X and Y coordinates for a value of Radius property.
        /// Before that Radius property is recalculated according to figure type and current Transformer state.
        /// </remarks>
        /// <returns>System.Windows.Point of a displaced center</returns>
        private void UpdateCenter()
        {
            Geometry.Figures.Point p = new Geometry.Figures.Point(0, 0);

            if (original is Circle)
            {
                p = (original as Circle).Center;
            }
            else if (original is Geometry.Figures.Point)
            {
                p = original as Geometry.Figures.Point;
            }
            else if (original is ConvexPolygon)
            {
                p = (original as ConvexPolygon).Center();
            }
            else if (original is Polyline)
            {
                p = (original as Polyline).Center();
            }
            else if (original is Segment)
            {
                var segment = original as Segment;
                var v       = Geometry.Vector.RadiusVector(segment.Begin) + Geometry.Vector.RadiusVector(segment.End);
                p = new Geometry.Figures.Point(v.X / 2, v.Y / 2);
            }

            Geometry.Figures.Point q = Transformer.ConvertToScreen(p);

            UpdateRadius();
            q.X -= Radius; q.Y -= Radius;

            Center = new System.Windows.Point(q.X, q.Y);
        }
Esempio n. 3
0
        /// <summary>
        /// Обрабатывает клик мыши по редактируемой карте
        /// </summary>
        private void canvasClick(object sender, MouseButtonEventArgs e)
        {
            System.Windows.Point   pos   = Mouse.GetPosition(sender as ContentControl);
            Geometry.Figures.Point point = UserInterface.Transformer.ConvertToModel(new Geometry.Figures.Point(pos.X, pos.Y));
            if (flag)
            {
                addModel(point);
            }
            else
            {
                if (selectShapes.IsChecked == true && !(e.OriginalSource is Rectangle))// выбран режим выделения
                {
                    int i = 0;
                    for (i = 0; i < map.Lands.Count; i++)      // находим индекс нашей фигуры в списке map.Lands
                    {
                        if (Geometry.Figures.Intersect.IsIntersected(point, map.Lands[i].Polygon))
                        {
                            break;
                        }
                    }

                    Shape shape = e.OriginalSource as Shape;
                    if (Drawer.SelectedShapes.Contains(shape)) // если фигура уже выделена, то снимаем выделение
                    {
                        shape.StrokeThickness = 0;
                        Drawer.SelectedShapes.Remove(shape);
                        Drawer.SelectedLands.Remove(map.Lands[i]);
                    }
                    else                                       // иначе выделяем её
                    {
                        Drawer.SelectedShapes.Add(shape);
                        shape.Stroke          = new SolidColorBrush(Colors.Red);
                        shape.StrokeThickness = 3;

                        Drawer.SelectedLands.Add(map.Lands[i]); //!!
                    }
                }
                else
                {
                    Drawer.ClickedPoints.Add(point);
                    var radius = UserInterface.Transformer.ConvertToModelLength(6);
                    Geometry.Figures.Circle circle = new Geometry.Figures.Circle(point, radius);

                    UserInterface.Presenters.FigurePresenter FP = new UserInterface.Presenters.FigurePresenter(circle, null);
                    UI.GamePresenter.Map.Figures.Add(FP);

                    // после этих строк точки можно ставить не везде
                    Geometry.Figures.Polyline polyline = new Geometry.Figures.Polyline(Drawer.ClickedPoints);
                    Drawer.Line = new UserInterface.Presenters.FigurePresenter(polyline, null);
                    UI.GamePresenter.Map.Figures.Add(Drawer.Line);

                    reDrawMap();
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Calculates a displaced center of a figure according to current Transformer state.
        /// </summary>
        /// <remarks>
        /// A center is displaced equally by X and Y coordinates for a value of Radius property.
        /// Before that Radius property is recalculated according to figure type and current Transformer state.
        /// </remarks>
        /// <returns>System.Windows.Point of a displaced center</returns>
        private void UpdateCenter()
        {
            Geometry.Figures.Point p = new Geometry.Figures.Point(0, 0);

            if (original is Circle) p = (original as Circle).Center;
            else if (original is Geometry.Figures.Point) p = original as Geometry.Figures.Point;
            else if (original is ConvexPolygon) p = (original as ConvexPolygon).Center();
            else if (original is Polyline) p = (original as Polyline).Center();
            else if (original is Segment)
            {
                var segment = original as Segment;
                var v = Geometry.Vector.RadiusVector(segment.Begin) + Geometry.Vector.RadiusVector(segment.End);
                p = new Geometry.Figures.Point(v.X / 2, v.Y / 2);
            }

            Geometry.Figures.Point q = Transformer.ConvertToScreen(p);

            UpdateRadius();
            q.X -= Radius; q.Y -= Radius;

            Center = new System.Windows.Point(q.X, q.Y);
        }