Esempio n. 1
0
        public static void Create()
        {
            KiCad.PCB pcb = new KiCad.PCB();

            var VCC = pcb.Nets.AddNet(1, "VCC");
            var GND = pcb.Nets.AddNet(2, "GND");

            var ic    = pcb.Components.AddComponent("Package_DIP", "DIP-8_W7.62mm", "IC555");
            var r1    = pcb.Components.AddComponent("Resistor_THT", "R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal", "R1");
            var r2    = pcb.Components.AddComponent("Resistor_THT", "R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal", "R2");
            var r3    = pcb.Components.AddComponent("Resistor_THT", "R_Axial_DIN0204_L3.6mm_D1.6mm_P7.62mm_Horizontal", "R3");
            var c1    = pcb.Components.AddComponent("Capacitor_THT", "CP_Radial_D5.0mm_P2.50mm", "C1");
            var c2    = pcb.Components.AddComponent("Capacitor_THT", "C_Disc_D3.0mm_W1.6mm_P2.50mm", "C2");
            var led   = pcb.Components.AddComponent("LED_THT", "LED_D5.0mm", "LED1");
            var power = pcb.Components.AddComponent("Connector_PinHeader_2.54mm", "PinHeader_1x02_P2.54mm_Horizontal", "PWR");

            PointF start = new PointF(corner_r, 0);

            pcb.Edge.AddLine(start, new PointF(size.Width - corner_r, 0));
            pcb.Edge.ContinueArc(3, -90);
            pcb.Edge.ContinueLine(new PointF(size.Width, size.Height - corner_r));
            pcb.Edge.ContinueArc(3, -90);
            pcb.Edge.ContinueLine(new PointF(corner_r, size.Height));
            pcb.Edge.ContinueArc(3, -90);
            pcb.Edge.ContinueLine(new PointF(0, corner_r));
            pcb.Edge.ContinueArc(3, -90);
            pcb.Edge.ContinueLine(start);

            ic.Location    = new PointF(6, 12);
            r1.Location    = new PointF(16.8f, 14.5f);
            r1.Angle       = 90;
            r2.Location    = new PointF(16.8f, 24.5f);
            r2.Angle       = 90;
            c1.Angle       = 180;
            c1.Location    = new PointF(13.5f, 24.5f);
            c2.Location    = new PointF(5.5f, 22.86f);
            r3.Angle       = 90;
            r3.Location    = new PointF(2, 16.86f);
            led.Angle      = 180;
            led.Location   = new PointF(8.3f, 5.5f);
            power.Angle    = 270;
            power.Location = new PointF(8, 26);

            ic.Pads[4].Net = ic.Pads[8].Net = r1.Pads[2].Net = power.Pads[1].Net = VCC;
            ic.Pads[1].Net = led.Pads[1].Net = c1.Pads[2].Net = c2.Pads[1].Net = power.Pads[2].Net = GND;

            pcb.Traces.SetTraceStart(ic.Pads[3]);
            pcb.Traces.ContinueTrace(r3.Pads[1]);

            pcb.Traces.SetTraceStart(r3.Pads[2]);
            pcb.Traces.ContinueTrace(led.Pads[2]);

            pcb.Traces.SetTraceStart(ic.Pads[7]);
            pcb.Traces.ContinueTrace(r1.Pads[1]);
            pcb.Traces.ContinueTrace(r2.Pads[2]);

            pcb.Traces.SetTraceStart(c1.Pads[1]);
            pcb.Traces.ContinueTrace(r2.Pads[1]);
            pcb.Traces.ContinueTrace(0, -4);
            pcb.Traces.ContinueTrace(ic.Pads[6]);
            pcb.Traces.ContinueTrace(ic.Pads[2]);

            pcb.Traces.SetTraceStart(ic.Pads[5]);
            pcb.Traces.ContinueTrace(c2.Pads[2]);

            var zone_vcc = pcb.Zones.AddZone(VCC, true, pcb.Bounds);
            var zone_gnd = pcb.Zones.AddZone(GND, false, pcb.Bounds);

            pcb.FSilk.AddText("+", power.Pads[1].Location + new SizeF(3, 2.5f));
            pcb.FSilk.AddText("-", power.Pads[2].Location + new SizeF(-3, 2.5f));

            pcb.MoveAll(new SizeF(100, 100));
            File.WriteAllText("Blinky555.kicad_pcb", pcb.ToString());
        }
Esempio n. 2
0
        public static void Create()
        {
            KiCad.PCB pcb = new KiCad.PCB();
            var       GND = pcb.Nets.AddNet(1, "GND");
            var       GCC = pcb.Nets.AddNet(2, "VCC");

            var center = new PointF(0, 0);

            pcb.Edge.AddArc(center, new PointF(-out_r, 0), 180);
            pcb.Edge.AddArc(center, new PointF(-in_r, 0), 180);
            pcb.Edge.AddLine(in_r, 0, out_r, 0);
            pcb.Edge.AddLine(-in_r, 0, -out_r, 0);

            int   slices   = (int)Math.Floor((out_r - in_r - 2) / 5);
            float interval = (out_r - in_r - 2) / slices;

            for (float distance = in_r + 1; distance < out_r; distance += interval)
            {
                pcb.FSilk.AddArc(center, center + new SizeF(-distance, 0), 180);
            }
            int led_counter = 0;

            List <KiCad.Components.Component> firsts = new List <KiCad.Components.Component>();

            for (float distance = in_r + 1 + interval / 2; distance < out_r; distance += interval)
            {
                bool first = true;
                for (float angle = 12; angle < 170; angle += (const_angle ? d_angle : (d_distance * 360f) / (2f * (float)Math.PI * distance)))
                {
                    var led = pcb.Components.AddComponent("LED_THT", "LED_D5.0mm", "LED" + (++led_counter).ToString(), KiCad.Utils.PointOnCircle(center, angle, distance - 1.27), angle);
                    led.Pads[2].Net = GND;
                    if (first)
                    {
                        pcb.Traces.SetTraceStart(led.Pads[1], 0.3);
                        firsts.Add(led);
                        first = false;
                    }
                    else
                    {
                        pcb.Traces.ContinueTraceWithArcToAngle(center, KiCad.Utils.AngleOf(center, led.Pads[1].Location));
                    }
                }
            }

            var power = pcb.Components.AddComponent("Connector_PinHeader_2.54mm", "PinHeader_1x" + (firsts.Count + 1).ToString().PadLeft(2, '0') + "_P2.54mm_Horizontal", "PWR");

            power.Location = new PointF((float)((out_r + in_r) / 2 + firsts.Count * 2.54 / 2), -2);
            power.Angle    = 270;
            for (int i = 0; i < firsts.Count; i++)
            {
                pcb.Traces.DrawTrace(firsts[i].Pads[1], power.Pads[firsts.Count + 1 - i], 0.3);
            }

            var zone = pcb.Zones.AddZone(GND, false);

            zone.Points.Add(new PointF(-out_r, 0));
            zone.Points.Add(new PointF(-out_r, -out_r));
            zone.Points.Add(new PointF(out_r, -out_r));
            zone.Points.Add(new PointF(out_r, 0));


            pcb.MoveAll(new SizeF(100 + out_r, 100 + out_r));
            File.WriteAllText("rainbow.kicad_pcb", pcb.ToString());
        }