package ij.plugin.filter;
import ij.*;
import ij.process.*;
import ij.gui.*;
import java.awt.*;
import java.awt.event.*;
/** Implements the Analyze/Plot Profile and Edit/Options/Profile Plot Options commands. */
public class Profiler implements PlugInFilter {
ImagePlus imp;
public int setup(String arg, ImagePlus imp) {
if (arg.equals("set"))
{doOptions(); return DONE;}
this.imp = imp;
return DOES_ALL+NO_UNDO+NO_CHANGES+ROI_REQUIRED;
}
public void run(ImageProcessor ip) {
boolean averageHorizontally = Prefs.verticalProfile || IJ.altKeyDown();
new ProfilePlot(imp, averageHorizontally).createWindow();
}
public void doOptions() {
double ymin = ProfilePlot.getFixedMin();
double ymax = ProfilePlot.getFixedMax();
boolean fixedScale = ymin!=0.0 || ymax!=0.0;
boolean wasFixedScale = fixedScale;
GenericDialog gd = new GenericDialog("Profile Plot Options", IJ.getInstance());
gd.addNumericField("Width (pixels):", PlotWindow.plotWidth, 0);
gd.addNumericField("Height (pixels):", PlotWindow.plotHeight, 0);
gd.addNumericField("Minimum Y:", ymin, 2);
gd.addNumericField("Maximum Y:", ymax, 2);
gd.addCheckbox("Fixed y-axis scale", fixedScale);
gd.addCheckbox("Do not save x-values", !PlotWindow.saveXValues);
gd.addCheckbox("Auto-close", PlotWindow.autoClose);
gd.addCheckbox("Vertical profile", Prefs.verticalProfile);
gd.addCheckbox("List values", PlotWindow.listValues);
gd.addCheckbox("Interpolate line profiles", PlotWindow.interpolate);
gd.addCheckbox("Draw grid lines", !PlotWindow.noGridLines);
gd.addHelp(IJ.URL+"/docs/menus/edit.html#plot-options");
gd.showDialog();
if (gd.wasCanceled())
return;
Dimension screen = IJ.getScreenSize();
int w = (int)gd.getNextNumber();
int h = (int)gd.getNextNumber();
if (w<100) w = 100;
if (w>screen.width-140) w = screen.width-140;
if (h<50) h = 50;
if (h>screen.height-300) h = screen.height-300;
PlotWindow.plotWidth = w;
PlotWindow.plotHeight = h;
ymin = gd.getNextNumber();
ymax = gd.getNextNumber();
fixedScale = gd.getNextBoolean();
PlotWindow.saveXValues = !gd.getNextBoolean();
PlotWindow.autoClose = gd.getNextBoolean();
Prefs.verticalProfile = gd.getNextBoolean();
PlotWindow.listValues = gd.getNextBoolean();
PlotWindow.interpolate = gd.getNextBoolean();
PlotWindow.noGridLines = !gd.getNextBoolean();
if (!fixedScale && !wasFixedScale && (ymin!=0.0 || ymax!=0.0))
fixedScale = true;
if (!fixedScale) {
ymin = 0.0;
ymax = 0.0;
} else if (ymin>ymax) {
double tmp = ymin;
ymin = ymax;
ymax = tmp;
}
ProfilePlot.setMinAndMax(ymin, ymax);
IJ.register(Profiler.class);
}
}