import { Box2 } from "../Common/Box2";
import { NestFiler } from "../Common/Filer";
import { Point } from "../Common/Point";
import { PartState } from "./PartState";
import { Path } from "./Path";
/**
 * 零件类
 *  零件类可以绑定数据，也存在位置和旋转状态的信息
 *
 * 初始化零件：
 *  传入零件的轮廓，刀半径，包围容器（或者为空？）
 *  初始化用于放置的轮廓。将轮廓首点移动到0点，记录移动的点P。
 *
 * 零件放置位置：
 *  表示零件轮廓首点的位置。
 *
 * 零件的旋转：
 *  表示零件轮廓按照首点（0）旋转。
 *
 * 还原零件的放置状态：
 *  同样将零件移动到0点
 *  同样将零件旋转
 *  同样将零件移动到指定的位置
 *  零件可能处于容器中，变换到容器坐标系
 *
 */
export declare class Part<T = any, Matrix = any> {
    Id: number;
    private _Holes;
    _RotateHoles: PartState[][];
    StateIndex: number;
    RotatedStates: PartState[];
    PlacePosition: Point;
    HolePosition: Point;
    UserData: T;
    Parent: Part;
    PlaceCS: Matrix;
    PlaceIndex: number;
    GroupMap: {
        [key: number]: Part[];
    };
    get State(): PartState;
    get Holes(): PartState[];
    Init(path: Path, bin: Path, rotateCount?: number): this;
    Init2(path: Path, bin: Path, rotations?: number[]): this;
    ParseGroup(partOther: Part, bin: Path): Part[];
    AppendHole(path: Path): void;
    Mirror(doubleFace: boolean): void;
    Clone(): Part<any, any>;
    Mutate(): this;
    ReadFile(file: NestFiler): void;
    WriteFile(file: NestFiler): void;
}
export declare class PartGroup extends Part {
    part1: Part;
    part2: Part;
    index1: number;
    index2: number;
    p: Point;
    box: Box2;
    constructor(part1: Part, part2: Part, index1: number, index2: number, p: Point, box: Box2, bin: Path);
    Export(): Part[];
}
//# sourceMappingURL=Part.d.ts.map