import { Vector3, Camera, TransformNode, Plane } from '../loader/babylonjs-import';
import { Vertex3 } from './index';
/**
 * Useful operations to perform on a plane.
 */
export declare class PlaneUtil {
    private static readonly _tmp;
    /**
     * Finds the intersection area of two axis aligned planes and returns it as 2 points.
     * @param center1 Center of first plane.
     * @param scale1 Scale of first plane.
     * @param center2 Center of second plane.
     * @param scale2 Scale of second plane.
     * @returns The intersection area of the 2 planes. undefined if there is none.
     */
    static planesIntersect(center1: Vector3, scale1: Vector3, center2: Vector3, scale2: Vector3): Vector3[] | undefined;
    /**
     * Given a center point on the plane calculate 4 points in
     * the shape of a square (on plane) where sides have size `scale`.
     * @param center Center of resulting square.
     * @param normal Normal of plane that square will be generated on.
     * @param camera Camera used to scale square.
     * @param scale Square size.
     * @param dst Square corner points.
     * @returns dst
     */
    static cameraScaledSquareOnPlaneToRef<T extends Vertex3>(center: Vertex3, normal: Vertex3, camera: Camera, scale: number, dst: [T, T, T, T]): [T, T, T, T];
    /**
     * Creates a plane aligned with the current camera, and a size that can be used to place points on the plane from center that reaches the edges of the camera frustum
     * @param center A point of the plane
     * @param normal The normal of the plane
     * @param camera The camera with which size should be scaled with to reach the edges of the frustum
     * @param scale Number to scale the returned size with.
     * @returns An object containing the newly created plane, and the size to move things away from the center in order to put them on the camera frustum edges
     */
    static createPlaneFromCamera(center: Vertex3, normal: Vertex3, camera: Camera, scale: number): {
        plane: Plane;
        size: number;
    };
    /**
     * Gives a size on a plane that scales with the distance of the camera.
     * @param center Point on the plane infront of the camera.
     * @param camera Camera to use when scaling.
     * @param scale Number to scale the size with.
     * @returns The camera scaled size.
     */
    static cameraScaledSize(center: Vertex3, camera: Camera, scale: number): number;
    /**
     * Given a center point on the plane calculate 4 points in
     * the shape of a square (on plane) where sides have size `scale`
     * then convert the coordinates to the parent transforms coordinate system.
     * @param center Center of resulting square.
     * @param normal Normal of plane that square will be generated on.
     * @param camera Camera used to scale square.
     * @param scale Square size.
     * @param parent The parent TransformNode, this transform nodes world matrix will be used to transform the coordinates to local space.
     * @param dst Square corner points.
     * @returns dst
     */
    static cameraScaledSquareWithParentOnPlaneToRef<T extends Vertex3>(center: Vertex3, normal: Vertex3, camera: Camera, scale: number, parent: TransformNode, dst: [T, T, T, T]): [T, T, T, T];
    /**
     * Calculate a point on `plane` located at an angle of `theta` around point, P, on plane that is closest to (0,0,0).
     * @param theta Angle in radians in unit circle projected on plane around point P on plane closest to (0,0,0).
     * @param dst Point on plane is written to this object.
     * Point is located on unit circle project on plane around point P closest to (0,0,0).
     * @returns Reference to `dst`
     */
    static pointOnPlaneToRef<T extends Vertex3>(plane: Plane, theta: number, dst: T): T;
    /**
     * Given a center point on the plane calculate 4 points in
     * the shape of a square (on plane) where sides have size `size`.
     * @param centerOnPlane Center of square must lie on plane
     * @param size Size of sides of square.
     * @param dst 4 corners of the calculated square is written to these objects.
     * @returns Reference to `dst`
     */
    static squareOnPlaneToRef<T extends Vertex3>(plane: Plane, centerOnPlane: Vertex3, size: number, dst: [T, T, T, T]): [T, T, T, T];
    /**
     * Validate that a set of given points lie in the provided plane.
     * @param plane Plane to check against.
     * @param points Array containing points to validate.
     * @returns `true` if points lie in plane, `false` otherwise.
     */
    static doesPointsLieInPlane(plane: Plane, points: Vertex3[]): boolean;
}
//# sourceMappingURL=plane.d.ts.map