/*
* 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);
}
}