Exemplo n.º 1
0
        /// <inheritdoc />
        public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
        {
            if (values[1] is List <ILayoutElement> elements)
            {
                // Create a StreamGeometry to draw element
                StreamGeometry geometry = new StreamGeometry();
                using (StreamGeometryContext ctx = geometry.Open())
                {
                    if (elements.FirstOrDefault() is Obstacle)
                    {
                        foreach (var obstacle in elements)
                        {
                            var position = obstacle.Position;
                            var pointNW  = new Point(position.X, position.Y);
                            var pointNE  = new Point(position.X + obstacle.Area.Width, position.Y);
                            var pointSW  = new Point(position.X, position.Y + obstacle.Area.Height);
                            var pointSE  = new Point(position.X + obstacle.Area.Width, position.Y + obstacle.Area.Height);
                            ctx.BeginFigure(pointNW, false, true);
                            ctx.LineTo(pointNE, true, false);
                            ctx.LineTo(pointSE, true, false);
                            ctx.LineTo(pointSW, true, false);
                            ctx.LineTo(pointNW, true, false);
                            ctx.LineTo(pointSE, true, false);
                            ctx.LineTo(pointNE, true, false);
                            ctx.LineTo(pointSW, true, false);
                        }
                        geometry.FillRule = FillRule.EvenOdd;
                    }
                    else if (elements.FirstOrDefault() is PickingSlot)
                    {
                        foreach (var pickingSlot in elements)
                        {
                            ctx.DrawGeometry(new EllipseGeometry(new Point(pickingSlot.Position.X, pickingSlot.Position.Y), 1.5, 1.5));
                        }
                    }
                    else if (elements.FirstOrDefault() is CoordLayoutElement)
                    {
                        foreach (var travelStep in elements)
                        {
                            ctx.DrawGeometry(new RectangleGeometry(new Rect(travelStep.Position.X, travelStep.Position.Y, 1, 1)));
                        }
                    }

                    geometry.Freeze();
                    return(geometry);
                }
            }

            return(Binding.DoNothing);
        }
Exemplo n.º 2
0
        private Geometry CreateGeometry(Point p, double radius, double startDegrees, double deltaDegrees)
        {
            // Create a StreamGeometry for describing the shape
            StreamGeometry geometry = new StreamGeometry();

            using (StreamGeometryContext context = geometry.Open())
            {
                var rad1 = Deg2Rad(startDegrees);
                var drad = Deg2Rad(deltaDegrees);
                var rad2 = rad1 + drad;
                var p1   = new Point((Math.Cos(rad1) + 1) * radius + p.X, -(Math.Sin(rad1) - 1) * radius + p.Y);
                var p2   = new Point((Math.Cos(rad2) + 1) * radius + p.X, -(Math.Sin(rad2) - 1) * radius + p.Y);

                context.BeginFigure(p, true, true);
                if (deltaDegrees >= 360)
                {
                    context.DrawGeometry(new EllipseGeometry(new Rect(p.X - radius, p.Y - radius, radius * 2, radius * 2)));
                }
                else if (deltaDegrees >= 0)
                {
                    context.LineTo(p1, true, true);
                    context.ArcTo(p2, new Size(radius, radius), drad, deltaDegrees > 180, SweepDirection.Counterclockwise, true, true);
                    context.Close();
                }
            }

            // Freeze the geometry for performance benefits
            geometry.Freeze();

            return(geometry);
        }
        private static void AddPoint(StreamGeometryContext context, SqlGeometry point, Func <Point, Point> transform)
        {
            var center = transform(point.AsWpfPoint());

            context.DrawGeometry(new EllipseGeometry(new Rect(center.X - pointSize / 2.0, center.Y - pointSize / 2.0, pointSize, pointSize)));
            //context.DrawGeometry(new EllipseGeometry(transform(new Point(point.STX.Value, point.STY.Value)), pointSize, pointSize));
        }
Exemplo n.º 4
0
        /// <summary>
        /// Draws the pie piece
        /// </summary>
        private void DrawGeometry(StreamGeometryContext context)
        {
            if (WedgeAngle == 0)
            {
                return;
            }
            if (WedgeAngle == 360)
            {
                context.DrawGeometry(new EllipseGeometry(new Point(CentreX, CentreY), Radius, Radius));
                return;
            }

            Point innerArcStartPoint = ComputeCartesianCoordinate(RotationAngle, InnerRadius);

            innerArcStartPoint.Offset(CentreX, CentreY);

            Point innerArcEndPoint = ComputeCartesianCoordinate(RotationAngle + WedgeAngle, InnerRadius);

            innerArcEndPoint.Offset(CentreX, CentreY);

            Point outerArcStartPoint = ComputeCartesianCoordinate(RotationAngle, Radius);

            outerArcStartPoint.Offset(CentreX, CentreY);

            Point outerArcEndPoint = ComputeCartesianCoordinate(RotationAngle + WedgeAngle, Radius);

            outerArcEndPoint.Offset(CentreX, CentreY);

            bool largeArc = WedgeAngle > 180.0;

            if (PushOut > 0)
            {
                Point offset = ComputeCartesianCoordinate(RotationAngle + WedgeAngle / 2, PushOut);
                innerArcStartPoint.Offset(offset.X, offset.Y);
                innerArcEndPoint.Offset(offset.X, offset.Y);
                outerArcStartPoint.Offset(offset.X, offset.Y);
                outerArcEndPoint.Offset(offset.X, offset.Y);
            }

            Size outerArcSize = new Size(Radius, Radius);
            Size innerArcSize = new Size(InnerRadius, InnerRadius);

            context.BeginFigure(innerArcStartPoint, true, true);
            context.LineTo(outerArcStartPoint, true, true);
            context.ArcTo(outerArcEndPoint, outerArcSize, 0, largeArc, SweepDirection.Clockwise, true, true);
            context.LineTo(innerArcEndPoint, true, true);
            context.ArcTo(innerArcStartPoint, innerArcSize, 0, largeArc, SweepDirection.Counterclockwise, true, true);
        }
Exemplo n.º 5
0
        private void InternalDraw(StreamGeometryContext context)
        {
            var center = new Point(ActualWidth / 2d, ActualHeight / 2d);
            var rad1   = Deg2Rad(StartDegrees);
            var drad   = Deg2Rad(DeltaDegrees);
            var rad2   = rad1 + drad;
            var p1     = new Point((Math.Cos(rad1) + 1) * ActualWidth / 2d, -(Math.Sin(rad1) - 1) * ActualHeight / 2d);
            var p2     = new Point((Math.Cos(rad2) + 1) * ActualWidth / 2d, -(Math.Sin(rad2) - 1) * ActualHeight / 2d);

            context.BeginFigure(center, true, true);
            if (DeltaDegrees >= 360)
            {
                context.DrawGeometry(new EllipseGeometry(new Rect(0, 0, ActualWidth, ActualHeight)));
            }
            else if (DeltaDegrees >= 0)
            {
                context.LineTo(p1, true, true);
                context.ArcTo(p2, new Size(ActualWidth / 2d, ActualHeight / 2d), drad, DeltaDegrees > 180, SweepDirection.Counterclockwise, true, true);
                context.Close();
            }
        }