/// <summary>
 /// Create a drawing template from given drawing with the given path/title
 /// </summary>
 /// <param name="title"></param>
 /// <param name="drawing"></param>
 public TemplateDrawingModel(string title, Drawing drawing)
 {
     if (drawing == null)
     {
         throw new ArgumentNullException("d");
     }
     _path = title;
     //clone the drawing so subsequent changes effect only one copy
     _originalDrawing = drawing.Clone() as Drawing;
     //same here, clone the working copy.  Shallow copy ok as all members are value or immutable reference types.
     _drawing = _originalDrawing.Clone() as Drawing;
 }
 /// <summary>
 /// Create a new drawing template from the persisted/serialized drawing
 /// </summary>
 /// <param name="path"></param>
 public TemplateDrawingModel(string path) 
 {
     StreamReader sr = new StreamReader(path);
     XmlSerializer xml = new XmlSerializer(typeof(Drawing));
     Drawing d = xml.Deserialize(sr) as Drawing;
     if (d != null)
     {
         _path = path;
         _originalDrawing = d;
         _drawing = _originalDrawing.Clone() as Drawing;
     }
 }