public static void DrawVisibilityGraph(this IDebugCanvas canvas, PolyNodeVisibilityGraph visibilityGraph)
        {
            canvas.DrawLineList(
                visibilityGraph.Barriers.SelectMany(barrier => barrier.Points.Select(p => new IntVector3(p))).ToList(),
                BarrierStrokeStyle);

            if (visibilityGraph.Waypoints.Any())
            {
                canvas.DrawLineList(
                    (from sourceIndex in Enumerable.Range(0, visibilityGraph.Waypoints.Length)
                     let sourceWaypoint = new IntVector3(visibilityGraph.Waypoints[sourceIndex])
                                          let offset = visibilityGraph.Offsets[sourceIndex]
                                                       let end = visibilityGraph.Offsets[sourceIndex + 1]
                                                                 from edgeIndex in Enumerable.Range(offset, end - offset)
                                                                 let edge = visibilityGraph.Edges[edgeIndex]
                                                                            let destWaypoint = new IntVector3(visibilityGraph.Waypoints[edge.NextIndex])
                                                                                               select new IntLineSegment3(sourceWaypoint, destWaypoint)).ToList(),
                    VisibilityEdgeStrokeStyle);
                canvas.DrawPoints(
                    visibilityGraph.Waypoints.Select(p => new IntVector3(p)).ToList(),
                    WaypointStrokeStyle);

                foreach (var(i, waypoint) in visibilityGraph.Waypoints.Enumerate())
                {
                    canvas.DrawText("" + i, waypoint);
                }
            }
        }
 public PolyNodeCrossoverPointManager(PolyNode landPolyNode)
 {
     this.landPolyNode     = landPolyNode;
     waypoints             = landPolyNode.FindAggregateContourCrossoverWaypoints();
     allWaypointIndices    = waypoints.Map((_, i) => i);
     visibilityGraph       = landPolyNode.ComputeVisibilityGraph();
     waypointToWaypointLut = visibilityGraph.BuildWaypointToWaypointLut();
 }
Esempio n. 3
0
        public static PolyNodeVisibilityGraph ComputeVisibilityGraph(this PolyNode landNode)
        {
            if (landNode.visibilityGraphNodeData.VisibilityDistanceMatrix != null)
            {
                return(landNode.visibilityGraphNodeData.VisibilityDistanceMatrix);
            }
            // Console.WriteLine("Compute Visibility Graph");
            var waypoints = FindAggregateContourCrossoverWaypoints(landNode);
            var barriers  = FindContourAndChildHoleBarriers(landNode);

            return(landNode.visibilityGraphNodeData.VisibilityDistanceMatrix = PolyNodeVisibilityGraph.Construct(landNode, waypoints, barriers));
        }