// MeasurePieSegmentsTool.txt r.p.j.delange@med.uu.nl
// This tool creates predefined pie shaped selections centered around
// where you click (x,y) and measures and labels them. The pie segments are defined
// as polygons shapes, based on a bounding circle with 
// user defined radius (double click the tool icon to change the radius).
// For example x1,y1 defines the point on this
// circle where the first segment starts, at 47 degrees; x3,y3 where the segment ends,
// at 128 degrees. I've added one extra point for each segment to preserve 'circularity'.
// I designed the tool to define rat periaquaductal gray areas from the aquaduct (DMPAG, LPAG etc).

var radius = 30;

macro "Measure And Label Pie Segments Tool-C00b11P118ee111" {
    
//Measuring
    getCursorLoc(x, y, z, flags);
    //DMPAG 47 to 128 degrees, 87 as extra
    x1 = x-(0.681998*radius); //cosine 47
    x2 = x-(0.052335956*radius); // cosine 87
    x3 = x-(-0.61566*radius); //cosine 128
    y1 = y-(0.731354*radius);// sine 47
    y2 = y-(0.998629535*radius);// sine 47
    y3 = y-(0.788011*radius);// sine 128
    makeSelection("polygon", newArray(x,x1,x2,x3), newArray(y,y1,y2,y3));
      run("Measure");

    getCursorLoc(x, y, z, flags);
    //lDLPAG 14 to 47 degrees, 30 as extra
    x4 = x-(0.970295726*radius); //cosine 14
    x5 = x-(0.866025404*radius); // cosine 30
    x6 = x-(0.68199836*radius); //cosine 47
    y4 = y-(0.241921896*radius);// sine 14
    y5 = y-(0.5*radius);// sine 30
    y6 = y-(0.731353702*radius);// sine 47
    makeSelection("polygon", newArray(x,x4,x5,x6), newArray(y,y4,y5,y6));
      run("Measure");

    getCursorLoc(x, y, z, flags);
    //lLPAG 14 to 335 degrees, 354 as extra point
    x7 = x-(0.970295726*radius); //cosine 14
    x8 = x-(0.994521895*radius); // cosine 354
    x9 = x-(0.906307787*radius); //cosine 335
    y7 = y-(0.241921896*radius);// sine 14
    y8 = y-(-0.104528463*radius);// sine 354
    y9 = y-(-0.422618262*radius);// sine 335
    makeSelection("polygon", newArray(x,x7,x8,x9), newArray(y,y7,y8,y9));
      run("Measure");

    getCursorLoc(x, y, z, flags);
    //lVLPAG 298 to 335 degrees, 314 as extra point
    x10 = x-(0.469471563*radius); //cosine 298
    x11 = x-(0.69465837*radius); // cosine 314
    x12 = x-(0.906307787*radius); //cosine 335
    y10 = y-(-0.882947593*radius);// sine 298
    y11 = y-(-0.7193398*radius);// sine 314
    y12 = y-(-0.422618262*radius);// sine 335
    makeSelection("polygon", newArray(x,x10,x11,x12), newArray(y,y10,y11,y12));
      run("Measure");

    getCursorLoc(x, y, z, flags);
    //DR 238 to 298 degrees, 268 as extra point
    x13 = x-(-0.529919264*radius); //cosine 238
    x14 = x-(-0.034899497*radius); // cosine 268
    x15 = x-(0.469471563*radius); //cosine 298
    y13 = y-(-0.848048096*radius);// sine 238
    y14 = y-(-0.999390827*radius);// sine 268
    y15 =  y-(-0.882947593*radius);// sine 298
    makeSelection("polygon", newArray(x,x13,x14,x15), newArray(y,y13,y14,y15));
      run("Measure");

    getCursorLoc(x, y, z, flags);
    //rVLPAG 207 to 238 degrees, 222 as extra point
    x16 = x-(-0.529919264*radius); //cosine 238
    x17 = x-(-0.743144825*radius); // cosine 222
    x18 = x-(-0.891006524*radius); //cosine 207
    y16 = y-(-0.848048096*radius);// sine 238
    y17 = y-(-0.669130606*radius);// sine 222
    y18 =  y-(-0.4539905*radius);// sine 207
    makeSelection("polygon", newArray(x,x16,x17,x18), newArray(y,y16,y17,y18));
      run("Measure");

    getCursorLoc(x, y, z, flags);
    //rLPAG 172 to 207 degrees, 190 as extra point
    x19 = x-(-0.990268069*radius); //cosine 172
    x20 = x-(-0.984807753*radius); // cosine 190
    x21 = x-(-0.891006524*radius); //cosine 207
    y19 = y-(0.139173101*radius);// sine 172
    y20 = y-(-0.173648178*radius);// sine 190
    y21 =  y-(-0.4539905*radius);// sine 207
    makeSelection("polygon", newArray(x,x19,x20,x21), newArray(y,y19,y20,y21));
      run("Measure");

    getCursorLoc(x, y, z, flags);
    //rDLPAG 128 to 172 degrees, 151 as extra point
    x22 = x-(-0.990268069*radius); //cosine 172
    x23 = x-(-0.874619707*radius); // cosine 151
    x24 = x-(-0.615661475*radius); //cosine 128
    y22 = y-(0.139173101*radius);// sine 172
    y23 = y-(0.48480962*radius);// sine 151
    y24 =  y-(0.788010754*radius);// sine 128
    makeSelection("polygon", newArray(x,x22,x23,x24), newArray(y,y22,y23,y24));
      run("Measure");

// labelling after measuring
    run("Select None");
    makeSelection("polygon", newArray(x1,x2,x3,x23,x22,x20,x21,x17,x16,x14,x15,x11,x12,x8,x4,x5), newArray(y1,y2,y3,y23,y22,y20,y21,y17,y16,y14,y15,y11,y12,y8,y4,y5));
       run("Draw");
    run("Select None");
    n=nResults;
    setJustification("center");
    drawLine(x,y,x1,y1);
    drawLine(x,y,x3,y3);
    drawLine(x,y,x22,y22);
    drawLine(x,y,x21,y21);
    drawLine(x,y,x16,y16);
    drawLine(x,y,x15,y15);
    drawLine(x,y,x12,y12);
    drawLine(x,y,x4,y4);

    drawString(""+(n-7),x+((x-x2)/1),y-((y-y2)/1));        
    drawString(""+(n-6),x+((x-x23)/1),y-((y-y23)/1));    
    drawString(""+(n-5),x+((x-x20)/1),y-((y-y20)/1));
    drawString(""+(n-4),x+((x-x17)/1),y-((y-y17)/1));
    drawString(""+(n-3),x+((x-x14)/1),y-((y-y14)/1));
    drawString(""+(n-2),x+((x-x11)/1),y-((y-y11)/1));
    drawString(""+(n-1),x+((x-x8)/1),y-((y-y8)/1));
    drawString(""+n,x+((x-x5)/1),y-((y-y5)/1));

}

macro "Measure And Label Pie Segments Tool Options" {
    radius = getNumber("Radius (pixels):", radius);
   
}
 
macro "background [b]" {
	setTool(0);
	makeRectangle(20, 20, 30, 28);
	run("Measure");
}

macro "Save as JPEG [j]" {
    a=getTitle();    
    run("Jpeg...", "save");
    run("Close");
    selectWindow("Results");

}