Click here to Skip to main content
15,886,787 members
Articles / Desktop Programming / WPF

SharpVectors - SVG# Reloaded: An Introduction

Rate me:
Please Sign up or sign in to vote.
4.98/5 (33 votes)
17 Nov 2010BSD10 min read 204.7K   21.7K   101  
A C# library for converting SVG to WPF and viewing SVG files in WPF Applications
// <developer>niklas@protocol7.com</developer>
// <developer>kevin@kevlindev.com</developer>
// <completed>100</completed>

using System;
using System.Globalization;
using System.Text.RegularExpressions;

namespace SharpVectors.Dom.Svg
{
	/// <summary>
	/// Rectangles are defined as consisting of a (x,y) coordinate pair 
	/// identifying a minimum X value, a minimum Y value, and a width 
	/// and height, which are usually constrained to be non-negative. 
	/// </summary>
    public sealed class SvgRect : ISvgRect
	{
        #region Static Fields

        public static readonly SvgRect Empty = new SvgRect(0,0,0,0);
        
        #endregion

        #region Private Fields

        private double x;
        private double y;
        private double width;
        private double height;
		
        #endregion

		#region Constructors

        public SvgRect(double x, double y, double width, double height)
        {
            this.x      = x;
            this.y      = y;
            this.width  = width;
            this.height = height;
        }

		public SvgRect(string str)
		{
			string replacedStr = Regex.Replace(str, @"(\s|,)+", ",");
			string[] tokens = replacedStr.Split(new char[]{','});
			if (tokens.Length == 2)
			{
				this.x      = 0;
				this.y      = 0;
				this.width  = SvgNumber.ParseNumber(tokens[0]);
				this.height = SvgNumber.ParseNumber(tokens[1]);
			}
            else if (tokens.Length == 4)
            {
                this.x      = SvgNumber.ParseNumber(tokens[0]);
                this.y      = SvgNumber.ParseNumber(tokens[1]);
                this.width  = SvgNumber.ParseNumber(tokens[2]);
                this.height = SvgNumber.ParseNumber(tokens[3]);
            }
			else
			{
				throw new SvgException(SvgExceptionType.SvgInvalidValueErr, 
                    "Invalid SvgRect value: " + str);
			}
		}

        #endregion

		#region Public Properties

		public bool IsEmpty
		{
			get
			{
				return (width <= 0 || height <= 0);
			}
		}

		#endregion

        #region Public Methods

        public override string ToString()
		{
            return ("{X=" + this.X.ToString(CultureInfo.CurrentCulture) 
                + ",Y=" + this.Y.ToString(CultureInfo.CurrentCulture) 
                + ",Width=" + this.Width.ToString(CultureInfo.CurrentCulture) 
                + ",Height=" + this.Height.ToString(CultureInfo.CurrentCulture) + "}");
        }

        #endregion

        #region ISvgRect Interface

        public double X
		{
			get
			{
				return x;
			}
			set
			{
				x = value;
			}
		}

		public double Y
		{
			get
			{
				return y;
			}
			set
			{
				y = value;
			}
		}

		public double Width
		{
			get
			{
				return width;
			}
			set
			{
				width = value;
			}
		}

		public double Height
		{
			get
			{
				return height;
			}
			set
			{
				height = value;
			}
		}

		#endregion
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The BSD License


Written By
Engineer
Japan Japan
Systems Engineer

Comments and Discussions