Exemple #1
0
        internal void AdjustGraph(GraphSelector selector)
        {
            var nodes = new HashSet <Node>();

            if (selector.HitNode != null)
            {
                nodes.Add(selector.HitNode);
            }
            if (selector.HitEdge != null)
            {
                nodes.Add(selector.HitEdge.Node1); nodes.Add(selector.HitEdge.Node2);
            }
            foreach (var node in selector.Nodes)
            {
                nodes.Add(node);
            }
            foreach (var edge in selector.Edges)
            {
                nodes.Add(edge.Node1); nodes.Add(edge.Node2);
            }
            foreach (var e in selector.Points)
            {
                var edge = e.Key;
                nodes.Add(edge.Node1);
                nodes.Add(edge.Node2);
            }

            ExpandNeighborhood();
            AdjustNodes(nodes);

            #region ExpandNeighborhood  =======================================
            void ExpandNeighborhood()
            {
                for (int i = 0; i < 2; i++)
                {
                    var ndList = nodes.ToArray();
                    foreach (var nd in ndList)
                    {
                        if (Node_Edges.TryGetValue(nd, out List <Edge> egList))
                        {
                            foreach (var eg in egList)
                            {
                                nodes.Add(eg.Node1);
                                nodes.Add(eg.Node2);
                            }
                        }
                    }
                }
            }

            #endregion
        }
Exemple #2
0
        private void AdjustNode(Node node)
        {
            if (!Node_Edges.TryGetValue(node, out List <Edge> edges))
            {
                return;
            }
            var N = edges.Count;

            if (N == 0)
            {
                return;
            }

            var E = new ((float x, float y)bend, Node other, int order, Target targ, Attach atch, Direction odir)[N];   // primary edge data