<br><br><div class="gmail_quote">On Tue, Sep 20, 2011 at 7:40 PM, Deepayan Sarkar <span dir="ltr">&lt;<a href="mailto:deepayan.sarkar@gmail.com">deepayan.sarkar@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
On Wed, Sep 21, 2011 at 3:20 AM, Michael Lawrence<br>
<div class="im">&lt;<a href="mailto:lawrence.michael@gene.com">lawrence.michael@gene.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Tue, Sep 20, 2011 at 12:03 PM, Deepayan Sarkar<br>
&gt; &lt;<a href="mailto:deepayan.sarkar@gmail.com">deepayan.sarkar@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Sep 20, 2011 at 8:55 PM, Michael Lawrence<br>
&gt;&gt; &lt;<a href="mailto:lawrence.michael@gene.com">lawrence.michael@gene.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Hi Deepayan,<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Nice to hear you are back into the Qt stuff. I can indeed reproduce<br>
&gt;&gt; &gt; this.<br>
&gt;&gt; &gt; But not anymore, because I&#39;ve fixed it.<br>
&gt;&gt;<br>
&gt;&gt; Thanks, I can confirm the fix.<br>
&gt;&gt;<br>
&gt;&gt; I&#39;ve decided to try out a different approach, managing the layout in R<br>
&gt;&gt; as much as possible, and target multiple backends. I&#39;m initially<br>
&gt;&gt; experimenting with QGraphicsView/Scene, and now I&#39;m getting much<br>
&gt;&gt; further with that thanks to your fix. At some point I&#39;ll start bugging<br>
&gt;&gt; you about qtpaint as well.<br>
&gt;&gt;<br>
&gt;<br>
&gt; You might want to check out anypaint in the GGobi github. Gabriel Becker<br>
&gt; (DTL&#39;s student) has been doing a lot of work on generic (pure R, backend<br>
&gt; agnostic) implementations of things like layout. He&#39;s implementing anypaint<br>
&gt; against HTML5/JS in Firefox, via RFirefox. I need to make sure that he is<br>
&gt; committing his stuff back into github.<br>
<br>
</div>Seems mostly notImplemented() calls right now.<br>
<div class="im"><br></div></blockquote><div><br>Right, it&#39;s just the abstraction. Gabe&#39;s firepaint package implements it for RFirefox. qtpaint will implement it for Qt.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im">
&gt;&gt; I think there are still problems lurking around. Here is a protection<br>
&gt;&gt; bug: This gives an error because the gc() causes view$scene() to go<br>
&gt;&gt; away.<br>
&gt;&gt;<br>
&gt;&gt; ----<br>
&gt;&gt; library(qtbase)<br>
&gt;&gt;<br>
&gt;&gt; view &lt;- Qt$QGraphicsView()<br>
&gt;&gt; view$size &lt;- qsize(600, 600)<br>
&gt;&gt; view$setScene(Qt$QGraphicsScene())<br>
&gt;&gt; ## class(view$scene())<br>
&gt;&gt; gc()<br>
&gt;&gt; view$scene() # NULL<br>
&gt;&gt; view$scene()$clear()<br>
&gt;&gt; ----<br>
&gt;&gt;<br>
&gt;&gt; If I uncomment the &#39;class(view$scene())&#39; then things are OK.<br>
&gt;&gt;<br>
&gt;<br>
&gt; This is just Qt. Neither R nor QGraphicsView keep a reference to the scene.<br>
&gt; This is why qtpaint sets the parent of the scene to the view, if it does not<br>
&gt; already have a parent.<br>
<br>
</div>So having an R reference like so<br>
<br>
scene &lt;- Qt$QGraphicsScene()<br>
view$setScene(scene)<br>
<br>
should be safe?<br>
<div class="im"><br></div></blockquote><div><br>Yes, but I would recommend setting the parent, so that you do not need to worry about the R reference. That&#39;s sensible as long as you have a single view.<br> <br></div>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">
&gt;&gt; In a more realistic example involving QGraphicsScene (that I haven&#39;t<br>
&gt;&gt; been able to simplify yet), having a gc() keeps things sane, and not<br>
&gt;&gt; having it leads to errors similar to the ones before, e.g.,<br>
&gt;&gt;<br>
&gt;&gt; Error in qinvokeStatic(cl, basename, ...) :<br>
&gt;&gt;  Expected an instance of type &#39;QColor&#39;, not &#39;QGraphicsLineItem&#39;<br>
&gt;&gt; Calls: print ... is -&gt; qbrush -&gt; &lt;Anonymous&gt; -&gt; qinvokeStatic -&gt; .Call<br>
&gt;&gt;<br>
&gt;<br>
&gt; Looking forward to that simplified example.<br>
<br>
</div>Here goes. Adding the gc() makes the whole thing work fine. The<br>
trivial qpen() call is required.<br>
<br></blockquote><div><br>Thanks a lot. Will look at this.<br> <br></div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
#----<br>
library(qtbase)<br>
<br>
v &lt;- Qt$QGraphicsView()<br>
v$size &lt;- qsize(300, 300)<br>
scene &lt;- Qt$QGraphicsScene()<br>
v$setScene(scene)<br>
v$show()<br>
<br>
doplot &lt;- function(view, scene)<br>
{<br>
    ## gc()<br>
    scene$clear()<br>
    x &lt;- runif(2, 50, 250)<br>
    scene$addEllipse(x[1], x[2], 10, 10, qpen())<br>
    Sys.sleep(0.01)<br>
}<br>
<br>
niter &lt;- 0L<br>
while (TRUE)<br>
{<br>
    doplot(view = v, scene = scene)<br>
    niter &lt;- niter + 1<br>
    cat(niter, fill = TRUE)<br>
}<br>
#----<br>
<br>
I&#39;m usually getting an error within 10 iterations.<br>
<font color="#888888"><br>
-Deepayan<br>
</font></blockquote></div><br>