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); } }
private void Generar_Click(object sender, RoutedEventArgs e) { var radius = Math.Min(MyCanvas.ActualHeight, MyCanvas.ActualWidth) * 0.5; var center = new Point(MyCanvas.ActualWidth * 0.5, MyCanvas.ActualHeight * 0.5); var circle = new Circle(center, radius); tessellation = new Tessellation(circle); tessellation.Tessellate(int.Parse(P.Text), int.Parse(Q.Text), int.Parse(Level.Text)); Draw(tessellation, EvenBrush, OddBrush); }
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); } }