Example #1
0
        private void RenderPadPrimitive(Graphics g, PcbPad pad)
        {
            var holeCenter = ScreenFromWorld(pad.Location.X, pad.Location.Y);

            g.TranslateTransform(holeCenter.X, holeCenter.Y);
            g.RotateTransform(-(float)pad.Rotation);

            DrawPad(g, pad, PcbPadPart.BottomSolder);
            DrawPad(g, pad, PcbPadPart.TopSolder);
            DrawPad(g, pad, PcbPadPart.BottomLayer);
            DrawPad(g, pad, PcbPadPart.TopLayer);

            if (pad.HasHole)
            {
                g.RotateTransform(-(float)pad.HoleRotation);
                using (var brush = new SolidBrush(Layer.GetLayerColor("PadHoleLayer")))
                {
                    var rect = ScaleRect(pad.CalculatePartRect(PcbPadPart.Hole, false));
                    switch (pad.HoleShape)
                    {
                    case PcbPadHoleShape.Round:
                        g.FillEllipse(brush, rect);
                        break;

                    case PcbPadHoleShape.Square:
                        DrawingUtils.FillRectangle(g, brush, rect);
                        break;

                    case PcbPadHoleShape.Slot:
                        DrawingUtils.FillRoundedRect(g, brush, rect, 100);
                        break;

                    default:
                        return;
                    }
                }
            }

            g.ResetTransform();

            const float MIN_FONT_DESCRIPTOR = 7;
            var         fontSize            = Math.Min(29f, ScaleCoord(pad.HasHole ? pad.HoleSize : pad.SizeTop.Y) * 0.5f);

            if (fontSize > MIN_FONT_DESCRIPTOR)
            {
                var fontColor = pad.HasHole ? Color.FromArgb(255, 227, 143) : Color.FromArgb(255, 181, 181);
                using (var brush = new SolidBrush(fontColor)) // TODO: add constant
                    using (var font = new Font("Arial", fontSize))
                    {
                        DrawingUtils.DrawString(g, pad.Designator, font, brush, holeCenter.X, holeCenter.Y,
                                                StringAlignmentKind.Tight, StringAlignment.Center, StringAlignment.Center);
                    }
            }
        }
Example #2
0
        private void RenderRoundedRectPrimitive(Graphics g, RoundedRectangleRecord roundedRect)
        {
            var penWidth = ScaleLineWidth(roundedRect.LineWidth);

            using (var brush = new SolidBrush(roundedRect.AreaColor))
                using (var pen = CreatePen(roundedRect.Color, penWidth))
                {
                    var rect    = ScreenFromWorld(roundedRect.CalculateBounds());
                    var radiusX = ScaleCoord(roundedRect.CornerXRadius);
                    var radiusY = ScaleCoord(roundedRect.CornerYRadius);
                    DrawingUtils.FillRoundedRect(g, brush, rect, radiusX, radiusY);
                    DrawingUtils.DrawRoundedRect(g, pen, rect, radiusX, radiusY);
                }
        }
Example #3
0
        private void DrawPad(Graphics g, PcbPad pad, PcbPadPart padPart)
        {
            PcbPadShape shape;
            int         cornerRadiusPercent;
            Color       color;

            // setup parameters according to the current padPart
            switch (padPart)
            {
            case PcbPadPart.TopLayer:
                shape = pad.ShapeTop;
                cornerRadiusPercent = pad.CornerRadiusTop;
                color = LayerMetadata.GetColor(pad.Layer);
                break;

            case PcbPadPart.BottomLayer:
                shape = pad.ShapeBottom;
                cornerRadiusPercent = pad.CornerRadiusBot;
                color = LayerMetadata.GetColor(pad.Layer);
                break;

            case PcbPadPart.TopSolder:
                shape = pad.ShapeTop;
                cornerRadiusPercent = pad.CornerRadiusTop;
                color = LayerMetadata.GetColor("TopSolder");
                break;

            case PcbPadPart.BottomSolder:
                shape = pad.ShapeBottom;
                cornerRadiusPercent = pad.CornerRadiusBot;
                color = LayerMetadata.GetColor("BottomSolder");
                break;

            default:
                return;
            }

            var rect = ScaleRect(pad.CalculatePartRect(padPart, false));

            using (var brush = new SolidBrush(color))
            {
                switch (shape)
                {
                case PcbPadShape.Round:
                    DrawingUtils.FillRoundedRect(g, brush, rect, 100);
                    break;

                case PcbPadShape.Rectangular:
                    DrawingUtils.FillRectangle(g, brush, rect);
                    break;

                case PcbPadShape.Octogonal:
                    DrawingUtils.FillOctagon(g, brush, rect);
                    break;

                case PcbPadShape.RoundedRectangle:
                    cornerRadiusPercent = cornerRadiusPercent > 0 ? cornerRadiusPercent : 100;
                    DrawingUtils.FillRoundedRect(g, brush, rect, cornerRadiusPercent);
                    break;

                default:
                    return;
                }
            }
        }