You are on page 1of 6

///////////////////////////////////////////////////////////////////////

// Magnifying Glass Tool


// available in the IJ macros tools repertory at
// http://rsb.info.nih.gov/ij/macros/tools/MagnifyingGlassTool.txt
///////////////////////////////////////////////////////////////////////
// Author: Gilles Carpentier, Faculte des Sciences et
// Technologies, Universite Paris 12 Val de Marne, France
///////////////////////////////////////////////////////////////////////
// Double click on the tool to change the size of the Magnifying Glass Window
// Move pixel by pixel in 8 cardinal directions using the keypad (8,9,6,3,2,1,4
,7):
// ! for slow computer (< 1Ghz), avoid to keep down a key with a Magnifying glas
s window
// size of 512x512 pixels. ImageJ could become unstable and quit.
// documentation available at http://image.bio.methods.free.fr/magtooldoc.html
var x, y, xinit,yinit,xo,yo,xa,ya,x3,y3;
var glassid,xglass=128,yglass=128,newglass=128;
var tool;
var imageinitid,glassid,testid;
var px = newArray(12);
var py = newArray(12);
var step=0,busy;
// Based on the Macro BigCursorTool writen by Wayne Rasband, and available on th
e ImageJ website at
// http://rsb.info.nih.gov/ij/macros/tools/BigCursorTool.txt
macro "SingleCursorMagGlas Tool -C00b-B11-O11cc-F6622" {
requires("1.35i");
setBatchMode(true);
run("Colors...", "selection=yellow");
imageinitid = getImageID();
nomdimage = getTitle;
xinit = getWidth(); yinit = getHeight();
yglass=newglass; xglass=newglass;
if (nomdimage == "Magnifying Glass") exit;
cursareasize ();
singlecursor ();
setBatchMode(false);
//selectImage(imageinitid);
}
macro "Display Coordinates" {
showMessage("Cursor coordinates: X="+ x + " / Y="+y+"\nSelection coordin
ates: \nXo Selec= "+xo+" / Yo Selec="+yo+" \nX Selec="+xa+" / Y Selec="+ya );
}
macro "SingleCursorMagGlas Tool Options" {
imageoption = getImageID();
nomdimage = getTitle;
testpolgon=0;
if (selectionType() == 2) {
getSelectionCoordinates(xCoordinates, yCoordinates);
if (xCoordinates.length == 12) testpolgon=1;
}
setBatchMode(true);
if ((nomdimage != "Magnifying Glass") && (imageoption != imageinitid))
{
imageinitid = imageoption;
xinit = getWidth(); yinit = getHeight();
}
glasssizes=newArray("64","128","256","512");
Dialog.create("New Window Size Choice");
Dialog.addChoice("Choose a new Magnifying Glass Window Size",glasssizes,
toString(newglass));
Dialog.show();
newglass = parseFloat (Dialog.getChoice());
if (testpolgon == 1) {
statut= isOpen("Magnifying Glass");
if (statut==1) {
selectImage("Magnifying Glass");
w = getWidth(); h = getHeight();
if (w != newglass) close();
}
xglass=newglass; yglass=newglass;
windowglass (xglass,yglass);
x=(xCoordinates[2]);
x=x+1;
y=(yCoordinates[2]);
testimage ();move ();
}
}
macro "up [n8]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true;y=y-1;testimage ();move ();busy = false;
}
}
macro "up right [n9]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true;y=y-1;x=x+1;testimage ();move ();busy = false;
}
}
macro "right [n6]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true; x=x+1;testimage ();move (); busy = false;
}
}
macro "down right [n3]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true;y=y+1;x=x+1;testimage ();move ();busy = false;
}
}
macro "down [n2]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true;y=y+1;testimage ();move ();busy = false;
}
}
macro "down left [n1]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true;y=y+1;x=x-1;testimage ();move ();busy = false;
}
}
macro "left [n4]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true;x=x-1;testimage ();move ();busy = false;
}
}
macro "up left [n7]" {
setBatchMode(true);
if (toolID==10) {
if (busy) return;
busy = true;y=y-1;x=x-1;testimage ();move ();busy = false;
}
}
// functions
function singlecursor () {
getCursorLoc(x, y, z, flags);
xstart=x; ystart=y;
w = getWidth(); h = getHeight();
px = newArray(12);
py = newArray(12);
x2=x; y2=y;
while (flags&16!=0) {
getCursorLoc(x, y, z, flags);
x3=x;y3=y;
if (x<0) x= 0;
if (x>xinit) x=(xinit-1);
if (y<0) y=0;
if (y>yinit) y=(yinit-1);
edgetest(x,y,x3,y3);
if (x!=x2 || y!=y2)
drawpol ();
x2=x; y2=y;
wait(10);
};
if (x!=xstart || y!=ystart)
selection ();
}
function selection () {
windowglass (xglass,yglass);
selectImage (imageinitid);
makeRectangle (xo,yo,xa,ya) ;
run("Copy");
run("Select None");
selectImage(imageinitid);
drawpol ();
setBatchMode(false);
selectImage(glassid);
setBatchMode(true);
makeRectangle (0,0,xglass,yglass) ;
run("Paste");
run("Select None");
r=255; g=255; b=0;
setColor(r, g, b);
setLineWidth(1);
xv=(x-xo); yh=(y-yo);
drawLine (0, yh, xglass,yh);
drawLine (xv,0,xv,(yglass-1));
}
function windowglass (xglass,yglass) {
magglass="Magnifying Glass";
screenx=screenWidth;
screeny=screenHeight;
ansvers=isOpen(magglass);
if (ansvers == 1) {
selectImage(magglass);
glassid=getImageID();
w = getWidth(); h = getHeight();
if (w > xglass || w !=(xglass)) {
selectImage(glassid);
close();
ansvers=0;
}
}
if (ansvers == 0) {
setBatchMode(false);
newImage(magglass,"RGB Black",xglass,(yglass+10),1);
setLocation(0, (screeny - (yglass+51)));
glassid=getImageID();
selectImage(imageinitid);
setBatchMode(true);
}
}
function edgetest(x,y,x3,y3) {
if ((x-(xglass/2)) <0) x3=xglass/2;
if ((x+(xglass/2)) > xinit) x3=(xinit-(xglass/2));
if ((y-(yglass/2)) <0) y3=yglass/2;
if ((y+(yglass/2))> yinit) y3=(yinit-(yglass/2));
xo=(x3-(xglass/2)); yo=(y3-(yglass/2));
xa=xglass; ya=yglass;
}
function move() {
cursareasize ();
windowglass (xglass,yglass);
if (x<0) x= 0;
if (x>xinit) x=x-1;
if (y<0) y=0;
if (y>(yinit-1)) y=y-1;
x3=x;y3=y;
edgetest(x,y,x3,y3);
selection ();
}
function drawpol () {
selectImage(imageinitid);
w = getWidth(); h = getHeight();
px[0]=0; py[0]=y;
px[1]=w; py[1]=y;
px[2]=x; py[2]=y;
px[3]=x; py[3]=0;
px[4]=x; py[4]=h;
px[5]=x; py[5]=y;
px[6]=xo; py[6]=y;
px[7]=xo; py[7]=yo;
px[8]=(xo+xa); py[8]=yo;
px[9]=(xo+xa); py[9]=(yo+ya);
px[10]=xo; py[10]=(yo+ya);
px[11]=xo; py[11]=y;
makeSelection("polgon", px, py);
showStatus(x+","+y);
}
function cursareasize () {
while (xinit < xglass ) {
xglass = xglass/2;
}
while (yinit < yglass ) {
yglass = yglass/2;
}
newglass = minOf(xglass, yglass);
yglass=newglass; xglass=newglass;
}
function testimage () {
testid= getImageID();
if ((testid != imageinitid) && (testid !=glassid )){
imageinitid=testid;
xinit = getWidth(); yinit = getHeight();
if (selectionType() == 2) {
getSelectionCoordinates(xCoordinates, yCoordinates);
if ((selectionType() == 2) && (xCoordinates.length == 12
)) {
x=(xCoordinates[2]);
y=(yCoordinates[2]);
xo=(xCoordinates[7]);
xa=(xCoordinates[9]);
xglass = xa-xo; yglass= xglass;
if (isOpen("Magnifying Glass") == 1) {
selectImage ("Magnifying Glass");
w = getWidth();
if (xglass != w) close();
}
}
} else {
x=1;y=1;newglass=128;xglass=128;yglass=128;
if (isOpen("Magnifying Glass") == 1) {
selectImage ("Magnifying Glass");
close();
}
}
}
}
}

You might also like