using Jobberwocky.GeometryAlgorithms.Source.Core; using Jobberwocky.GeometryAlgorithms.Source.Algorithms.Voronoi2D; using Jobberwocky.GeometryAlgorithms.Source.Algorithms.Voronoi3D; using Jobberwocky.GeometryAlgorithms.Source.Parameters; using UnityEngine; using System; namespace Jobberwocky.GeometryAlgorithms.Source.API { public class VoronoiAPI : ThreadingAPI { /// /// Creates a voronoi diagriam of the given input points /// /// /// A Unity mesh of a voronoi diagram public Mesh Voronoi2D(Voronoi2DParameters parameters) { return Voronoi2DRaw(parameters).ToUnityMesh(); } /// /// Creates a 2D voronoi diagram /// /// /// VoronoiDiagramMesh public Geometry Voronoi2DRaw(Voronoi2DParameters parameters) { var voronoi2DWrapper = new Voronoi2DWrapper(); return voronoi2DWrapper.Voronoi2D(parameters); } /// /// Creates a 2D voronoi diagram using threading /// /// /// public void Voronoi2DAsync(Action callback, Voronoi2DParameters parameters = null) { StartWorker((IParameters param, Action callbackResult) => { var wrapper = new Voronoi2DWrapper(); var geometry = wrapper.Voronoi2D((Voronoi2DParameters)param); return new ThreadingResult(callbackResult, geometry); }, parameters, callback); } /// /// Creates a 3D voronoi diagram of the given input points /// /// /// Unity mesh public Mesh Voronoi3D(Voronoi3DParameters parameters) { return Voronoi3DRaw(parameters).ToUnityMesh(); } /// /// Creates a 3D voronoi diagram of the given input points /// /// /// Geometry public Geometry Voronoi3DRaw(Voronoi3DParameters parameters) { var voronoi3DWrapper = new Voronoi3DWrapper(); return voronoi3DWrapper.Voronoi3D(parameters); } /// /// Creates a 3D voronoi diagram using threading /// /// /// /// public void Voronoi3DAsync(Action callback, Voronoi3DParameters parameters) { StartWorker((IParameters param, Action callbackResult) => { var wrapper = new Voronoi3DWrapper(); var geometry = wrapper.Voronoi3D((Voronoi3DParameters)param); return new ThreadingResult(callbackResult, geometry); }, parameters, callback); } } }