 
             @opts.callback? undefined, @
 
+    # client code should call this when done adding objects to the scene
+    finalize: ->
+        @computeDimensions()
+
+        @setFrame()
+        @updateCamera()
+
+        @render_scene()
+
+        # possibly show the canvas warning.
+        if @opts.renderer is 'canvas'
+            @element.title = 'WARNING: using slow non-WebGL canvas renderer'
+
     attachToDom: (parentElement) ->
         if @element?
             removeElement @element

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

    # 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: ->
        ###
        if Math.abs(x1 - x0) < eps
            x1 += 1

                max = @boundingBox.geometry.boundingBox.max
                avg = @boundingBox.geometry.boundingBox.center()

                offset = @maxDim*0.05
                offsets = (new THREE.Vector3 offset, offset, offset).divide @aspectRatio

                textSize = @minDim/@scaleSize/8

                if textSize is 0
                    return
