import { Box3, BufferGeometry, Line as TLine, Matrix3, Matrix4, Object3D, Shape, Vector2, Vector3 } from 'three';
import { Line2 } from 'three/examples/jsm/lines/Line2';
import { Status } from '../../Common/Status';
import { ObjectSnapMode } from '../../Editor/ObjectSnapMode';
import { IntersectOption } from '../../GraphicsSystem/IntersectWith';
import { RenderType } from '../../GraphicsSystem/RenderType';
import { CADFiler } from '../CADFiler';
import { Curve } from './Curve';
/**
 * 圆弧实体类
 * 与ACAD不同,这个类加入了时针变量,并且默认构造的圆弧为顺时针圆弧.
 *
 * 关于时针圆弧:
 * 起始圆弧到终止圆弧总是在0-2PI之间.(一个完整的圆).
 * 圆弧的绘制从起始圆弧绘制到终止圆弧. 按照时针绘制.
 * 参考计算圆弧的完整角度方法查看该计算方式.
 */
export declare class Arc extends Curve {
    constructor(center?: Vector3, radius?: number, startAngle?: number, endAngle?: number, clockwise?: boolean);
    private _Radius;
    private _StartAngle;
    private _EndAngle;
    /**
     * 曲线为顺时针
     */
    private _Clockwise;
    get Shape(): Shape;
    get Center(): Vector3;
    set Center(v: Vector3);
    get Normal(): Vector3;
    set Normal(v: Vector3);
    get Area(): number;
    get Area2(): number;
    get IsClose(): boolean;
    get BoundingBox(): Box3;
    get Radius(): number;
    set Radius(v: number);
    get IsClockWise(): boolean;
    set IsClockWise(v: boolean);
    get StartAngle(): number;
    set StartAngle(v: number);
    get EndAngle(): number;
    set EndAngle(v: number);
    get StartPoint(): Vector3;
    set StartPoint(v: Vector3);
    get EndPoint(): Vector3;
    set EndPoint(v: Vector3);
    get StartParam(): number;
    get EndParam(): number;
    get Length(): number;
    GetParamAtPoint2(pt: Vector3): number;
    PtOnCurve3(p: Vector3, fuzz?: number): boolean;
    protected ApplyScaleMatrix(m: Matrix4): this;
    protected ApplyMirrorMatrix(m: Matrix4): this;
    GetPointAtParam(param: number): Vector3;
    GetPointAtDistance(distance: number): Vector3;
    GetDistAtParam(param: number): number;
    GetDistAtPoint(pt: Vector3): number;
    GetParamAtPoint(pt: Vector3): number;
    /**
     * 利用角度计算该角度在圆弧中代表的参数.
     * 如果角度在圆弧内,那么返回0-1
     * 如果角度不在圆弧内,那么尝试返回离圆弧起始或者结束的较近的参数
     *
     * @param {number} an
     * @returns
     * @memberof Arc
     */
    GetParamAtAngle(an: number): number;
    /**
     * 根据角度获得参数,不过在这里我们可以指定我们是要获取前面的参数还是后面的参数(正负)
     * @param an
     * @param [isStart] true:返回负数，false 返回正数
     * @returns
     */
    GetParamAtAngle2(an: number, isStart?: boolean): number;
    GetAngleAtPoint(pt: Vector3): number;
    GetAngleAtParam(param: number): number;
    GetSplitCurves(param: number[] | number): Arc[];
    GetOffsetCurves(offsetDist: number): Arc[];
    Extend(newParam: number): void;
    Join(cu: Curve): Status;
    Reverse(): this;
    IntersectWith2(curve: Curve, intType: IntersectOption, tolerance?: number): import("../../GraphicsSystem/IntersectWith").IntersectResult[];
    /**
     * 计算出圆弧所包含的角度
     *
     * @readonly
     * @type {number}
     * @memberof Arc
     */
    get AllAngle(): number;
    get Bul(): number;
    /**
     * 计算所包含的角度
     *
     * @private
     * @param {number} endAngle 结束的角度
     * @returns
     * @memberof Arc
     */
    ComputeAnlge(endAngle: number): number;
    /**
     * 解析两点和凸度所构成的圆弧
     *
     * @param {Vector2} p1
     * @param {Vector2} p2
     * @param {number} bul 凸度,在cad中,凸度为 <(四分之一圆心角)的正切值>
     */
    ParseFromBul(p1: Vector3 | Vector2, p2: Vector3 | Vector2, bul: number): Arc;
    FromThreePoint(pt1: Vector3, pt2: Vector3, pt3: Vector3): this;
    /**
     * 重载: 初始化绘制实体.
     *
     * @param {RenderType} [renderType=RenderType.Wireframe]
     */
    InitDrawObject(renderType?: RenderType): Line2 | TLine<BufferGeometry, import("three").LineBasicMaterial>;
    private UpdateGeometry;
    /**
     * 重载:更新绘制的实体
     *
     * @param {RenderType} type
     * @param {Object3D} obj
     * @memberof Arc
     */
    UpdateDrawObject(type: RenderType, obj: Object3D): void;
    GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[];
    GetGripPoints(): Array<Vector3>;
    MoveGripPoints(indexList: Array<number>, vec: Vector3): void;
    GetStretchPoints(): Array<Vector3>;
    MoveStretchPoints(indexList: Array<number>, vec: Vector3): void;
    GetParamAtDist(d: number): number;
    GetFistDeriv(pt: number | Vector3): Vector3;
    GetClosestPointTo(pt: Vector3, extend: boolean): Vector3;
    protected _ReadFile(file: CADFiler): void;
    WriteFile(file: CADFiler): void;
}
//# sourceMappingURL=Arc.d.ts.map