protected virtual void RenderArrows(IRenderContext context, Graphics graphics, IEdge edge, GeneralPath edgePath, IArrow sourceArrow, IArrow targetArrow)
 {
     if (targetArrow != Arrows.None && targetArrow != null)
     {
         Tangent?targetArrowAnchor = GetTargetArrowAnchor(edgePath, targetArrow);
         if (targetArrowAnchor != null)
         {
             var            anchorPoint    = targetArrowAnchor.Value.Point;
             var            arrowDirection = targetArrowAnchor.Value.Vector;
             IVisualCreator visualCreator  = targetArrow.GetVisualCreator(edge, false, anchorPoint, arrowDirection);
             visualCreator.CreateVisual(context).Paint(context, graphics);
         }
     }
     if (sourceArrow != Arrows.None && sourceArrow != null)
     {
         Tangent?sourceArrowAnchor = GetSourceArrowAnchor(edgePath, sourceArrow);
         if (sourceArrowAnchor != null)
         {
             var anchorPoint    = sourceArrowAnchor.Value.Point;
             var arrowDirection = sourceArrowAnchor.Value.Vector;
             var visualCreator  = sourceArrow.GetVisualCreator(edge, true, anchorPoint, arrowDirection);
             visualCreator.CreateVisual(context).Paint(context, graphics);
         }
     }
 }