void interpolate() {
   Roi roi = imp.getRoi();
   if (roi == null) {
     noRoi("Interpolate");
     return;
   }
   if (roi.getType() == Roi.POINT) return;
   if (IJ.isMacro() && Macro.getOptions() == null) Macro.setOptions("interval=1");
   GenericDialog gd = new GenericDialog("Interpolate");
   gd.addNumericField("Interval:", 1.0, 1, 4, "pixel");
   gd.addCheckbox("Smooth", IJ.isMacro() ? false : smooth);
   gd.showDialog();
   if (gd.wasCanceled()) return;
   double interval = gd.getNextNumber();
   smooth = gd.getNextBoolean();
   Undo.setup(Undo.ROI, imp);
   FloatPolygon poly = roi.getInterpolatedPolygon(interval, smooth);
   int t = roi.getType();
   int type = roi.isLine() ? Roi.FREELINE : Roi.FREEROI;
   if (t == Roi.POLYGON && interval > 1.0) type = Roi.POLYGON;
   if ((t == Roi.RECTANGLE || t == Roi.OVAL || t == Roi.FREEROI) && interval >= 5.0)
     type = Roi.POLYGON;
   if ((t == Roi.LINE || t == Roi.FREELINE) && interval >= 5.0) type = Roi.POLYLINE;
   if (t == Roi.POLYLINE && interval >= 1.0) type = Roi.POLYLINE;
   ImageCanvas ic = imp.getCanvas();
   if (poly.npoints <= 150 && ic != null && ic.getMagnification() >= 12.0)
     type = roi.isLine() ? Roi.POLYLINE : Roi.POLYGON;
   Roi p = new PolygonRoi(poly, type);
   if (roi.getStroke() != null) p.setStrokeWidth(roi.getStrokeWidth());
   p.setStrokeColor(roi.getStrokeColor());
   p.setName(roi.getName());
   transferProperties(roi, p);
   imp.setRoi(p);
 }
 private void drawRoi(Roi roi, Graphics g) {
   if (roi == currentRoi) {
     Color lineColor = roi.getStrokeColor();
     Color fillColor = roi.getFillColor();
     float lineWidth = roi.getStrokeWidth();
     roi.setStrokeColor(null);
     roi.setFillColor(null);
     boolean strokeSet = roi.getStroke() != null;
     if (strokeSet) roi.setStrokeWidth(1);
     roi.draw(g);
     roi.setStrokeColor(lineColor);
     if (strokeSet) roi.setStrokeWidth(lineWidth);
     roi.setFillColor(fillColor);
     currentRoi = null;
   } else roi.draw(g);
 }
Beispiel #3
0
 private void transferProperties(Roi roi1, Roi roi2) {
   if (roi1 == null || roi2 == null) return;
   roi2.setStrokeColor(roi1.getStrokeColor());
   if (roi1.getStroke() != null) roi2.setStroke(roi1.getStroke());
   roi2.setDrawOffset(roi1.getDrawOffset());
 }