public Vertex AddVertex(int x, int y) { var vertex = new Vertex(x, y); vertexes.Add(vertex); if (AutoConstraints) { for (int i = 0; i < vertexes.Count; i++) { if (vertexes[i] == vertex) { if (i - 1 >= 0) { var v1 = vertexes[i - 1]; AddAutoConstraints(v1, vertex); } if (i + 1 < vertexes.Count) { var v1 = vertexes[i + 1]; AddAutoConstraints(v1, vertex); } } } } VertexAdded?.Invoke(vertex); return(vertex); }
/// <summary> /// Called on each added vertex. /// </summary> /// <param name="vertex">Added vertex.</param> protected virtual void OnVertexAdded([NotNull] TVertex vertex) { if (vertex == null) { throw new ArgumentNullException(nameof(vertex)); } VertexAdded?.Invoke(vertex); }
public bool AddVertex(TVertex vertex) { bool vertexWasAdded; lock (SyncRoot) vertexWasAdded = Graph.AddVertex(vertex); if (vertexWasAdded) { VertexAdded?.Invoke(vertex); } return(vertexWasAdded); }
public Vertex AddVertex(int x, int y, Vertex v1, Vertex v2) { constraints.RemoveAll(c => c.IsVertexInvolved(v1) && c.IsVertexInvolved(v2)); for (int i = 0; i < vertexes.Count; i++) { if (vertexes[i] == v1 && vertexes[(i + 1) % vertexes.Count] == v2) { var vertex = new Vertex(x, y); vertexes.Insert(i + 1, vertex); VertexAdded?.Invoke(vertex); return(vertex); } } return(null); }
public GetOrAddResult <TVertex> GetOrAddVertex(VertexPredicate <TVertex> vertexPredicate, Func <TVertex> createVertexFunc) { TVertex vertex; lock (SyncRoot) { vertex = Graph.Vertices.FirstOrDefault(i => vertexPredicate(i)); if (vertex != null) { return(new GetOrAddResult <TVertex>(vertex, GetOrAddAction.Get)); } vertex = createVertexFunc(); Graph.AddVertex(vertex); } VertexAdded?.Invoke(vertex); return(new GetOrAddResult <TVertex>(vertex, GetOrAddAction.Add)); }
/// <summary> /// Adds vertex to the list of digraph vertices /// </summary> /// <param name="vertex">Vertex to add</param> /// <param name="threshold">Vertex threshold</param> /// <param name="refractoryPeriod">Vertex refractory period</param> /// <param name="initialState">Vertex initial state</param> /// <param name="index">Vertex index</param> /// <exception cref="ArgumentOutOfRangeException"/> public void AddVertex(Vertex vertex, int threshold = 1, int refractoryPeriod = 0, int initialState = 0, int index = -1) { if (Vertices.Count >= 200) { throw new InvalidOperationException(@"Too many vertices. Unable to add a new one."); } if (threshold <= 0) { throw new ArgumentOutOfRangeException(nameof(threshold), @"The value of the vertex threshold must be a positive number"); } if (refractoryPeriod < 0) { throw new ArgumentOutOfRangeException(nameof(refractoryPeriod), @"The value of the vertex refractory period must be a non-negative number"); } if (initialState < 0) { throw new ArgumentOutOfRangeException(nameof(initialState), @"The value of the vertex initial state must be a non-negative number"); } if (index == -1) { index = Vertices.Count; } Vertices.Insert(index, vertex); Thresholds.Insert(index, threshold); RefractoryPeriods.Insert(index, refractoryPeriod); State.Insert(index, initialState); Arcs = Arcs.ConvertAll(arc => new Arc(arc.StartVertex >= index ? arc.StartVertex + 1 : arc.StartVertex, arc.EndVertex >= index ? arc.EndVertex + 1 : arc.EndVertex, arc.Length)); VertexAdded?.Invoke(vertex, new DigraphChangedEventArgs(index)); }
private void OnVertexAdded([NotNull] TVertex vertex) { Debug.Assert(vertex != null); VertexAdded?.Invoke(vertex); }
/// <summary> /// Called on each added vertex. /// </summary> /// <param name="vertex">Added vertex.</param> protected virtual void OnVertexAdded(TVertex vertex) { Debug.Assert(vertex != null); VertexAdded?.Invoke(vertex); }