using System;
using GenArt.AST;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows;
using System.Windows.Shapes;
namespace WpfApplication
{
/// <summary>
/// Based on Roger Alsing's Renderer.cs which is GDI-based.
/// </summary>
public static class WpfRenderer
{
/// <summary>
/// Render a Drawing
/// </summary>
public static void Render(DnaDrawing drawing, Canvas c, int scale)
{
c.Children.Clear();
foreach (DnaPolygon polygon in drawing.Polygons)
Render(polygon, c, scale);
}
/// <summary>
/// Render a polygon
/// </summary>
private static void Render(DnaPolygon polygonToRender, Canvas c, int scale)
{
System.Windows.Shapes.Polygon polygon = new Polygon();
Brush b = GetSolidColorBrush(polygonToRender.Brush);
polygon.StrokeThickness = 0; // no line
polygon.Fill = b;
for (int j = 0; j < polygonToRender.Points.Count; j++)
{
polygon.Points.Add(GetSysWinPoint(polygonToRender.Points[j]));
}
c.Children.Add(polygon);
}
/// <summary>
/// Convert a DnaBrush to a System.Windows.Media.SolidColorBrush
/// </summary>
private static SolidColorBrush GetSolidColorBrush(DnaBrush b)
{
return new SolidColorBrush(Color.FromArgb(
Convert.ToByte(b.Alpha)
, Convert.ToByte(b.Red)
, Convert.ToByte(b.Green)
, Convert.ToByte(b.Blue)));
}
/// <summary>
/// Convert DnaPoint to System.Windows Point
/// </summary>
private static System.Windows.Point GetSysWinPoint(DnaPoint p)
{
return new Point(p.X, p.Y);
}
}
}