void DrawConnectingLine(IRenderEngine engine, Task task, Task parent) { var rc1 = GetTaskRect(parent); // parent rect var rc2 = GetTaskRect(task); // task rect var x1 = rc1.Left + rc1.Width / 2; // parent x center var x2 = rc2.Left; // task left var y1 = rc1.Bottom; // parent bottom var y2 = rc2.Top + rc2.Height / 2; // task y center // draw connecting line var xs = new double[] { x1, x1, x2 }; var ys = new double[] { y1, y2, y2 }; engine.SetStroke(new SolidColorBrush(Color.FromRgb(0, 0, 0))); engine.DrawLines(xs, ys); // draw arrow at the end var sz = 5; xs = new double[] { x2 - 2 * sz, x2, x2 - 2 * sz }; ys = new double[] { y2 - sz, y2, y2 + sz }; engine.SetFill(new SolidColorBrush(Color.FromRgb(0, 0, 0))); engine.DrawPolygon(xs, ys); }