Login  Register

edit a plugin

Posted by Braekevelt Martin on Mar 06, 2019; 8:37am
URL: http://imagej.273.s1.nabble.com/edit-a-plugin-tp5021892.html

Dear all especially the programming experts on this forum.

I had a former forum member who helped me out with the creation of a couple of plugins.
Unfortunately I cannot reach him anymore for helping me out with a couple of changes I would like to make.
So I try my luck on the forum if someone can help me.

The plug ins  made for me are still working fine, but one plug in I want to make some necessary changes.
The plug in RoA_-1.jar is the plugin running now, the one I want to adjust, but the one I cannot open or see the code. I have also a macro file (WireCenter&Width_1h.ijm) from what I think was the last before the plugin was made, the source code is java I guess, but this one is also not running when I try it.
I have no experience how to open, read and for sure not edit jar files, but I want start learning it from this example.

I wanted send the working jar file and the macro before it was created into a plugin, but outlook blocked the jar file and the ijm file so I added the code below
I hope someone can help me further.

Thanks in advance,

Martin.

var topPos1, topPos2, lowPos1, lowPos2;
var maxTW, maxBW, minTW, minBW;
var maxTx, maxBx, minTx, minBx;
var maxTy, maxBy, minTy, minBy;
var maxTCy, maxBCy, minTCy, minBCy;
var path, dir, resultsDir, name, list, name1;
var wireDiam, neckDiam, imName, imCount, fudge = 10;
var widthTop, widthBottom, wireW, neckW, convertScale;
var topPos, cenPos, botPos, wireWidth, botNeck, topNeck;

macro "Open Tool - C00cT1f1aO" {}

macro "Open Tool Options" {
     setup();
     setScale = true;
     imCount = 0;
     initializeResults(list.length);

     for (i=0; i<list.length; i++){
           setBatchMode(true);
           if (!endsWith(list[i], "/")) {
                open (list[i]);
                if (setScale) scaleImage();
                setScale = false;
                processImage();
                closeImage();
                imCount++;
           }
     }
     setResults();
     setBatchMode(false);
}

function setResults() {
     run("Clear Results");
     for(i = 0; i < imCount; i++) {
           setResult("Wire Diameter µm", i, wireDiam[i]);
           setResult("Neck Diameter µm", i, neckDiam[i]);
           setResult("Label", i, imName[i]);
           updateResults();
     }
     selectWindow("Results");
     saveAs("Results", resultsDir + "Results.xls");
}

function initializeResults(len) {
     wireDiam = newArray(len);
     neckDiam = newArray(len);
     imName = newArray(len);
}

function scaleImage() {
     Dialog.create("Set Parameters");
     Dialog.addNumber("enter scale in µm/pixel", 6.323);
     Dialog.addNumber("Change fudge to skip pixels", fudge);
     Dialog.show();
     num = Dialog.getNumber();
     fudge = Dialog.getNumber();

     convertScale = num;
     inverse = 1/convertScale;
     print("scale = " + convertScale + " µm/pixel = " + inverse + " pixels/µm");
     run("Set Scale...", "distance=1 known=" + num + " pixel=1 unit=µm global");
}

function processImage() {
     topPos = newArray(getWidth());
     cenPos = newArray(getWidth());
     botPos = newArray(getWidth());
     wireWidth = newArray(getWidth());

     if(bitDepth() != 8) {
           run("8-bit");
     }

     findLargestParticle();

     setForegroundColor(255, 255, 255);
     run("Draw", "slice");
     run("Select None");
     resetThreshold();

     x0 = 1;
     midline1 = getMidline(x0);
     x1 = getWidth() - 1;
     midline2 = getMidline(x1);

     drawLine(x0, midline1, x1, midline2);
     run("Invert");
     run("Skeletonize");
     run("Invert");

     findWidths();

     title = getTitle();
     dot = lastIndexOf(title, ".");
     title1 = substring(title, 0, dot);
     saveAs("Tiff", resultsDir + title1);
}

function setup() {
     path = File.openDialog("Select a File");
     dir = File.getParent(path);
     name = File.getName(path);
     list = getFileList(dir);

     dot = lastIndexOf(name, ".");
     name1 = substring(name, 0, dot);

     resultsName = name1 + "_results";
     resultsDir = dir+resultsName+File.separator;
     File.makeDirectory(resultsDir);
}

function findLargestParticle() {
     setAutoThreshold("Default");

     run("Set Measurements...", "area redirect=None decimal=2");
     run("Analyze Particles...", "size=0-Infinity display clear record");

     maxPart = 0;
     x1 = 0;
     y1 = 0;
     pos = 0;

     for(i = 0; i < nResults; i++) {
           area = getResult("Area", i);
           if(maxPart < area) {
                maxPart = area;
                x1 = getResult("XStart", i);
                y1 = getResult("YStart", i);
                pos = i;
           }
     }
     doWand(x1, y1);
     run("Colors...", "foreground=white background=black selection=yellow");
     run("Clear Outside");
     run("Clear", "slice");
}

function findWidths() {
     counter = 0;
     for(x = 0; x < getWidth(); x++) {
           top = true;
           cen = false;
           bot = false;
           if(x > 0) {
                for(y = 0; y < getHeight(); y++) {
                     pix = getPixel(x, y);
                     if(pix == 255 && top) {
                           topPos[x] = y;
                           top = false;
                           cen = true;
                           counter = 0;
                     }
                     if(counter > fudge && pix == 255 && cen) {
                           cenPos[x] = y;
                           cen = false;
                           bot = true;
                           counter = 0;
                     }
                     if(counter > fudge && pix == 255 && bot) {
                           botPos[x] = y;
                           bot = false;
                           counter = 0;
                     }
                     counter++;
                }
                wireWidth[x] = abs(botPos[x] - topPos[x]);
           }
     }

     wireW = getMode(wireWidth);
     wireWx = 0;
     topNeck = 1000000;
     botNeck = 1000000;
     tn = 0;
     tnx = 0;
     tny = 0;
     tcy = 0;
     bn = 0;
     bnx = 0;
     bny = 0;
     bcy = 0;
     wx = 0;
     wty = 0;
     wby = 0;

     go = true;

     for(x = 0; x < getWidth(); x++) {
           tn = abs(cenPos[x] - topPos[x]);
           bn = abs(botPos[x] - cenPos[x]);
           ww = abs(botPos[x] - topPos[x]);

           if(tn != 0 && tn < topNeck) {
                topNeck = tn;
                tnx = x;
                tny = topPos[x];
                tcy = cenPos[x];
           }
           if(bn != 0 && bn < botNeck) {
                botNeck = bn;
                bnx = x;
                bny = botPos[x];
                bcy = cenPos[x];
           }
           if(ww == wireW && go) {
                go = false;
                wx = x;
                wty = topPos[x];
                wby = botPos[x];
          }
     }

     title = getTitle();
     wireDiam[imCount] = wireW * convertScale;
     neckDiam[imCount] = (botNeck + topNeck) * convertScale;
     imName[imCount] = title;

     print("*********** " + title + " ***********");
     print("wire diameter: " + wireW * convertScale + " µm at " + wx * convertScale);
     print("top neck: " + topNeck * convertScale + " µm at " + tnx * convertScale);
     print("bottom neck: " + botNeck * convertScale + " µm at " + bnx * convertScale);
     print("neck: " + (botNeck + topNeck) * convertScale + " µm");
     print("*********************************\n");

     makeLine(wx, wty, wx, wby);
     run("Add Selection...");
     makeLine(tnx, tny, tnx, tcy);
     run("Add Selection...");
     makeLine(bnx, bny, bnx, bcy);
     run("Add Selection...");
     run("Select None");
     run("Overlay Options...", "stroke=red width=0 set apply show");
}

function getMode(input) {
     returnVal = input[0];
     repeatCount = 0;
     prevRepCnt = 0;

     for (i=0; i<input.length; i++) {

         for (j=i; j<input.length; j++) {

             if (i != j && input[i] == input[j]) {
                 repeatCount++;

                 if (repeatCount>=prevRepCnt) {
                     returnVal=input[i];
                 }
                 prevRepCnt = repeatCount;
             }
             repeatCount=0;
         }
     }
     return returnVal;
}

function getMidline(x) {
     counter = 0;
     top = true;
     bot = false;
     for(y = 0; y < getHeight(); y++) {
           pix = getPixel(x, y);
           if(pix == 255 && top) {
                topPos1 = y;
                top = false;
                bot = true;
           }
           else if(bot) counter++;

           if(counter > fudge && pix == 255 && bot) {
                lowPos1 = y;
                bot = false;
                midline = topPos1 + (lowPos1 - topPos1)/2;
           }
     }
     return midline;
}

function closeImage() {
     while (nImages>0) {
         selectImage(nImages);
         close();
     }
}

function closeResults() {
     if (isOpen("Results")) {
           selectWindow("Results");
           run("Close");
     }
     if (isOpen("ROI Manager")) {
           selectWindow("ROI Manager");
           run("Close");
     }
     if (isOpen("Log")) {
           selectWindow("Log");
           run("Close");
     }
     if (isOpen("Threshold")) {
           selectWindow("Threshold");
           run("Close");
     }
     if (isOpen("Debug")) {
           selectWindow("Debug");
           run("Close");
     }
}

macro "Close Images Tool - C00cT1f1aI" {}

macro "Close Images Tool Options" {
     closeImage();
     if (isOpen("ROI Manager")) {ClearRoiManager();}
}

macro "Close Results Tool - C00cT1f1aC" {}

macro "Close Results Tool Options" {
     closeResults();
}






::DISCLAIMER:: This e-mail is confidential and intended for use by the addressee only. If you are not the intended recipient, please notify us immediately and delete this e-mail, as well as any attachment.

--
ImageJ mailing list: http://imagej.nih.gov/ij/list.html