ij.gui
Class ShapeRoi

java.lang.Object
  extended by ij.gui.Roi
      extended by ij.gui.ShapeRoi
All Implemented Interfaces:
java.io.Serializable, java.lang.Cloneable

public class ShapeRoi
extends Roi

A subclass of ij.gui.Roi (2D Regions Of Interest) implemented in terms of java.awt.Shape. A ShapeRoi is constructed from a ij.gui.Roi object, or as a result of logical operators (i.e., union, intersection, exclusive or, and subtraction) provided by this class. These operators use the package java.awt.geom as a backend.
This code is in the public domain.

Author:
Cezar M.Tigaret
See Also:
Serialized Form

Field Summary
 
Fields inherited from class ij.gui.Roi
ANGLE, cachedMask, center, clipboard, clipHeight, clipWidth, clipX, clipY, COMPOSITE, constrain, CONSTRUCTING, FREELINE, FREEROI, HANDLE_SIZE, handleColor, ic, imp, LINE, mag, MOVING, MOVING_HANDLE, name, NORMAL, NOT_PASTING, oldHeight, oldWidth, oldX, oldY, OVAL, pasteMode, POINT, POLYGON, POLYLINE, previousRoi, RECTANGLE, RESIZING, ROIColor, TRACED_ROI, type, updateFullWindow, xMax, yMax
 
Constructor Summary
ShapeRoi(float[] shapeArray)
          Constructs a ShapeRoi from an array of variable length path segments.
ShapeRoi(int x, int y, java.awt.Shape s)
          Constructs a ShapeRoi from a Shape.
ShapeRoi(Roi r)
          Constructs a ShapeRoi from an Roi.
ShapeRoi(java.awt.Shape s)
          Constructs a ShapeRoi from a Shape.
 
Method Summary
static void addCircle(java.lang.String sx, java.lang.String sy, java.lang.String swidth)
           
 ShapeRoi and(ShapeRoi sr)
          Unary intersection operator.
 java.lang.Object clone()
          Returns a deep copy of this.
 boolean contains(int x, int y)
          Checks whether the specified coordinates are inside a on this ROI's shape boundaries.
 void draw(java.awt.Graphics g)
          Non-destructively draws the shape of this object on the associated ImagePlus.
 void drawPixels(ImageProcessor ip)
          Draws the shape of this object onto the specified ImageProcessor.
 double getFeretsDiameter()
          Returns the maximum Feret diameter (i.e., the largest distance between the shape's boundaries).
 double getLength()
          Returns the length of this shape (perimeter, if shape is closed).
 ImageProcessor getMask()
          Returns this ROI's mask pixels as a ByteProcessor with pixels "in" the mask set to white (255) and pixels "outside" the mask set to black (0).
 Roi[] getRois()
          Converts a Shape into Roi object(s).
 float[] getShapeAsArray()
          Retrieves the end points and control points of the path as a float array.
 ShapeRoi not(ShapeRoi sr)
          Unary subtraction operator.
 ShapeRoi or(ShapeRoi sr)
          Unary union operator.
 Roi shapeToRoi()
          Attempts to convert this ShapeRoi into a non-composite Roi.
static void subtractCircle(java.lang.String sx, java.lang.String sy, java.lang.String swidth)
           
 ShapeRoi xor(ShapeRoi sr)
          Unary exclusive or operator.
 
Methods inherited from class ij.gui.Roi
abortPaste, drawPixels, endPaste, getAngle, getBoundingRect, getBounds, getColor, getCurrentPasteMode, getName, getPasteMode, getPolygon, getState, getType, getTypeAsString, grow, handleMouseDown, handleMouseDrag, handleMouseUp, isArea, isHandle, isLine, isVisible, mouseDownInHandle, moveHandle, nudge, nudgeCorner, setColor, setImage, setLocation, setName, setPasteMode, showStatus, startPaste, toString, update, updateClipRect
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ShapeRoi

public ShapeRoi(Roi r)
Constructs a ShapeRoi from an Roi.


ShapeRoi

public ShapeRoi(java.awt.Shape s)
Constructs a ShapeRoi from a Shape.


ShapeRoi

public ShapeRoi(int x,
                int y,
                java.awt.Shape s)
Constructs a ShapeRoi from a Shape.


ShapeRoi

public ShapeRoi(float[] shapeArray)
Constructs a ShapeRoi from an array of variable length path segments. Each segment consists of the segment type followed by 0-3 end points and control points. Depending on the type, a segment uses from 1 to 7 elements of the array.

Method Detail

clone

public java.lang.Object clone()
Returns a deep copy of this.

Overrides:
clone in class Roi

or

public ShapeRoi or(ShapeRoi sr)
Unary union operator. The caller is set to its union with the argument.

Returns:
the union of this and sr

and

public ShapeRoi and(ShapeRoi sr)
Unary intersection operator. The caller is set to its intersection with the argument (i.e., the overlapping regions between the operands).

Returns:
the overlapping regions between this and sr

xor

public ShapeRoi xor(ShapeRoi sr)
Unary exclusive or operator. The caller is set to the non-overlapping regions between the operands.

Returns:
the union of the non-overlapping regions of this and sr

not

public ShapeRoi not(ShapeRoi sr)
Unary subtraction operator. The caller is set to the result of the operation between the operands.

Returns:
this subtracted from sr

getRois

public Roi[] getRois()
Converts a Shape into Roi object(s).
This method parses the shape into (possibly more than one) Roi objects and returns them in an array.
A simple, "regular" path results in a single Roi following these simple rules:
Shape type Roi class Roi type
java.awt.geom.Rectangle2D.Double ij.gui.Roi Roi.RECTANGLE
java.awt.geom.Ellipse2D.Double ij.gui.OvalRoi Roi.OVAL
java.awt.geom.Line2D.Double ij.gui.Line Roi.LINE
java.awt.Polygon ij.gui.PolygonRoi Roi.POLYGON


Each subpath of a java.awt.geom.GeneralPath is converted following these rules:
Segment
types
Number of
segments
Closed
path
Value of
forceAngle
Value of
forceTrace
Roi type
lines only: 0 ShapeRoi.NO_TYPE
1 ShapeRoi.NO_TYPE
2 Y ShapeRoi.NO_TYPE
N Roi.LINE
3 Y N Roi.POLYGON
N Y Roi.ANGLE
N N Roi.POLYLINE
4 Y Roi.RECTANGLE
N Roi.POLYLINE
<= MAXPOLY Y Roi.POLYGON
N Roi.POLYLINE
> MAXPOLY Y Y Roi.TRACED_ROI
N Roi.FREEROI
N Roi.FREELINE
anything
else:
<= 2 ShapeRoi.NO_TYPE
> 2 ShapeRoi.SHAPE_ROI

Returns:
an array of ij.gui.Roi objects.

shapeToRoi

public Roi shapeToRoi()
Attempts to convert this ShapeRoi into a non-composite Roi.

Returns:
an ij.gui.Roi object or null

contains

public boolean contains(int x,
                        int y)
Checks whether the specified coordinates are inside a on this ROI's shape boundaries.

Overrides:
contains in class Roi

getFeretsDiameter

public double getFeretsDiameter()
Returns the maximum Feret diameter (i.e., the largest distance between the shape's boundaries).
This method returns the maximum between the width or height of the bounding rectangles of the rotating shape with one degree up to 270 degres, which effectively means the maximum of its projections in R2.

Overrides:
getFeretsDiameter in class Roi

getLength

public double getLength()
Returns the length of this shape (perimeter, if shape is closed).

Overrides:
getLength in class Roi

getShapeAsArray

public float[] getShapeAsArray()
Retrieves the end points and control points of the path as a float array. The array contains a sequence of variable length segments that use from from one to seven elements. The first element of a segment is the type as defined in the PathIterator interface. SEG_MOVETO and SEG_LINETO segments also include two coordinates, SEG_QUADTO segments include four coordinates and SEG_CUBICTO segments include six coordinates.


draw

public void draw(java.awt.Graphics g)
Non-destructively draws the shape of this object on the associated ImagePlus.

Overrides:
draw in class Roi

drawPixels

public void drawPixels(ImageProcessor ip)
Draws the shape of this object onto the specified ImageProcessor.
This method will always draw a flattened version of the actual shape (i.e., all curve segments will be approximated by line segments).

Overrides:
drawPixels in class Roi
See Also:
ImageProcessor.setColor(java.awt.Color), ImageProcessor.setLineWidth(int)

getMask

public ImageProcessor getMask()
Returns this ROI's mask pixels as a ByteProcessor with pixels "in" the mask set to white (255) and pixels "outside" the mask set to black (0).

Overrides:
getMask in class Roi

addCircle

public static void addCircle(java.lang.String sx,
                             java.lang.String sy,
                             java.lang.String swidth)

subtractCircle

public static void subtractCircle(java.lang.String sx,
                                  java.lang.String sy,
                                  java.lang.String swidth)