/// <summary> /// Обработка нажатия кнопки "Нарисовать", отрисовывает нужную местность /// </summary> private void drawArea(object sender, RoutedEventArgs e) { if (Drawer.ClickedPoints.Count == 0) { MessageBox.Show(Messages.EmptyClickedPoints); } else { try { List <Geometry.Figure> po = new List <Geometry.Figure>(); if (Drawer.LandName == "Road" || Drawer.LandName == "Water") { #region Check Self Intersection var listSeg = Geometry.Figures.Polyline.PointsToSegments(Drawer.ClickedPoints); listSeg.Remove(listSeg.Last()); if (Geometry.Figures.Polyline.CheckSelfIntersection(listSeg)) { throw new Exception(Messages.SelfIntersectionPolyline); } #endregion Geometry.Figures.Polyline poly = new Geometry.Figures.Polyline(Drawer.ClickedPoints); po.Add(poly); } else { ConvexPolygon CV = new ConvexPolygon(); //?? List <Geometry.Figures.Point> mypoints = new List <Geometry.Figures.Point>(); List <List <Geometry.Figures.Point> > mypolpoints = new List <List <Geometry.Figures.Point> >(); foreach (Geometry.Figures.Point p in Drawer.ClickedPoints) { mypoints.Add(new Geometry.Figures.Point(p.X, p.Y)); } #region Check Self Intersection var listSeg = Geometry.Figures.Polyline.PointsToSegments(mypoints); if (Geometry.Figures.ConvexPolygon.CheckSelfIntersection(listSeg)) { throw new Exception(Messages.SelfIntersection); } #endregion mypolpoints = CV.ConvertToConvexList(mypoints); Drawer.Line.Points.Clear(); List <Geometry.Figures.Point> polPoints = new List <Geometry.Figures.Point>(); Geometry.Figures.ConvexPolygon poly = new Geometry.Figures.ConvexPolygon(Drawer.ClickedPoints); foreach (List <Geometry.Figures.Point> pointList in mypolpoints) //points { po.Add(new Geometry.Figures.ConvexPolygon(pointList)); } } switch (Drawer.LandName) { case "Sand": { GameEngine.Lands.Sand sand = new GameEngine.Lands.Sand(po); map.Lands.Add(sand); break; } case "Forest": { GameEngine.Lands.Forest forest = new GameEngine.Lands.Forest(po); map.Lands.Add(forest); break; } case "Water": { GameEngine.Lands.Water water = new GameEngine.Lands.Water(po); map.Lands.Add(water); break; } case "Mountain": { GameEngine.Lands.Mountains mountain = new GameEngine.Lands.Mountains(po); map.Lands.Add(mountain); break; } case "City": { GameEngine.Lands.City city = new GameEngine.Lands.City(po); map.Lands.Add(city); break; } case "LowLand": { GameEngine.Lands.Lowland lowLand = new GameEngine.Lands.Lowland(po); map.Lands.Add(lowLand); break; } case "Field": { GameEngine.Lands.Field field = new GameEngine.Lands.Field(po); map.Lands.Add(field); break; } case "Road": { GameEngine.Lands.Road road = new GameEngine.Lands.Road(po); map.Lands.Add(road); break; } } resetPoints(null, null); reDrawMap(); Drawer.ClickedPoints = new List <Geometry.Figures.Point>(); } catch (Exception a) { MessageBox.Show(a.Message); resetPoints(null, null); reDrawMap(); Drawer.ClickedPoints = new List <Geometry.Figures.Point>(); } } }