using System;
using GenArt.AST;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows;
using System.Windows.Shapes;
using System.Text;
namespace WpfApplication
{
/// <summary>
/// Based on Roger Alsing's Renderer.cs which is GDI-based.
/// </summary>
public static class XamlRenderer
{
/// <summary>
/// Render a Drawing
/// </summary>
/// <remarks>
/// Sorry about the hardcoded Width/Height and ScaleTransform... feel free to fix it :)
/// </remarks>
public static void Render(DnaDrawing drawing, ref StringBuilder sb, int scale)
{
sb = new StringBuilder();
sb.Append(@"<Canvas
xmlns=""http://schemas.microsoft.com/client/2007""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
Width=""800"" Height=""600""
Background=""Black""
x:Name=""canvas"">
<Canvas.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX=""2"" ScaleY=""2"" />
</TransformGroup>
</Canvas.RenderTransform>");
sb.Append("\r\n");
foreach (DnaPolygon polygon in drawing.Polygons)
{
Render(polygon, sb, scale);
}
sb.Append(@"</Canvas>");
}
/// <summary>
/// Render a polygon
/// </summary>
/// <remarks>
/// <Polygon Points="100,0 75,75 100,100 125,75" Stroke="Black" StrokeThickness="2" Fill="Yellow" />
/// </remarks>
private static void Render(DnaPolygon polygonToRender, StringBuilder c, int scale)
{
string polygonPoints = "";
for (int j = 0; j < polygonToRender.Points.Count; j++)
{
polygonPoints += polygonToRender.Points[j].X.ToString() + "," + polygonToRender.Points[j].Y.ToString() + " ";
}
c.Append(@"<Polygon Points=""" + polygonPoints + @""" Fill="""+ GetColorString(polygonToRender.Brush) + "\" />\r\n");
}
/// <summary>
/// Convert a DnaBrush to a System.Windows.Media.SolidColorBrush
/// </summary>
private static string GetColorString(DnaBrush b)
{
return "#" + b.Alpha.ToString("X").PadLeft(2, '0') + b.Red.ToString("X").PadLeft(2, '0') + b.Green.ToString("X").PadLeft(2, '0') + b.Blue.ToString("X").PadLeft(2, '0');
}
}
}