import { Box3, Matrix4, Vector3 } from "three";
import { Contour } from "../DatabaseServices/Contour";
import { Arc } from "../DatabaseServices/Entity/Arc";
import { Circle } from "../DatabaseServices/Entity/Circle";
import { Curve } from "../DatabaseServices/Entity/Curve";
import { Polyline } from "../DatabaseServices/Entity/Polyline";
interface IOffsetResult {
    index: number;
    curve: Curve;
    sp?: Vector3;
    preArc?: Curve;
    ep?: Vector3;
    nextArc?: Curve;
    paddingCurve?: Curve[];
}
declare class CurveTreeNode {
    curve: Curve;
    children: CurveTreeNode[];
    box: Box3;
    used: boolean;
    constructor(curve: Curve, box?: Box3);
    TrimBy(contour: Contour, box: Box3): void;
    get Nodes(): CurveTreeNode[];
}
export declare class OffsetPolyline {
    _Polyline: Polyline;
    _OffsetDist: number;
    _ToolPath: boolean;
    private _OffsetDistSq;
    _CacheOCS: Matrix4;
    _Vertexs: Vector3[];
    _SubCurves: Curve[];
    _Circles: Circle[];
    _SubOffsetedCurves: IOffsetResult[];
    _CurveTreeNodes: CurveTreeNode[];
    _CurveTrimedTreeNodes: CurveTreeNode[];
    _TrimPolylineContours: Contour[];
    _TrimCircleContours: Circle[];
    _TrimArcContours: Contour[];
    _RetCurves: Polyline[];
    _IsClose: boolean;
    _OffsetDistSign: number;
    constructor(_Polyline: Polyline, _OffsetDist: number, _ToolPath?: boolean, _OffsetDistSq?: number);
    Do(): Polyline[];
    InitSubCurves(): this;
    protected GeneralCirclesAndVertexs(): void;
    protected OffsetSubCurves(): void;
    protected LinkSubCurves(): void;
    private IsSharpCorner;
    protected GeneralTrimContours(): void;
    protected TrimByContours(): void;
    private FilterInvalidCurve;
    private JoinCollinear;
    private LinkResultPolyline;
    private RepairResultPolylineClosemark;
    CheckPointDir(pt: Vector3): boolean;
    GetPointAtCurveDir(pt: Vector3): number;
    protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3): Arc;
}
export {};
//# sourceMappingURL=OffsetPolyline.d.ts.map