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(); //} }
/// <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); }
/// <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(); } } }
/// <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); }