Package org.openpnp.gui.components.reticle

Source Code of org.openpnp.gui.components.reticle.CrosshairReticle

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

Related Classes of org.openpnp.gui.components.reticle.CrosshairReticle

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.