We draw a spiral of spheres:
   sage: v = [(sin(i),cos(i),i) for i in [-4,-3.5,..4]]
   sage: S = sum(sphere(v[i], size=1/2, color=((i-4)/8, 1/2,(4-i)/8)) for i in range(len(v)))
   sage: S.show(aspect_ratio=[1,1,1])

NOTE: The sphere above have holes in them.  This is a \emph{bug} in jmol.


  * Only the last jmol 3d image is displayed, e..g., in one notebook cell
        sage: x, y = var('x,y')
        sage: plot3d(x^2 + y^2, (x,-2,2), (y,-2,2))
        sage: plot3d(sin(x*y), (x, -pi, pi), (y, -pi, pi))
    only shows the second plot.


Final todo push for 2.9.2:

 (done)  * axes labels (but don't break tachyon!)

 * make sure options to plot commands get passed through to show

  * the following commands:
checklist -- each option is documented
       (done)   -- kwds get saved for show

       (done) - parametric_plot3d
       - list_plot3d: implement algorithm from plane.
    (needs tachyon)   - line3d
       - frame3d
       - plot3d
       (done) - text3d
    (parameter to line3d)   - arrow
       - torus
       - cone

    (done)   - point
    (done)   - sphere

    (done)   - tetrahedron
       - cube
       - octahedron
       - dodecahedron
       - icosahedron

 (done) * make sure rgbcolor, color and opacity work for all plots.

 (done) * clean up all doctests

=====================================================================

General TODO:

* implement frame_thickness and frame_color for everything in platonic.py, not just for cube.

  * Make it so all extra parameters to any plotting commands (in 2d or 3d)
    are saved and passed through to show -- or at least those that
    are relevant, e.g., xmin, xmax, etc.
  * Fix all doctests now that show is not needed by default.
  * aspect_ratio for 2d plots.

Jmol bugs:

 * reloading a worksheet kills all jmol applets!  -- note if we get
   rid of jmolSetDocument(cell_writer) this does not happen; but then
   other things break.  Probably need to save the javascript and
   execute it each time we reload.

* Sphere(0.3,color='red').translate([1,1,-1]) has *holes* in it!!

* (done) Default zoom is useless -- we will have to rescale the whole scene I think.
   Basically we have to figure out the true range of the 3d plot in each direction,
   then rescale everything into a 10x10x10 square.
   We should draw axis and allow for aspect ratios.
 * Invalid color doesn't yield an error message, e.g., Icosahedron(texture='yello')
 * color --> rgbcolor
 * Observation:
      jmol embedded applets *crash* when more than 10 or so appear in
      a page... unless I make them all small (e.g. 50 pixels) in which
      case they DO NOT crash.

Jmol todo:

 * names should make sense (basically like in mathematica) and be lower case
     * for user exposed functions, (not necessarily for the classes)
 * Dynamic resizing in the notebook
 * Javascript controls in the notebook


Tachyon bugs:
 * Text3D doesn't work
