// This macro demonstrates how a macro can display a // data input dialog box. The dialog it creates contains // one string field, one popup menu, two numeric fields, // and one check box. Block = "A"; width=5; height=4; pxlsz = 0.654; diam = 800; xCoordNames = "abcdefghiklmnopqr"; Dialog.create("TMA ROI generator"); Dialog.addString("Block:", Block); Dialog.addNumber("Width:", width); Dialog.addNumber("Height:", height); Dialog.addNumber("PIxel size:", pxlsz); Dialog.addNumber("Diameter[µm]:", diam); Dialog.show(); waitForUser("please mark the first and the last spot with the multipoint tool"); getSelectionCoordinates(xCoordinates, yCoordinates); Block = Dialog.getString(); width = Dialog.getNumber(); height = Dialog.getNumber(); pxlsz = Dialog.getNumber(); diam = Dialog.getNumber(); alpha1 = atan2(yCoordinates[1]-yCoordinates[0] , xCoordinates[1]-xCoordinates[0]); alpha2 = atan2(height-1 , width-1); alpha = alpha1-alpha2; //print (alpha1, alpha2); ddxx = (xCoordinates[1]-xCoordinates[0]); ddyy = (yCoordinates[1]-yCoordinates[0]); d = sqrt(ddxx*ddxx+ddyy*ddyy); dx = d*cos(alpha2)/(width-1); dy = d*sin(alpha2)/(height-1); //print(alpha1*180/3.1412,alpha2*180/3.1412,alpha*180/3.1412); diam = diam/pxlsz; for (ix = 1; ix<= height; ix = ix+1){ for (iy = 1; iy<= width; iy = iy+1){ label = Block + iy + substring(xCoordNames, ix-1,ix); //print(label); posx = xCoordinates[0] - (ix-1)*dx*sin(alpha)+(iy-1)*dy*cos(alpha) - diam/2; posy = yCoordinates[0] + (ix-1)*dx*cos(alpha)+(iy-1)*dy*sin(alpha) - diam/2; makeOval(posx, posy, diam, diam); current = roiManager("count");//iy + (ix-1)*height-1; roiManager("Add"); //print(current); roiManager("Select", current); roiManager("Rename", label); } }