Ejemplo n.º 1
0
        public Shape(ShapeType shapeType, Color color, Rectangle bounds)
        {
            FigureType = shapeType;
            Color      = color;

            switch (shapeType)
            {
            case ShapeType.DrawRect:
            case ShapeType.FillRect:
            case ShapeType.DrawLine:
                Points = bounds.ToPolygon();
                break;

            case ShapeType.FillEllipse:
            case ShapeType.DrawEllipse:
                Points = new EllipseBuilder().BuildEllipse(bounds);
                break;

            case ShapeType.DrawPolygon:
            case ShapeType.FillPolygon:
                Random rnd        = new Random();
                var    pointCount = rnd.Next(3, 13);
                var    size       = bounds.Width / 2;
                var    innerSize  = size * (0.2 + rnd.NextDouble() * 0.5);
                var    angle      = rnd.NextDouble() * 2 * Math.PI;

                Points = new StarBuilder().BuildStar(pointCount, size, innerSize, bounds.CenterPoint, angle);
                break;
            }
        }
        private void DrawForrestPaths()
        {
            Canvas.Children.Clear();
            foreach (var crossroad in GlobalForestPaths.GetCrossroads())
            {
                BuildDirector  ellipseDirector = new BuildDirector();
                EllipseBuilder ellipseBuilder  = ellipseDirector.BuildEllipse(crossroad);
                Ellipse        ellipse         = ellipseBuilder.GetEllipse();

                Canvas.SetLeft(ellipse, crossroad.Position.X - ellipse.Height / 2);
                Canvas.SetTop(ellipse, crossroad.Position.Y - ellipse.Width / 2);
                Canvas.SetZIndex(ellipse, 2);
                Canvas.Children.Add(ellipse);

                foreach (var eges in GlobalForestPaths.GetNextCrossroads(crossroad))
                {
                    BuildDirector lineDirector = new BuildDirector();
                    LineBuilder   lineBuilder  = lineDirector.BuildLine(GlobalForestPaths, crossroad.Key, eges.Key);
                    Line          line         = lineBuilder.GetLine();
                    string[]      lineName     = line.Name.Split('_');
                    if (FindChildByName($"{lineName[1]}_{lineName[0]}") == null)
                    {
                        Canvas.SetZIndex(line, 1);
                        Canvas.Children.Add(line);
                    }
                }
            }
        }
Ejemplo n.º 3
0
        public void Execute()
        {
            key = forestPaths.AddCrossroad(crossroad);


            BuildDirector  director = new BuildDirector();
            EllipseBuilder builder  = director.BuildEllipse(crossroad);
            Ellipse        ellipse  = builder.GetEllipse();

            Canvas.SetLeft(ellipse, crossroad.Position.X - ellipse.Height / 2);
            Canvas.SetTop(ellipse, crossroad.Position.Y - ellipse.Width / 2);
            Canvas.SetZIndex(ellipse, 2);
            canvas.Children.Add(ellipse);
        }
Ejemplo n.º 4
0
        public void GB_BuildCircle()
        {
            var builder = new EllipseBuilder();

            const int radius = 4;

            var points = builder.BuildCircle(Vector2.Zero, radius);

            foreach (var point in points)
            {
                point.Length().Should().BeApproximately(radius, 0.00001f,
                                                        $"Point {point} should be at radius {radius} but instead was at {point.Length()}");
            }
        }
Ejemplo n.º 5
0
        public void GB_BuildEllipseAxisAligned()
        {
            var builder = new EllipseBuilder();

            const int majorAxis = 8;
            const int minorAxis = 4;

            var points = builder.BuildEllipse(Vector2.Zero, majorAxis, minorAxis, 0);

            foreach (var point in points)
            {
                // Equation for an ellipse:
                // (x/a)^2 + (y/b)^2 = 1
                var norm = Vector2.UnitX * point.X / majorAxis + Vector2.UnitY * point.Y / minorAxis;

                norm.LengthSquared().Should().BeApproximately(1, 0.00001f,
                                                              $"Point {point} does not satisfy the ellipse equation.");
            }
        }
Ejemplo n.º 6
0
        public void GB_BuildEllipseBoundingBox()
        {
            var builder = new EllipseBuilder();

            const int majorAxis = 8;
            const int minorAxis = 4;

            Rectangle boundingBox = new Rectangle(-majorAxis, -minorAxis, majorAxis * 2, minorAxis * 2);

            var points = builder.BuildEllipse((RectangleF)boundingBox);

            foreach (var point in points)
            {
                // Equation for an ellipse:
                // (x/a)^2 + (y/b)^2 = 1
                var norm = Vector2.UnitX * point.X / majorAxis + Vector2.UnitY * point.Y / minorAxis;

                norm.LengthSquared().Should().BeApproximately(1, 0.00001f,
                                                              $"Point {point} does not satisfy the ellipse equation.");
            }
        }