コード例 #1
0
        /// <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>();
                }
            }
        }