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 RenderPinPrimitive(Graphics g, PinRecord pin) { var location = ScreenFromWorld(pin.Location.X, pin.Location.Y); g.TranslateTransform(location.X, location.Y); var direction = 1.0f; var displayNameHorizontalAlignment = StringAlignment.Far; var designatorHorizontalAlignment = StringAlignment.Near; var penWidth = ScaleLineWidth(LineWidth.Small); using (var pen = CreatePen(pin.Color, penWidth, LineCap.Flat)) { if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.Rotated)) { g.RotateTransform(-90); } if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.Flipped)) { direction = -1.0f; displayNameHorizontalAlignment = StringAlignment.Near; designatorHorizontalAlignment = StringAlignment.Far; } var length = ScaleCoord(pin.PinLength) * direction; g.DrawLine(pen, -1.0f, 0.0f, length, 0.0f); } using (var brush = new SolidBrush(pin.Color)) using (var font = CreateFont("Times New Roman", 10f, FontStyle.Regular)) { if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.DisplayNameVisible)) { var x = ScalePixelLength(-5.0f) * direction; var displayName = pin.Name.Replace(@"\", ""); DrawingUtils.DrawString(g, displayName, font, brush, x, ScalePixelLength(0.5), StringAlignmentKind.Default, displayNameHorizontalAlignment, StringAlignment.Center); using (var pen = CreatePen(pin.Color, ScaleLineWidth(LineWidth.Small))) { DrawOverline(g, pin.Name, font, pen, x, ScalePixelLength(0.5), StringAlignmentKind.Default, displayNameHorizontalAlignment, StringAlignment.Center); } } if (pin.PinConglomerate.HasFlag(PinConglomerateFlags.DesignatorVisible)) { DrawingUtils.DrawString(g, pin.Designator, font, brush, ScalePixelLength(8.0f) * direction, 0, StringAlignmentKind.Extent, designatorHorizontalAlignment, StringAlignment.Far); } } }
private void RenderTextPrimitive(Graphics g, PcbText text) { var location = ScreenFromWorld(text.Corner1.X, text.Corner1.Y); var color = LayerMetadata.GetColor(text.Layer); var height = ScaleCoord(text.Height); var fontStyle = (text.FontItalic ? FontStyle.Italic : FontStyle.Regular) | (text.FontBold ? FontStyle.Bold : FontStyle.Regular); float fontWidth; float fontSize; if (text.TextKind == PcbTextKind.Stroke) { fontWidth = ScaleCoord(text.Width); fontSize = DrawingUtils.CalculateFontSizeForBaseline(g, StrokeFontFamily, fontStyle, height + fontWidth); } else { fontWidth = 0; fontSize = DrawingUtils.CalculateFontSizeForHeight(g, StrokeFontFamily, fontStyle, height); } g.TranslateTransform(location.X, location.Y); g.RotateTransform(-(float)text.Rotation); using (var brush = new SolidBrush(color)) using (var fontFamily = new FontFamily(text.FontName)) using (var font = new Font(text.TextKind == PcbTextKind.Stroke ? StrokeFontFamily : fontFamily, fontSize, fontStyle)) { var size = g.MeasureString(text.Text, font); if (size.Height < 5) { using (var pen = new Pen(brush)) { var rect = ScaleRect(text.CalculateRect(false)); g.DrawRectangle(pen, rect.Left, rect.Top, rect.Width, rect.Height); } } else { if (text.Mirrored) { g.ScaleTransform(-1.0f, 1.0f); } DrawingUtils.DrawString(g, text.Text, font, brush, 0, fontWidth * 0.5f, StringAlignmentKind.Tight, StringAlignment.Near, StringAlignment.Far); } } g.ResetTransform(); }
private void RenderTextStringPrimitive(Graphics g, TextStringRecord textString) { if (textString.IsHidden || textString.Record != 4) { return; } var location = ScreenFromWorld(textString.Location.X, textString.Location.Y); using (var brush = new SolidBrush(textString.Color)) using (var font = CreateFont(textString.FontId)) { StringAlignment horizontalAlignment; if (textString.Justification == TextJustification.BottomLeft || textString.Justification == TextJustification.MiddleLeft || textString.Justification == TextJustification.TopLeft) { horizontalAlignment = StringAlignment.Near; } else if (textString.Justification == TextJustification.BottomCenter || textString.Justification == TextJustification.MiddleCenter || textString.Justification == TextJustification.TopCenter) { horizontalAlignment = StringAlignment.Center; } else { horizontalAlignment = StringAlignment.Far; } StringAlignment verticalAlignment; if (textString.Justification == TextJustification.BottomLeft || textString.Justification == TextJustification.BottomCenter || textString.Justification == TextJustification.BottomRight) { verticalAlignment = StringAlignment.Far; } else if (textString.Justification == TextJustification.MiddleLeft || textString.Justification == TextJustification.MiddleCenter || textString.Justification == TextJustification.MiddleRight) { verticalAlignment = StringAlignment.Center; } else { verticalAlignment = StringAlignment.Near; } g.TranslateTransform(location.X, location.Y); if (textString.Orientations.HasFlag(TextOrientations.Rotated)) { g.RotateTransform(-90); } if (textString.Orientations.HasFlag(TextOrientations.Flipped)) { horizontalAlignment = StringAlignment.Far - (int)horizontalAlignment; verticalAlignment = StringAlignment.Far - (int)verticalAlignment; } DrawingUtils.DrawString(g, textString.Text, font, brush, 0, 0, horizontalAlignment, verticalAlignment, false); } }