             @boundingBox.geometry.boundingBox = obj.geometry.boundingBox.clone()
         @boundingBox.update @boundingBox
 
-    add_text: (opts) ->
+    addText: (opts) ->
         opts = defaults opts,
             loc              : [0,0,0]
             text             : required

        @controls.addEventListener 'change', =>
            if @renderer_type is 'dynamic'
                @rescale_objects()
                if @_3dText?
                    up = (new THREE.Vector3 0, 1, 0).applyQuaternion @camera.quaternion
                    for mesh in @_3dText
                        mesh.up = up.clone()
                        mesh.lookAt @camera.position
                @renderer.render @scene, @camera

        @scene.add mesh
        return mesh

    addGroup: (opts) ->
        opts = defaults opts,
            subobjs     : required

        return opts.subobjs.map @addObj

    addObj: (opts) ->
        opts = defaults opts, {type: required}, true

        switch opts.type
            when 'group'
                delete opts.type
                return @addGroup opts
            when 'text'
                delete opts.type
                return @addText opts
            when 'index_face_set'
                delete opts.type
                return @addIndexFaceSet opts
            when 'line'
                delete opts.type
                return @addLine opts
            when 'point'
                delete opts.type
                return @addPoint opts
            else
                console.log "ERROR: bad object type #{opts.obj.type}"

