/**
 * @module viw-webgl-viewer
 */
import * as THREE from 'three';
import { Object3D } from '../loader/object3D';
import { RenderScene } from './rendering/renderScene';
import { Viewport } from './viewport';
import { Camera } from './camera/camera';
import { Renderer } from './rendering/renderer';
import { GizmoMarker } from './gizmos/markers/gizmoMarker';
/**
 * Type alias for THREE intersection array
 */
export type ThreeIntersectionList = THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>[];
export type ActionType = 'main' | 'double' | 'idle';
export type ActionModifier = 'none' | 'shift' | 'ctrl';
/**
 * Highlevel aggregate of information about a raycast result
 */
export declare class RaycastResult {
    object: Object3D | GizmoMarker | undefined;
    intersections: ThreeIntersectionList;
    firstHit: THREE.Intersection | undefined;
    constructor(intersections: ThreeIntersectionList);
    private GetFirstVimHit;
    private GetFirstMarkerHit;
    private getVimObjectFromHit;
    get isHit(): boolean;
    get distance(): number;
    get position(): THREE.Vector3;
    get threeId(): number;
    get faceIndex(): number;
}
export declare class Raycaster {
    private _viewport;
    private _camera;
    private _scene;
    private _renderer;
    private _raycaster;
    constructor(viewport: Viewport, camera: Camera, scene: RenderScene, renderer: Renderer);
    /**
     * Performs a raycast by projecting a ray from the camera position to a screen position.
     * @param {THREE.Vector2} position - The screen position for raycasting.
     */
    raycast2(position: THREE.Vector2): RaycastResult;
    private filterHits;
    /**
     * Performs a raycast by projecting a ray from the camera position to a world position.
     * @param {THREE.Vector3} position - The world position for raycasting.
     */
    raycast3(position: THREE.Vector3): RaycastResult;
    /**
     * Performs a raycast by projecting a ray from the camera center.
     */
    raycastForward(): RaycastResult;
    /**
     * Returns a THREE.Raycaster projecting a ray from camera position to screen position
     */
    fromPoint2(position: THREE.Vector2, target?: THREE.Raycaster): THREE.Raycaster;
    /**
     * Returns a THREE.Raycaster projecting a ray from the camera position to a screen position.
     * @param {THREE.Vector2} position - The screen position for raycasting.
     * @returns {THREE.Raycaster} A raycaster object for performing raycasting.
     */
    fromPoint3(position: THREE.Vector3, target?: THREE.Raycaster): THREE.Raycaster;
}
/**
 * Represents an input action with its position and modifiers.
 */
export declare class InputAction {
    readonly position: THREE.Vector2;
    readonly modifier: ActionModifier;
    readonly type: ActionType;
    private _raycaster;
    constructor(type: ActionType, modifier: ActionModifier, position: THREE.Vector2, raycaster: Raycaster);
    private _raycast;
    /**
     * A THREE.Raycaster object for custom raycasting.
     */
    get raycaster(): THREE.Raycaster;
    /**
     * Performs raycasting for VIM objects at the current point. This operation can be computationally expensive.
     */
    get raycast(): RaycastResult;
    /**
     * Returns the object at the current point. This operation can cause a computationally expensive raycast evaluation.
     */
    get object(): Object3D | GizmoMarker;
}
