using Microsoft.VisualStudio.TestTools.UnitTesting;
using Svg.DataTypes;
using System;
using System.Diagnostics;
using System.Drawing;
using System.IO;
namespace Svg.UnitTests
{
///
/// Test Class of rendering SVGs with marker-end elements.
/// Based on Issue 212.
///
///
/// Test use the following embedded resources:
/// - Issue212_MakerEnd\OperatingPlan.svg
///
[TestClass]
public class MarkerEndTest : SvgTestHelper
{
protected override string TestResource { get { return GetFullResourceString("Issue212_MakerEnd.OperatingPlan.svg"); } }
protected override int ExpectedSize { get { return 5000; } } //5321 //5410
[TestMethod]
[Ignore]
public void TestOperatingPlanRendering()
{
// FIXME: loading file times out - probably regression
LoadSvg(GetXMLDocFromResource());
}
[TestMethod]
public void TestArrowCodeCreation()
{
// Sample code from Issue 212. Thanks to podostro.
const int width = 50;
const int height = 50;
var document = new SvgDocument()
{
ID = "svgMap",
ViewBox = new SvgViewBox(0, 0, width, height)
};
var defsElement = new SvgDefinitionList() { ID = "defsMap" };
document.Children.Add(defsElement);
var groupElement = new SvgGroup() { ID = "gMap" };
document.Children.Add(groupElement);
var arrowPath = new SvgPath()
{
ID = "pathMarkerArrow",
Fill = new SvgColourServer(Color.Black),
PathData = SvgPathBuilder.Parse(@"M0,0 L4,2 L0,4 L1,2 z")
};
var arrowMarker = new SvgMarker()
{
ID = "markerArrow",
MarkerUnits = SvgMarkerUnits.StrokeWidth,
MarkerWidth = 5,
MarkerHeight = 5,
RefX = 3,
RefY = 2,
Orient = new SvgOrient() { IsAuto = true },
Children = { arrowPath }
};
defsElement.Children.Add(arrowMarker);
var line = new SvgLine()
{
ID = "lineLinkedPoint",
StartX = 0,
StartY = 15,
EndX = 35,
EndY = 35,
Stroke = new SvgColourServer(Color.Black),
StrokeWidth = 3,
MarkerEnd = new Uri(string.Format("url(#{0})", arrowMarker.ID), UriKind.Relative)
};
groupElement.Children.Add(line);
var svgXml = document.GetXML();
var img = document.Draw();
var file = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
File.WriteAllText(file + ".svg", svgXml);
img.Save(file + ".png");
Debug.WriteLine(string.Format("Svg saved to '{0}'", file));
Debugger.Break();
// Remove
var svg = new FileInfo(file + ".svg");
if (svg.Exists) svg.Delete();
var png = new FileInfo(file + ".png");
if (png.Exists) png.Delete();
}
}
}