Re: Writing graphics to another notebook?
- To: mathgroup at smc.vnet.net
- Subject: [mg43079] Re: [mg43061] Writing graphics to another notebook?
- From: Selwyn Hollis <selwynh at earthlink.net>
- Date: Mon, 11 Aug 2003 02:15:57 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
On Sunday, August 10, 2003, at 01:46 AM, AES/newspost wrote:
> It could save me some unpredictable amount of experimenting with the
> (moderately complicated) Notebook commands if someone could just lay
> out
> a template structure that would show me what commands to put in a
> primary notebook "A" so as to:
>
> * Create a new named notebook "B" and open it for writing
B = NoteBookCreate[ <options>]
> * Within a Do loop or other iterative structure in A, repeatedly
> create graphics (Plots or DisplayTogethers) which are not displayed in
> A
> but are written to B and displayed there. (No need to retain any
> memory
> of the individual graphics in A, if that helps with memory
> conservation.) * After exiting the iterative structure, perhaps also
> Select and
> Animate all the graphics in B (preferably but not necessarily returning
> control to A when this animation is terminated).
See the function popUpAnimate below. This is based on something posted
here by Omega Consulting some months ago.
> * Save the notebook B to my HD, maybe each time a new graphic is added
> within the iteration (for safety against crashes or freezes), and also
> at the end of the iteration.
At some point insert NotebookSave[B], or use the option
NotebookAutoSave->True within NotebookCreate.
> * After exiting the iterative structure and still under program
> control
> in A, Select and Export the complete string of graphics in B as a
> QuickTime movie.
In principle you should be able to do something like
FrontEndExecute[{FrontEndToken[nb, "SelectionSaveSpecial[QuickTime]"].
However, I've not been able to make that work.
------------
popUpAnimate[cmnd_, {t_Symbol, t1_, t2_, dt_}] :=
Block[{$DisplayFunction = Identity, nb, winsize,
aratio, frame1, frame, frames, windowopts},
frame1 = ReleaseHold[Hold[cmnd] /. t -> t1];
aratio = AspectRatio /. AbsoluteOptions[frame1];
winsize = {80, 90} + If[SelectedNotebook[] =!= $Failed,
{1, aratio}*(ImageSize/.AbsoluteOptions[SelectedNotebook[]]),
{1, aratio}*(ImageSize/.NotebookCreate[Visible -> False])];
windowopts = Join[If[$VersionNumber>= 5., {Saveable->False}, {}],
{WindowElements -> {"StatusArea", "HorizontalScrollBar"},
WindowSize -> winsize}];
nb = NotebookCreate[Sequence @@ windowopts];
NotebookWrite[nb,
Cell["Building frames... Please wait.", "Text"],
After];
frames = Table[NotebookWrite[nb,
frame = graphicCell[Evaluate[cmnd],
CellMargins->{{20,0},{0,0}}, ImageMargins->{{0,0},{0,0}}];
NotebookDelete[nb]; frame, All];
If[$VersionNumber >= 5., Pause[0.1]];
frame, {t, t1, t2, dt}];
SelectionMove[nb, All, Notebook];
SelectionDelete[nb];
NotebookWrite[nb,
Cell["Use the controls at the bottom of the window.", "Text"],
After];
NotebookWrite[nb, Cell[CellGroupData[frames, Closed]], All];
FrontEndExecute[{FrontEndToken[nb, "SelectionAnimate"]}]];
SetAttributes[popUpAnimate, HoldFirst];
graphicCell[graphics_, opts___] :=
Cell[GraphicsData["PostScript", DisplayString[graphics]], "Graphics",
opts];
(*Example.*)
popUpAnimate[
Plot[Sin[x], {x, 0, t}, PlotRange -> {{0, 2Pi}, {-1.1, 1.1}}],
{t, Pi/6, 2Pi, Pi/6}]
(*Note that with pre-5.0 Mathematica, the Saveable->False option
doesn't apply, and Pause[x] doesn't work if x<1. The purpose of
Pause[0.1] in the code is only to make the drawing of the frames
proceed more smoothly as they are generated.*)
-----
Selwyn Hollis
http://www.math.armstrong.edu/faculty/hollis