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); } } }
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); } }