internal static void DrawEdge(Graphics graphics, DEdge dEdge) { DrawingEdge drawingEdge = dEdge.DrawingEdge; if (!drawingEdge.IsVisible || drawingEdge.GeometryEdge == null) { return; } DrawingEdge edge = dEdge.DrawingEdge; if (edge.DrawEdgeDelegate != null) { if (edge.DrawEdgeDelegate(edge, graphics)) { return; //the client draws instead } } if (dEdge.GraphicsPath == null) { dEdge.GraphicsPath = Draw.CreateGraphicsPath(dEdge.Edge.GeometryEdge.Curve); } EdgeAttr attr = drawingEdge.Attr; using (var myPen = new Pen(dEdge.Color, (float)attr.LineWidth)) { foreach (Style style in attr.Styles) { Draw.AddStyleForPen(dEdge, myPen, style); } try { if (dEdge.GraphicsPath != null) { graphics.DrawPath(myPen, dEdge.GraphicsPath); } } catch { // sometimes on Vista it throws an out of memory exception without any obvious reason } Draw.DrawEdgeArrows(graphics, drawingEdge, dEdge.Color, myPen); if (dEdge.DrawingEdge.GeometryEdge.Label != null) { Draw.DrawLabel(graphics, dEdge.Label); } #if TEST_MSAGL if (DrawControlPoints) { ICurve iCurve = dEdge.DrawingEdge.GeometryEdge.Curve; var c = iCurve as Curve; if (c != null) { foreach (ICurve seg in c.Segments) { var cubic = seg as CubicBezierSegment; if (cubic != null) { Draw.DrawControlPoints(graphics, cubic); } } } else { var seg = iCurve as CubicBezierSegment; if (seg != null) { Draw.DrawControlPoints(graphics, seg); } } } #endif } }
public VEdge(Edge edge, FrameworkElement labelFrameworkElement) { Edge = edge; var userData = edge.UserData; if (userData == null) { CurvePath = new Path { Data = Common.GetICurveWpfGeometry(edge.GeometryEdge.Curve), Tag = this }; } else { Path p = new Path(); var deleg = GetDrawDelegate_FromUserData(userData); edge.DrawEdgeDelegate = deleg; edge.DrawEdgeDelegate(edge, p); CurvePath = p; p.Tag = this; } if (edge.DrawEdgeDelegate != null) { Path p = new Path(); edge.DrawEdgeDelegate(edge, p); CurvePath = p; p.Tag = this; } else { CurvePath = new Path { Data = Common.GetICurveWpfGeometry(edge.GeometryEdge.Curve), Tag = this }; } EdgeAttrClone = edge.Attr.Clone(); SourceArrowHeadPath = new Path { Tag = this }; if (edge.Attr.ArrowAtSource) { SourceArrowHeadPath.Data = DefiningSourceArrowHead(); } TargetArrowHeadPath = new Path { Tag = this }; if (edge.Attr.ArrowAtTarget) { TargetArrowHeadPath.Data = DefiningTargetArrowHead(Edge.GeometryEdge.EdgeGeometry, PathStrokeThickness, Edge.Attr.ArrowheadAtTarget); } SetPathStroke(); if (labelFrameworkElement != null) { LabelFrameworkElement = labelFrameworkElement; Common.PositionFrameworkElement(LabelFrameworkElement, edge.Label.Center, 1); } edge.Attr.VisualsChanged += (a, b) => Invalidate(); edge.IsVisibleChanged += obj => { foreach (var frameworkElement in FrameworkElements) { frameworkElement.Visibility = edge.IsVisible ? Visibility.Visible : Visibility.Hidden; } }; _editingUnderlying_FrameworkElement = new Path(); _editingUnderlying_FrameworkElement.StrokeThickness = 1; _editingUnderlying_FrameworkElement.Stroke = Brushes.Red; _editingUnderlying_FrameworkElement.StrokeStartLineCap = PenLineCap.Triangle; _editingUnderlying_FrameworkElement.StrokeEndLineCap = PenLineCap.Triangle; //_editingUnderlying_FrameworkElement.Fill = Brushes.Green; }