/// <summary> /// Init a new VoronoiEngine with a list of points /// </summary> /// <param name="points"></param> public VoronoiEngine(List <VoronoiPoint> points, ColorRampEnum colorRamp = ColorRampEnum.RAINBOW, ApplyColorDirectionEnum colorDirection = ApplyColorDirectionEnum.NONE) { this._points = points; this.ApplyColorRamp(colorRamp, colorDirection); }
/// <summary> /// Apply a color ramp according to provided enum /// </summary> /// <param name="ramp"></param> /// <returns></returns> private void ApplyColorRamp(ColorRampEnum ramp, ApplyColorDirectionEnum colorDirection = ApplyColorDirectionEnum.NONE) { var pointCount = this._points.Count; if (colorDirection == ApplyColorDirectionEnum.HORIZONTAL) { this._points.Sort((a, b) => a.RelativeCoordinates.X.CompareTo(b.RelativeCoordinates.X)); } else if (colorDirection == ApplyColorDirectionEnum.VERTICAL) { this._points.Sort((a, b) => a.RelativeCoordinates.Y.CompareTo(b.RelativeCoordinates.Y)); } if (ramp == ColorRampEnum.GRAY_SCALE) { for (int i = 0; i < pointCount; i++) { var comp = (int)(i * 256.0 / pointCount); this._points[i].Color = new Color(comp, comp, comp); } } else if (ramp == ColorRampEnum.RAINBOW) { for (int i = 0; i < pointCount; i++) { this._points[i].Color = Toolkit.FromHsl(i / 20.0f, 1f, 0.5f); } } else if (ramp == ColorRampEnum.OCEAN) { var colors = Toolkit.GenerateRampBetween(Color.Blue, Color.White, this._points.Count); for (int i = 0; i < this._points.Count; i++) { this._points[i].Color = colors[i]; } } else if (ramp == ColorRampEnum.DARK_LEAF) { var colors = Toolkit.GenerateRampBetween(Color.Green, Color.Black, this._points.Count); for (int i = 0; i < this._points.Count; i++) { this._points[i].Color = colors[i]; } } else if (ramp == ColorRampEnum.LAVA) { var colors = Toolkit.GenerateRampBetween(Color.Yellow, Color.Red, this._points.Count); for (int i = 0; i < this._points.Count; i++) { this._points[i].Color = colors[i]; } } else if (ramp == ColorRampEnum.RANDOM) { for (int i = 0; i < pointCount; i++) { this._points[i].Color = new Color( this._random.Next(0, 255), this._random.Next(0, 255), this._random.Next(0, 255) ); } } }
/// <summary> /// Init a new Voronoi engine /// </summary> /// <param name="nbOfPoints"></param> public VoronoiEngine(int nbOfPoints, ColorRampEnum colorRamp = ColorRampEnum.RAINBOW, ApplyColorDirectionEnum colorDirection = ApplyColorDirectionEnum.NONE) : this() { for (var i = 0; i < nbOfPoints; i++) { this._points.Add(new VoronoiPoint { Color = Color.Black, InitialCoordinates = new Vector2 { X = this._random.Next(0, 100) / 100.0f, Y = this._random.Next(0, 100) / 100.0f } }); } this.ApplyColorRamp(colorRamp, colorDirection); }