private void DrawSwitch(SvgDrawing drawing, bool t1, bool t2, bool swapped)
            {
                // Wires
                drawing.Path(b => b.MoveTo(-8, 0).LineTo(-6, 0)
                             .MoveTo(6, 4).LineTo(8, 4)
                             .MoveTo(6, -4).LineTo(8, -4), new("wire"));

                // Terminals
                drawing.Circle(new(-5, 0), 1);
                drawing.Circle(new(5, 4), 1);
                drawing.Circle(new(5, -4), 1);

                // Switch position
                if (!t1 && !t2)
                {
                    drawing.Line(new(-4, 0), new(5, 0));
                }
                else if (t1)
                {
                    drawing.Line(new(-4, 0), new(4, swapped ? -4 : 4));
                }
                else
                {
                    drawing.Line(new(-4, 0), new(4, swapped ? 4 : -4));
                }

                // Label
                if (!string.IsNullOrWhiteSpace(Label))
                {
                    drawing.Text(Label, new(-6, 6), new(-1, 1));
                }
            }
예제 #2
0
            private void DrawPackaged(SvgDrawing drawing)
            {
                // Wires
                if (Pins[0].Connections == 0)
                {
                    drawing.Line(new(-5, 0), new(-8, 0), new("wire"));
                }
                if (Pins[1].Connections == 0)
                {
                    drawing.Line(new(0, 6), new(0, 8), new("wire"));
                }
                if (Pins[3].Connections == 0)
                {
                    drawing.Line(new(5, 0), new(8, 0), new("wire"));
                }

                // Gate
                drawing.Path(b => b.MoveTo(-6, 6).LineTo(6, 6)
                             .MoveTo(-7, 4).LineTo(-4, 4)
                             .MoveTo(-2, 4).LineTo(2, 4)
                             .MoveTo(4, 4).LineTo(7, 4), new("gate"));

                // Drain, source and gate
                drawing.Line(new(-5, 0), new(-5, 4), new("source"));
                drawing.Line(new(5, 0), new(5, 4), new("drain"));
                drawing.Polyline(new Vector2[] { new(-5, 0), new(0, 0), new(0, 4) }, new("bulk") { EndMarker = Drawing.PathOptions.MarkerTypes.Arrow });
예제 #3
0
            private void Draw(SvgDrawing drawing, bool straight)
            {
                drawing.Line(new(-Crossings - 2, 0), new(Crossings + 2, 0), new("wire"));
                if (Crossings > 0)
                {
                    drawing.Path(b =>
                    {
                        for (int i = 0; i < Crossings; i++)
                        {
                            double x = i * 2 - Crossings + 1;
                            if (straight)
                            {
                                b.MoveTo(x, 3).Line(0, -6);
                            }
                            else
                            {
                                b.MoveTo(x - 1.5, 3).Line(3, -6);
                            }
                        }
                    });
                }

                // The label
                if (!string.IsNullOrWhiteSpace(Label))
                {
                    drawing.Text(Label, new(0, -4), new(0, -1));
                }
            }
예제 #4
0
            private void DrawSource(SvgDrawing drawing)
            {
                // Wires
                drawing.Path(b => b.MoveTo(-8, 0).LineTo(-6, 0).MoveTo(6, 0).LineTo(8, 0), new("wire"));

                // The circle with the arrow
                drawing.Circle(new(0, 0), 6);
                drawing.Line(new(-3, 0), new(3, 0), new("arrow") { EndMarker = Drawing.PathOptions.MarkerTypes.Arrow });
예제 #5
0
            private void DrawGround(SvgDrawing drawing)
            {
                // Wire
                drawing.Line(new(0, 0), new(0, 3), new("wire"));

                // Ground
                drawing.Path(b => b.MoveTo(-5, 3).LineTo(5, 3).MoveTo(-3, 5).LineTo(3, 5).MoveTo(-1, 7).LineTo(1, 7));
            }
예제 #6
0
            /// <inheritdoc/>
            private void DrawSource(SvgDrawing drawing)
            {
                // Wires
                drawing.Path(b => b.MoveTo(-8, 0).LineTo(-6, 0).MoveTo(6, 0).LineTo(8, 0), new("wire"));

                // Diamond
                drawing.Polygon(new Vector2[]
                {
                    new(-6, 0), new(0, 6), new(6, 0), new(0, -6)
                });
예제 #7
0
            private void DrawEarth(SvgDrawing drawing)
            {
                // Wire
                drawing.Line(new(0, 0), new(0, 3), new("wire"));

                // Ground segments
                drawing.Path(b => b.MoveTo(-5, 3).LineTo(5, 3)
                             .MoveTo(-5, 3).Line(-2, 4)
                             .MoveTo(0, 3).Line(-2, 4)
                             .MoveTo(5, 3).Line(-2, 4));
            }
예제 #8
0
            private void DrawJack(SvgDrawing drawing)
            {
                drawing.Path(b => b.MoveTo(0, 2).LineTo(0, 6).MoveTo(4, 0).LineTo(6, 0), new("wire"));
                drawing.Circle(new(), 1.5);
                drawing.Circle(new(), 4);
                drawing.Circle(new(4, 0), 1, new("dot"));

                if (!string.IsNullOrWhiteSpace(Label))
                {
                    drawing.Text(Label, new(-6, 0), new(-1, 0));
                }
            }
예제 #9
0
            private void DrawCrystal(SvgDrawing drawing)
            {
                // Wires
                if (Pins[0].Connections == 0)
                {
                    drawing.Line(new(-4.5, 0), new(-6, 0), new("wire"));
                }
                if (Pins[1].Connections == 0)
                {
                    drawing.Line(new(4.5, 0), new(6, 0), new("wire"));
                }

                // The crystal
                drawing.Rectangle(5, 10, options: new("body"));
                drawing.Path(b => b.MoveTo(-4.5, -3.5).Line(0, 7).MoveTo(4.5, -3.5).Line(0, 7));

                // Label
                if (!string.IsNullOrWhiteSpace(Label))
                {
                    drawing.Text(Label, new(0, -6), new(0, -1));
                }
            }
예제 #10
0
            private void DrawRegular(SvgDrawing drawing)
            {
                // Wires
                if (Pins[0].Connections == 0)
                {
                    drawing.Line(new(-4, 0), new(-8, 0), new("wire"));
                }
                if (Pins[1].Connections == 0)
                {
                    drawing.Line(new(0, 6), new(0, 8), new("wire"));
                }
                if (Pins[3].Connections == 0)
                {
                    drawing.Line(new(4, 0), new(8, 0), new("wire"));
                }

                // Gate
                drawing.Path(b => b.MoveTo(-6, 4).LineTo(6, 4).MoveTo(-6, 6).LineTo(6, 6), new("gate"));

                // Source and drain
                drawing.Line(new(-4, 0), new(-4, 4), new("source"));
                drawing.Line(new(4, 0), new(4, 4), new("drain"));

                // Label
                if (!string.IsNullOrWhiteSpace(Label))
                {
                    if (Pins["b"].Connections > 0)
                    {
                        drawing.Text(Label, new(-3, -3), new(-1, -1));
                    }
                    else
                    {
                        drawing.Text(Label, new(0, -3), new(0, -1));
                    }
                }
            }
예제 #11
0
 private void DrawChildProtection(SvgDrawing drawing)
 {
     drawing.Path(b => b.MoveTo(4, -6).LineTo(4, -4).MoveTo(4, 4).LineTo(4, 6), new("child"));
 }
예제 #12
0
 private void DrawConnector(SvgDrawing drawing)
 {
     drawing.Path(b => b.MoveTo(-6, 0).LineTo(-4, 0).MoveTo(2, 0).LineTo(6, 0), new("wire"));
     drawing.Circle(new(), 1.5);
     drawing.Arc(new(), Math.PI / 4, -Math.PI / 4, 4, null, 3);
 }
예제 #13
0
 private static void DrawUnderground(SvgDrawing drawing)
 {
     drawing.Path(b => b.MoveTo(-4, -5).Line(8, 0).MoveTo(-2.5, -3.5).Line(5, 0).MoveTo(-1, -2).Line(2, 0));
 }
예제 #14
0
 private void DrawSigns(SvgDrawing drawing)
 {
     drawing.Path(b => b.MoveTo(-7, -4).LineTo(-5, -4).MoveTo(-6, -3).LineTo(-6, -5), new("plus"));
     drawing.Line(new(5, -4), new(7, -4), new("minus"));
 }