import { Vector3 } from 'three';
import { DuplicateRecordCloning } from '../Common/Status';
import { BlockTable } from './BlockTable';
import { BlockTableRecord } from './BlockTableRecord';
import { CADFiler } from './CADFiler';
import { CADObject } from './CADObject';
import { DeepCloneFiler } from './DeepCloneFiler';
import { GroupTable } from './GroupTable';
import { HistoricManage } from './HistoricManage';
import { IdMaping } from './IdMaping';
import { AmbientLight } from './Lights/AmbientLight';
import { DirectionalLight } from './Lights/DirectionalLight';
import { HemisphereLight } from './Lights/HemisphereLight';
import { MaterialTable } from './MaterialTable';
import { ObjectId } from './ObjectId';
import { PhysicalMaterialRecord } from './PhysicalMaterialRecord';
import { ProcessingGroupTable } from './ProcessingGroup/ProcessingGroupTable';
import { TemplateTable } from './Template/TemplateTable';
import { TextureTable } from './TextureTable';
interface OwnerContainer {
    Add(object: any, isCheckObjectCleanly?: boolean): void;
}
export declare class Database {
    private defaultDatabase;
    hm: HistoricManage;
    BlockTable: BlockTable;
    MaterialTable: MaterialTable;
    TextureTable: TextureTable;
    TemplateTable: TemplateTable;
    GroupTable: GroupTable;
    ProcessingGroupTable: ProcessingGroupTable;
    ModelSpace: BlockTableRecord;
    LayoutSpace: BlockTableRecord;
    Lights: BlockTableRecord;
    AmbientLight: AmbientLight;
    SunLight: DirectionalLight;
    HemisphereLight: HemisphereLight;
    DefaultMaterial: PhysicalMaterialRecord;
    private idIndex;
    private idMap;
    constructor(buildDefaultDrawing?: boolean, defaultDatabase?: boolean, disableHistoric?: boolean);
    private InitLight;
    SettingDefaultMaterial(): void;
    Destroy(): void;
    FileWrite(): CADFiler;
    FileRead(file: CADFiler): this;
    /**
     * 单个数据库内克隆对象(objects),并将他们附加到指定的容器对象(owner).
     * @param objects 被克隆的对象
     * @param owner 克隆对象的容器
     * @param idMap id映射
     * @param deferXlation 指示是否应该进行ID转换
     * @returns 新克隆的对象列表
     */
    DeepCloneObjects(objects: CADObject[], owner: OwnerContainer, idMap?: IdMaping, deferXlation?: boolean): CADObject[];
    /**
     * 清理拷贝后的实体空引用
     */
    private ClearEmptyAssoc;
    DeepCloneObject(filer: DeepCloneFiler, object: CADObject, owner: OwnerContainer, idMap?: IdMaping): CADObject | undefined;
    /**
     * 将来自不同数据库的对象列表拷贝到本数据库中.
     * 当前支持使用HardId模式来硬关联某个对象,使该对象能够在WblockClone时一起被带过来.
     * 当前不支持硬关联对象的Owner不是默认的容器.
     * 如果需要这么做,请将该对象的Owner设置为Hard关联
     * @param objects 对象不能属于本数据库
     * @param owner 克隆对象的新容器
     * @param idMap id映射
     */
    WblockCloneObejcts(objects: CADObject[], owner: OwnerContainer, idMap: IdMaping, drc: DuplicateRecordCloning): CADObject[];
    /**
     * 克隆引用对象 WriteHardObjectId
     */
    private WblockCloneReferenceObject;
    private WblockCloneObject;
    /**
     * 为拷贝出来的对象分配id索引,并在数据库中注册
     */
    private AllocationObjectId;
    Insert(): void;
    /**
     * 写块
     * @param outputDatabase 输出到指定的数据库
     * @param objects
     * @param basePoint
     * @param cloning
     */
    Wblock(outputDataBase: Database, objects: CADObject[], basePoint: Vector3, cloning: any): void;
    AllocateId(): ObjectId;
    GetObjectId(index: number, create?: boolean): ObjectId;
}
export {};
//# sourceMappingURL=Database.d.ts.map