/** @packageDocumentation
 * @module Bspline
 */
import { Clipper } from "../clipping/ClipUtils";
import { AnnounceNumberNumberCurvePrimitive } from "../curve/CurvePrimitive";
import { GeometryQuery } from "../curve/GeometryQuery";
import { ProxyCurve } from "../curve/ProxyCurve";
import { GeometryHandler } from "../geometry3d/GeometryHandler";
import { Point3d } from "../geometry3d/Point3dVector3d";
import { Transform } from "../geometry3d/Transform";
import { XYZProps } from "../geometry3d/XYZProps";
/**
 * fitPoints  [[AkimaCurve3d]]
 * * This is a "json compatible" version of the serializer-friendly [[AkimaCurve3dOptions]]
 * @public
 */
export interface AkimaCurve3dProps {
    /** Points that the curve must pass through */
    fitPoints: XYZProps[];
}
/**
 * fitPoints and end condition data for [[AkimaCurve3d]]
 * * This is a "typed object" version of the serializer-friendly [[AkimaCurve3dProps]]
 * * Typical use cases rarely require all parameters, so the constructor does not itemize them as parameters.
 * @public
 */
export declare class AkimaCurve3dOptions {
    fitPoints: Point3d[];
    /**
     *
     * @param fitPoints points to CAPTURE
     * @param knots array to CAPTURE
     */
    constructor(fitPoints?: Point3d[]);
    /** Points that the curve must pass through.
     * First and last 2 points are "beyond the end" for control of end slope.
    fitPoints: Point3d[];
   
   /** Clone with strongly typed members reduced to simple json. */
    cloneAsAkimaCurve3dProps(): AkimaCurve3dProps;
    /** Clone with strongly typed members reduced to simple json. */
    clone(): AkimaCurve3dOptions;
    /** Clone with strongly typed members reduced to simple json. */
    static create(source: AkimaCurve3dProps): AkimaCurve3dOptions;
    static areAlmostEqual(dataA: AkimaCurve3dOptions | undefined, dataB: AkimaCurve3dOptions | undefined): boolean;
}
/**
 * Interpolating curve.
 * * Derive from [[ProxyCurve]]
 * * Use a [[BSplineCurve3d]] as the proxy
 * *
 * @public
 */
export declare class AkimaCurve3d extends ProxyCurve {
    readonly curvePrimitiveType = "interpolationCurve";
    private _options;
    /** CAPTURE properties and proxy curve. */
    private constructor();
    /** Second step of double dispatch: call `handler.handleAkimaCurve3d(this)` */
    dispatchToGeometryHandler(handler: GeometryHandler): any;
    /**
     * Create an [[AkimaCurve3d]] based on points, knots, and other properties in the [[AkimaCurve3dProps]] or [[AkimaCurve3dOptions]].
     * * This saves a COPY OF the options or props.
     * * Use createCapture () if the options or props can be used without copy
     */
    static create(options: AkimaCurve3dOptions | AkimaCurve3dProps): AkimaCurve3d | undefined;
    /**
     * Create an [[AkimaCurve3d]]
     * * The options object is captured into the new curve object (not copied)
     */
    static createCapture(options: AkimaCurve3dOptions): AkimaCurve3d | undefined;
    /** Return a (copy of) the defining points, packed as a Float64Array */
    copyFitPointsFloat64Array(): Float64Array;
    /**
     * Return json key-value pairs for for this [[AkimaCurve3d]].
     * @returns
     */
    toJSON(): any;
    /** Clone the [[AkimaCurve3dProps]] object in this [[AkimaCurve3dProps]] */
    cloneProps(): AkimaCurve3dProps;
    /**
     * Reverse the curve direction.
     * * This updates both the defining properties and the proxy bspline.
     */
    reverseInPlace(): void;
    /**
     * Transform this [[AkimaCurve3d]] and its defining data in place
     */
    tryTransformInPlace(transform: Transform): boolean;
    /**
     * Find intervals of this CurvePrimitive that are interior to a clipper.
     * * This implementation simply passes the call to the proxy curve.
     * @param clipper clip structure (e.g. clip planes).
     * @param announce (optional) function to be called announcing fractional intervals of the input curve.
     * @returns true if any "in" segments are announced.
     */
    announceClipIntervals(clipper: Clipper, announce?: AnnounceNumberNumberCurvePrimitive): boolean;
    /** Return a deep clone */
    clone(): AkimaCurve3d;
    /** Test if `other` is also an [[AkimaCurve3d]] */
    isSameGeometryClass(other: GeometryQuery): boolean;
    isAlmostEqual(other: GeometryQuery): boolean;
}
//# sourceMappingURL=AkimaCurve3d.d.ts.map