Пример #1
0
 public DiodeElm(Point pos) : base(pos)
 {
     mModelName    = lastModelName;
     mDiode        = new Diode(mCir);
     ReferenceName = "D";
     setup();
 }
Пример #2
0
        public DiodeElm(Point p1, Point p2, int f, StringTokenizer st) : base(p1, p2, f)
        {
            const double defaultdrop = 0.805904783;

            mDiode = new Diode(mCir);
            double fwdrop   = defaultdrop;
            double zvoltage = 0;

            try {
                ReferenceName = st.nextToken();
            } catch { }
            if (0 != (f & FLAG_MODEL))
            {
                try {
                    mModelName = CustomLogicModel.unescape(st.nextToken());
                } catch { }
            }
            else
            {
                if (0 != (f & FLAG_FWDROP))
                {
                    try {
                        fwdrop = st.nextTokenDouble();
                    } catch { }
                }
                mModel     = DiodeModel.GetModelWithParameters(fwdrop, zvoltage);
                mModelName = mModel.Name;
            }
            setup();
        }
Пример #3
0
        public void ChangeDiodeMode()
        {
            Vector2R pos             = UserInterface.WorldMousePos;
            Node     found           = null;
            float    shortedDistance = Int32.MaxValue;

            for (int i = room.MasterGroup.fullSet.Count - 1; i >= 0; i--)
            {
                Node n = (Node)room.MasterGroup.fullSet.ElementAt(i);
                if (!n.HasComp <Diode>())
                {
                    continue;
                }
                // find node that has been clicked, starting from the most recently placed nodes
                float distsquared = Vector2R.DistanceSquared(n.body.pos, pos);
                //if (distsquared < n.body.radius * n.body.radius)
                //{
                if (distsquared < shortedDistance)
                {
                    found           = n;
                    shortedDistance = distsquared;
                }
                //}
            }
            if (found != null)
            {
                Diode d = found.Comp <Diode>();
                //int mode = (int)d.mode;
                //int countModes = Enum.GetValues(typeof(Diode.Mode)).Length;
                //d.mode = (Diode.Mode)((mode + 1) % countModes);
                found.body.orient += GMath.PI;
            }
        }
Пример #4
0
 /* set up body diodes */
 void setupDiodes()
 {
     /* diode from node 1 to body terminal */
     mDiodeB1 = new Diode(mCir);
     mDiodeB1.SetupForDefaultModel();
     /* diode from node 2 to body terminal */
     mDiodeB2 = new Diode(mCir);
     mDiodeB2.SetupForDefaultModel();
 }
Пример #5
0
        /// <summary>
        /// Create a diode with a model
        /// </summary>
        /// <param name="name">Diode name</param>
        /// <param name="anode">Anode</param>
        /// <param name="cathode">Cathode</param>
        /// <param name="model">Model</param>
        /// <param name="modelparams">Model parameters</param>
        /// <returns></returns>
        Diode CreateDiode(string name, string anode, string cathode, string model, string modelparams)
        {
            var d  = new Diode(name);
            var dm = new DiodeModel(model);

            ApplyParameters(dm, modelparams);
            d.SetModel(dm);
            d.Connect(anode, cathode);
            return(d);
        }
Пример #6
0
        /// <summary>
        /// Create a diode with a model
        /// </summary>
        /// <param name="name">Diode name</param>
        /// <param name="anode">Anode</param>
        /// <param name="cathode">Cathode</param>
        /// <param name="model">Model</param>
        /// <param name="modelparams">Model parameters</param>
        /// <returns></returns>
        Diode CreateDiode(Identifier name, Identifier anode, Identifier cathode, Identifier model, string modelparams)
        {
            Diode      d  = new Diode(name);
            DiodeModel dm = new DiodeModel(model);

            ApplyParameters(dm, modelparams);
            d.SetModel(dm);
            d.Connect(anode, cathode);
            return(d);
        }
Пример #7
0
        private Diode CreateDiode(string name, string anode, string cathode, string model)
        {
            var d = new Diode(name)
            {
                Model = model
            };

            d.Connect(anode, cathode);
            return(d);
        }
Пример #8
0
        public override void Draw(MicroWorld.Graphics.Renderer renderer)
        {
            if (!Visible)
            {
                return;
            }
            if (texture0cw == null)
            {
                return;
            }
            if (!CanDraw())
            {
                return;
            }
            Diode d = parent as Diode;

            switch (parent.ComponentRotation)
            {
            case Component.Rotation.cw0:
                renderer.Draw(texture0cw,
                              new Rectangle((int)Position.X, (int)Position.Y,
                                            (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null,
                              Color.White);
                break;

            case Component.Rotation.cw90:
                renderer.Draw(texture90cw,
                              new Rectangle((int)Position.X, (int)Position.Y,
                                            (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null,
                              Color.White);
                break;

            case Component.Rotation.cw180:
                renderer.Draw(texture180cw,
                              new Rectangle((int)Position.X, (int)Position.Y,
                                            (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null,
                              Color.White);
                break;

            case Component.Rotation.cw270:
                renderer.Draw(texture270cw,
                              new Rectangle((int)Position.X, (int)Position.Y,
                                            (int)GetSizeRotated(parent.ComponentRotation).X, (int)GetSizeRotated(parent.ComponentRotation).Y), null,
                              Color.White);
                break;

            default:
                break;
            }
        }
Пример #9
0
        public void AddTickets()
        {
            Vector2R pos             = UserInterface.WorldMousePos;
            Node     found           = null;
            float    shortedDistance = Int32.MaxValue;

            for (int i = room.MasterGroup.fullSet.Count - 1; i >= 0; i--)
            {
                Node n = (Node)room.MasterGroup.fullSet.ElementAt(i);
                if (!n.HasComp <Diode>())
                {
                    continue;
                }
                // find node that has been clicked, starting from the most recently placed nodes
                float distsquared = Vector2R.DistanceSquared(n.body.pos, pos);
                //if (distsquared < n.body.radius * n.body.radius)
                //{
                if (distsquared < shortedDistance)
                {
                    found           = n;
                    shortedDistance = distsquared;
                }
                //}
            }
            if (found != null)
            {
                Diode d = found.Comp <Diode>();

                if (!d.semaphore)
                {
                    d.semaphore  = true;
                    d.maxTickets = 1;
                }
                else
                {
                    d.maxTickets += 1;
                    d.maxTickets %= 4;
                }
            }
        }
Пример #10
0
        private Diode CreateDiode(string name, string anode, string cathode, string model)
        {
            var d = new Diode(name, anode, cathode, model);

            return(d);
        }
Пример #11
0
        public SpiceSharp.Components.Component Generate(string componentIdentifier, string originalName, string type, ParameterCollection parameters, ICircuitContext context)
        {
            if (parameters.Count < 3)
            {
                throw new System.Exception("Model expected");
            }

            Diode diode = new Diode(componentIdentifier);

            context.CreateNodes(diode, parameters);

            context.SimulationPreparations.ExecuteActionBeforeSetup((simulation) =>
            {
                context.ModelsRegistry.SetModel(
                    diode,
                    simulation,
                    parameters.Get(2),
                    $"Could not find model {parameters.Get(2)} for diode {originalName}",
                    (DiodeModel model) => diode.Model = model.Name,
                    context.Result);
            });

            // Read the rest of the parameters
            for (int i = 3; i < parameters.Count; i++)
            {
                if (parameters[i] is WordParameter w)
                {
                    if (w.Image.ToLower() == "on")
                    {
                        diode.SetParameter("off", false);
                    }
                    else if (w.Image.ToLower() == "off")
                    {
                        diode.SetParameter("off", true);
                    }
                    else
                    {
                        throw new System.Exception("Expected on/off for diode");
                    }
                }

                if (parameters[i] is AssignmentParameter asg)
                {
                    if (asg.Name.ToLower() == "ic")
                    {
                        context.SetParameter(diode, "ic", asg.Value);
                    }
                }

                if (parameters[i] is ValueParameter || parameters[i] is ExpressionParameter)
                {
                    // TODO: Fix this please it's broken ...
                    var bp = diode.ParameterSets.Get <SpiceSharp.Components.DiodeBehaviors.BaseParameters>();
                    if (!bp.Area.Given)
                    {
                        bp.Area.Value = context.Evaluator.EvaluateDouble(parameters.Get(i));
                    }
                    else
                    {
                        if (!bp.Temperature.Given)
                        {
                            bp.Temperature.Value = context.Evaluator.EvaluateDouble(parameters.Get(i));
                        }
                    }
                }
            }

            return(diode);
        }
Пример #12
0
 public DiodeInputChanged(int time, Diode diode) : base(time)
 {
     inputId   = diode.Input.Id;
     newSignal = diode.Input.Signal;
 }
Пример #13
0
        /// <summary>
        /// Generate a diode
        /// </summary>
        /// <param name="name">Name</param>
        /// <param name="parameters">Parameters</param>
        /// <param name="netlist">Netlist</param>
        /// <returns></returns>
        protected override ICircuitObject Generate(string type, CircuitIdentifier name, List <Token> parameters, Netlist netlist)
        {
            Diode dio = new Diode(name);

            dio.ReadNodes(netlist.Path, parameters);

            if (parameters.Count < 3)
            {
                throw new ParseException(parameters[1], "Model expected", false);
            }
            dio.SetModel(netlist.FindModel <DiodeModel>(parameters[2]));

            // Read the rest of the parameters
            for (int i = 3; i < parameters.Count; i++)
            {
                switch (parameters[i].kind)
                {
                case WORD:
                    switch (parameters[i].image.ToLower())
                    {
                    case "on":
                        dio.DIOoff = false;
                        break;

                    case "off":
                        dio.DIOoff = true;
                        break;

                    default:
                        throw new ParseException(parameters[i], "ON or OFF expected");
                    }
                    break;

                case ASSIGNMENT:
                    AssignmentToken at = parameters[i] as AssignmentToken;
                    if (at.Name.image.ToLower() == "ic")
                    {
                        dio.DIOinitCond = netlist.ParseDouble(at.Value);
                    }
                    else
                    {
                        throw new ParseException(parameters[i], "IC expected");
                    }
                    break;

                case VALUE:
                case EXPRESSION:
                    if (!dio.DIOarea.Given)
                    {
                        dio.DIOarea.Set(netlist.ParseDouble(parameters[i]));
                    }
                    else if (!dio.DIOtemp.Given)
                    {
                        dio.DIO_TEMP = netlist.ParseDouble(parameters[i]);
                    }
                    else
                    {
                        throw new ParseException(parameters[i], "Invalid parameter");
                    }
                    break;

                default:
                    throw new ParseException(parameters[i], "Unrecognized parameter");
                }
            }

            return(dio);
        }
Пример #14
0
 public LightChanged(int time, Diode diode, Signal newLight) : base(time)
 {
     this.diode    = diode;
     this.newLight = newLight;
 }
Пример #15
0
 public Alarm(Diode diode, Buzzer buzzer, Button button)
 {
     this.diode  = diode;
     this.buzzer = buzzer;
     this.button = button;
 }
Пример #16
0
        public static UIElement convert(TNodeUI node)
        {
            UIElement rst = null;

            switch (node.Info.CptType)
            {
            case ComponentType.Terminal:
            {
                rst = new Terminal(node.Info);
                break;
            }

            case ComponentType.Switch:
            {
                rst = new Switch(node.Info);
                break;
            }

            case ComponentType.Resistance:
            {
                rst = new Resistance(node.Info);
                break;
            }

            case ComponentType.Indicator:
            {
                rst = new Indicator(node.Info);
                break;
            }

            case ComponentType.Diode:
            {
                rst = new Diode(node.Info, node.Reverse);
                break;
            }

            case ComponentType.ContactClose:
            case ComponentType.ContactOpen:
            {
                rst = new StandardContact(node.Info);
                break;
            }

            case ComponentType.Coil:
            {
                rst = new Coil(node.Info);
                break;
            }

            case ComponentType.Capacitance:
            {
                rst = new Capacitance(node.Info);
                break;
            }

            case ComponentType.Breaker:
            {
                rst = new Breaker(node.Info);
                break;
            }

            case ComponentType.Blank:
            {
                rst = new BlankLine(node.Info);
                break;
            }
            }
            return(rst);
        }