import { Material, Object3D, Shape, Vector3 } from 'three';
import { Status } from '../../Common/Status';
import { IntersectOption, IntersectResult } from '../../GraphicsSystem/IntersectWith';
import { RenderType } from '../../GraphicsSystem/RenderType';
import { DragPointType } from './DragPointType';
import { Entity } from './Entity';
export declare enum ExtendType {
    /**
     * 前后都不延伸
     */
    None = 0,
    /**
     * 只允许延伸前面
     */
    Front = 1,
    /**
     * 只允许延伸后面
     */
    Back = 2,
    /**
     * 前后延伸
     */
    Both = 3
}
/**
 * 曲线的基类,子类请实现以下方法.
 */
export declare abstract class Curve extends Entity {
    constructor();
    get Is2D(): boolean;
    get StartPoint(): Vector3;
    set StartPoint(v: Vector3);
    get StartParam(): number;
    get EndPoint(): Vector3;
    set EndPoint(v: Vector3);
    /** 曲线中点 */
    get Midpoint(): Vector3;
    get MidParam(): number;
    get EndParam(): number;
    get Area(): number;
    /**
     *获得曲线的面积,逆时针为正,顺时针为负.
     */
    get Area2(): number;
    get Length(): number;
    get IsClose(): boolean;
    /** 曲线为顺时针 */
    get IsClockWise(): boolean;
    abstract get Shape(): Shape;
    GetPointAtParam(param: number): Vector3;
    GetPointAtDistance(distance: number): Vector3;
    GetDistAtParam(param: number): number;
    GetDistAtPoint(pt: Vector3): number;
    GetParamAtPoint(pt: Vector3): number;
    GetParamAtPoint2(pt: Vector3): number;
    GetParamAtDist(d: number): number;
    /**
     * 返回曲线在指定位置的一阶导数(在wcs内)
     *
     * @param {(number | Vector3)} param
     * @returns {Vector3}
     * @memberof Curve
     */
    GetFistDeriv(param: number | Vector3): Vector3;
    GetFistDerivAngle(param: number | Vector3): number;
    /**
     * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线.
     * @param {(number[] | number)} param
     * @returns {Array<Curve>}
     */
    GetSplitCurves(param: number[] | number): Array<Curve>;
    GetCurveAtParamRange(startParam: number, EndParam: number): Array<Curve>;
    GetSplitCurvesByPts(pt: Vector3[] | Vector3): Array<Curve>;
    protected SplitParamSort(param: number[] | number): number[];
    Extend(newParam: number): void;
    /**
    * 连接曲线到本曲线,如果成功返回true
    * @param {Curve} cu 需要连接的曲线
    * @returns {boolean} 连接成功
    * @memberof Curve
    */
    Join(cu: Curve, allowGap?: boolean, tolerance?: number): Status;
    Reverse(): this;
    PtOnCurve(pt: Vector3, fuzz?: number): boolean;
    PtOnCurve2(pt: Vector3): boolean;
    PtOnCurve3(p: Vector3, fuzz?: number): boolean;
    ParamOnCurve(param: number, fuzz?: number): boolean;
    GetOffsetCurves(offsetDist: number): Array<Curve>;
    GetClosestPointTo(pt: Vector3, extend: boolean): Vector3;
    /**
     * 曲线相交点
     */
    IntersectWith(curve: Curve, intType: IntersectOption, tolerance?: number): Vector3[];
    /**
     * 曲线相交点和点的参数
     */
    IntersectWith2(curve: Curve, intType: IntersectOption, tolerance?: number): IntersectResult[];
    /**
     * 拽托点个数
     */
    GetDragPointCount(drag: DragPointType): number;
    protected OnlyRenderType: boolean;
    /**
     * 重载:更新实体材质
     */
    UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material): void;
    UpdateJigMaterial(color?: number): void;
}
//# sourceMappingURL=Curve.d.ts.map