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);
            }
        }
Example #3
0
        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);
                    }
                }
            }
        }
Example #4
0
        public void RebuildDiagram()
        {
            _diagram.ClearAll();

            using (DiagramUpdateLock updateLock = new DiagramUpdateLock(_diagram))
            {
                CreateVisual();

                ArrangeVisual();
            }
        }
Example #5
0
 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;
            }
        }