private IEnumerable <DiagramData> GenDiagramObjects(CardBaseModel card, IEnumerable <DiagramData> currentObjects) { var lst = new List <DiagramData>(); foreach (var flow in card.Flows) { lst.AddRange(GenFlow(flow, card as CardModel)); } if (card.GetType() == typeof(CardModel)) { var l = new List <SnapDiagramData> { new BlBackupAmp(this, (CardModel)card), new BlAuxiliary(this, (CardModel)card), new BlSpMatrix(this, (CardModel)card), new BlAuxSpeakerPeq(this, (CardModel)card) }; foreach (var snapDiagramData in l) { snapDiagramData.SetYLocation(); } lst.AddRange(l); LinesCardModel(lst, _link); } else { var emergency = new BlEmergency(this); emergency.SetYLocation(); lst.Add(emergency); LinesExtCardModel(lst, _link, emergency); } foreach (var n in lst.OfType <LineViewModel>()) { var n1 = n; n.OnEndPointRemoved += () => DiagramObjects.Remove(n1); } return(lst); }
/// <summary> /// Put lines of the emergency panels on screen /// </summary> /// <param name="objects"></param> /// <param name="link"></param> /// <param name="emergency"></param> private static void LinesExtCardModel(List <DiagramData> objects, BlLink link, BlEmergency emergency) { if (emergency != null && link != null) { objects.Add(new LineViewModel(link, emergency, 30) { LineType = LineType.Special }); } var extinp = objects.OfType <BlExtInput>().ToArray(); if (extinp.Length > 2) { objects.AddRange(new[] { 0, 1, 4 }.Select(n => new LineViewModel(extinp[n], emergency))); } var inpPeq = objects.OfType <BlInputPeq>().Join(extinp, q => q.Id, j => j.Id, (peq, extInput) => new { peq, extInput }).ToArray(); objects.AddRange(inpPeq.Select(n => new LineViewModel(n.peq, n.extInput))); objects.AddRange(objects.OfType <BlInputPeq>().Select(n => new LineViewModel(n, emergency)).ToArray()); }