public void SplitEdge(Edge e) { foreach (var vertice in e.Endpoints) { vertice.DisconnectEdge(e); } var middleOfEdge = PointUtilities.GetPointInTheMiddleOfSegment(e.Endpoints[0].Position, e.Endpoints[1].Position); Vertice v = new Vertice { Position = middleOfEdge }; CreateEdgeBetweenVertices(v, e.Endpoints[0]); CreateEdgeBetweenVertices(v, e.Endpoints[1]); List <Vertice> verticesList = Vertices.ToList(); List <Edge> edgesList = Edges.ToList(); verticesList.Add(v); edgesList.Remove(e); Vertices = verticesList; Edges = edgesList; }
private void DrawIcon(Graphics graphics, Edge edge) { if (edge.Type == EdgeType.Normal) { return; } Point middle = PointUtilities.GetPointInTheMiddleOfSegment(edge.Endpoints[0].Position, edge.Endpoints[1].Position); Point leftUpperCorner = new Point(middle.X - IconRadius, middle.Y - IconRadius); using (Pen pen = new Pen(IconColor, IconLineThickness)) { Point leftUpper = new Point((int)(middle.X - 0.5 * IconRadius), (int)(middle.Y - 0.5 * IconRadius)); Point leftLower = new Point(leftUpper.X, leftUpper.Y + IconRadius); Point rightUpper = new Point((int)(middle.X + 0.5 * IconRadius), leftUpper.Y); Point rightLower = new Point(rightUpper.X, leftLower.Y); if (edge.Type == EdgeType.Horizontal) { graphics.DrawLine(pen, leftUpper, rightUpper); graphics.DrawLine(pen, leftLower, rightLower); } else if (edge.Type == EdgeType.Vertical) { graphics.DrawLine(pen, leftUpper, leftLower); graphics.DrawLine(pen, rightUpper, rightLower); } else if (edge.Type == EdgeType.FixedLength) { using (Brush b = new SolidBrush(IconColor)) using (Font f = new Font(IconFontName, IconFontSize)) { graphics.DrawString("F", f, b, leftUpper); } } } }