package ij.gui; import java.awt.*; import java.util.Vector; import ij.*; import ij.process.ImageProcessor; /** An Overlay is a list of Rois that can be drawn non-destructively on an Image. */ public class Overlay { private Vector list; private boolean label; private boolean drawNames; private boolean drawBackgrounds; private Color labelColor; private Font labelFont; /** Constructs an empty Overlay. */ public Overlay() { list = new Vector(); } /** Constructs an Overlay and adds the specified Roi. */ public Overlay(Roi roi) { list = new Vector(); list.add(roi); } /** Adds an Roi to this Overlay. */ public void add(Roi roi) { list.add(roi); } /* Adds a Shape to this Overlay. */ //public void add(Shape shape, Color color, BasicStroke stroke) { // Roi roi = new ShapeRoi(shape); // roi.setStrokeColor(color); // roi.setStroke(stroke); // list.add(roi); //} /* Adds a String to this Overlay. */ //public void add(String text, int x, int y, Color color, Font font) { // TextRoi roi = new TextRoi(x, y-font.getSize(), text, font); // roi.setStrokeColor(color); // list.add(roi); //} /** Adds an Roi to this Overlay. */ public void addElement(Roi roi) { list.add(roi); } /** Removes the Roi with the specified index from this Overlay. */ public void remove(int index) { list.remove(index); } /** Removes the specified Roi from this Overlay. */ public void remove(Roi roi) { list.remove(roi); } /** Removes all the Rois in this Overlay. */ public void clear() { list.clear(); } /** Returns the Roi with the specified index. */ public Roi get(int index) { return (Roi)list.get(index); } /** Returns the number of Rois in this Overlay. */ public int size() { return list.size(); } /** Returns on array containing the Rois in this Overlay. */ public Roi[] toArray() { Roi[] array = new Roi[list.size()]; return (Roi[])list.toArray(array); } /** Sets the stroke color of all the Rois in this overlay. */ public void setStrokeColor(Color color) { Roi[] rois = toArray(); for (int i=0; i<rois.length; i++) rois[i].setStrokeColor(color); } /** Sets the fill color of all the Rois in this overlay. */ public void setFillColor(Color color) { Roi[] rois = toArray(); for (int i=0; i<rois.length; i++) rois[i].setFillColor(color); } /** Moves all the Rois in this overlay. */ public void translate(int dx, int dy) { Roi[] rois = toArray(); for (int i=0; i<rois.length; i++) { Rectangle r = rois[i].getBounds(); rois[i].setLocation(r.x+dx, r.y+dy); } } /** Draws outlines of the Rois in this Overlay on the specified ImageProcessor using the current color and line width of 'ip'. */ //public void draw(ImageProcessor ip) { // Roi[] rois = toArray(); // for (int i=0; i<rois.length; i++) // rois[i].drawPixels(ip); //} /** Returns a clone of this Overlay. */ public Overlay duplicate() { Roi[] rois = toArray(); Overlay overlay2 = new Overlay(); for (int i=0; i<rois.length; i++) overlay2.add((Roi)rois[i].clone()); overlay2.drawLabels(label); overlay2.drawNames(drawNames); overlay2.drawBackgrounds(drawBackgrounds); overlay2.setLabelColor(labelColor); overlay2.setLabelFont(labelFont); return overlay2; } public String toString() { return list.toString(); } public void drawLabels(boolean b) { label = b; } public boolean getDrawLabels() { return label; } public void drawNames(boolean b) { drawNames = b; } public boolean getDrawNames() { return drawNames; } public void drawBackgrounds(boolean b) { drawBackgrounds = b; } public boolean getDrawBackgrounds() { return drawBackgrounds; } public void setLabelColor(Color c) { labelColor = c; } public Color getLabelColor() { return labelColor; } public void setLabelFont(Font font) { labelFont = font; } public Font getLabelFont() { //if (labelFont==null && labelFontSize!=0) // labelFont = new Font("SansSerif", Font.PLAIN, labelFontSize); return labelFont; } void setVector(Vector v) {list = v;} Vector getVector() {return list;} }