<br><br><div class="gmail_quote">On Tue, Sep 20, 2011 at 9:48 PM, Michael Lawrence <span dir="ltr">&lt;<a href="mailto:michafla@gene.com">michafla@gene.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br><br><div class="gmail_quote"><div class="im">On Tue, Sep 20, 2011 at 7:40 PM, Deepayan Sarkar <span dir="ltr">&lt;<a href="mailto:deepayan.sarkar@gmail.com" target="_blank">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>&lt;<a href="mailto:lawrence.michael@gene.com" target="_blank">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" target="_blank">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" target="_blank">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><br></div></blockquote></div><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><div class="im"><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex">

<div>
&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><br></div></blockquote></div><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><div class="im">

<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204, 204, 204);padding-left:1ex"><div>
&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><div><br>Thanks a lot. Will look at this.<br> <br></div><div class="im"><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></blockquote></div></div></blockquote><div><br>The issue is that scene$clear() frees all objects, including the ellipse, but since Qt constructed the QGraphicsEllipseItem, we have no way of knowing that it has been freed, and so we cannot clear the pointer out of the hash. The fix yesterday made it so that if the R object was garbage collected, the pointer would be cleared in this situation. It may be that we can get away without adding such pointers to the hash at all, i.e., we would create a new wrapper object every time we see them. That will take a lot of thought though about the myriad of consequences.<br>
<br>Please stand by.<br><br>Michael<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="gmail_quote"><div class="im"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

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></div><br>
</blockquote></div><br>