void DrawDual(Tessellation tessellation) { foreach (var poly in tessellation.Polygons) { Path path = new Path() { Stroke = new SolidColorBrush(Colors.Yellow), StrokeThickness = 1.0, Data = new PathGeometry() }; for (int e = 0; e < poly.edges.Count; ++e) { if (poly.edges[e].Neighbors.Count == 2) { PathFigure figure = new PathFigure() { IsClosed = false, IsFilled = false }; var geodesic = tessellation.GetGeodesicLine(new Edge(poly.edges[e].Neighbors[0], poly.edges[e].Neighbors[1])); figure.StartPoint = geodesic.A; figure.Segments.Add(HyperbolicLineSegment(geodesic)); (path.Data as PathGeometry).Figures.Add(figure); } } this.MyCanvas.Children.Add(path); } }
void Draw(Tessellation tessellation, Brush evenBrush, Brush oddBrush) { this.MyCanvas.Children.Clear(); this.MyCanvas.Children.Add(new Path { Stroke = new SolidColorBrush(Colors.LightGray), StrokeThickness = 1.0, Data = new EllipseGeometry(tessellation.Disk.Center, tessellation.Disk.Radius, tessellation.Disk.Radius), }); foreach (var poly in tessellation.Polygons) { Path path = new Path() { Stroke = new SolidColorBrush(Colors.Yellow), StrokeThickness = 1.0, }; if (poly.level % 2 == 0) { path.Fill = evenBrush; } else { path.Fill = oddBrush; } PathFigure figure = new PathFigure() { IsClosed = true, IsFilled = true }; for (int e = 0; e < poly.edges.Count; ++e) { var geodesic = tessellation.GetGeodesicLine(poly.edges[e]); if (e == 0) { figure.StartPoint = geodesic.A; } figure.Segments.Add(HyperbolicLineSegment(geodesic)); } path.Data = new PathGeometry(new PathFigure[] { figure }); this.MyCanvas.Children.Add(path); } if (Dual.IsChecked.HasValue && (bool)Dual.IsChecked) { DrawDual(tessellation); } }