/*
Copyright (C) 2011 Jason von Nieda <jason@vonnieda.org>
This file is part of OpenPnP.
OpenPnP is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OpenPnP is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OpenPnP. If not, see <http://www.gnu.org/licenses/>.
For more information about OpenPnP visit http://openpnp.org
*/
package org.openpnp.gui.components.reticle;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import org.openpnp.model.LengthUnit;
import org.openpnp.util.HslColor;
public class CrosshairReticle implements Reticle {
protected Color color;
protected Color complimentaryColor;
public CrosshairReticle() {
setColor(Color.red);
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
complimentaryColor = new HslColor(color).getComplementary();
}
@Override
public void draw(Graphics2D g2d, LengthUnit cameraUnitsPerPixelUnits,
double cameraUnitsPerPixelX, double cameraUnitsPerPixelY,
double viewPortCenterX, double viewPortCenterY, int viewPortWidth,
int viewPortHeight, double rotation) {
g2d.setStroke(new BasicStroke(1f));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// Calculate half the diagonal size of the viewport.
int halfDiagonal = (int) (Math.sqrt(Math.pow(viewPortWidth, 2)
+ Math.pow(viewPortHeight, 2)) / 2.0);
AffineTransform origTx = g2d.getTransform();
g2d.translate(viewPortCenterX, viewPortCenterY);
// AffineTransform rotates positive clockwise, so we invert the value.
g2d.rotate(Math.toRadians(-rotation));
g2d.setColor(color);
g2d.drawLine(0, 0, halfDiagonal, 0);
g2d.drawLine(0, 0, -halfDiagonal, 0);
g2d.drawLine(0, 0, 0, halfDiagonal);
g2d.setColor(complimentaryColor);
g2d.drawLine(0, 0, 0, -halfDiagonal);
g2d.setTransform(origTx);
}
}