Here is another overlay issue:
It seems that text added with Overlay.drawString is lost when text is added using Overlay.addSelection, _unless_ Overlay.show is called before the first instance of Overlay.addSelection. If Overlay.show is called after Overlay.addSelection, the text added with Overlay.addSelection is lost instead. So combining Overlay.drawString and Overlay.addSelection only works if Overlay.show is called at the right place. Being able to combine Overlay.drawString and Overlay.addSelection is useful because the former is bottom adjusted and the latter is top adjusted. See this example macro. The three functions are identical except for the code line position of Overlay.show; close("boats*"); run("Boats (356K)"); TextStr1 = "This is test text 1"; TextStr2 = "This is test text 2"; TextStr3 = "This is test text 3"; TextStr4 = "This is test text 4"; xPos = getWidth/2; yPos = round(getHeight/7); setFont("SansSerif", 28, "antialiased"); setColor("red"); OverlayTest1(); OverlayTest2(); OverlayTest3(); run("Tile"); function OverlayTest1() { run("Boats (356K)"); //draw text using Overlay.drawString Overlay.drawString(TextStr1, xPos, yPos*1); //draw text using Overlay.addSelection makeText(TextStr2, xPos, yPos*2); Overlay.addSelection("yellow"); //repeat the above Overlay.drawString(TextStr3, xPos, yPos*3); makeText(TextStr4, xPos, yPos*4); Overlay.addSelection("yellow"); Overlay.show; run("Select None"); //problem: only TextStr1 is shown } function OverlayTest2() { run("Boats (356K)"); //draw text using Overlay.drawString Overlay.drawString(TextStr1, xPos, yPos*1); //draw text using Overlay.addSelection makeText(TextStr2, xPos, yPos*2); Overlay.addSelection("yellow"); //draw text using Overlay.drawString Overlay.drawString(TextStr1, xPos, yPos*3); //repeat the above Overlay.drawString(TextStr3, xPos, yPos*3); makeText(TextStr4, xPos, yPos*4); Overlay.addSelection("yellow"); run("Select None"); //problem: TextStr1 is not shown } function OverlayTest3() { run("Boats (356K)"); //draw text using Overlay.drawString Overlay.drawString(TextStr1, xPos, yPos*1); Overlay.show; //draw text using Overlay.addSelection makeText(TextStr2, xPos, yPos*2); Overlay.addSelection("yellow"); //draw text using Overlay.drawString Overlay.drawString(TextStr1, xPos, yPos*3); //repeat the above Overlay.drawString(TextStr3, xPos, yPos*3); makeText(TextStr4, xPos, yPos*4); Overlay.addSelection("yellow"); run("Select None"); //now all strings are shown } I am using daily build ImageJ 1.52e with Java 1.6 on Windows 7/64-bit. Stein -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
> On Jul 12, 2018, at 11:10 AM, Stein Rørvik <[hidden email]> wrote:
> > Here is another overlay issue: > > It seems that text added with Overlay.drawString is lost when text is added using Overlay.addSelection, > _unless_ Overlay.show is called before the first instance of Overlay.addSelection. This bug is fixed in the latest ImageJ daily build (1.52f7). -wayne > If Overlay.show is called after Overlay.addSelection, the text added with Overlay.addSelection is lost instead. > So combining Overlay.drawString and Overlay.addSelection only works if Overlay.show is called at the right place. > > Being able to combine Overlay.drawString and Overlay.addSelection is useful > because the former is bottom adjusted and the latter is top adjusted. > > See this example macro. > The three functions are identical except for the code line position of Overlay.show; > > close("boats*"); > run("Boats (356K)"); > TextStr1 = "This is test text 1"; > TextStr2 = "This is test text 2"; > TextStr3 = "This is test text 3"; > TextStr4 = "This is test text 4"; > xPos = getWidth/2; > yPos = round(getHeight/7); > setFont("SansSerif", 28, "antialiased"); > setColor("red"); > > OverlayTest1(); > OverlayTest2(); > OverlayTest3(); > run("Tile"); > > function OverlayTest1() { > run("Boats (356K)"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*1); > > //draw text using Overlay.addSelection > makeText(TextStr2, xPos, yPos*2); > Overlay.addSelection("yellow"); > > //repeat the above > Overlay.drawString(TextStr3, xPos, yPos*3); > makeText(TextStr4, xPos, yPos*4); > Overlay.addSelection("yellow"); > > Overlay.show; > run("Select None"); > //problem: only TextStr1 is shown > } > > function OverlayTest2() { > run("Boats (356K)"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*1); > > //draw text using Overlay.addSelection > makeText(TextStr2, xPos, yPos*2); > Overlay.addSelection("yellow"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*3); > > //repeat the above > Overlay.drawString(TextStr3, xPos, yPos*3); > makeText(TextStr4, xPos, yPos*4); > Overlay.addSelection("yellow"); > > run("Select None"); > //problem: TextStr1 is not shown > } > > function OverlayTest3() { > run("Boats (356K)"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*1); > Overlay.show; > > //draw text using Overlay.addSelection > makeText(TextStr2, xPos, yPos*2); > Overlay.addSelection("yellow"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*3); > > //repeat the above > Overlay.drawString(TextStr3, xPos, yPos*3); > makeText(TextStr4, xPos, yPos*4); > Overlay.addSelection("yellow"); > > run("Select None"); > //now all strings are shown > } > > I am using daily build ImageJ 1.52e with Java 1.6 on Windows 7/64-bit. > > Stein -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Thank you for the fix, the example macro now works fine.
Stein -----Original Message----- From: ImageJ Interest Group <[hidden email]> On Behalf Of Wayne Rasband Sent: 27. juli 2018 05:10 To: [hidden email] Subject: Re: Problems with Overlay.show > On Jul 12, 2018, at 11:10 AM, Stein Rørvik <[hidden email]> wrote: > > Here is another overlay issue: > > It seems that text added with Overlay.drawString is lost when text is > added using Overlay.addSelection, _unless_ Overlay.show is called before the first instance of Overlay.addSelection. This bug is fixed in the latest ImageJ daily build (1.52f7). -wayne > If Overlay.show is called after Overlay.addSelection, the text added with Overlay.addSelection is lost instead. > So combining Overlay.drawString and Overlay.addSelection only works if Overlay.show is called at the right place. > > Being able to combine Overlay.drawString and Overlay.addSelection is > useful because the former is bottom adjusted and the latter is top adjusted. > > See this example macro. > The three functions are identical except for the code line position of > Overlay.show; > > close("boats*"); > run("Boats (356K)"); > TextStr1 = "This is test text 1"; > TextStr2 = "This is test text 2"; > TextStr3 = "This is test text 3"; > TextStr4 = "This is test text 4"; > xPos = getWidth/2; > yPos = round(getHeight/7); > setFont("SansSerif", 28, "antialiased"); setColor("red"); > > OverlayTest1(); > OverlayTest2(); > OverlayTest3(); > run("Tile"); > > function OverlayTest1() { > run("Boats (356K)"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*1); > > //draw text using Overlay.addSelection > makeText(TextStr2, xPos, yPos*2); > Overlay.addSelection("yellow"); > > //repeat the above > Overlay.drawString(TextStr3, xPos, yPos*3); > makeText(TextStr4, xPos, yPos*4); > Overlay.addSelection("yellow"); > > Overlay.show; > run("Select None"); > //problem: only TextStr1 is shown } > > function OverlayTest2() { > run("Boats (356K)"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*1); > > //draw text using Overlay.addSelection > makeText(TextStr2, xPos, yPos*2); > Overlay.addSelection("yellow"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*3); > > //repeat the above > Overlay.drawString(TextStr3, xPos, yPos*3); > makeText(TextStr4, xPos, yPos*4); > Overlay.addSelection("yellow"); > > run("Select None"); > //problem: TextStr1 is not shown } > > function OverlayTest3() { > run("Boats (356K)"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*1); > Overlay.show; > > //draw text using Overlay.addSelection > makeText(TextStr2, xPos, yPos*2); > Overlay.addSelection("yellow"); > > //draw text using Overlay.drawString > Overlay.drawString(TextStr1, xPos, yPos*3); > > //repeat the above > Overlay.drawString(TextStr3, xPos, yPos*3); > makeText(TextStr4, xPos, yPos*4); > Overlay.addSelection("yellow"); > > run("Select None"); > //now all strings are shown } > > I am using daily build ImageJ 1.52e with Java 1.6 on Windows 7/64-bit. > > Stein -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html -- ImageJ mailing list: http://imagej.nih.gov/ij/list.html |
Free forum by Nabble | Edit this page |