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(); } }
/// <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); } }
/// <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); }