import { Frustum, Material, Matrix3, Matrix4, Object3D, Vector3 } from 'three';
import { UpdateDraw } from '../../Common/Status';
import { ObjectSnapMode } from '../../Editor/ObjectSnapMode';
import { Box3Ext } from '../../Geometry/Box';
import { Vec3 } from '../../Geometry/IVec3';
import { OBB } from '../../Geometry/OBB/obb';
import { IntersectOption } from '../../GraphicsSystem/IntersectWith';
import { RenderType } from '../../GraphicsSystem/RenderType';
import { CADFiler } from '../CADFiler';
import { CADObject } from '../CADObject';
import { ISerialize } from '../ISerialize';
import { LayerTableRecord } from '../LayerTableRecord';
import { ObjectId } from '../ObjectId';
import { PhysicalMaterialRecord } from '../PhysicalMaterialRecord';
/**
 * Entity 是所有图元的基类,绘制的实体都集成该类.
 */
export declare class Entity extends CADObject {
    ParentEntity: Entity;
    IsEmbedEntity: boolean;
    /**
     * 该实体的只有一个渲染类型,任何渲染类型都一个样
     */
    protected OnlyRenderType: boolean;
    protected HasEdgeRenderType: boolean;
    protected HasPlaceFaceRenderType: boolean;
    protected HasBigHoleFaceRenderType: boolean;
    protected _CacheDrawObject: Map<RenderType, Object3D>;
    protected _MaterialId: ObjectId<PhysicalMaterialRecord>;
    protected _Color: number;
    protected _Layer: ObjectId<LayerTableRecord>;
    protected _Matrix: Matrix4;
    constructor();
    protected _SpaceOCS: Matrix4;
    get CacheDrawObject(): Map<RenderType, Object3D>;
    get SpaceCSNoClone(): Matrix4;
    get SpaceOCS(): Matrix4;
    set SpaceOCS(m: Matrix4);
    get SpaceOCSInv(): Matrix4;
    protected _Visible: boolean;
    protected _VisibleInRender: boolean;
    protected _Freeze: boolean;
    get Freeze(): boolean;
    set Freeze(f: boolean);
    get VisibleInRender(): boolean;
    set VisibleInRender(v: boolean);
    protected _LockMaterial: boolean;
    get LockMaterial(): boolean;
    set LockMaterial(f: boolean);
    GroupId: ObjectId;
    Template: ObjectId;
    ProcessingGroupList: ObjectId[];
    /**
     * 当AutoUpdate为false时,记录需要更新的标志.
     * 以便延迟更新时找到相应的更新标志.
     */
    NeedUpdateFlag: UpdateDraw;
    AutoUpdate: boolean;
    CopyInRenderTpye: RenderType;
    set Material(materialId: ObjectId<PhysicalMaterialRecord>);
    get Material(): ObjectId<PhysicalMaterialRecord>;
    GetMaterialSlots(): void;
    IsMtlLockAtSlot(slotIndex?: number): boolean;
    SetMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>, slotIndex?: number): void;
    GetMtlLockedStatus(): {
        allMtlLocked: boolean;
        partMtlLocked: boolean;
    };
    /**
     * 获取实体的 PhysicalMaterialRecord
     * @param {boolean} [containErased=false] 是否包含被删除的材质
     * @return {*}  {PhysicalMaterialRecord[]}
     * @memberof Entity
     */
    GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[];
    get HasLayer(): boolean;
    get Layer(): ObjectId<LayerTableRecord>;
    set Layer(id: ObjectId<LayerTableRecord>);
    SetAllMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>): void;
    set ColorIndex(color: number);
    get ColorIndex(): number;
    get DrawColorIndex(): number;
    /** 用于彩印的颜色(白->黑) */
    get PrintColorIndex(): number;
    /**
     * 炸开实体
     */
    Explode(): Entity[];
    /**
     * 返回对象的包围框.
     */
    get BoundingBox(): import("three").Box3;
    /**
     * 返回对象在自身坐标系下的Box
     */
    get BoundingBoxInOCS(): Box3Ext;
    get OBB(): OBB;
    GetBoundingBoxInMtx(mtx: Matrix4): Box3Ext;
    get BoundingBoxInSpaceCS(): Box3Ext;
    get OCS(): Matrix4;
    get OCSNoClone(): Matrix4;
    set OCS(mat4: Matrix4);
    get Normal(): Vector3;
    get Position(): Vector3;
    Move(v: Vec3): this;
    set Position(pt: Vector3);
    get Z(): number;
    set Z(z: number);
    Z0(): this;
    MatrixPlanarizere(): this;
    get OCSInv(): Matrix4;
    /**
    * 与指定实体是否共面.
    */
    IsCoplaneTo(e: Entity): boolean;
    /**
     * 测试两个实体的包围盒是否相交.
     */
    BoundingBoxIntersectWith(en: Entity): boolean;
    ClearDraw(): this;
    ClearDrawOfJig(): void;
    get IsOnlyRender(): boolean;
    protected get CaseShadow(): boolean;
    protected get ReceiveShadow(): 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(): Material | Material[];
    /**
     * 更新实体Jig状态时的材质
     */
    UpdateJigMaterial(color?: number): void;
    RestoreJigMaterial(): void;
    get Visible(): boolean;
    set Visible(v: boolean);
    get IsVisible(): boolean;
    UpdateVisible(): void;
    GoodBye(): void;
    Erase(isErase?: boolean): void;
    EraseEvent(isErase: boolean): void;
    static _xa: Vector3;
    static _ya: Vector3;
    static _za: Vector3;
    /**
      * 使用统一的方法设置对象的矩阵.
      * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵
      */
    ApplyMatrix(m: Matrix4): this;
    protected ApplyScaleMatrix(m: Matrix4): this;
    protected ApplyMirrorMatrix(m: Matrix4): this;
    /**
    *
    * @param snapMode 捕捉模式(单一)
    * @param pickPoint const
    * @param lastPoint const
    * @param viewXform const 最近点捕捉需要这个变量
    * @returns object snap points
    */
    GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3, frustum?: Frustum): Vector3[];
    GetGripPoints(): Vector3[];
    MoveGripPoints(indexList: number[], vec: Vector3): void;
    GetStretchPoints(): Array<Vector3>;
    /**
     * 拉伸夹点,用于Stretch命令
     * @param {Array<number>} indexList 拉伸点索引列表.
     * @param {Vector3} vec 移动向量
     */
    MoveStretchPoints(indexList: Array<number>, vec: Vector3): void;
    IntersectWith(curve: Entity, intType: IntersectOption): Vector3[];
    Clone(cloneDraw?: boolean): 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;
}
export declare class EntityColorHistoryRecord implements ISerialize {
    color: number;
    constructor(color: number);
    ReadFile(file: CADFiler): this;
    WriteFile(file: CADFiler): this;
}
//# sourceMappingURL=Entity.d.ts.map