All Downloads are FREE. Search and download functionalities are using the official Maven repository.

gov.nasa.worldwind.geom.PickPointFrustum Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2012 United States Government as represented by the Administrator of the
 * National Aeronautics and Space Administration.
 * All Rights Reserved.
 */

package gov.nasa.worldwind.geom;

import gov.nasa.worldwind.util.Logging;

import java.awt.*;

/**
 * A viewport aligned {@link gov.nasa.worldwind.geom.Frustum} that also stores the 2D screen rectangle that the {@link
 * gov.nasa.worldwind.geom.Frustum} contains.
 *
 * @author Jeff Addison
 * @version $Id: PickPointFrustum.java 1171 2013-02-11 21:45:02Z dcollins $
 */
public class PickPointFrustum extends Frustum
{
    private final Rectangle screenRect;

    /**
     * Constructs a new PickPointFrustum from another Frustum and screen rectangle
     *
     * @param frustum frustum to create the PickPointFrustum from
     * @param rect    screen rectangle to store with this frustum
     */
    public PickPointFrustum(Frustum frustum, Rectangle rect)
    {
        super(frustum.getLeft(), frustum.getRight(), frustum.getBottom(), frustum.getTop(), frustum.getNear(),
            frustum.getFar());

        if (rect == null)
        {
            String message = Logging.getMessage("nullValue.RectangleIsNull");
            Logging.logger().fine(message);
            throw new IllegalArgumentException(message);
        }

        this.screenRect = rect;
    }

    // ============== Intersection Functions ======================= //

    /**
     * Returns true if the specified 2D screen {@link java.awt.Rectangle} intersects the space enclosed by this view
     * aligned frustums screen rectangle.
     *
     * @param rect the rectangle to test
     *
     * @return true if the specified Rectangle intersects the space enclosed by this Frustum, and false otherwise.
     *
     * @throws IllegalArgumentException if the extent is null.
     */
    public final boolean intersects(Rectangle rect)
    {
        if (rect == null)
        {
            String message = Logging.getMessage("nullValue.RectangleIsNull");
            Logging.logger().fine(message);
            throw new IllegalArgumentException(message);
        }

        return this.screenRect.intersects(rect);
    }

    /**
     * Returns true if the specified point is inside the 2D screen rectangle enclosed by this frustum
     *
     * @param x the x coordinate to test.
     * @param y the y coordinate to test.
     *
     * @return true if the specified point is inside the space enclosed by this Frustum, and false otherwise.
     *
     * @throws IllegalArgumentException if the point is null.
     */
    public final boolean contains(double x, double y)
    {
        return this.screenRect.contains(x, y);
    }

    /**
     * Returns true if the specified point is inside the 2D screen rectangle enclosed by this frustum
     *
     * @param point the point to test.
     *
     * @return true if the specified point is inside the space enclosed by this Frustum, and false otherwise.
     *
     * @throws IllegalArgumentException if the point is null.
     */
    public final boolean contains(Point point)
    {
        if (point == null)
        {
            String msg = Logging.getMessage("nullValue.PointIsNull");
            Logging.logger().fine(msg);
            throw new IllegalArgumentException(msg);
        }

        return this.screenRect.contains(point);
    }

    /**
     * Returns a copy of this PickPointFrustum which is transformed by the specified Matrix.
     *
     * @param matrix the Matrix to transform this Frustum by.
     *
     * @return a copy of this Frustum, transformed by the specified Matrix.
     *
     * @throws IllegalArgumentException if the matrix is null
     */
    public PickPointFrustum transformBy(Matrix matrix)
    {
        if (matrix == null)
        {
            String msg = Logging.getMessage("nullValue.MatrixIsNull");
            Logging.logger().fine(msg);
            throw new IllegalArgumentException(msg);
        }

        return new PickPointFrustum(super.transformBy(matrix), this.screenRect);
    }

    /**
     * Returns the screenRect associated with this frustum
     *
     * @return screenRect associated with this frustum
     */
    public Rectangle getScreenRect()
    {
        return screenRect;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy