         @computeDimensions()
 
         @setFrame()
-        @updateCamera()
+        @setCamera()
+        @setOrbitControls()
+
+        @runChangeHooks()
 
         @render_scene()
 

                addLabel [avg.x, max.y, min.z], "x = #{format avg.x}"
                addLabel [min.x, max.y, min.z], format(min.x)

    updateCamera: ->
        center = @rescale @boundingBox.geometry.boundingBox.center()

        @camera.lookAt center
        @controls.target = center

        @camera.position.set 1.5, 1.5, 0.75
        @camera.position.multiplyScalar(@maxDim).add center

        @camera.far = @maxDim*16
        @camera.near = @minDim/4
        @camera.updateProjectionMatrix()

    animate: (opts = {}) ->
        opts = defaults opts,

        @maxDim = Math.max dim.x, dim.y, dim.z
        @minDim = Math.min dim.x, dim.y, dim.z

        @center = @rescale @boundingBox.geometry.boundingBox.center()

    # always call this after adding things to the scene to make sure track
    # controls are sorted out, etc. The client should never have to worry
    # about calling this
