protected void GoToPoint(Point point) { Rect actualViewport = new Rect(0, 0, ActualWidth, ActualHeight); Rect boundaries = _diagram.Boundaries; Rect viewport = _diagram.Viewport; double scale; double scaleX = actualViewport.Width / boundaries.Width; double scaleY = actualViewport.Height / boundaries.Height; scale = scaleX > scaleY ? scaleY : scaleX; Vector offset = new Vector(-boundaries.Left, -boundaries.Top); Rect viewerBoundaries = new Rect(0, 0, boundaries.Width * scale, boundaries.Height * scale); if (point.Y > viewerBoundaries.Height || point.X > viewerBoundaries.Width) return; Point diagramPoint = new Point(point.X / scale + boundaries.Left, point.Y / scale + boundaries.Top); Vector newViewOffset = new Vector(); newViewOffset.X = diagramPoint.X - viewport.Width / 2; newViewOffset.Y = diagramPoint.Y - viewport.Height / 2; using (DiagramUpdateLock locker = new DiagramUpdateLock(_diagram)) { _diagram.XViewOffset = -newViewOffset.X; _diagram.YViewOffset = -newViewOffset.Y; } }
public void LoadFromXDocument(XDocument xDoc) { XElement xDiag = xDoc.Element("Gt.Diagram"); if (xDiag == null && xDoc.Root != null) { xDiag = xDoc.Root.Element("Gt.Diagram"); } if (xDiag == null) return; using (DiagramUpdateLock locker = new DiagramUpdateLock(_diagram)) { LoadFromXElement(xDiag); } }
void UpdateDiagramStyle() { using (DiagramUpdateLock locker = new DiagramUpdateLock(_diagram)) { foreach (var node in _diagram.Nodes) { var networkNode = _network.FindById(Convert.ToInt32(node.UserData)) as NetworkNode; if (networkNode != null) { NodeAdded(node, networkNode); } } foreach (var edge in _diagram.Edges) { var networkEdge = _network.Edges.FindById(Convert.ToInt32(edge.UserData)) as NetworkEdge; if (networkEdge != null) { LinkAdded(edge, networkEdge); } } } }
public void RebuildDiagram() { _diagram.ClearAll(); using (DiagramUpdateLock updateLock = new DiagramUpdateLock(_diagram)) { CreateVisual(); ArrangeVisual(); } }
public void ClearAll() { using (var diagramLock = new DiagramUpdateLock(this)) { _nodes.Clear(); _edges.Clear(); _selection.Clear(); } }
private void UseSelector() { if (Selector == null) return; using (DiagramUpdateLock locker = new DiagramUpdateLock(_diagram)) { Geometry selectorGeometry = Selector.Geometry; _diagram.Selection.Clear(); foreach (var node in _diagram.Nodes) { if (node.Geometry == null || node.NeedRecalc) node.CalculateGeometry(); if (node.Geometry == null) continue; if (GeometryUtils.AreIntersectOrContain(node.Geometry, node.BorderPen, selectorGeometry, GlobalData.SelectorBorderPen)) { _diagram.Selection.Add(node); } } Selector = null; } }