             parent_index = positions_array.indexOf parent
             parent_y = parent._text_object.position.y
 
+            parent._positions_array = positions_array
+
             positions_array.forEach (node, index) =>
                 offset_from_parent = index - parent_index
                 obj = node._text_object

                obj.position.y = parent_y + offset_from_parent * line_height

            parent.children.forEach alignToNode(parent)

            parent.children.forEach traverse

        traverse root

                            mesh.material.uniforms.opacity.value = i(t)
                    .each "end", resolve

    addFadeOpacityTransition = (to, duration, target) ->
        (selection) ->
            selection.transition()
                .duration duration
                .delay (_, i) -> i * 10
                .tween "fadeOpacity", ->
                    # if target? then debugger
                    obj = target || this
                    from = obj.material.uniforms.opacity.value
                    i = d3.interpolate from, to
                    (t) ->
                        obj.material.uniforms.opacity.value = i(t)

    fadeToArray = (to, duration) ->
        (array) ->
            new Promise (resolve) ->
                selection = d3.selectAll array
                addFadeOpacityTransition(to, 1000)(selection)
                    .each "end", resolve

    getFadeLettersPromise = (to, duration) ->
        (text_object) ->
