PolygonMacroPrimitive.java
package com.varnernet.gerb4j.macro;
import com.varnernet.gerb4j.Polarity;
import com.varnernet.gerb4j.render.GerberOutputTarget;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
/**
* Gerber macro primitive type 5 — Regular Polygon. Format: {@code
* 5,exposure,numVertices,centerX,centerY,diameter,rotation}
*/
final class PolygonMacroPrimitive extends AbstractMacroPrimitive {
private final int numVertices;
private final double centerX;
private final double centerY;
private final double diameter;
private final double rotation;
PolygonMacroPrimitive(
final boolean exposed,
final int numVertices,
final double centerX,
final double centerY,
final double diameter,
final double rotation) {
super(exposed);
this.numVertices = numVertices;
this.centerX = centerX;
this.centerY = centerY;
this.diameter = diameter;
this.rotation = rotation;
}
@Override
public Rectangle2D getBounds() {
// Circumscribed-circle bounding box — rotation does not change the enclosing circle.
double r = diameter / 2.0;
return new Rectangle2D.Double(centerX - r, centerY - r, diameter, diameter);
}
@Override
public void render(final Point2D flashPoint, final GerberOutputTarget target, final Polarity polarity) {
Point2D center = new Point2D.Double(flashPoint.getX() + centerX, flashPoint.getY() + centerY);
target.drawPolygon(center, numVertices, diameter, rotation, effectivePolarity(polarity));
}
}