private async Task <NeuronLevel> Define(Diagrams.Polygon front) { var frontPoints = front.ToPoints(); // Initial hull var dispatcher = Dispatcher.CurrentDispatcher; var logger = new DispatcherLogger(dispatcher, s => this.viewModel.Info = s); var hullSegments = await Bus.Query(new MakeConvexHull(frontPoints, dispatcher, logger)); var hull = new Diagrams.Polygon(hullSegments); var level = new NeuronLevel { Include = hull }; // Make sub hulls: hull - front var diffs = Diagrams.PolygonOperations.Difference(hull, front); foreach (var diff in diffs) { var l = await this.Define(diff); level.Excludes.Add(l); } return(level); }
private async Task DrawLevel(NeuronLevel level, IShapeComposite composite) { // Draw outer hull await Bus.Send(new DrawPolygon(Brushes.DodgerBlue, level.Include, composite)); // Draw cut outs foreach (var cutOut in level.Excludes) { await this.DrawLevel(cutOut, composite); } }