/** @packageDocumentation
 * @module Geometry
 */
import { Angle, Matrix3d, Point2d, Point3d, Range2d, Range3d, Range3dProps, Transform, YawPitchRollAngles } from "@itwin/core-geometry";
import { Placement2dProps, Placement3dProps } from "../ElementProps";
import { Frustum } from "../Frustum";
/** A Range3d that is aligned with the axes of spatial coordinates.
 * @public
 * @extensions
 */
export type AxisAlignedBox3d = Range3d;
/** The properties of a Range3d.
 * @public
 * @extensions
 */
export type AxisAlignedBox3dProps = Range3dProps;
/** A bounding box aligned to the orientation of a 3d Element
 * @public
 * @extensions
 */
export type ElementAlignedBox3d = Range3d;
/** A bounding box aligned to the orientation of a 2d Element
 * @public
 * @extensions
 */
export type ElementAlignedBox2d = Range2d;
/** A bounding box aligned to a local coordinate system
 * @public
 * @extensions
 */
export type LocalAlignedBox3d = Range3d;
/** Either a Placement2d or Placement3d
 * @public
 * @extensions
 */
export type Placement = Placement2d | Placement3d;
/** The placement of a GeometricElement3d. This includes the origin, orientation, and size (bounding box) of the element.
 * All geometry of a GeometricElement are relative to its placement.
 * @public
 */
export declare class Placement3d implements Placement3dProps {
    origin: Point3d;
    angles: YawPitchRollAngles;
    bbox: ElementAlignedBox3d;
    constructor(origin: Point3d, angles: YawPitchRollAngles, bbox: ElementAlignedBox3d);
    /** Get the rotation from local coordinates of this placement to world coordinates. */
    get rotation(): Matrix3d;
    /** Get the transform from local coordinates of this placement to world coordinates. */
    get transform(): Transform;
    /** determine if this is 3d placement */
    get is3d(): boolean;
    /** Create a new Placement3d from a Placement3dProps. */
    static fromJSON(json?: Placement3dProps): Placement3d;
    /** Get the 8 corners, in world coordinates, of this placement. */
    getWorldCorners(out?: Frustum): Frustum;
    /** Set the contents of this Placement3d from another Placement3d */
    setFrom(other: Placement3d): void;
    /** Determine whether this Placement3d is valid. */
    get isValid(): boolean;
    /** Calculate the axis-aligned bounding box for this placement. */
    calculateRange(): AxisAlignedBox3d;
    /** Multiply the Transform of this Placement3d by the specified *other* Transform.
     * * Specifically `this.angles` is set to the rotation specified by `other.matrix * this.transform.matrix`
     * and `this.origin` is set to the origin of `other * this.transform`.
     * * Since the placement transform is local-to-world, this means `other` is a world-to-world transform.
     * @throws [[IModelError]] if the Transform is invalid for a GeometricElement3d.
     */
    multiplyTransform(other: Transform): void;
}
/** The placement of a GeometricElement2d. This includes the origin, rotation, and size (bounding box) of the element.
 * @public
 */
export declare class Placement2d implements Placement2dProps {
    origin: Point2d;
    angle: Angle;
    bbox: ElementAlignedBox2d;
    constructor(origin: Point2d, angle: Angle, bbox: ElementAlignedBox2d);
    /** Get the rotation from local coordinates of this placement to world coordinates. */
    get rotation(): Matrix3d;
    /** Get the transform from local coordinates of this placement to world coordinates. */
    get transform(): Transform;
    /** Create a new Placement2d from a Placement2dProps. */
    static fromJSON(json?: Placement2dProps): Placement2d;
    /** determine if this is 3d placement */
    get is3d(): boolean;
    /** Get the 8 corners, in world coordinates, of this placement. */
    getWorldCorners(out?: Frustum): Frustum;
    /** Determine whether this Placement2d is valid. */
    get isValid(): boolean;
    /** Set the contents of this Placement2d from another Placement2d */
    setFrom(other: Placement2d): void;
    /** Calculate the axis-aligned bounding box for this placement. */
    calculateRange(): AxisAlignedBox3d;
    /** Multiply the Transform of this Placement2d by the specified *other* Transform.
     * @throws [[IModelError]] if the Transform is invalid for a GeometricElement2d.
     */
    multiplyTransform(other: Transform): void;
}
//# sourceMappingURL=Placement.d.ts.map