/** @packageDocumentation
 * @module Views
 */
import { BeEvent, Id64String } from "@itwin/core-bentley";
import { ClipVector, ClipVectorProps, XAndY } from "@itwin/core-geometry";
import { ModelClipGroupProps, ModelClipGroups } from "./ModelClipGroup";
/** Properties of a [[ViewDefinitionProps]] stored as JSON.
 * @see [[ViewDefinitionProps.jsonProperties]].
 * @see [[ViewDetails3dProps]] for additional properties specific to 3d views.
 * @public
 * @extensions
 */
export interface ViewDetailsProps {
    /** Id of the aux coord system. Default: invalid. */
    acs?: Id64String;
    /** Aspect ratio skew (x/y) used to exaggerate the y axis of the view. Default: 1.0. */
    aspectSkew?: number;
    /** Grid orientation. Default: WorldXY. */
    gridOrient?: GridOrientationType;
    /** Default: 10. */
    gridPerRef?: number;
    /** Default: 1.0. */
    gridSpaceX?: number;
    /** Default: same as gridSpaceX. */
    gridSpaceY?: number;
    /** Describes the [ClipVector]($core-geometry) applied to the view. */
    clip?: ClipVectorProps;
}
/** Describes the orientation of the grid displayed within a [Viewport]($frontend).
 * @public
 * @extensions
 */
export declare enum GridOrientationType {
    /** Oriented with the view. */
    View = 0,
    /** Top */
    WorldXY = 1,
    /** Right */
    WorldYZ = 2,
    /** Front */
    WorldXZ = 3,
    /** Oriented by the auxiliary coordinate system. */
    AuxCoord = 4
}
/** Properties of a [[ViewDefinition3dProps]] stored as JSON.
 * @see [[ViewDefinition3dProps.jsonProperties]].
 * @public
 * @extensions
 */
export interface ViewDetails3dProps extends ViewDetailsProps {
    /** Whether viewing tools are prohibited from operating in 3 dimensions on this view. Default: false. */
    disable3dManipulations?: boolean;
    /** Defines how to clip groups of models. */
    modelClipGroups?: ModelClipGroupProps[];
}
/** Encapsulates access to optional view details stored in JSON properties.
 * @see [[ViewDetailsProps]] for the JSON representation.
 * @see [ViewDefinition.details]($backend) and [ViewState.details]($frontend).
 * @public
 */
export declare class ViewDetails {
    /** @internal */
    protected readonly _json: ViewDetailsProps;
    private _clipVector?;
    /** Event raised just before assignment to the [[clipVector]] property. */
    readonly onClipVectorChanged: BeEvent<(newClip: ClipVector | undefined) => void>;
    /** @internal */
    constructor(jsonProperties: {
        viewDetails?: ViewDetailsProps;
    });
    /** The Id of the auxiliary coordinate system for the view. */
    get auxiliaryCoordinateSystemId(): Id64String;
    set auxiliaryCoordinateSystemId(id: Id64String);
    /** Maximum aspect ratio skew. Apps can override this by changing its value. */
    static maxSkew: number;
    /** The aspect ratio skew (x/y, usually 1.0) used to exaggerate the y axis of the view. */
    get aspectRatioSkew(): number;
    set aspectRatioSkew(skew: number);
    /** The orientation of the view's grid. */
    get gridOrientation(): GridOrientationType;
    set gridOrientation(orientation: GridOrientationType);
    /** The number of grids per ref for the view. */
    get gridsPerRef(): number;
    set gridsPerRef(gridsPerRef: number);
    /** The grid spacing for the view. */
    get gridSpacing(): XAndY;
    set gridSpacing(spacing: XAndY);
    /** Clipping volume for the view.
     * @note Do *not* modify the returned ClipVector. If you wish to change the ClipVector, clone the returned ClipVector, modify it as desired, and pass the clone back to the setter.
     */
    get clipVector(): ClipVector | undefined;
    set clipVector(clip: ClipVector | undefined);
    /** Returns the internal JSON representation. This is *not* a copy.
     * @internal
     */
    getJSON(): Readonly<ViewDetailsProps>;
}
/** Encapsulates access to optional 3d view details stored in JSON properties.
 * @see [[ViewDetails3dProps]] for the JSON representation.
 * @public
 */
export declare class ViewDetails3d extends ViewDetails {
    private _modelClipGroups?;
    private get _json3d();
    /** Event raised when just before assignment to the [[modelClipGroups]] property. */
    readonly onModelClipGroupsChanged: BeEvent<(newGroups: ModelClipGroups) => void>;
    /** @internal */
    constructor(jsonProperties: {
        viewDetails?: ViewDetails3dProps;
    });
    /** Controls whether viewing tools are allowed to operate on the view in 3 dimensions. */
    get allow3dManipulations(): boolean;
    set allow3dManipulations(allow: boolean);
    /** Groups of models associated with [ClipVector]($core-geometry)s by which those models should be clipped.
     * If the view and the model both have a clip vector defined, geometry in the model will be clipped by the intersection of the two clip vectors.
     * [[ViewFlags.clipVolume]] has no effect on model clips, only the view clip - model clips are always applied.
     * @note Do **not** modify the returned object directly. Instead, clone it, modify the clone, and pass the clone to the property setter.
     */
    get modelClipGroups(): ModelClipGroups;
    set modelClipGroups(groups: ModelClipGroups);
    /** Returns the internal JSON representation. This is *not* a copy.
     * @internal
     */
    getJSON(): Readonly<ViewDetails3dProps>;
}
//# sourceMappingURL=ViewDetails.d.ts.map