import type { Types } from '@cornerstonejs/core';
import type { ISpline, SplineProps, ClosestControlPoint, ClosestSplinePoint, ClosestPoint, ControlPointInfo, SplineCurveSegment } from '../../../types';
declare abstract class Spline implements ISpline {
    private _controlPoints;
    private _resolution;
    private _fixedResolution;
    private _closed;
    private _invalidated;
    private _curveSegments;
    private _aabb;
    private _length;
    constructor(props?: SplineProps);
    protected get controlPoints(): Types.Point2[];
    get numControlPoints(): number;
    get resolution(): number;
    set resolution(resolution: number);
    get fixedResolution(): boolean;
    get closed(): boolean;
    set closed(closed: boolean);
    get aabb(): Types.AABB2;
    get length(): number;
    get invalidated(): boolean;
    protected set invalidated(invalidated: boolean);
    hasTangentPoints(): boolean;
    addControlPoint(point: Types.Point2): void;
    addControlPoints(points: Types.Point2[]): void;
    addControlPointAtU(u: number): ControlPointInfo;
    deleteControlPointByIndex(index: number): boolean;
    clearControlPoints(): void;
    setControlPoints(points: Types.Point2[]): void;
    updateControlPoint(index: number, newControlPoint: Types.Point2): void;
    getControlPoints(): Types.Point2[];
    getClosestControlPoint(point: Types.Point2): ClosestControlPoint;
    getClosestControlPointWithinDistance(point: Types.Point2, maxDist: number): ClosestControlPoint;
    getClosestPoint(point: Types.Point2): ClosestSplinePoint;
    getClosestPointOnControlPointLines(point: Types.Point2): ClosestPoint;
    getPolylinePoints(): Types.Point2[];
    getPreviewPolylinePoints(controlPointPreview: Types.Point2, closeDistance: number): Types.Point2[];
    isPointNearCurve(point: Types.Point2, maxDist: number): boolean;
    containsPoint(point: Types.Point2): boolean;
    protected abstract getTransformMatrix(): number[];
    protected abstract getSplineCurves(): SplineCurveSegment[];
    protected abstract getPreviewCurveSegments(controlPointPreview: Types.Point2, closeSpline: boolean): SplineCurveSegment[];
    private _update;
    private _convertCurveSegmentsToPolyline;
    private _getCurveSegmmentsDistanceSquaredInfo;
    private _getCurveSegmmentsWithinDistance;
    private _getLineSegmentAt;
    private _getClosingCurveSegmentWithStraightLineSegment;
}
export { Spline as default, Spline };
