/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy 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.
*
* Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package plugins.kernel.roi.roi2d;
import icy.resource.ResourceUtil;
import icy.roi.ROI;
import icy.type.point.Point5D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
/**
* @author Stephane
*/
public class ROI2DRectangle extends ROI2DRectShape
{
/**
* @deprecated
*/
@Deprecated
public ROI2DRectangle(Point2D topLeft, Point2D bottomRight, boolean cm)
{
this(topLeft, bottomRight);
}
public ROI2DRectangle(Point2D topLeft, Point2D bottomRight)
{
super(new Rectangle2D.Double(), topLeft, bottomRight);
// set icon (default name is defined by getDefaultName())
setIcon(ResourceUtil.ICON_ROI_RECTANGLE);
}
public ROI2DRectangle(double xmin, double ymin, double xmax, double ymax)
{
this(new Point2D.Double(xmin, ymin), new Point2D.Double(xmax, ymax));
}
/**
* @deprecated
*/
@Deprecated
public ROI2DRectangle(Rectangle2D rectangle, boolean cm)
{
this(rectangle);
}
public ROI2DRectangle(Rectangle2D rectangle)
{
this(new Point2D.Double(rectangle.getMinX(), rectangle.getMinY()), new Point2D.Double(rectangle.getMaxX(),
rectangle.getMaxY()));
}
/**
* @deprecated
*/
@Deprecated
public ROI2DRectangle(Point2D pt, boolean cm)
{
this(pt);
}
public ROI2DRectangle(Point2D pt)
{
this(new Point2D.Double(pt.getX(), pt.getY()), pt);
}
/**
* Generic constructor for interactive mode
*/
public ROI2DRectangle(Point5D pt)
{
this(pt.toPoint2D());
}
public ROI2DRectangle()
{
this(new Point2D.Double(), new Point2D.Double());
}
@Override
public String getDefaultName()
{
return "Rectangle2D";
}
public Rectangle2D getRectangle()
{
return (Rectangle2D) shape;
}
public void setRectangle(Rectangle2D rectangle)
{
setBounds2D(rectangle);
}
@Override
public boolean contains(ROI roi)
{
// special case of ROI2DPoint
if (roi instanceof ROI2DPoint)
return onSamePos(((ROI2DPoint) roi), true) && contains(((ROI2DPoint) roi).getPoint());
// special case of ROI2DLine
if (roi instanceof ROI2DLine)
return onSamePos(((ROI2DLine) roi), true) && contains(((ROI2DLine) roi).getBounds2D());
// special case of ROI2DRectangle
if (roi instanceof ROI2DRectangle)
return onSamePos(((ROI2DRectangle) roi), true) && contains(((ROI2DRectangle) roi).getRectangle());
return super.contains(roi);
}
@Override
public boolean intersects(ROI roi)
{
// special case of ROI2DPoint
if (roi instanceof ROI2DPoint)
return onSamePos(((ROI2DPoint) roi), false) && contains(((ROI2DPoint) roi).getPoint());
// special case of ROI2DLine
if (roi instanceof ROI2DLine)
return onSamePos(((ROI2DLine) roi), false) && ((ROI2DLine) roi).getLine().intersects(getRectangle());
// special case of ROI2DRectangle
if (roi instanceof ROI2DRectangle)
return onSamePos(((ROI2DRectangle) roi), false)
&& ((ROI2DRectangle) roi).getRectangle().intersects(getRectangle());
return super.intersects(roi);
}
@Override
public double computeNumberOfPoints()
{
final Rectangle2D r = getRectangle();
return r.getWidth() * r.getHeight();
}
}