private Connector(FlowObj flow, TaskObj taskFrom, Pin pinFrom, TaskObj taskTo, Pin pinTo)
 {
     Flow     = flow;
     TaskFrom = taskFrom;
     PinFrom  = pinFrom;
     TaskTo   = taskTo;
     PinTo    = pinTo;
     if (flow.Route != null)
     {
         points = new List <Point>();
         var iterator = flow.Route.GetEnumerator();
         while (iterator.MoveNext())
         {
             var x = (int)iterator.Current;
             if (!iterator.MoveNext())
             {
                 Debug.WriteLine("Odd number of route coordinates, ignoring - {0}:{1}", taskFrom.TaskId, flow.Name);
                 Points = null;
                 break;
             }
             var y = (int)iterator.Current;
             points.Add(new Point(x, y));
         }
     }
     Bounds = GetBounds();
     connectors.Add(this);
 }
        public static Connector Create(FlowObj flow, Pin pinFrom, Pin pinTo)
        {
            var taskFrom = pinFrom.Shape.Task;
            var taskTo   = pinTo.Shape.Task;

            return(connectors.SingleOrDefault(c => c.TaskFrom == taskFrom && c.PinFrom == pinFrom) ??
                   new Connector(flow, taskFrom, pinFrom, taskTo, pinTo));
        }