import { Vector3 } from '../types/Math';
import { MeshTopology } from '../procoregl/MeshTopology';
export declare const SNAP_TYPE: {
    readonly surface: "surface";
    readonly midpoint: "midpoint";
    readonly edge: "edge";
    readonly endpoint: "endpoint";
};
export type SnapType = (typeof SNAP_TYPE)[keyof typeof SNAP_TYPE];
export declare function getIntersectionSnapAndOutline(params: {
    intersection: THREE.Vector3;
    matrixWorld: THREE.Matrix4;
    meshTopology: MeshTopology;
    intersectionFaceNormal: THREE.Vector3;
    camera: THREE.PerspectiveCamera;
    canvasWidth: number;
    canvasHeight: number;
    outlineOptions: {
        hideDifferentFaceNormal: boolean;
        hideNonCoplanar: boolean;
    };
}): {
    snapType: SnapType;
    snapPosition: THREE.Vector3;
    snapEdge: {
        start: THREE.Vector3;
        end: THREE.Vector3;
    } | null;
    boundaryEdges: {
        start: THREE.Vector3;
        end: THREE.Vector3;
    }[];
    cursorRotation: Vector3;
    snapScreenPosition: Vector3;
};
export declare function detectSnapFeature(intersectPoint: THREE.Vector3, line: THREE.Line3, cameraPosition: THREE.Vector3): {
    detectedSnapType: SnapType;
    detectedSnapPosition: THREE.Vector3;
};
export declare function getNormalFromPoints(point1: THREE.Vector3, point2: THREE.Vector3, point3: THREE.Vector3): THREE.Vector3;
export declare function isNormalFacingCamera(normal: THREE.Vector3, cameraDirection: THREE.Vector3): boolean;
export declare function arePlanesCoplanar(normal1: THREE.Vector3, point1: THREE.Vector3, normal2: THREE.Vector3, point2: THREE.Vector3): boolean;
export declare function areNormalsSimilar(normal1: THREE.Vector3, normal2: THREE.Vector3): boolean;
export declare function getSurfaceCursorAngle(camera: THREE.PerspectiveCamera, faceNormal: THREE.Vector3, intersection: THREE.Vector3, canvasWidth: number, canvasHeight: number): Vector3;
export declare function getEdgeCursorAngle(start: Vector3, end: Vector3, camera: THREE.PerspectiveCamera, canvasWidth: number, canvasHeight: number): number;
export declare function arePointsCollinear(p1: THREE.Vector3, p2: THREE.Vector3, p3: THREE.Vector3): boolean;
