//, List<int> layers) /* private List<NodePoint> GetBest_old(PairInt inCnt) { List<NodePointLayer> metArround = new List<NodePointLayer>(); List<NodePointLayer> silArround = new List<NodePointLayer>(); List<NodePointLayer> allArround = new List<NodePointLayer>(); foreach (PairInt cnt in inCnt.GetArroundPoints(wide)) { metArround.Add(GetPointLayer(cnt, Layers.metal1Trace)); silArround.Add(GetPointLayer(cnt, Layers.siliconTrace)); } metArround.Add(GetPointLayer(inCnt, Layers.metal1Trace)); silArround.Add(GetPointLayer(inCnt, Layers.siliconTrace)); allArround.AddRange(metArround); allArround.AddRange(silArround); //NodePoint bestMet = conflictManager.GetBest(metArround); //NodePoint bestSil = conflictManager.GetBest(silArround); bool b = false; if ((inCnt.x == 13 || inCnt.x == 21) && (inCnt.y == 33)) b = true; List<NodePoint> best = new List<NodePoint>(); best.Add(conflictManager.GetBest(allArround)); best.Add(conflictManager.GetBest(metArround)); best.Add(conflictManager.GetBest(silArround)); return best; }*/ private List<BestPointSet> GetBest(PairInt inCnt) { Dictionary<int, List<NodePointLayer>> oneRange = new Dictionary<int, List<NodePointLayer>>(); foreach (int layer1 in Params.UsedLayers) oneRange.Add(layer1, new List<NodePointLayer>()); foreach (PairInt cnt in inCnt.GetArroundPoints(wide)) { foreach (int layer1 in Params.UsedLayers) oneRange[layer1].Add(GetPointLayer(cnt, layer1)); } foreach (int layer1 in Params.UsedLayers) { oneRange[layer1].Add(GetPointLayer(inCnt, layer1)); } List<BestPointSet> bestSet = new List<BestPointSet>(); foreach (int layer1 in Params.UsedLayers) { List<NodePointLayer> allArround = new List<NodePointLayer>(); allArround.AddRange(oneRange[layer1]); foreach(int layer2 in Params.LayersRange[layer1]) { allArround.AddRange(oneRange[layer2]); } bestSet.Add(new BestPointSet(conflictManager.GetBest(allArround), layer1, false)); if (Params.UsedLayers.Count < 3) break; } foreach (int layer1 in Params.UsedLayers) { bestSet.Add(new BestPointSet(conflictManager.GetBest(oneRange[layer1]), layer1, true)); NodePoint ndp = GetPoint(inCnt, layer1); if ( ndp.isSource ) { NodePoint ndPoint = DefineSourcePoint(inCnt, layer1); if (ndPoint.name != ndp.name) bestSet.Add(new BestPointSet(new NodePointLayer(ndPoint, layer1), layer1, true)); //oneRange[layer1].Add(new NodePointLayer(ndp, nameSource)); } /*if ( ndp.isSource ) { string nameSource = DefineSourceName(inCnt, layer1); if (nameSource != ndp.name) bestSet.Add(new BestPointSet(new NodePointLayer(ndp, layer1, nameSource), layer1, true)); //oneRange[layer1].Add(new NodePointLayer(ndp, nameSource)); }*/ } return bestSet; }
private ContactSimple GetAnyNotDiffusion(PairInt inCnt) { if (GetPoint(inCnt, Layers.siliconTrace).name != Material.diffusionName) return new ContactSimple(inCnt, Layers.siliconTrace); foreach (PairInt curPoint in inCnt.GetArroundPoints(wide)) if (GetPoint(curPoint, Layers.siliconTrace).name != Material.diffusionName) return new ContactSimple(inCnt, Layers.siliconTrace); return new ContactSimple(inCnt, Layers.siliconTrace); }