/** @packageDocumentation
 * @module Curve
 */
import { CurvePrimitive } from "../curve/CurvePrimitive";
import type { GeometryHandler, IStrokeHandler } from "../geometry3d/GeometryHandler";
import type { Plane3dByOriginAndUnitNormal } from "../geometry3d/Plane3dByOriginAndUnitNormal";
import type { Plane3dByOriginAndVectors } from "../geometry3d/Plane3dByOriginAndVectors";
import type { Ray3d } from "../geometry3d/Ray3d";
import type { Transform } from "../geometry3d/Transform";
import type { Point3d, Vector3d } from "../geometry3d/Point3dVector3d";
import type { Range1d, Range3d } from "../geometry3d/Range";
import type { OffsetOptions } from "./OffsetOptions";
import type { LineString3d } from "./LineString3d";
import type { StrokeOptions } from "./StrokeOptions";
/**
 * A ProxyCurve is expected to be used as a base class for curve types that use some existing curve (the proxy)
 * for evaluation and display but carry other defining data.
 * * The ProxyCurve implements all required CurvePrimitive methods by dispatching to the proxy.
 * * These methods presumably require support from the application class and are left abstract:
 *    * clone
 *    * curvePrimitiveType
 *    * isSameCurvePrimitiveType
 *    * isSameGeometryClass
 *    * tryTransformInPlace
 *    * reverseInPlace
 *
 * @public
 */
export declare abstract class ProxyCurve extends CurvePrimitive {
    dispatchToGeometryHandler(handler: GeometryHandler): any;
    protected _proxyCurve: CurvePrimitive;
    /** Constructor CAPTURES the proxyCurve pointer */
    constructor(proxyCurve: CurvePrimitive);
    /** Return the (pointer to) the proxy curve. */
    get proxyCurve(): CurvePrimitive;
    /** Implement by proxyCurve */
    computeStrokeCountForOptions(options?: StrokeOptions): number;
    /** Implement by proxyCurve */
    emitStrokableParts(dest: IStrokeHandler, options?: StrokeOptions): void;
    /** Return a deep clone. This override removes the undefined variant return. */
    abstract clone(): ProxyCurve;
    /** Return a transformed clone. */
    cloneTransformed(transform: Transform): ProxyCurve | undefined;
    /** Implement by proxyCurve. Subclasses may eventually override this default implementation. */
    clonePartialCurve(fractionA: number, fractionB: number): CurvePrimitive | undefined;
    /** Implement by proxyCurve */
    emitStrokes(dest: LineString3d, options?: StrokeOptions): void;
    /** Implement by proxyCurve */
    extendRange(rangeToExtend: Range3d, transform?: Transform): void;
    /** Implement by proxyCurve */
    range(transform?: Transform, result?: Range3d): Range3d;
    /** Implement by proxyCurve */
    fractionToPoint(fraction: number, result?: Point3d): Point3d;
    /** Implement by proxyCurve */
    fractionToPointAndDerivative(fraction: number, result?: Ray3d): Ray3d;
    /** Implement by proxyCurve */
    fractionToPointAnd2Derivatives(fraction: number, result?: Plane3dByOriginAndVectors): Plane3dByOriginAndVectors | undefined;
    /** Implement by proxyCurve */
    isInPlane(plane: Plane3dByOriginAndUnitNormal): boolean;
    /** Implement by proxyCurve */
    quickLength(): number;
    /** Implement by proxyCurve */
    constructOffsetXY(offsetDistanceOrOptions: number | OffsetOptions): CurvePrimitive | CurvePrimitive[] | undefined;
    /** Implement by proxyCurve */
    projectedParameterRange(ray: Vector3d | Ray3d, lowHigh?: Range1d): Range1d | undefined;
}
//# sourceMappingURL=ProxyCurve.d.ts.map