private bool TryComputePosition(TVertex vertex, out Point position)
        {
            position = default(Point);

            int count = 0;

            foreach (TVertex neighbor in Graph.GetNeighbors(vertex))
            {
                if (VerticesControls.TryGetValue(neighbor, out VertexControl neighborControl))
                {
                    double x = GetX(neighborControl);
                    double y = GetY(neighborControl);
                    position.X += double.IsNaN(x) ? 0.0 : x;
                    position.Y += double.IsNaN(y) ? 0.0 : y;
                    ++count;
                }
            }

            if (count > 0)
            {
                position.X /= count;
                position.Y /= count;
                return(true);
            }

            return(false);
        }
        private void RemoveGraphControls()
        {
            foreach (KeyValuePair <TEdge, EdgeControl> pair in EdgesControls.ToArray())
            {
                bool remove = false;
                try
                {
                    remove = !Graph.ContainsEdge(pair.Key.Source, pair.Key.Target) ||
                             !Graph.ContainsEdge(pair.Key);
                }
                catch
                {
                    // ignored
                }

                if (remove)
                {
                    RemoveEdgeControl(pair.Key);
                }
            }

            foreach (KeyValuePair <TVertex, VertexControl> pair in VerticesControls.ToArray())
            {
                if (!Graph.ContainsVertex(pair.Key))
                {
                    RemoveVertexControl(pair.Key);
                }
            }
        }
 private void OnMutableGraphVertexRemoved([NotNull] TVertex vertex)
 {
     if (VerticesControls.ContainsKey(vertex))
     {
         _verticesRemoved.Enqueue(vertex);
         DoNotificationLayout();
     }
 }
Example #4
0
 /// <inheritdoc />
 public void SemiHighlightVertex(TVertex vertex, object semiHighlightInfo)
 {
     _semiHighlightedVertices[vertex] = semiHighlightInfo;
     if (VerticesControls.TryGetValue(vertex, out VertexControl control))
     {
         GraphElementBehaviour.SetIsSemiHighlighted(control, true);
         GraphElementBehaviour.SetSemiHighlightInfo(control, semiHighlightInfo);
     }
 }
Example #5
0
 /// <inheritdoc />
 public void RemoveSemiHighlightFromVertex(TVertex vertex)
 {
     _semiHighlightedVertices.Remove(vertex);
     if (VerticesControls.TryGetValue(vertex, out VertexControl control))
     {
         GraphElementBehaviour.SetIsSemiHighlighted(control, false);
         GraphElementBehaviour.SetSemiHighlightInfo(control, null);
     }
 }
        /// <summary>
        /// Removes all vertices and edges from graph.
        /// </summary>
        protected void RemoveAllGraphElements()
        {
            foreach (TVertex vertex in VerticesControls.Keys.ToArray())
            {
                RemoveVertexControl(vertex);
            }

            foreach (TEdge edge in EdgesControls.Keys.ToArray())
            {
                RemoveEdgeControl(edge);
            }

            VerticesControls.Clear();
            EdgesControls.Clear();
        }
        private void CreateGraphControls()
        {
            // Vertices controls
            foreach (TVertex vertex in Graph.Vertices)
            {
                if (!VerticesControls.ContainsKey(vertex))
                {
                    CreateVertexControl(vertex);
                }
            }

            // Edges controls
            foreach (TEdge edge in Graph.Edges)
            {
                if (!EdgesControls.ContainsKey(edge))
                {
                    CreateEdgeControl(edge);
                }
            }
        }
 public VertexControl GetVertexControl([NotNull] TVertex vertex)
 {
     return(VerticesControls.TryGetValue(vertex, out VertexControl control)
         ? control
         : null);
 }
 /// <summary>
 /// Removes the given <paramref name="vertex"/> from graph.
 /// </summary>
 /// <param name="vertex">Vertex to remove.</param>
 protected virtual void RemoveVertexControl([NotNull] TVertex vertex)
 {
     RunDestructionTransition(VerticesControls[vertex], false);
     VerticesControls.Remove(vertex);
 }