/**
* Creates bounding volumes based in an input object.
*
* @class
* @interface
*/
Grape2D.BVFactory = function() {};
Grape2D.BVFactory.prototype = {
constructor: Grape2D.BVFactory,
/**
* Creates a shape, based on the type set, from an {@link Grape2D.AABB}.
*
* @param {!Grape2D.AABB} aabb The object.
* @return {!Grape2D.Shape} Shape based on the type of the factory.
* @public
*/
createFromAABB: function(aabb) {},
/**
* Creates a shape, based on the type set, from an {@link Grape2D.Circle}.
*
* @param {!Grape2D.Circle} circle The object.
* @return {!Grape2D.Shape} Shape based on the type of the factory.
* @public
*/
createFromCircle: function(circle) {},
/**
* Creates a shape, based on the type set, from an {@link Grape2D.Polygon}.
*
* @param {!Grape2D.Polygon} polygon The object.
* @return {!Grape2D.Shape} Shape based on the type of the factory.
* @public
*/
createFromPolygon: function(polygon) {},
/**
* Creates a shape for a scene, based on the renderer and the camera
* being used.
*
* @param {!Grape2D.Renderer} renderer Renderer to where the scene
* will be rendered.
* @param {!Grape2D.Camera} camera Camera that is capturing the scene.
* @return {!Grape2D.Shape} Shape based on the type of the factory.
* @public
*/
createSceneBV: function(renderer, camera) {},
/**
* Returns a place holder shape, of the type of the factory.
* It should only be used to avoid using <code>null</code> to represent
* bounding volumes temporarily. Shouldn't create a new instance every
* time this method is called.
*
* @return {!Grape2D.Shape} A shape has a place holder.
* @public
*/
getPlaceHolder: function(){}
};