import { Face3, Frustum, Matrix4, Object3D, Vector3 } from 'three';
import { Entity } from '../DatabaseServices/Entity/Entity';
import { IViewer } from '../GraphicsSystem/IView';
import { Filter } from './SelectFilter';
/**
 * 选择对象的基类数据 如盒子选择数据 点选数据  以后可能有多边形选区
 */
export declare class SelectSetBase {
    protected _Viewer: IViewer;
    _ViewerWidth: number;
    _ViewerHeight: number;
    _ProjScreenMatrix: Matrix4;
    _SelectList: Set<Object3D>;
    protected _bIsPerCamera: boolean;
    protected _Frustum: Frustum;
    constructor(view: IViewer);
    get Frustum(): Frustum;
    /**
    * 执行该方法 会对场景内部的实体进行选择测试. 如果满足条件 将会添加在选择(渲染)列表中.
    */
    Select(selectList?: Object3D[], filter?: Filter): void;
    SelectGroup(filter?: Filter): number;
    FrustomIntersectObject(obj: Object3D): boolean;
    get SelectEntityList(): Entity[];
    CheckSelectTraverse(obj: Object3D): boolean;
    /**
     * 子类重载:判断实体是否需要被选中.
     * @param {Object3D} obj
     * @returns {boolean}
     */
    protected CheckSelect(obj: Object3D): boolean;
    WorldToScreenPoint(pt: Vector3): Vector3;
    GetObjectVertices(obj: Object3D): {
        pts: Array<Vector3>;
        faces: Array<Face3>;
    };
    private GetGeometrVerticesAndFaces;
    IntersectLineBase(index1: number, index2: number, screenPts: Array<Vector3>, worldPts: Array<Vector3>): boolean;
    protected IntersectLine(p1Screen: Vector3, p2Screen: Vector3): boolean;
    IntersectObject(obj: Object3D): boolean;
    ContainsPoint(ptWcs: Vector3): boolean;
    /**
    * 直线在平截头体里面的裁剪.
    *
    * @param {Vector3} p1Screen p1对应的屏幕点,如果裁剪成功,参数会被改变
    * @param {Vector3} p2Screen 如果裁剪成功,参数会被改变
    * @param {Vector3} p1Wcs p1对应的世界坐标系
    * @param {Vector3} p2Wcs
    * @param {Frustum} frusum
    * @returns {boolean} 如果直线在平截头体内,那么返回true,否则返回false
    */
    LineFrusumClip(p1Screen: Vector3, p2Screen: Vector3, p1Wcs: Vector3, p2Wcs: Vector3, frusum: Frustum): boolean;
}
//# sourceMappingURL=SelectBase.d.ts.map