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); } } }
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); } }
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; } } }