import { Matrix4, Vector3, Object3D, Geometry, Matrix3, UVGenerator } from 'three';
import { BoardOpenDir, BoardProcessOption, BoardType, FaceDirection } from '../../UI/Store/BoardInterface';
import { CADFiler } from '../CADFiler';
import { ObjectId } from '../ObjectId';
import { Shape } from '../Shape';
import { ExtrudeSolid, ExtureContourCurve } from './Extrude';
import { RenderType } from '../../GraphicsSystem/RenderType';
import { Polyline } from './Polyline';
import { ObjectSnapMode } from '../../Editor/ObjectSnapMode';
export declare function ConverBoardTypeToSpaceType(type: BoardType): number;
export interface IModeling {
    shape: Shape;
    thickness: number;
    dir: FaceDirection;
    knifeRadius: number;
    addLen: number;
    addWidth?: number;
    addDepth?: number;
}
export interface IKnifeInfo {
    angle: number;
    radius: number;
    id: string;
    name: string;
}
export interface I2DModeingItem {
    depth: number;
    offset: number;
    knife: IKnifeInfo;
}
export interface I2DModeling {
    path: Polyline;
    dir: FaceDirection;
    items: I2DModeingItem[];
}
export interface IPathItem {
    pt: Vector3;
    bul: number;
}
export interface I3DModeling {
    path: IPathItem[];
    dir: FaceDirection;
    knife: IKnifeInfo;
}
/**
 * 板件实体
 */
export declare class Board extends ExtrudeSolid {
    private _Rotation;
    private _BoardType;
    private _Name;
    private _BoardProcessOption;
    private _DrillList;
    private _LayerNails;
    RelativeHardware: ObjectId[];
    OpenDir: BoardOpenDir;
    private _IsChaiDan;
    private _2DModelingList;
    private _3DModelingList;
    constructor();
    /**
     * 创建一个代理数组,数组改变时被监听
     */
    private CreateArray;
    private InitBoardData;
    InitBoard(length: number, width: number, thickness: number, boardType?: BoardType): void;
    static CreateBoard(length: number, width: number, thickness: number, boardType?: BoardType): Board;
    get DrillList(): Map<ObjectId, ObjectId[][]>;
    get LayerNails(): ObjectId[];
    AppendNails(ids: ObjectId[]): void;
    ClearLayerNails(): void;
    /**
     * 你可以安心的修改它,这样会直接影响到板件,因为板件对这个对象添加了代理.
     */
    get BoardProcessOption(): BoardProcessOption;
    set BoardProcessOption(obj: BoardProcessOption);
    get NeedUpdateRelevanceGroove(): boolean;
    protected GetRelevanceKnifes(knifs: ExtrudeSolid[]): void;
    ClearRelevance(en?: ExtrudeSolid): void;
    get SplitBoards(): this[];
    get BoardModeling(): IModeling[];
    set BoardModeling(models: IModeling[]);
    get Modeling2D(): I2DModeling[];
    set Modeling2D(ms: I2DModeling[]);
    get Modeling3D(): I3DModeling[];
    set Modeling3D(ms: I3DModeling[]);
    ClearModeling2DList(): void;
    ClearModeling3DList(): void;
    get IsChaiDan(): boolean;
    set IsChaiDan(v: boolean);
    ClearBoardModeling(): void;
    /**
     * 注意传入的排钻列表,避免指针被引用
     */
    AppendDrillList(k: ObjectId, drs: ObjectId[][]): void;
    ClearDrillList(k: ObjectId): void;
    ClearAllDrillList(): void;
    Erase(isErase?: boolean): void;
    get RotateMat(): Matrix4;
    get Height(): number;
    set Height(v: number);
    get Width(): number;
    set Width(v: number);
    get BoardType(): BoardType;
    set BoardType(type: BoardType);
    SetBoardType(type: BoardType): void;
    get MinPoint(): Vector3;
    get MaxPoint(): Vector3;
    get IsRect(): boolean;
    get IsSpecialShape(): boolean;
    get HasGroove(): boolean;
    get Name(): string;
    set Name(n: string);
    /**
     * 板件的轮廓,在板件坐标系中的表现方式.
     */
    get ContourCurve(): ExtureContourCurve;
    set ContourCurve(cu: ExtureContourCurve);
    Explode(): import("./Region").Region[];
    RotateBoard(rox: number, roy: number, roz: number): void;
    get Rotation(): {
        x: number;
        y: number;
        z: number;
    };
    protected ApplyMirrorMatrix(m: Matrix4): this;
    get UCGenerator(): UVGenerator;
    UpdateUV(geo: Geometry, ocs: Matrix4, isRev?: boolean): void;
    CopyFrom(obj: Board): void;
    Clone(): this;
    Join(target: this): import("../../Common/Status").Status;
    private GetLinesDir;
    _2D3DPathObject: Object3D;
    private Get2DAnd3DPaths;
    HandleSpliteEntitys(splitEntitys: this[]): void;
    InitDrawObject(renderType?: RenderType): Object3D;
    UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D;
    OffsetPathCache: Map<Polyline, {
        [key: string]: Polyline;
    }>;
    private GetOffsetPath;
    private HandleBoardMaterial;
    UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void;
    CheckSealing(obj: Object3D): void;
    GetStretchPoints(): Vector3[];
    MoveStretchPoints(indexList: Array<number>, vec: Vector3): void;
    GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[];
    DeferUpdate(): void;
    protected _ReadFile(file: CADFiler): void;
    WriteFile(file: CADFiler): void;
}
//# sourceMappingURL=Board.d.ts.map