private GeneralLayoutEdge[] SplitEdge(GeneralLayoutEdge edgeToSplit, LayoutVertexBase interimVertex) { var newEdge1 = new GeneralLayoutEdge(edgeToSplit.Source, interimVertex, edgeToSplit.DiagramConnector); var newEdge2 = new GeneralLayoutEdge(interimVertex, edgeToSplit.Target, edgeToSplit.DiagramConnector); _properGraph.RemoveEdge(edgeToSplit); _properGraph.AddVertex(interimVertex); _properGraph.AddEdge(newEdge1); _properGraph.AddEdge(newEdge2); return(new[] { newEdge1, newEdge2 }); }
private GeneralLayoutEdge MergeEdges(GeneralLayoutEdge firstEdge, GeneralLayoutEdge nextEdge) { if (firstEdge.Target != nextEdge.Source) { throw new InvalidOperationException("Only consecutive edges can be merged."); } if (firstEdge.DiagramConnector != nextEdge.DiagramConnector) { throw new InvalidOperationException("Only edges of the same DiagramConnector can be merged."); } var mergedEdge = new GeneralLayoutEdge(firstEdge.Source, nextEdge.Target, firstEdge.DiagramConnector); _properGraph.RemoveEdge(firstEdge); _properGraph.RemoveEdge(nextEdge); _properGraph.RemoveVertex(firstEdge.Target); _properGraph.AddEdge(mergedEdge); return(mergedEdge); }