import { Box3, Material, Matrix3, Matrix4, MeshStandardMaterial, Object3D, Vector3 } from 'three';
import { UpdateDraw } from '../../Common/Status';
import { ObjectSnapMode } from '../../Editor/ObjectSnapMode';
import { Box3Ext } from '../../Geometry/Box';
import { IntersectOption } from '../../GraphicsSystem/IntersectWith';
import { RenderType } from '../../GraphicsSystem/RenderType';
import { CADFiler } from '../CADFiler';
import { CADObject } from '../CADObject';
import { ObjectId } from '../ObjectId';
/**
 * Entity 是所有图元的基类,绘制的实体都集成该类.
 */
export declare class Entity extends CADObject {
    IsEmbedEntity: boolean;
    /**
     * 该实体的只有一个渲染类型,任何渲染类型都一个样
     */
    protected OnlyRenderType: boolean;
    protected _CacheDrawObject: Map<RenderType, Object3D>;
    protected materialId: ObjectId;
    protected _Color: number;
    protected _Matrix: Matrix4;
    protected _SpaceOCS: Matrix4;
    get SpaceOCS(): Matrix4;
    get SpaceOCSInv(): Matrix4;
    set SpaceOCS(m: Matrix4);
    protected _Visible: boolean;
    GroupId: ObjectId;
    Template: ObjectId;
    ProcessingGroupList: ObjectId[];
    /**
     * 当AutoUpdate为false时,记录需要更新的标志.
     * 以便延迟更新时找到相应的更新标志.
     */
    NeedUpdateFlag: UpdateDraw;
    AutoUpdate: boolean;
    set Material(materialId: ObjectId);
    get Material(): ObjectId;
    set ColorIndex(color: number);
    get ColorIndex(): number;
    /**
     * 炸开实体
     */
    Explode(): Entity[];
    /**
     * 返回对象的包围框.
     */
    get BoundingBox(): Box3;
    /**
     * 返回对象在自身坐标系下的Box
     */
    get BoundingBoxInOCS(): Box3Ext;
    GetBoundingBoxInMtx(mtx: Matrix4): Box3Ext;
    get BoundingBoxInSpaceCS(): Box3Ext;
    get OCS(): Matrix4;
    get OCSNoClone(): Matrix4;
    set OCS(mat4: Matrix4);
    get Normal(): Vector3;
    get Position(): Vector3;
    set Position(pt: Vector3);
    Z0(): this;
    MatrixPlanarizere(): this;
    get OCSInv(): Matrix4;
    /**
    * 与指定实体是否共面.
    */
    IsCoplaneTo(e: Entity): boolean;
    /**
     * 测试两个实体的包围盒是否相交.
     */
    BoundingBoxIntersectWith(en: Entity): boolean;
    ClearDraw(): this;
    ClearDrawOfJig(): void;
    get IsOnlyRender(): boolean;
    _drawObject: Object3D;
    get DrawObject(): Object3D;
    get JigObject(): Object3D;
    DestroyJigObject(): void;
    protected _CurRenderType: RenderType;
    UpdateRenderType(type: RenderType): void;
    GetDrawObjectFromRenderType(renderType?: RenderType): Object3D;
    /**
     * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.
     */
    protected InitDrawObject(renderType?: RenderType): Object3D;
    __UpdateVersion__: number;
    /**
     * 当实体数据改变时,绘制的实体必须做出改变.供框架调用
     */
    Update(mode?: UpdateDraw): void;
    UpdateDrawGeometry(): void;
    DeferUpdate(): void;
    /**
     * 当实体需要更新时,需要重载该方法,实现实体更新
     */
    UpdateDrawObject(type: RenderType, en: Object3D): void;
    /**
     * 当实体需要被更新时,更新实体材质
     */
    UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material): void;
    protected get MeshMaterial(): import("three").MeshBasicMaterial | MeshStandardMaterial;
    /**
     * 更新实体Jig状态时的材质
     */
    UpdateJigMaterial(color?: number): void;
    RestoreJigMaterial(): void;
    get Visible(): boolean;
    set Visible(v: boolean);
    private get IsVisible();
    UpdateVisible(): void;
    GoodBye(): void;
    Erase(isErase?: boolean): void;
    EraseEvent(isErase: boolean): void;
    /**
      * 使用统一的方法设置对象的矩阵.
      * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵
      */
    ApplyMatrix(m: Matrix4): this;
    protected ApplyScaleMatrix(m: Matrix4): this;
    protected ApplyMirrorMatrix(m: Matrix4): this;
    GetGripPoints(): Array<Vector3>;
    MoveGripPoints(indexList: number[], vec: Vector3): void;
    /**
     *
     * @param snapMode 捕捉模式(单一)
     * @param pickPoint const
     * @param lastPoint const
     * @param viewXform const 最近点捕捉需要这个变量
     * @returns object snap points
     */
    GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[];
    GetStretchPoints(): Array<Vector3>;
    /**
     * 拉伸夹点,用于Stretch命令
     *
     * @param {Array<number>} indexList 拉伸点索引列表.
     * @param {Vector3} vec 移动向量
     * @memberof Entity
     */
    MoveStretchPoints(indexList: Array<number>, vec: Vector3): void;
    IntersectWith(curve: Entity, intType: IntersectOption): Vector3[];
    Clone(): this;
    CloneDrawObject(from: this): void;
    static __ReadFileIng__: boolean;
    __ReadFileIng__: boolean;
    get ReadFileIng(): boolean;
    /**
     * 从文件读取,序列化自身,如果需要,重载_ReadFile
     */
    ReadFile(file: CADFiler): void;
    protected _ReadFile(file: CADFiler): void;
    WriteFile(file: CADFiler): void;
    ApplyPartialUndo(undoData: CADObject): void;
    CopyFrom(obj: CADObject): void;
}
//# sourceMappingURL=Entity.d.ts.map