import { Vector3D, Matrix3D, Box, Sphere, AbstractionBase, Plane3D } from '@awayjs/core';
import { IPartitionTraverser } from '../partition/IPartitionTraverser';
import { BoundsPickerPool } from '../PickGroup';
import { BoundingVolumeType } from '../bounds/BoundingVolumeType';
import { BoundingVolumeBase } from '../bounds/BoundingVolumeBase';
import { IBoundsPicker } from './IBoundsPicker';
import { ContainerNode } from '../partition/ContainerNode';
import { INode } from '../partition/INode';
/**
* Picks a 3d object from a view or scene by 3D raycast calculations.
* Performs an initial coarse boundary calculation to return a subset
* of entities whose bounding volumes intersect with the specified ray,
* then triggers an optional picking collider on individual renderable
* objects to further determine the precise values of the picking ray collision.
*
* @class away.pick.RaycastPicker
*/
export declare class BoundsPicker extends AbstractionBase implements IPartitionTraverser, IBoundsPicker {
private static tmpMatrix;
private static tmpPoint;
private static tmpBox;
static MINIMAL_SCALE: number;
private _boundingVolumePools;
private _pickGroup;
private _boundsPickers;
/**
*
* @returns {ContainerNode}
*/
get node(): ContainerNode;
/**
* Indicates the width of the display object, in pixels. The width is
* calculated based on the bounds of the content of the display object. When
* you set the width property, the scaleX property
* is adjusted accordingly, as shown in the following code:
*
*
Except for TextField and Video objects, a display object with no
* content(such as an empty sprite) has a width of 0, even if you try to set
* width to a different value.
height property, the scaleY property
* is adjusted accordingly, as shown in the following code:
*
* Except for TextField and Video objects, a display object with no
* content (such as an empty sprite) has a height of 0, even if you try to
* set height to a different value.
depth property, the scaleZ property
* is adjusted accordingly, as shown in the following code:
*
* Except for TextField and Video objects, a display object with no
* content (such as an empty sprite) has a depth of 0, even if you try to
* set depth to a different value.
obj display object.
*
* @param obj The display object to test against.
* @return true if the bounding boxes of the display objects
* intersect; false if not.
*/
hitTestObject(obj: BoundsPicker): boolean;
_getBoxBoundsInternal(invTargetMatrix?: Matrix3D, strokeFlag?: boolean, fastFlag?: boolean, cache?: Box, target?: Box): Box;
_getSphereBoundsInternal(center?: Vector3D, matrix3D?: Matrix3D, strokeFlag?: boolean, fastFlag?: boolean, cache?: Sphere, target?: Sphere): Sphere;
/**
*
* @param planes
* @param numPlanes
* @returns {boolean}
*/
isInFrustum(planes: Array