import { Vector3 } from "three";
import { FaceDirection } from "../Add-on/DrawDrilling/DrillType";
import { EBoardKeyList } from "../Common/BoardKeyList";
import { GangDrillType } from "../DatabaseServices/3DSolid/CylinderHole";
import { Board, I2DModeingItem, IKnifeInfo, IModeling } from "../DatabaseServices/Entity/Board";
import { BoardOpenDir } from "../DatabaseServices/Entity/BoardInterface";
import { ExtrudeContourCurve } from "../DatabaseServices/Entity/Extrude";
import { Polyline } from "../DatabaseServices/Entity/Polyline";
import { HardwareCompositeEntity } from "../DatabaseServices/Hardware/HardwareCompositeEntity";
import { HardwareTopline } from "../DatabaseServices/Hardware/HardwareTopline";
import { BrSealedData } from "../GraphicsSystem/CalcEdgeSealing";
import { IHardwareOption } from "../UI/Components/RightPanel/RightPanelInterface";
import { IHighEdgeRemarkItem, IHighReservedEdgeItem, ISealingData } from "../UI/Store/OptionInterface/IHighSealedItem";
import { Entity } from './../DatabaseServices/Entity/Entity';
import { IContourData } from "./Convert2PtsBul";
export interface I3DContourData {
    pts: Vector3[];
    buls: number[];
}
export type IHardwareType = HardwareTopline | HardwareCompositeEntity;
export interface IModelingData {
    feeding: IContourData[];
    thickness: number;
    dir: FaceDirection | number;
    knifeRadius: number;
    origin: IOriginModelingData;
}
export interface IDrillingOption {
    position: Vector3;
    radius: number;
    type: GangDrillType;
    depth: number;
    face: FaceDirection;
    endPt?: Vector3;
    angle?: number;
    name: string;
    goodsId?: string;
    driGId?: number;
}
export interface IBoardHoleInfo {
    frontBackHoles: IDrillingOption[];
    sideHoles: IDrillingOption[];
}
interface IBoardProdInfo {
    id: number;
    name: string;
    [EBoardKeyList.RoomName]: string;
    [EBoardKeyList.CabinetName]: string;
    [EBoardKeyList.Mat]: string;
    [EBoardKeyList.BrMat]: string;
    [EBoardKeyList.Color]: string;
    [EBoardKeyList.Lines]: number;
    [EBoardKeyList.DrillType]: string;
    [EBoardKeyList.Thick]: number;
    spliteHeight: string;
    spliteThickness: string;
    spliteWidth: string;
    isRect: boolean;
    remarks: [string, string][];
    kaiLiaoWidth: number;
    kaiLiaoHeight: number;
    openDir: BoardOpenDir;
}
export interface Side2DModeling {
    path: IContourData;
    dir: number;
    items: I2DModeingItem[];
}
export interface I2DModeling {
    path: IContourData;
    dir: FaceDirection;
    items: I2DModeingItem[];
}
export interface I3DModeling {
    path: I3DContourData;
    dir: FaceDirection;
    knife: IKnifeInfo;
}
/**拆单数据 */
export interface ISpliteOrderData {
    info: IBoardProdInfo;
    outline: IContourData;
    sealing: ISealingData[];
    boardEdgeRemark: IHighEdgeRemarkItem[];
    reservedEdge: IHighReservedEdgeItem[];
    modeling: IModelingData[];
    curveBoardModeling: IModeling[];
    holes: IBoardHoleInfo;
    sideModeling: IOriginSideModelingData[];
    side2DModeling: Side2DModeling[];
    offsetTanslation: Vector3;
    originOutlin: IContourData;
    metalsData?: {
        metals: number;
        comp: number;
    };
    boardContour: IContourData;
    modeling2D: I2DModeling[];
    modeling3D: I3DModeling[];
    isReverse: boolean;
}
export interface IBoardMetalsData {
    metals: ISpliteHardwareData[];
    comp: ISpliteHardwareData[];
}
export interface ISpliteHardwareData {
    metalsOption: IHardwareOption;
    dataList: [string, string][];
    children: ISpliteHardwareData[];
    length?: number;
    size: Vector3;
}
export interface IOriginModelingData {
    outline: IContourData;
    holes: IContourData[];
    thickness?: number;
    dir?: FaceDirection | number;
    knifeRadius?: number;
    addLen?: number;
    addWidth?: number;
    addDepth?: number;
}
export interface IOriginSideModelingData extends IOriginModelingData {
    chaiDanName: string;
    modelType: ModelType;
}
export declare enum ModelType {
    frontBackModel = 0,//正反面造型槽
    sideModel = 1,//绘制的侧槽造型
    drill = 2,//自定义排钻生成的非圆侧孔
    sideHoleModel = 3
}
interface IChaiDanFeedingData extends IOriginModelingData {
    boardContour: IContourData;
    brThickness: number;
}
export declare enum SplitOrderType {
    ChaiDan = 0,// 拆单/走刀时使用
    HoleGrooveDim = 1
}
export declare namespace Production {
    /**
     * 获取板件拆单数据
     * @param {Board} br 板件
     * @param {number} [redundancyKnif=0] 刀冗余
     * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型，默认为拆单
     * @return {*}  {(ISpliteOrderData | undefined)}
     */
    function GetBoardSplitOrderData(br: Board, redundancyKnif?: number, splitType?: SplitOrderType): ISpliteOrderData | undefined;
    function ParseSealData(sealData: BrSealedData, defaultSealColor?: string): {
        seals: ISealingData[];
        reservedEdges: IHighReservedEdgeItem[];
    };
    function GetBoardInfo(br: Board, size: Vector3): IBoardProdInfo;
    function GetMetalTotalEntitys(md: HardwareCompositeEntity, isHole?: boolean, filter?: (e: Entity) => boolean): Entity[];
    function GetOriginBoardModelingData(br: Board): {
        modeling: IOriginModelingData[];
        sideModeling: {
            sideModel: IOriginSideModelingData[];
            sideHole: IDrillingOption[];
        };
    };
    /**
     * 计算板的造型走刀数据(包括自定义排钻的走刀 侧面走刀)
     * @param br
     * @param offsetTanslation
     */
    function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif: number, curveBoardModeling: IModeling[]): {
        modeling: IModelingData[];
        sideModeling: IOriginSideModelingData[];
    };
    function GetBoardSideModelingData(br: Board, toaster?: boolean): {
        sideModel: IOriginSideModelingData[];
        sideHole: IDrillingOption[];
    };
    function GetSpliteOutlineBySpliteSize(br: Board): Polyline | null;
    /**孔信息,侧孔的z 均为 从上到下距离 */
    function GetBoardHolesData(br: Board, offsetTanslation: Vector3, sealedContour: ExtrudeContourCurve): IBoardHoleInfo;
    function RevertSideHolePos(pos: Vector3, thickness: number): void;
    function GetHardwareCompositeData(en: HardwareCompositeEntity): ISpliteHardwareData;
    function GetHardwareToplineData(en: HardwareTopline): ISpliteHardwareData[];
    /**获取排钻数量 */
    function GetTotalDrillCount(brs: (Board | IHardwareType)[]): {
        drillCount: import("../Add-on/LookOverBoardInfos/LookOverBoardInfosTool").ICountType<IHardwareType>[];
        hardwareCount: import("../Add-on/LookOverBoardInfos/LookOverBoardInfosTool").ICountType<IHardwareType>[];
        sealCount: import("../Add-on/LookOverBoardInfos/LookOverBoardInfosTool").ICountType<IHardwareType>[];
        areaCount: import("../Add-on/LookOverBoardInfos/LookOverBoardInfosTool").ICountType<Board>[];
    };
    function GetCabSize(brList: Board[]): Map<Board, Vector3>;
    function Data2Polyline(data: IContourData, isClose?: boolean): Polyline;
    function GetSide2DModeing(br: Board, offsetTanslation: Vector3): Side2DModeling[];
    function Get2DModeing(br: Board, offset: Vector3): I2DModeling[];
    function Get3DModeing(br: Board, offset: Vector3): I3DModeling[];
    function GetChaiDanFeedingPath(data: IChaiDanFeedingData, redundancyKnif?: number): IContourData[];
    function GetGroupName(ent: Entity): string;
}
export declare function ParseArcBoardHoles(br: Board, offsetTanslation: Vector3, parseNail?: boolean): Vector3;
export {};
//# sourceMappingURL=Product.d.ts.map