improve solder pads

This commit is contained in:
Bane Stojkovic
2026-08-25 22:31:34 +02:00
parent e08374fa76
commit 808528b279
3 changed files with 48 additions and 31 deletions
@@ -75,9 +75,12 @@ public abstract class AbstractMakerBoard extends AbstractTransparentComponent<Vo
public static Color METAL_LABEL_COLOR = Color.decode("#555555");
public static Color ANTENNA_COLOR = Color.decode("#DAA520");
public static Color ANTENNA_BG_COLOR = Color.decode("#1E1E1E");
public static Color PAD_COLOR = Color.decode("#DAA520");
public static Size PIN_SIZE = new Size(0.04d, SizeUnit.in);
public static Size PIN_SPACING = new Size(0.1d, SizeUnit.in);
public static Size PAD_SIZE = new Size(0.065d, SizeUnit.in);
public static Size HOLE_SIZE = new Size(0.035d, SizeUnit.in);
public static Size ANTENNA_WIDTH = new Size(15.0d, SizeUnit.mm);
public static Size ANTENNA_LENGTH = new Size(7.0d, SizeUnit.mm);
@@ -665,6 +668,49 @@ public abstract class AbstractMakerBoard extends AbstractTransparentComponent<Vo
drawingObserver.stopTrackingContinuityArea();
}
/**
* Helper to draw standard PCB through-hole solder pads (gold/copper pads with drill holes, square for Pin 1).
*
* @param g2d Graphics2D context
* @param startIndex First control point index
* @param count Number of pads to draw
* @param squarePin1 If true, the first pad (index == startIndex) is drawn as a square pad
* @param outlineMode Outline mode flag
* @param drawingObserver Observer
*/
protected void drawPcbSolderPads(Graphics2D g2d, int startIndex, int count, boolean squarePin1, boolean outlineMode, IDrawingObserver drawingObserver) {
if (outlineMode) return;
int diameter = getClosestOdd((int) Math.round(PAD_SIZE.convertToPixels()));
int holeDiameter = getClosestOdd((int) Math.round(HOLE_SIZE.convertToPixels()));
drawingObserver.startTrackingContinuityArea(true);
for (int i = startIndex; i < startIndex + count && i < controlPoints.length; i++) {
Point2D p = controlPoints[i];
if (squarePin1 && i == startIndex) {
// Pin 1 is a square solder pad
g2d.setColor(PAD_COLOR);
g2d.fill(new Rectangle2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
g2d.setColor(PAD_COLOR.darker());
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.draw(new Rectangle2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
} else {
// Round solder pads
g2d.setColor(PAD_COLOR);
g2d.fill(new Ellipse2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
g2d.setColor(PAD_COLOR.darker());
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.draw(new Ellipse2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
}
// Central drill hole
g2d.setColor(Constants.CANVAS_COLOR);
g2d.fill(new Ellipse2D.Double(p.getX() - holeDiameter / 2.0, p.getY() - holeDiameter / 2.0, holeDiameter, holeDiameter));
g2d.setColor(PAD_COLOR.darker());
g2d.draw(new Ellipse2D.Double(p.getX() - holeDiameter / 2.0, p.getY() - holeDiameter / 2.0, holeDiameter, holeDiameter));
}
drawingObserver.stopTrackingContinuityArea();
}
/**
* Helper to draw a mounting hole.
*/
@@ -268,36 +268,7 @@ public class RaspberryPiZero extends AbstractMakerBoard {
* Helper to draw GPIO solder pads (copper pads with drill holes, square for Pin 1).
*/
protected void drawSolderPads(Graphics2D g2d, boolean outlineMode, IDrawingObserver drawingObserver) {
if (outlineMode) return;
int diameter = getClosestOdd((int) Math.round(PAD_SIZE.convertToPixels()));
int holeDiameter = getClosestOdd((int) Math.round(HOLE_SIZE.convertToPixels()));
drawingObserver.startTrackingContinuityArea(true);
for (int i = 0; i < 40 && i < controlPoints.length; i++) {
Point2D p = controlPoints[i];
if (i == 0) {
// Pin 1 is a square solder pad
g2d.setColor(PAD_COLOR);
g2d.fill(new Rectangle2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
g2d.setColor(PAD_COLOR.darker());
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.draw(new Rectangle2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
} else {
// Pins 2..40 are round solder pads
g2d.setColor(PAD_COLOR);
g2d.fill(new Ellipse2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
g2d.setColor(PAD_COLOR.darker());
g2d.setStroke(ObjectCache.getInstance().fetchBasicStroke(1));
g2d.draw(new Ellipse2D.Double(p.getX() - diameter / 2.0, p.getY() - diameter / 2.0, diameter, diameter));
}
// Central drill hole
g2d.setColor(Constants.CANVAS_COLOR);
g2d.fill(new Ellipse2D.Double(p.getX() - holeDiameter / 2.0, p.getY() - holeDiameter / 2.0, holeDiameter, holeDiameter));
g2d.setColor(PAD_COLOR.darker());
g2d.draw(new Ellipse2D.Double(p.getX() - holeDiameter / 2.0, p.getY() - holeDiameter / 2.0, holeDiameter, holeDiameter));
}
drawingObserver.stopTrackingContinuityArea();
drawPcbSolderPads(g2d, 0, 40, true, outlineMode, drawingObserver);
}
@Override
@@ -298,7 +298,7 @@ public class WemosD1Mini extends AbstractMakerBoard {
g2d.setTransform(oldTx);
drawPins(g2d, 0, controlPoints.length, false, outlineMode, drawingObserver);
drawPcbSolderPads(g2d, 0, controlPoints.length, false, outlineMode, drawingObserver);
g2d.setComposite(oldComposite);
}