         .domain([0, 360])
         .range([0, Math.PI * 2])
 
-    zoomToBoundingBox: (box, duration) ->
+    zoomToBoundingBoxWidth: (box, duration) ->
         width = Math.abs(box.min.x - box.max.x)
 
-        buffer = 0.3
+        distance_scale = 1.2
 
         v_fov = _radianScale @camera.fov
 


        document.body.appendChild( @renderer.domElement )

        @camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 )
        _x = 1
        _y = 2
        @camera.position.z = CAMERA_Z

        h_fov = Math.atan( Math.tan(v_fov/2) * @camera.aspect )

        # See: stackoverflow.com/questions/2866350/move-camera-to-fit-3d-scene
        distance = (width / 2) / Math.tan(h_fov) * distance_scale

        target = new THREE.Vector3(0, 0, - distance)

        @zoomCameraToPosition target, duration

    LINE_SPACING = 40

    alignToNode = (parent) ->
        (child) ->
            word = parent.word
            regex = new RegExp word, "i"
            offset = [ parent, child ]
                .map (_) ->
                    idx = _.line.search regex
                    _._text_object.children[idx].position.x
                .reduce (a, b) -> a - b
            child._text_object.position.x += offset

    addLines: (lines) =>
        lines_object = new THREE.Object3D()
