var rings = 10; var spacing = 5; // in units such as um var pixelsPerUnit = 1; var unit = "pixel"; var xcenter, ycenter; var markSize = 5; // Draws concentric circles centered at (xcenter, ycenter) macro "Concentric Rings Tool -C00b-O00ff-O4477" { requires("1.30m"); getCalibration(); getCursorLoc(xcenter, ycenter, z, flags); makeOval(xcenter-2, ycenter-2, 4, 4); run("Draw"); spacingInPixels = spacing*pixelsPerUnit; radius = spacingInPixels; for (i=0; i<rings; i++) { drawRing(xcenter, ycenter, radius, i+1); radius += spacingInPixels; } run("Select None"); //print(pixelsPerUnit+" pixels per " + unit); } // Records the coordinates and distance from (xcenter, ycenter) // in the "Log" window and draws a dot. macro "End Tool -C00b-T2e16E" { if (xcenter==0 && ycenter==0) exit("Rings must be drawn first"); getCursorLoc(x, y, z, flags); setLineWidth(markSize); drawLine( x, y, x, y); xx = (x-xcenter)/pixelsPerUnit; yy = (ycenter-y)/pixelsPerUnit; distance = sqrt(xx*xx+yy*yy); print("end \t" + xx + " \t" + yy + " \t" + distance); } // Records the coordinates and distance from (xcenter, ycenter) // in the "Log" window and draws an X. macro "Branch Tool -C00b--T2e16B" { if (xcenter==0 && ycenter==0) exit("Rings must be drawn first"); getCursorLoc(x, y, z, flags); setLineWidth(2); size = markSize/2; drawLine( x-size, y-size, x+size, y+size); drawLine( x+size, y-size, x-size, y+size); xx = (x-xcenter)/pixelsPerUnit; yy = (ycenter-y)/pixelsPerUnit; distance = sqrt(xx*xx+yy*yy); print("branch \t" + xx + " \t" + yy + " \t" + distance); } function drawRing(x, y, radius, n) { makeOval(x-radius, y-radius, radius*2, radius*2); run("Draw"); drawString(n, x+radius+2, y+4); } function getCalibration() { info = getInfo(); if (indexOf(info, "Resolution:")==-1) { pixelsPerUnit = 1; unit = "pixel"; return; } lines = split(info, "\n"); resLine = 0; for (i=0; i<lines.length; i++) { if (indexOf(lines[i], "Resolution:")==0) resLine = i; } calibration = split(lines[resLine], ""); pixelsPerUnit = calibration[1]; unit = calibration[4]; } macro 'Concentric Rings Options' { rings = getNumber("Number of Rings:", rings); spacing = getNumber("Ring Spacing", spacing); }