/// <summary> /// Generate a Voronoi Diagram from the generated points /// </summary> private void GenerateVoronoi() { //check if there are enough points if (_points == null || _points.Count <= 2 || _voronoiDiagram.Triangulation == null) { Console.WriteLine("No points available!"); GeneratePoints(PointsToGenerate); //return; } _baseColor = Extensions.Extensions.RandomColor(); _voronoiSettings.VoronoiAlgorithm = VoronoiAlgorithm; //create voronoi using specified algorithm var timer = Stopwatch.StartNew(); _voronoiDiagram = VoronoiGenerator.CreateVoronoi(_points, _voronoiSettings); timer.Stop(); if (_voronoiDiagram == null) { return; } //update info var time = timer.ElapsedMilliseconds / 1000.0; GenerationTimeText = $"For {_points.Count} points using {VoronoiAlgorithm.ToString()}: {time} seconds."; //Update canvas RefreshCanvas(); }
private void GenerateCity() { //seed random if (!GenerationSettings.UseSeed) { GenerationSettings.Seed = DateTime.Now.GetHashCode(); } //Store Settings var width = GenerationSettings.Width; var length = GenerationSettings.Length; //Parent.transform.position = citypos; GenerationSettings.StartX = Parent.transform.position.x - width / 2.0; GenerationSettings.StartY = Parent.transform.position.z - length / 2.0; //Generate Points and diagram var points = PointGenerator.Generate(GenerationSettings); VoronoiDiagram = VoronoiGenerator.CreateVoronoi(points, GenerationSettings); //generate city districts and roads _cityData = CityBuilder.GenerateCity(CitySettings, VoronoiDiagram); }