private void RenderTextFramePrimitive(Graphics g, TextFrameRecord textFrame) { var penWidth = ScaleLineWidth(textFrame.LineWidth); var rect = ScreenFromWorld(textFrame.CalculateBounds()); if (textFrame.IsSolid) { using (var brush = new SolidBrush(textFrame.AreaColor)) { DrawingUtils.FillRectangle(g, brush, rect); } } if (textFrame.ShowBorder) { using (var pen = CreatePen(textFrame.Color, penWidth, lineJoin: LineJoin.Miter)) { DrawingUtils.DrawRectangle(g, pen, rect); } // reduce text area according to the penWidth rect.Inflate(-penWidth, -penWidth); } using (var brush = new SolidBrush(textFrame.TextColor)) using (var font = CreateFont(textFrame.FontId)) { DrawingUtils.DrawString(g, textFrame.Text, font, brush, rect, StringAlignment.Near, StringAlignment.Near, textFrame.ClipToRect, textFrame.WordWrap); } }
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 RenderRectanglePrimitive(Graphics g, RectangleRecord rectangle) { var rect = ScreenFromWorld(rectangle.CalculateBounds()); if (rectangle.IsSolid) { using (var brush = new SolidBrush(rectangle.AreaColor)) { DrawingUtils.FillRectangle(g, brush, rect); } } var penWidth = ScaleLineWidth(rectangle.LineWidth); using (var pen = CreatePen(rectangle.Color, penWidth, lineJoin: LineJoin.Miter)) { DrawingUtils.DrawRectangle(g, pen, rect); } }
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; } } }