I think it is worth having a plot/pict or pict/plot library that doesn't depend on racket/GUI/base (or maybe it would be better to disentangle snips). In any case, we have many others such libraries that turn on avoiding racket/gui/base for exactly th<span></span>is reason. <div>
<br></div><div>Robby<br><br>On Tuesday, October 8, 2013, Neil Toronto  wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 10/08/2013 11:22 AM, Stephen Chang wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Short question:<br>
Is there a way to separate the gui-requiring parts of plot from the<br>
non-gui-requiring parts?<br>
<br>
Long question:<br>
Many people have expressed pleasant surprise with the plot-evaluating<br>
ability of the racket pastebin Sam and I are working on.<br>
<br>
Most of the effort is due to scribble's nice sandbox evaluation<br>
capabilities but to get it fully working, I had to hack the plot<br>
library in my racket install.<br>
<br>
The problem is that plot uses racket/gui/base too eagerly but the<br>
server has no display, resulting in a gtk initialization error. I<br>
ultimately got around it by just commenting out all the gui parts of<br>
plot, knowing that it would never get invoked, but obviously this is<br>
an ugly solution.<br>
<br>
I should say that I don't think plot is at fault. The plot library<br>
does lazy-require racket/gui/base but that's not good enough because<br>
the laziness has to propagate to other requires that also require<br>
racket/gui/base (ie plot/snip) which isnt the case. But this cannot<br>
work anyways because lazy-require only works with functions and some<br>
of the things imported by plot/snip are classes.<br>
<br>
I spent awhile trying to separate the gui-requiring parts of plot but<br>
was unsuccessful. Maybe the change has to be in racket/gui/base itself<br>
(related to PR 12465) I don't really know. I guess I'm just looking<br>
for additional insight. Naively, slideshow/pict and 2htdp/draw do not<br>
have this problem so it seemed like it should be possible.<br>
</blockquote>
<br>
Right, racket/gui/base is necessary for snips. In all the documentation that uses plots (plot, math, images) I've used the following hack when setting up the evaluators:<br>
<br>
  (eval '(require (rename-in (except-in plot plot plot3d)<br>
                             [plot-pict  plot]<br>
                             [plot3d-pict  plot3d])))<br>
<br>
You could also rename `plot-bitmap' and `plot3d-bitmap'. (The docs use picts because they look better rendered in a PDF.) It wouldn't be hard to make a module that does that and provides everything. (Except possibly `plot-snip', `plot-frame', etc.)<br>

<br>
I'm reluctant to single out one way of rendering when the GUI isn't available. Picts look nicer when scaled, but bitmaps look nicer when unscaled (plots are subpixel-rendered in this case). Picts take much more time to redraw, but for bitmaps it's just a blit.<br>

<br>
Neil ⊥<br>
<br>
_________________________<br>
 Racket Developers list:<br>
 <a href="http://lists.racket-lang.org/dev" target="_blank">http://lists.racket-lang.org/<u></u>dev</a><br>
</blockquote></div>