private void GenerateSpanningTree() { switch (m_spanningTreeType) { case SpanningTreeType.Minimum: m_spanningTree = new MinimumSpanningTree(m_edges.ToArray()); break; case SpanningTreeType.DepthFirst: m_spanningTree = new DepthFirstSpanningTree(m_edges.ToArray()); break; case SpanningTreeType.BreathFirst: m_spanningTree = new BreathFirstSpanningTree(m_edges.ToArray()); break; } }
private void DrawMinimumSpanningTree() { if (!m_showMinimumSpanningTree) { return; } if (m_voronoiDiagram == null) { return; } if (m_voronoiDiagram.Edges == null || m_voronoiDiagram.Edges.Count == 0) { return; } if (m_spanningTree == null || m_delaunayTriangulationEdges != m_voronoiDiagram.Edges) { m_delaunayTriangulationEdges = m_voronoiDiagram.Edges; List <STEdge> edges = new List <STEdge>(); STEdge cacheEdge = null; for (int i = 0; i < m_delaunayTriangulationEdges.Count; i++) { cacheEdge = new STEdge(); cacheEdge.PointA = m_delaunayTriangulationEdges[i].LeftSite; cacheEdge.PointB = m_delaunayTriangulationEdges[i].RightSite; edges.Add(cacheEdge); } m_spanningTree = new MinimumSpanningTree(edges.ToArray()); } Gizmos.color = m_minimumSpanningTreeColor; for (int i = 0; i < m_spanningTree.Segments.Count; i++) { DrawThickLine(m_spanningTree.Segments[i].PointA, m_spanningTree.Segments[i].PointB); } }
private void GenerateSpannningTree() { List <Vector3> roomCenters = new List <Vector3>(); for (int i = 0; i < m_rooms.Length; i++) { roomCenters.Add(m_rooms[i].Center + m_rooms[i].CenterBias); } m_voronoiDiagram = new VoronoiDiagram(roomCenters.ToArray(), new VBorder(m_mapSize.x, m_mapSize.z)); STEdge cacheEdge = null; List <STEdge> stEdges = new List <STEdge>(); for (int i = 0; i < m_voronoiDiagram.Edges.Count; i++) { cacheEdge = new STEdge(); cacheEdge.PointA = m_voronoiDiagram.Edges[i].LeftSite; cacheEdge.PointB = m_voronoiDiagram.Edges[i].RightSite; stEdges.Add(cacheEdge); } m_spanningTree = new MinimumSpanningTree(stEdges.ToArray()); }