Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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)]);
                    }
                }
            }
        }