|
|
- //--version--1.6
- // 1.6 adds the '?' button that points to the wiki page
- // panel labels are now drawn on an overlay
- // added overlay commands and copy to system clipboard to the rightclick menu
- // Montage tools for easy montage manipulation
- // jerome.mutterer at ibmp.fr
-
- var str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- var lcas=false;
- var antialiasedLabels = true;
- var n=0;
- var xoffset=0.05;
- var yoffset=0.05;
- var pos="Clicked quadrant";
-
- var commands = newArray("Copy", "Paste","-", "Scale Bar...",
- "Brightness/Contrast...", "-", "Extract Selected Panels","Crop Montage [F3]","-",
- "Add Panel to Manager [F1]","Selected panels to stack [F2]", "Montage to Stack", "-",
- "Fit Clipboard content into panel [F4]","Fill Panel with Clipboard content [F5]","-",
- "Set Montage Layout","Change Montage Layout","-",
- "Hide Overlay","Show Overlay", "Remove Overlay", "Flatten", "-",
- "Copy to System"));
-
- var toolCmds = newMenu("Magic Montage Menu Tool",commands);
- var pmCmds = newMenu("Popup Menu",commands);
-
- macro "Popup Menu" {
- runCommand();
- }
-
- macro "Auto Montage Action Tool - C66fF0077C6f6F9977Cf66F9077C888F0977" {
- setBatchMode(true);
- b=bitDepth;
- if ((b!=24)&&(nSlices==1)) { exit("Stack, Composite, or RGB image required.");}
- if ((b==24)&&(nSlices==1)) { run("Make Composite"); b=8;}
- Stack.getDimensions(width, height, channels, slices, frames);
- getVoxelSize(xp,yp,zp,unit);
- if (channels==1) { channels = channels* frames*slices; Stack.setDimensions(channels,1,1); }
- id=getImageID;
- t=getTitle;
- if (b!=24) {
- newImage("tempmont", "RGB", width, height,channels);
- id2=getImageID;
- for (i=1;i<=channels;i++) {
- setPasteMode("copy");
- selectImage(id);
- Stack.setChannel(i);
- getLut(r,g,b);
- run("Duplicate...", "title=temp"+i);
- setLut(r,g,b);
- run("RGB Color");
- run("Copy");
- selectImage(id2);
- setSlice(i);
- run("Paste");
- }
- }
- run("Make Montage...", "scale=1 border=0");
- rename(getTitle+" of "+t);
- setVoxelSize(xp,yp,zp,unit);
- setBatchMode(false);
- }
-
- macro "Select Panels Tool - Cf44R0077R9077C888R9977R0977"{
- run("Select None");
- setPasteMode("copy");
- w = getWidth;
- h = getHeight;
- getCursorLoc(x, y, z, flags);
- id=getImageID;
- t=getTitle;
- selectImage(id);
- xn = info("xMontage");
- yn = info("yMontage");
- if ((xn==0)||(yn==0))
- exit;
- xc = floor(x/(w/xn));
- yc = floor(y/(h/yn));
- makeRectangle(xc*(w/xn),yc*(h/yn),(w/xn),(h/yn));
- xstart = x; ystart = y;
- x2=x; y2=y;
- x2c=xc;y2c=yc;
- while (flags&16 !=0) {
- getCursorLoc(x, y, z, flags);
- if (x!=x2 || y!=y2) {
- x2c = floor(x/(w/xn));
- y2c = floor(y/(h/yn));
- makeRectangle(xc*(w/xn),yc*(h/yn),(w/xn)*(x2c-xc+1),(h/yn)*(y2c-yc+1));
- x2=x; y2=y;
- wait(10);
- }
- }
- setPasteMode("add");
- }
-
- macro "Extract Selected Panels"{
- t=getTitle;
- xn = info("xMontage");
- yn = info("yMontage");
- pw = getWidth/xn;
- ph = getHeight/yn;
- run("Duplicate...", "title=[Extract of "+t+"]");
- setMetadata("Info","xMontage="+getWidth/pw+"\nyMontage="+getHeight/ph+"\n");
- }
-
- macro "Montage Shuffler Tool - C888R0077R9977C44fR0977R9077"{
- id=getImageID;
- run("Select None");
- setPasteMode("copy");
- w = getWidth;
- h = getHeight;
- getCursorLoc(x, y, z, flags);
- xn = info("xMontage");
- yn = info("yMontage");
- if ((xn==0)||(yn==0))
- exit;
- xstart = x; ystart = y;
- x2=x; y2=y;
- while (flags&16 !=0) {
- getCursorLoc(x, y, z, flags);
- if (x!=x2 || y!=y2) spring(xstart, ystart, x, y);
- x2=x; y2=y;
- wait(10);
- }
- if (x!=xstart || y!=ystart) {
- xext=0;
- yext=0;
- if (x>w) xext=1;
- if (y>h) yext=1;
- if ((xext>0)||(yext>0)) {
- run("Canvas Size...", "width="+w+xext*(w/xn)+" height="+h+yext*(h/yn)+" position=Top-Left zero");
- setMetadata("Info","xMontage="+(parseInt(xn)+parseInt(xext))+"\nyMontage="+(parseInt(yn)+parseInt(yext))+"\n");
- exit;
- }
- sc = floor(xstart/(w/xn));
- tc = floor(x/(w/xn));
- sr = floor(ystart/(h/yn));
- tr = floor(y/(h/yn));
- swap(sc,sr,tc,tr);
-
- }
- }
-
- macro "Annotation Tool - C700 T2709A T8709B T1f09C T8f09D" {
- xn = info("xMontage");
- yn = info("yMontage");
-
- getCursorLoc(x, y, z, flags);
- iw = getWidth/xn;
- ih = getHeight/yn;
-
- co = floor(x/iw);
- li = floor(y/ih);
-
- fontsize = ih/10;
- if (fontsize<12) fontsize=12;
- marque = substring(str,n,n+1);
- if (lcas==1) marque= toLowerCase(marque);
- opt="";
-
- if (pos == "Clicked quadrant") {
- xoffset=0.05; yoffset=0.05;
- if (x>((co+0.5)*iw)) xoffset=0.90;
- if (y<((li+0.5)*ih)) yoffset=0.85;
- }
-
- if (antialiasedLabels==true) opt=opt+"antialiased";
- setFont("SanSerif",fontsize, opt);
- fg = getValue("rgb.foreground");
- makeText(marque ,co*iw+xoffset*iw,(li+1)*ih-yoffset*ih-getValue("font.height"));
- Roi.setStrokeColor(fg&0xff0000>>16,fg&0x00ff00>>8,fg&0x0000ff);
- Overlay.addSelection("",0);
- run("Select None");
- n++; if (n>lengthOf(str)) n=0;
- }
-
- macro "Annotation Tool Options" {
- if (nImages>0) setupUndo;
- Dialog.create("Annotation - Options");
- Dialog.addString("Labels",str);
- Dialog.addCheckbox("Lowercase labels",lcas);
- Dialog.addCheckbox("Reset label counter",true);
- Dialog.addCheckbox("Antialiased",true);
- Dialog.addChoice("Position",newArray("Clicked quadrant","Lower left","Lower right","Upper right","Upper left"),pos);
- Dialog.show;
- str = Dialog.getString;
- lcas = Dialog.getCheckbox;
- resetCounter = Dialog.getCheckbox;
- if (resetCounter==true) n=0;
- antialiasedLabels = Dialog.getCheckbox;
- pos=Dialog.getChoice();
- if (pos=="Lower left") {xoffset=0.05; yoffset=0.05;}
- else if (pos=="Lower right") {xoffset=0.90; yoffset=0.05;}
- else if (pos=="Upper left") {xoffset=0.05; yoffset=0.85;}
- else if (pos=="Upper right") {xoffset=0.90; yoffset=0.85;}
-
- }
-
- macro "Montage Sync Tool - C800L07f7L707fG" {
- w=getWidth;
- h= getHeight;
- getCursorLoc(x,y,z,flags);
- xn = info("xMontage");
- yn = info("yMontage");
- if ((xn==0)||(yn==0)) {
- run("Set Montage Layout");
- exit;
- }
- xc = floor(x/(w/xn));
- yc = floor(y/(h/yn));
- x0 = x-xc*w/xn;
- y0 = y-yc*h/yn;
- np = 1*xn*yn;
- xp =newArray(np);
- yp =newArray(np);
- for (i=0;i<xn;i++) {
- for (j=0;j<yn;j++) {
- xp[j*xn+i] = x0+i*(w/xn);
- yp[j*xn+i] = y0+j*(h/yn);
- }
- }
- makeSelection("point yellow large hybred",xp,yp);
- }
-
- macro "Magic Montage Menu Tool - C800G027ff200" {
- runCommand();
- }
-
- function runCommand() {
- cmd = getArgument();
- if (cmd=="Scale Bar...")
- doCommand(cmd);
- else
- run(getArgument());
- }
-
- macro "Magic Montage Help Action Tool - C911T4e18?"{
- run("URL...", "url=http://wsr.imagej.net/macros/toolsets/MagicMontage.pdf");
- //run("URL...", "url=http://imagejdocu.tudor.lu/doku.php?id=howto:working:work_with_magic_montage");
- }
-
- // Returns numeric value associated with 'key' or 0 if not found.
- function info(key) {
- value = getInfo(key);
- if (value=="")
- return 0;
- else
- return parseInt(value);
- }
-
- function swap(a,b,c,d) {
- setupUndo;
- setBatchMode(true);
- makeRectangle(a*(w/xn),b*(h/yn),(w/xn),(h/yn));
- run("Duplicate...", "title=tmp");
- selectImage(id);
- makeRectangle(c*(w/xn),d*(h/yn),(w/xn),(h/yn));
- run("Copy");
- makeRectangle(a*(w/xn),b*(h/yn),(w/xn),(h/yn));
- run("Paste");
- selectWindow("tmp");
- run("Select All");
- run("Copy");
- selectImage(id);
- makeRectangle(c*(w/xn),d*(h/yn),(w/xn),(h/yn));
- run("Paste");
- run("Select None");
- setBatchMode(false);
- }
-
- function spring(x0,y0,x1,y1) {
- d = sqrt((y1-y0)*(y1-y0)+(x1-x0)*(x1-x0));
- step=3;
- r=15;
- xa = newArray(floor(d/step));
- ya = newArray(xa.length);
- for (i=0;i<xa.length;i++) {
- j=i*step;
- xa[i]=x0+j*(x1-x0)/d+sin(j/7)*r;
- ya[i]=y0+j*(y1-y0)/d+cos(j/7)*r;
- }
- if (xa.length>1) {
- xa[0]=x0;
- ya[0]=y0;
- xa[xa.length-1]=x1;
- ya[ya.length-1]=y1;
- }
- makeSelection("freeline",xa,ya);
- }
-
- macro "Add Panel to Manager [F1]" {
- roiManager("Add");
- setOption("Show All",true);
- }
-
- macro "Montage to Stack" {
- columns = info("xMontage");
- rows = info("yMontage");
- if (rows==0 || columns==0) {
- run("Set Montage Layout");
- columns = info("xMontage");
- rows = info("yMontage");
- }
- run("Montage to Stack...", "columns=&columns rows=&rows");
- }
-
- macro "Selected panels to stack [F2]" {
- id=getImageID;
- t=getTitle;
- selectImage(id);
- roiManager("select",0);
- getSelectionBounds(x,y,sw,sh);
- setBatchMode(true);
- newImage("Extracted Panels of "+t, "RGB", sw,sh,roiManager("count"));
- id2=getImageID;
- setPasteMode("copy");
- for (i=0;i<roiManager("count");i++) {
- selectImage(id);
- roiManager("select",i);
- run("Copy");
- selectImage(id2);
- setSlice(i+1);
- run("Paste");
- }
- setBatchMode(false);
- }
-
- macro "Crop Montage [F3]" {
- setBatchMode(true);
- setPasteMode("copy");
- w=getWidth;
- h= getHeight;
- b=bitDepth;
- getSelectionBounds(x,y,sw,sh);
- t=getTitle;
- id=getImageID;
- getVoxelSize(xp,yp,zp,unit);
- xn = info("xMontage");
- yn = info("yMontage");
- xc = floor(x/(w/xn));
- yc = floor(y/(h/yn));
- xpa = x-xc*(w/xn);
- ypa= y-yc*(h/yn);
- newImage("Crop of "+t,b+"RGB",sw,sh,(xn)*(yn));
- id2=getImageID;
- for (j=0;j<yn;j++) {
- for (i=0;i<xn;i++) {
- selectImage(id);
- makeRectangle(i*(w/xn)+xpa,j*(h/yn)+ypa,sw,sh);
- run("Copy");
- selectImage(id2);
- setSlice(j*(xn)+i+1);
- run("Paste");
- }
- }
- setVoxelSize(xp,yp,zp,unit);
- setBatchMode(false);
- setSlice(nSlices);
- setSlice(1);
- }
-
- macro "Fit Clipboard content into panel [F4]" {
- getSelectionBounds(x,y,sw,sh);
- id=getImageID;
- setBatchMode(true);
- ffp=sw/sh;
- run("Internal Clipboard");
- run("RGB Color");
- ffc=getWidth/getHeight;
- if (ffc>ffp) {
- run("Size...", "width="+sw+" height="+sw/ffc+" constrain interpolate");
- run("Canvas Size...", "width="+sw+" height="+sh+" position=Center zero");
- } else {
- run("Size...", "width="+sh*ffc+" height="+sh+" constrain interpolate");
- run("Canvas Size...", "width="+sw+" height="+sh+" position=Center zero");
- }
- run("Copy");
- close;
- selectImage(id);
- setBatchMode(false);
- setPasteMode("Copy");
- run("Paste");
- }
-
- macro "Fill Panel with Clipboard content [F5]" {
- getSelectionBounds(x,y,sw,sh);
- id=getImageID;
- setBatchMode(true);
- ffp=sw/sh;
- run("Internal Clipboard");
- run("RGB Color");
- ffc=getWidth/getHeight;
- if (ffc>ffp) {
- run("Size...", "width="+sw*ffc+" height="+sh+" constrain interpolate");
- run("Canvas Size...", "width="+sw+" height="+sh+" position=Center zero");
- } else {
- run("Size...", "width="+sw+" height="+sh/ffc+" constrain interpolate");
- run("Canvas Size...", "width="+sw+" height="+sh+" position=Center zero");
- }
- run("Copy");
- close;
- selectImage(id);
- setBatchMode(false);
- setPasteMode("Copy");
- run("Paste");
-
- }
-
- macro "Set Montage Layout" {
- columns = info("xMontage");
- rows = info("yMontage");
- if (columns>0 && rows>0)
- exit("Layout ("+columns+"x"+rows+") is already set");
- Dialog.create("Set Montage Layout");
- Dialog.addNumber("Width:", 2);
- Dialog.addNumber("Height:", 2);
- Dialog.show;
- mw = Dialog.getNumber;
- mh = Dialog.getNumber;
- setMetadata("Info","xMontage="+mw+"\nyMontage="+mh+"\n");
- }
-
- macro "Change Montage Layout" {
- columns = info("xMontage");
- rows = info("yMontage");
- if (rows==0 || columns==0) {
- run("Set Montage Layout");
- columns = info("xMontage");
- rows = info("yMontage");
- }
- id1 = getImageID;
- title = getTitle;
- getVoxelSize(xp,yp,zp,unit);
- Dialog.create("Change Montage Layout");
- Dialog.addNumber("Columns:", columns);
- Dialog.addNumber("Rows:", rows);
- Dialog.show;
- columns2 = Dialog.getNumber;
- rows2 = Dialog.getNumber;
- run("Montage to Stack...", "columns=&columns rows=&rows");
- id2 = getImageID;
- run("Make Montage...", "columns=&columns2 rows=&rows2 scale=1.0");
- rename(title);
- setVoxelSize(xp,yp,zp,unit);
- selectImage(id1); close;
- selectImage(id2); close;
- }
-
|