Example #1
0
        //, 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;
        }
Example #2
0
 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);
 }