(ImagePlus imp)
| 1095 | } |
| 1096 | |
| 1097 | private void translate(ImagePlus imp) { |
| 1098 | if (!imp.okToDeleteRoi()) |
| 1099 | return; |
| 1100 | Roi roi = imp.getRoi(); |
| 1101 | String options = Macro.getOptions(); |
| 1102 | if (options!=null && options.contains("interpolation=")) { |
| 1103 | IJ.run("Translate...", options); // run Image>Transform>Translate |
| 1104 | return; |
| 1105 | } |
| 1106 | if (roi==null) { |
| 1107 | noRoi("Translate"); |
| 1108 | return; |
| 1109 | } |
| 1110 | double dx = translateX; |
| 1111 | double dy = translateY; |
| 1112 | GenericDialog gd = new GenericDialog("Translate"); |
| 1113 | gd.addNumericField("X offset (pixels): ", dx, 0); |
| 1114 | gd.addNumericField("Y offset (pixels): ", dy, 0); |
| 1115 | gd.showDialog(); |
| 1116 | if (gd.wasCanceled()) |
| 1117 | return; |
| 1118 | dx = gd.getNextNumber(); |
| 1119 | dy = gd.getNextNumber(); |
| 1120 | Rectangle2D r = roi.getFloatBounds(); |
| 1121 | roi.setLocation(r.getX()+dx, r.getY()+dy); |
| 1122 | if (imp!=null) |
| 1123 | imp.draw(); |
| 1124 | if (options==null) { |
| 1125 | translateX = dx; |
| 1126 | translateY = dy; |
| 1127 | } |
| 1128 | } |
| 1129 | |
| 1130 | void noRoi(String command) { |
| 1131 | IJ.error(command, "This command requires a selection"); |
no test coverage detected