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 { Line } from "../DatabaseServices/Entity/Line";
import { Polyline } from "../DatabaseServices/Entity/Polyline";
interface IOffsetResult {
    index: number;
    curve: Curve;
    /**偏移距离(仅在局部偏移时提供) */
    dist?: number;
    sp?: Vector3;
    ep?: Vector3;
    preCurve?: Curve;
    nextCurve?: Curve;
    paddingCurve?: Curve[];
}
export declare class CurveTreeNode {
    curve: Curve;
    children: this[];
    box: Box3;
    used: boolean;
    Create(curve: Curve, box?: Box3): this;
    constructor(curve: Curve, box?: Box3);
    TrimBy(contour: Contour, box: Box3): void;
    get Nodes(): this[];
}
export declare enum PolylineJoinType {
    Square = 0,
    Round = 1
}
export declare class OffsetPolyline {
    _Polyline: Polyline;
    _OffsetDist: number;
    _ToolPath: boolean;
    private _OffsetDistSq;
    private _JoinType;
    private _KeepCollinearLine;
    _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;
    _IsTopoOffset: boolean;
    _AllowConverToCircle: boolean;
    /**
     *
     * @param _Polyline
     * @param _OffsetDist
     * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大)
     * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点
     * @param [_JoinType=PolylineJoinType.Round]  尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡
     * @param [_KeepCollinearLine=false] 保留共线部分(在向外偏移时,生产程序希望偏移后的结果仍然是一个封闭的曲线,将这个改成true能实现这个目的)
     */
    constructor(_Polyline: Polyline, _OffsetDist: number, _ToolPath?: boolean, _OffsetDistSq?: number, //对直角走刀不进行圆弧过度
    _JoinType?: PolylineJoinType, //仅在走刀路径时生效
    _KeepCollinearLine?: boolean);
    Do(): Polyline[];
    InitSubCurves(): this;
    protected GeneralCirclesAndVertexs(): void;
    protected OffsetSubCurves(): void;
    LinkSubCurves(): void;
    /**
     * 判断两曲线是否尖角化
     * 在
     *  1.直线和圆弧,圆弧和圆弧
     *  2.有交点,无真交点时
     * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果.
     * 如果是谷,则允许连接 #I7WKKG
     */
    private IsSharpCorner;
    protected GeneralTrimContours(): void;
    protected TrimByContours(): void;
    private FilterInvalidCurve;
    private JoinCollinear;
    private LinkResultPolyline;
    private RepairResultPolylineClosemark;
    /**
     *
     * @param pt
     * @param [maxDistSq=0] 默认不设置 则为0 如果设置了,当点离曲线的距离的平方小于该值时,则返回0
     * @returns
     * @memberof OffsetPolyline
     */
    CheckPointDir(pt: Vector3, maxDistSq?: number): boolean;
    /**
    * 点在线上 或者在线内(外)
    * @param pt
     * @param [maxDistSq=0] 默认不设置 则为0 如果设置了,当点离曲线的距离的平方小于该值时,则返回0
    * @returns 0在线上 1 -1
    */
    GetPointAtCurveDir(pt: Vector3, maxDistSq?: number): number;
    protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3): Arc;
    protected CreateSquare(center: Vector3, curveNow: IOffsetResult, curveNext: IOffsetResult, entTypeCode: number): Line;
}
/**
 * @returns 1:全line 2:全arc 3:line and arc
 */
export declare function EntityEncode2(c1: Curve, c2: Curve): number;
export declare function CurveIsFine(curve: Curve): boolean;
export {};
//# sourceMappingURL=OffsetPolyline.d.ts.map