Inheritance: System.Windows.Shapes.Shape
Ejemplo n.º 1
0
        private void DrawPath(double xstep, double ystep)
        {
            if (Data.nav.fullPath.Count>0)
            {
                foreach (NodeConnection nc in Data.nav.fullPath)
                {
                    Arrow arr = new Arrow();
                    Point N1, N2;
                    N1 = getCanvasCoordinates(nc.From, xstep, ystep);
                    N2 = getCanvasCoordinates(nc.To, xstep, ystep);
                    double CPExtension = marginlarge - marginsmall-controlpointsize/2-1;
                    if (nc.ToPoint)
                    {
                        if (nc.To.X == Data.M-1)
                        {
                            N2.X += CPExtension;
                        }
                        else if (nc.To.X == 0)
                        {
                            N2.X -= CPExtension;
                        }
                        else if (nc.To.Y == 0)
                        {
                            N2.Y -= CPExtension;
                        }
                        else if (nc.To.Y == Data.N-1)
                        {
                            N2.Y += CPExtension;
                        }
                    }
                    else if (nc.FromPoint)
                    {
                        if (nc.From.X == Data.M-1)
                        {
                            N1.X += CPExtension;
                        }
                        else if (nc.From.X == 0)
                        {
                            N1.X -= CPExtension;
                        }
                        else if (nc.From.Y == 0)
                        {
                            N1.Y -= CPExtension;
                        }
                        else if (nc.From.Y == Data.N-1)
                        {
                            N1.Y += CPExtension;
                        }
                    }

                    arr.X1 = N1.X;
                    arr.X2 = N2.X;
                    arr.Y1 = c.ActualHeight - N1.Y;
                    arr.Y2 = c.ActualHeight - N2.Y;
                    arr.Stroke = pathBrush;
                    arr.StrokeEndLineCap = PenLineCap.Round;
                    arr.HeadHeight = pathArrowHeadHeight;
                    arr.HeadWidth = pathArrowHeadWidth;
                    arr.StrokeThickness = pathArrowThickness;
                    arr.IsHitTestVisible = false;
                    c.Children.Add(arr);
                }
            }
        }
Ejemplo n.º 2
0
        private void DrawCurrentPosition(double xstep, double ystep)
        {
            if (Data.nav.currentPos.To != Data.nav.currentPos.From || (Data.nav.currentPos.ToPoint || Data.nav.currentPos.FromPoint))
            {
                Arrow arr = new Arrow();
                Point N1 = getCanvasCoordinates(Data.nav.currentPos.From, xstep, ystep);
                Point N2 = getCanvasCoordinates(Data.nav.currentPos.To, xstep, ystep);
                double CPExtension = (marginlarge - marginsmall - controlpointsize / 2 -1) ;
                if (Data.nav.currentPos.ToPoint && !Data.ctr.Halfway)
                {
                    if (Data.nav.currentPos.To.X == Data.M - 1)
                    {
                        N2.X += CPExtension;
                    }
                    else if (Data.nav.currentPos.To.X == 0)
                    {
                        N2.X -= CPExtension;
                    }
                    else if (Data.nav.currentPos.To.Y == 0)
                    {
                        N2.Y -= CPExtension;
                    }
                    else if (Data.nav.currentPos.To.Y == Data.N - 1)
                    {
                        N2.Y += CPExtension;
                    }
                    arr.X1 = N1.X;
                    arr.X2 = N2.X;
                    arr.Y1 = c.ActualHeight - N1.Y;
                    arr.Y2 = c.ActualHeight - N2.Y;
                }
                else if (Data.nav.currentPos.FromPoint)
                {
                    if (Data.nav.currentPos.From.X == Data.M - 1)
                    {
                        N1.X += CPExtension;
                    }
                    else if (Data.nav.currentPos.From.X == 0)
                    {
                        N1.X -= CPExtension;
                    }
                    else if (Data.nav.currentPos.From.Y == 0)
                    {
                        N1.Y -= CPExtension;
                    }
                    else if (Data.nav.currentPos.From.Y == Data.N - 1)
                    {
                        N1.Y += CPExtension;
                    }
                    arr.X1 = N1.X;
                    arr.X2 = N2.X;
                    arr.Y1 = c.ActualHeight - N1.Y;
                    arr.Y2 = c.ActualHeight - N2.Y;
                }
                else
                {
                    int M1, M2;
                    if (Data.ctr.Halfway)
                    {
                        M1 = 1;
                        M2 = 0;
                    }
                    else
                    {
                        M1 = 2;
                        M2 = 1;
                    }

                    if (Data.ctr.RobotDirection == Direction.Left)
                    {
                        arr.X1 = N2.X + xstep * currentPosArrowLength * M1;
                        arr.X2 = N2.X + xstep * currentPosArrowLength * M2;
                        arr.Y1 = arr.Y2 = c.ActualHeight - N2.Y;
                    }
                    else if (Data.ctr.RobotDirection == Direction.Right)
                    {
                        arr.X1 = N2.X - xstep * currentPosArrowLength * M1;
                        arr.X2 = N2.X - xstep * currentPosArrowLength * M2;
                        arr.Y1 = arr.Y2 = c.ActualHeight - N2.Y;
                    }
                    else if (Data.ctr.RobotDirection == Direction.Up)
                    {
                        arr.Y1 = c.ActualHeight - N2.Y + ystep * currentPosArrowLength * M1;
                        arr.Y2 = c.ActualHeight - N2.Y + ystep * currentPosArrowLength * M2;
                        arr.X1 = arr.X2 = N2.X;
                    }
                    else if (Data.ctr.RobotDirection == Direction.Down)
                    {
                        arr.Y1 = c.ActualHeight - N2.Y - ystep * currentPosArrowLength * M1;
                        arr.Y2 = c.ActualHeight - N2.Y - ystep * currentPosArrowLength * M2;
                        arr.X1 = arr.X2 = N2.X;
                    }
                    else
                    {
                        return;
                    }
                }

                arr.Stroke = currentPosBrush;
                arr.StrokeEndLineCap = PenLineCap.Round;
                arr.HeadHeight = currentPosArrowHeadHeight;
                arr.HeadWidth = currentPosArrowHeadWidth;
                arr.StrokeThickness = currentPosArrowThickness;
                arr.IsHitTestVisible = false;
                c.Children.Add(arr);
            }
        }