public void SetStartLine(ContactSimple cnt1, ContactSimple cnt2, string inName, int inPriority, int inIdx) { if (cnt1.layer == Layers.siliconTrace) SetLine(new LineStruct(cnt1.GetInDiffusionEdge(), cnt2.GetInDiffusionEdge()), inName, inPriority, inIdx, true); else { if (Params.IsModelBusM1InMiddle()) { if (cnt1.y > cnt2.y) { SetLine(new LineStruct(cnt1.GetInDiffusionEdge(), cnt1.GetLowerPoint(2)), inName, inPriority, inIdx, true); SetLine(new LineStruct(cnt1.GetLowerPoint(2), cnt2.GetHigherPoint(2), Layers.metal2Trace), inName, inPriority, inIdx, true); SetLine(new LineStruct(cnt2.GetHigherPoint(2), cnt1.GetInDiffusionEdge()), inName, inPriority, inIdx, true); } else { SetLine(new LineStruct(cnt2.GetInDiffusionEdge(), cnt2.GetLowerPoint(2)), inName, inPriority, inIdx, true); SetLine(new LineStruct(cnt2.GetLowerPoint(2), cnt1.GetHigherPoint(2), Layers.metal2Trace), inName, inPriority, inIdx, true); SetLine(new LineStruct(cnt1.GetHigherPoint(2), cnt1.GetInDiffusionEdge()), inName, inPriority, inIdx, true); } } else { SetLine(new LineStruct(cnt1.GetInDiffusionEdge(), cnt2.GetInDiffusionEdge()), inName, inPriority, inIdx, true); } } }
/*public List<ContactSimple> GetSourceContacts(ContactSimple inCnt, string inName) { int coordY = Params.lineN; if ((inCnt.y - Params.lineP) <= 2) coordY = Params.lineP; List<Contact> connectedCnt = new List<Contact>(); if (inCnt.isInOut()) { connectedCnt.Add(new Contact(inCnt)); return connectedCnt; } connectedCnt.Add(new Contact(inCnt.x, coordY + 1, inCnt.typePoint)); connectedCnt.Add(new Contact(inCnt.x, coordY - 1, inCnt.typePoint)); if (diffusionExeption.FindIndex(el => el == inName) >= 0) { connectedCnt.Add(new Contact(inCnt.x, coordY + 3, inCnt.typePoint)); connectedCnt.Add(new Contact(inCnt.x, coordY - 3, inCnt.typePoint)); } return connectedCnt; }*/ private bool IsOnlyConnectionM1Si(ContactSimple inCnt) { if (GetPoint(inCnt, Layers.contactTrace).name == Material.diffusionName) return false; int layOppos = Params.LayersRange[inCnt.layer][0]; if (layOppos == inCnt.layer) layOppos = Params.LayersRange[inCnt.layer][1]; if (inCnt.y < (Params.topEdge - 1) && GetPoint(inCnt.GetHigherPoint(0), Layers.contactTrace).name == Material.diffusionName) { if ( (GetPoint(inCnt).name == GetPoint(inCnt.GetHigherPoint(0)).name) && (GetPoint(inCnt).name == GetPoint(inCnt.GetHigherPoint(0), layOppos).name) && (GetPoint(inCnt).name == GetPoint( inCnt.GetHigherPoint(5) ).name) && (GetPoint(inCnt).name == GetPoint( inCnt.GetHigherPoint(5), layOppos).name) ) return false; return true; } if (inCnt.y > 0 && GetPoint(inCnt.GetLowerPoint(0), Layers.contactTrace).name == Material.diffusionName) { if ( (GetPoint(inCnt).name == GetPoint(inCnt.GetLowerPoint(0)).name) && (GetPoint(inCnt).name == GetPoint(inCnt.GetLowerPoint(0), layOppos).name) && (GetPoint(inCnt).name == GetPoint( inCnt.GetLowerPoint(5) ).name) && (GetPoint(inCnt).name == GetPoint( inCnt.GetLowerPoint(5), layOppos).name) ) return false; return true; } return false; }