     # always call this after adding things to the scene to make sure track
     # controls are sorted out, etc.   Set draw:false, if you don't want to
     # actually *see* a frame.
-    set_frame: (opts) ->
-        opts = defaults opts,
-            color     : @opts.foreground
-            thickness : .4
-            labels    : true  # whether to draw three numerical labels along each of the x, y, and z axes.
-            fontsize  : 14
-            draw      : true
-
+    set_frame: ->
         ###
         if Math.abs(x1 - x0) < eps
             x1 += 1

            else
                console.log "ERROR: bad object type #{opts.obj.type}"

        if opts.set_frame?
            @set_frame opts.set_frame

        @render_scene true

    animate: (opts = {}) ->

            width           : undefined
            height          : undefined
            renderer        : undefined  # 'webgl' or 'canvas' or undefined to choose best
            background      : [1,1,1]
            foreground      : undefined  # defaults to the HSL negation of the background
            frame_color     : undefined  # defaults to the foreground color
            frame_thickness : .4         # zero thickness disables the frame
            label_fontsize  : 14         # set to zero to disable labels on the axes
            spin            : false      # if true, image spins by itself when mouse is over it.
            camera_distance : 10
            aspect_ratio    : undefined  # undefined does nothing or a triple [x,y,z] of length three, which scales the x,y,z coordinates of everything by the given values.
            stop_when_gone  : undefined  # if given, animation, etc., stops when this html element (not jquery!) is no longer in the DOM
            callback        : undefined  # opts.callback(error, this object)

        math3d.load_threejs (error) =>
