import { BaseSopOperation } from './_Base';
import { CoreGroup } from '../../../core/geometry/Group';
import { InputCloneMode } from '../../../engine/poly/InputCloneMode';
import { Vector3 } from 'three';
import { DefaultOperationParams } from '../../../core/operations/_Base';
export declare enum RaySopMode {
    PROJECT_RAY = "project rays",
    MIN_DIST = "minimum distance"
}
export declare const RAY_SOP_MODES: RaySopMode[];
interface RaySopParams extends DefaultOperationParams {
    mode: number;
    useNormals: boolean;
    direction: Vector3;
    transformPoints: boolean;
    transferFaceNormals: boolean;
    transferUVs: boolean;
    addDistAttribute: boolean;
}
export declare class RaySopOperation extends BaseSopOperation {
    static readonly DEFAULT_PARAMS: RaySopParams;
    static readonly INPUT_CLONED_STATE: InputCloneMode[];
    static type(): Readonly<'ray'>;
    private _matDoubleSideTmpSetter;
    private _raycaster;
    cook(inputCoreGroups: CoreGroup[], params: RaySopParams): CoreGroup;
    private _pointPos;
    private _pointNormal;
    private _hitPointInfo;
    private _triangle;
    private _faceNormal;
    private _ray;
    private _computeWithProjectRay;
    private _computeWithMinDist;
    private _addDistAttribute;
}
export {};
