public HorizontalCableLayoutComparer(Dictionary <int, CableInfo> cableInfoById, Dictionary <int, int> matePositionByCableId, int groupPosition) { this.matePositionByCableId = matePositionByCableId; this.cableInfoById = cableInfoById; this.groupPosition = groupPosition; stringComparer = new NaturalSortingStringComparer(); }
public VerticalCableSymbolsComparer(List <ISchemeSymbol> topSymbols, List <ISchemeSymbol> bottomSymbols, Dictionary <int, int> bottomPositionById, Dictionary <int, int> topPositionById) { this.optimalBottomPositionById = bottomPositionById; this.optimalTopPositionById = topPositionById; this.topGroups = topSymbols; this.bottomGroups = bottomSymbols; stringComparer = new NaturalSortingStringComparer(); }
private void GetPins(Dictionary <int, DeviceConnection> deviceConnectionById, Dictionary <int, DeviceSymbol> deviceSymbolById, E3Text text) { Dictionary <string, SymbolPin> topPinByName = new Dictionary <string, SymbolPin>(); Dictionary <string, SymbolPin> bottomPinByName = new Dictionary <string, SymbolPin>(); foreach (int connectionId in ConnectionIds) { DeviceConnection connection = deviceConnectionById[connectionId]; int connectedId; string pinName; if (id == connection.StartDeviceId) { connectedId = connection.EndDeviceId; pinName = connection.StartPinName; } else { connectedId = connection.StartDeviceId; pinName = connection.EndPinName; } string connectedAssignment = deviceSymbolById[connectedId].Assignment; if (!String.IsNullOrEmpty(Assignment) && String.IsNullOrEmpty(connectedAssignment)) { if (!topPinByName.ContainsKey(pinName)) { SymbolPin pin = new SymbolPin(pinName, connection.Signal, text, smallFont); topPinByName.Add(pinName, pin); } topPinByName[pinName].CableIds.Add(connection.CableId); } else { if (!bottomPinByName.ContainsKey(pinName)) { SymbolPin pin = new SymbolPin(pinName, connection.Signal, text, smallFont); bottomPinByName.Add(pinName, pin); } bottomPinByName[pinName].CableIds.Add(connection.CableId); } } topPins = topPinByName.Values.ToList(); bottomPins = bottomPinByName.Values.ToList(); NaturalSortingStringComparer stringComparer = new NaturalSortingStringComparer(); topPins.Sort((p1, p2) => stringComparer.Compare(p1.Name, p2.Name)); bottomPins.Sort((p1, p2) => stringComparer.Compare(p1.Name, p2.Name)); }
public VerticalCableLayoutComparer(Dictionary <int, CableInfo> cableInfoById, Dictionary <int, int> matePositionByCableId) { this.matePositionByCableId = matePositionByCableId; this.cableInfoById = cableInfoById; stringComparer = new NaturalSortingStringComparer(); }
private void SortSymbols() { NaturalSortingStringComparer stringComparer = new NaturalSortingStringComparer(); deviceSymbols.Sort((ds1, ds2) => stringComparer.Compare(ds1.Name, ds2.Name)); }
private Dictionary<int, Dictionary<int, int>> GetConnectedPositionByIdByCenterId(Level centerGroupLevel, List<Tuple<int, int>> topToBottomConnections) { IEnumerable<int> centerIds = topToBottomConnections.Select(c => (centerGroupLevel == Level.Top) ? c.Item1 : c.Item2).Distinct(); NaturalSortingStringComparer stringComparer = new NaturalSortingStringComparer(); Dictionary<int, Dictionary<int, int>> connectedPositionByIdByCenterId = new Dictionary<int, Dictionary<int, int>>(); foreach (int centerId in centerIds) { DeviceGroup centerGroup = symbolById[centerId] as DeviceGroup; if (centerGroup == null) continue; List<int> connectedIds = topToBottomConnections.Where(c => ((centerGroupLevel == Level.Top) ? c.Item1 : c.Item2) == centerId).Select(c => (centerGroupLevel == Level.Top) ? c.Item2 : c.Item1).ToList(); int connectedCount = connectedIds.Count(); if (connectedCount > 1) { Dictionary<string, List<int>> groupIdsByPinName = new Dictionary<string, List<int>>(connectedCount); foreach (int connectedId in connectedIds) { IEnumerable<int> commonCableIds = symbolById[connectedId].CableIds.Intersect(centerGroup.CableIds); IEnumerable<SymbolPin> bottomPins = centerGroup.DeviceSymbols.SelectMany(ds => ds.BottomPins); IEnumerable<SymbolPin> topPins = centerGroup.DeviceSymbols.SelectMany(ds => ds.TopPins); List<SymbolPin> pins = new List<SymbolPin>(bottomPins.Count() + topPins.Count()); pins.AddRange(bottomPins); pins.AddRange(topPins); List<string> commonPinNames = pins.Where(p => p.CableIds.Intersect(commonCableIds).Any()).Select(p => p.Name).ToList(); commonPinNames.Sort(stringComparer); string leftPinName = commonPinNames.First(); if (!groupIdsByPinName.ContainsKey(leftPinName)) groupIdsByPinName.Add(leftPinName, new List<int>(){connectedId}); else groupIdsByPinName[leftPinName].Add(connectedId); } if (groupIdsByPinName.Count > 1) { List<string> sortedLeftPinNames = groupIdsByPinName.Keys.ToList(); sortedLeftPinNames.Sort(stringComparer); Dictionary<int, int> positionById = new Dictionary<int, int>(connectedCount); for (int position = 0; position < sortedLeftPinNames.Count; position++) { string pinName = sortedLeftPinNames[position]; groupIdsByPinName[pinName].ForEach(id => positionById.Add(id, position)); } connectedPositionByIdByCenterId.Add(centerId, positionById); } } } return connectedPositionByIdByCenterId; }
private void GetPins(Dictionary<int, DeviceConnection> deviceConnectionById, Dictionary<int, DeviceSymbol> deviceSymbolById, E3Text text) { Dictionary<string, SymbolPin> topPinByName = new Dictionary<string, SymbolPin>(); Dictionary<string, SymbolPin> bottomPinByName = new Dictionary<string, SymbolPin>(); foreach (int connectionId in ConnectionIds) { DeviceConnection connection = deviceConnectionById[connectionId]; int connectedId; string pinName; if (id == connection.StartDeviceId) { connectedId = connection.EndDeviceId; pinName = connection.StartPinName; } else { connectedId = connection.StartDeviceId; pinName = connection.EndPinName; } string connectedAssignment = deviceSymbolById[connectedId].Assignment; if (!String.IsNullOrEmpty(Assignment) && String.IsNullOrEmpty(connectedAssignment)) { if (!topPinByName.ContainsKey(pinName)) { SymbolPin pin = new SymbolPin(pinName, connection.Signal, text, smallFont); topPinByName.Add(pinName, pin); } topPinByName[pinName].CableIds.Add(connection.CableId); } else { if (!bottomPinByName.ContainsKey(pinName)) { SymbolPin pin = new SymbolPin(pinName, connection.Signal, text, smallFont); bottomPinByName.Add(pinName, pin); } bottomPinByName[pinName].CableIds.Add(connection.CableId); } } topPins = topPinByName.Values.ToList(); bottomPins = bottomPinByName.Values.ToList(); NaturalSortingStringComparer stringComparer = new NaturalSortingStringComparer(); topPins.Sort((p1,p2)=>stringComparer.Compare(p1.Name, p2.Name)); bottomPins.Sort((p1, p2) => stringComparer.Compare(p1.Name, p2.Name)); }