/// <summary>Gets a snapshot that captures the given diagram view.</summary> public static DiagramSnapshot Capture(DiagramViewer view, DiagramSnapshotScope scope) { var snapshot = new DiagramSnapshot(view.Shell.ViewName, scope); if (snapshot.Matches(DiagramSnapshotScope.Viewport)) { snapshot._captureViewport(view); } if (snapshot.Matches(DiagramSnapshotScope.Settings)) { snapshot._captureSettings(view); } if (snapshot.Matches(DiagramSnapshotScope.Filter)) { snapshot._captureFilter(view.Shell); } return snapshot; }
/// <summary>Checks whether the snapshot matches the specified scope.</summary> internal bool Matches(DiagramSnapshotScope scope) { return (Scope & scope) != 0; }
// private constructor private DiagramSnapshot(string name, DiagramSnapshotScope scope) { Name = name; Scope = scope; }
private void _load(string path) { var ns = (XNamespace)GetType().Namespace; var root = XElement.Load(path); // read viewport var viewport = root.Element(ns + "Viewport"); if (viewport != null) { Func<XName, string, string> get = (xname, dflt) => (viewport.Element(xname) != null ? viewport.Element(xname).Value : dflt); _scale = Double.Parse(get(ns + "Scale", "0.0")); _origin = Point.Parse(get(ns + "Origin", "0,0")); Scope |= DiagramSnapshotScope.Viewport; } // read settings var settings = root.Element(ns + "Settings"); if (settings != null) { Func<XName, string, string> get = (xname, dflt) => (settings.Element(xname) != null ? settings.Element(xname).Value : dflt); _displayOptions = (DisplayOptions)Enum.Parse(typeof(DisplayOptions), get(ns + "Display", "Default")); _layoutMethod = (LayoutMethod)Enum.Parse(typeof(LayoutMethod), get(ns + "Layout", "Hierarchic")); _layoutOrientation = (LayoutOrientation)Enum.Parse(typeof(LayoutOrientation), get(ns + "Orientation", "TopToBottom")); _layoutRatio = (LayoutRatio)Enum.Parse(typeof(LayoutRatio), get(ns + "Ratio", "Compress")); Scope |= DiagramSnapshotScope.Settings; } // read filter var filter = root.Element(ns + "Filter"); if (filter != null) { // read class filter var classes = new List<BplClass>(); var classSection = filter.Element(ns + "Classes"); if (classSection != null) { foreach (var elem in classSection.Elements(ns + "Class")) { var bplClass = BplClass.Get(elem.Value); if (bplClass != null) { classes.Add(bplClass); } } } _classes = classes.ToArray(); Scope |= DiagramSnapshotScope.Filter; } }