public Value GetValueAt(ILayoutAccess layout, ISimulationAccess sim, Location loc) { layout.CheckReadAccess(); sim.CheckReadAccess(); LayoutNode sup = layout.FindNode(loc); if (nodeMap.ContainsKey(sup)) { return(sim.Get(nodeMap[sup])); } else { return(Value.X); } }
private void Configure(ILayoutAccess layout) { activated = true; Transaction xn = new Transaction(); ISimulationAccess sim = xn.RequestWriteAccess(simModel); if (layout == null) { layout = xn.RequestReadAccess(this.LayoutModel); } using (xn.Start()) { foreach (LayoutNode node in layout.Nodes) { if (!nodeMap.ContainsKey(node)) { nodeMap[node] = new Node(); } } foreach (Component comp in layout.Components) { if (!instanceMap.ContainsKey(comp)) { Instance instance = comp.CreateInstance(); instanceMap[comp] = instance; sim.AddInstance(instance); } } if (Debug) { Console.WriteLine("Circuit edited"); } foreach (Component comp in layout.Components) { Location compLoc = comp.GetLocation(layout); String cstr = null; Instance instance = instanceMap[comp]; IEnumerator <ConnectionPoint> conns = comp.Connections.GetEnumerator(); IEnumerator <Port> ports = instance.Ports.GetEnumerator(); int i = -1; while (conns.MoveNext() && ports.MoveNext()) { i++; ConnectionPoint conn = conns.Current; Port port = ports.Current; Location connLoc = compLoc.Translate(conn.Dx, conn.Dy); if (Debug) { if (i == 0) { cstr = String.Format("{0}[{1}]", comp.GetType().Name, compLoc.ToString()); } else { cstr = String.Format("{0," + cstr.Length + "}", ""); } Console.WriteLine(" {0}.{1}: {2} [{3}]", cstr, i, layout.FindNode(connLoc), connLoc); } LinkPortTo(sim, port, nodeMap[layout.FindNode(connLoc)]); } } } }