import { Material, Object3D, Curve as TCurve, Vector3 } from 'three';
import { Status } from '../../Common/Status';
import { IntersectOption, IntersectResult } from '../../GraphicsSystem/IntersectWith';
import { RenderType } from '../../GraphicsSystem/RenderType';
import { CADFiler } from '../CADFiler';
import { ObjectId } from '../ObjectId';
import { DragPointType } from './DragPointType';
import { Entity } from './Entity';
import { LineType } from './LineType';
export declare enum ExtendType {
    /**
     * 前后都不延伸
     */
    None = 0,
    /**
     * 只允许延伸前面
     */
    Front = 1,
    /**
     * 只允许延伸后面
     */
    Back = 2,
    /**
     * 前后延伸
     */
    Both = 3
}
/**
 * 曲线的基类,子类请实现以下方法.
 */
export declare abstract class Curve extends Entity {
    constructor();
    protected _RoomName: string;
    protected _CabinetName: string;
    protected _ArrayCurveTemplates: ObjectId[];
    get RoomName(): string;
    set RoomName(value: string);
    get CabinetName(): string;
    set CabinetName(value: string);
    get ArrayCurveTemplates(): ObjectId<import("../CADObject").CADObject>[];
    get Is2D(): boolean;
    static DefaultLineType: LineType;
    protected _LineType: LineType;
    get LineType(): LineType;
    set LineType(lineType: LineType);
    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;
    get Shape(): TCurve<any>;
    GetPointAtParam(param: number): Vector3;
    GetPointAtDistance(distance: number): Vector3;
    GetDistAtParam(param: number): number;
    GetDistAtPoint(pt: Vector3): number;
    GetParamAtPoint(pt: Vector3, fuzz?: number): number;
    GetParamAtPoint2(pt: Vector3, fuzz?: number): number;
    GetParamAtDist(d: number): number;
    /**
     * 返回曲线在指定位置的一阶导数(在wcs内)
     * @param {(number | Vector3)} param
     */
    GetFirstDeriv(param: number | Vector3): Vector3;
    GetFirstDerivAngle(param: number | Vector3): number;
    /**
     * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线.
     * @param {(number[] | number)} param
     */
    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;
    /**
     * 偏移曲线
     * @param offsetDist 左边负数 右边正数
     * @returns 返回偏移后的曲线 可能返回多条曲线
     */
    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;
    GetDrawCount(): number;
    /**
    * @param {RenderType} [renderType=RenderType.Wireframe]
    */
    protected InitDrawObject(renderType?: RenderType): Object3D;
    /**
     * 重载:更新绘制的实体
     * @param {RenderType} type
     * @param {Object3D} obj
     */
    UpdateDrawObject(type: RenderType, obj: Object3D): void;
    /**
     * 重载:更新实体材质
     */
    UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material): void;
    UpdateJigMaterial(color?: number): void;
    protected ReadRoomAndCabinetName(file: CADFiler): void;
    protected WriteRoomAndCabinetName(file: CADFiler): void;
    protected ReadArrayCurveTemplates(file: CADFiler): void;
    protected WriteArrayCurveTemplates(file: CADFiler): void;
}
export declare const DbCurve: typeof Curve;
//# sourceMappingURL=Curve.d.ts.map