|
|
- // An ImageJ tool that makes nice and easy labels
- // as seen https://twitter.com/Astbury_BSL/status/1258677104696311809
- // Author: Jerome Mutterer
-
- var label = 'label';
- var lineWidth = 2;
- var globalLineWidth = parseInt(call('ij.gui.Line.getWidth'));
-
- macro "Label Tool (double click for options) - C037o0d55L3d65L65f5T830ca" {
- width = parseInt(call('ij.gui.Line.getWidth'));
- if (width>1 || width!=globalLineWidth) {
- lineWidth=width;
- globalLineWidth = width;
- }
- radius = maxOf(4,lineWidth*2);
- getCursorLoc(x, y, z, flags);
- if (flags&9>0) { // shift or alt
- removeLabel(x,y);
- exit();
- }
- getDateAndTime(yr, mo, dw, d, h, m, s, ms);
- uid = "labeltool_"+yr+""+mo+""+d+""+h+""+m+""+s+""+ms;
- nbefore = Overlay.size;
- getCursorLoc(x1, y1, z, flags);
- setLineWidth(lineWidth);
- while (flags&16>0) {
- getCursorLoc(x1, y1, z, flags);
- drawItem();
- wait(30);
- while (Overlay.size>nbefore)
- Overlay.removeSelection(Overlay.size-1);
- }
- drawItem();
- label =getString("Enter label", label);
- while (Overlay.size>nbefore)
- Overlay.removeSelection(Overlay.size-1);
- drawItem();
- }
-
- function drawItem() {
- makeOval(x-radius, y-radius, radius*2, radius*2);
- Roi.setName(uid);
- Overlay.addSelection("",0,""+hexCol());
- makeLine(x, y,x1,y1,x1+(((x1<x)*-1)+((x1>=x)*1))*getStringWidth(label),y1);
- Roi.setName(uid);
- Overlay.addSelection(""+hexCol(), lineWidth);
- setFont("user");
- makeText(label, x1 - (x1<x)*getStringWidth(label), y1-getValue("font.height")-lineWidth);
- Roi.setName(uid);
- Overlay.addSelection(""+hexCol(), lineWidth);
- run("Select None");
- }
-
- function hexCol() {
- return IJ.pad(toHex(getValue("rgb.foreground")),6);
- }
-
- function removeLabel(x,y) {
- index = Overlay.indexAt(x,y);
- if (index>=0) {
- Overlay.activateSelection(index);
- name = Roi.getName();
- Overlay.removeRois(name);
- Roi.remove;
- }
- }
-
- macro "Label Tool (double click for options) Options" {
- Dialog.create("Label Maker Tool Options");
- Dialog.addNumber("Line width:", lineWidth, 0, 3, "pixels");
- m1 = "Shift or alt click to remove a label.\n";
- m2 = "Double click on text tool to change\n";
- m3 = "font size and color.";
- Dialog.setInsets(0, 0, 0);
- Dialog.addMessage(m1+m2+m3);
- Dialog.show();
- lineWidth = Dialog.getNumber();
- }
-
|