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

org.scijava.util.IntRect Maven / Gradle / Ivy

/*
 * #%L
 * SciJava Common shared library for SciJava software.
 * %%
 * Copyright (C) 2009 - 2017 Board of Regents of the University of
 * Wisconsin-Madison, Broad Institute of MIT and Harvard, Max Planck
 * Institute of Molecular Cell Biology and Genetics, University of
 * Konstanz, and KNIME GmbH.
 * %%
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 * #L%
 */

package org.scijava.util;

/**
 * A class for representing a rectangular region, in integer coordinates.
 * 

* It exists mainly to avoid AWT references to {@link java.awt.Rectangle}. *

* * @author Barry DeZonia */ public class IntRect { // -- Fields -- public int x; public int y; public int width; public int height; // -- Constructor -- public IntRect() { // default constructor - allow all instance vars to be initialized to 0 } public IntRect(final int x, final int y, final int width, final int height) { this.x = x; this.y = y; this.width = width; this.height = height; } // -- IntRect methods -- /** Returns true if this rect intersects the given rect. */ public boolean intersects(final IntRect r) { int tw = this.width; int th = this.height; int rw = r.width; int rh = r.height; if (rw <= 0 || rh <= 0 || tw <= 0 || th <= 0) { return false; } final int tx = this.x; final int ty = this.y; final int rx = r.x; final int ry = r.y; rw += rx; rh += ry; tw += tx; th += ty; final boolean rtn = (rw < rx || rw > tx) && (rh < ry || rh > ty) && (tw < tx || tw > rx) && (th < ty || th > ry); return rtn; } /** * Returns a Rect representing the intersection of this Rect with the given * Rect. If the two Rects do not intersect, the result is an empty Rect. */ public IntRect intersection(final IntRect r) { final int newX = Math.max(this.x, r.x); final int newY = Math.max(this.y, r.y); int newW = Math.min(this.x + this.width, r.x + r.width) - x; int newH = Math.min(this.y + this.height, r.y + r.height) - y; if (newW < 0) newW = 0; if (newH < 0) newH = 0; return new IntRect(newX, newY, newW, newH); } /** Tests whether the given coordinates lie within the rectangle. */ public boolean contains(final IntCoords coords) { return coords.x >= this.x && coords.x < this.x + this.width && coords.y >= this.y && coords.y < this.y + this.height; } /** Gets the top left coordinate of the rectangle. */ public IntCoords getTopLeft() { return new IntCoords(x, y); } /** Gets the bottom right coordinate of the rectangle. */ public IntCoords getBottomRight() { return new IntCoords(x + width, y + height); } // -- Object methods -- @Override public String toString() { return "x=" + x + ", y=" + y + ", w=" + width + ", h=" + height; } @Override public boolean equals(final Object o) { if (!(o instanceof IntRect)) return false; final IntRect rect = (IntRect) o; return x == rect.x && y == rect.y && width == rect.width && height == rect.height; } @Override public int hashCode() { // combine 8 least significant bits of x, y, width and height final int b1 = x & 0xff; final int b2 = y & 0xff; final int b3 = width & 0xff; final int b4 = height & 0xff; return b1 | (b2 << 8) | (b3 << 16) | (b4 << 24); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy