import { type Vector2 } from '../geometry';
import { Curve, LineCurve, PolylineCurve, QuadraticBezierCurve, CubicBezierCurve, CatmullRomCurve, SplineCurve, EllipseCurve, ArcCurve } from '../curves';
import Path from './Path';
import PathContext from './PathContext';
/**
 * Parameters used for SVG serialization of a path
 */
export type PathSVGSerializationParameters = {
    /**
     * Flag indicating if given curve should be approximated into straight lines
     */
    approximate?: boolean;
    /**
     * Resolution used for approximations
     */
    resolution?: number;
};
/**
 * Utility class for manipulating connected curves and generating SVG path
 *
 * It works by serializing 2D Canvas API to SVG path data
 *
 * @exports
 * @class PathSVG
 * @extends PathContext
 */
export default class PathSVG extends PathContext {
    /**
     * Serialize this path into a SVG path string
     *
     * @param {PathSVGSerializationParameters} [params] Serialization parameters
     * @returns {string}
     */
    toString(params?: PathSVGSerializationParameters): string;
    /**
     * Convert a {@link Curve} into spaced points
     *
     * @param {Curve} curve Curve to approximate
     * @param {number} [resolution=5] Approximation resolution
     * @returns
     */
    static approximate(curve: Curve<Vector2>, resolution?: number): Vector2[];
    /**
     * Serialize a {@link Curve}
     *
     * @param {Curve} curve Curve to serialize
     * @param {PathSVGSerializationParameters} [params] Serialization parameters
     * @returns {string}
     */
    static serialize(curve: Curve<Vector2>, { approximate, resolution }?: PathSVGSerializationParameters): string;
    /**
     * Serialize a {@link LineCurve}
     *
     * @param {LineCurve} curve LineCurve to serialize
     * @returns {string}
     */
    static serializeLineCurve(curve: LineCurve): string;
    /**
     * Serialize a {@link PolylineCurve}
     *
     * @param {PolylineCurve} curve PolylineCurve to serialize
     * @returns {string}
     */
    static serializePolylineCurve(curve: PolylineCurve): string;
    /**
     * Serialize a {@link QuadraticBezierCurve}
     *
     * @param {QuadraticBezierCurve} curve QuadraticBezierCurve to serialize
     * @returns {string}
     */
    static serializeQuadraticBezierCurve(curve: QuadraticBezierCurve): string;
    /**
     * Serialize a {@link CubicBezierCurve}
     *
     * @param {CubicBezierCurve} curve CubicBezierCurve to serialize
     * @returns {string}
     */
    static serializeCubicBezierCurve(curve: CubicBezierCurve): string;
    /**
     * Serialize a {@link CatmullRomCurve} by approximating it into straight lines
     *
     * @param {CatmullRomCurve} curve CatmullRomCurve to serialize
     * @param {number} [resolution] Approximation resolution
     * @returns {string}
     */
    static serializeCatmullRomCurve(curve: CatmullRomCurve, resolution?: number): string;
    /**
     * Serialize a {@link SplineCurve} by approximating it into straight lines
     *
     * @param {SplineCurve} curve SplineCurve to serialize
     * @param {number} [resolution] Approximation resolution
     * @returns {string}
     */
    static serializeSplineCurve(curve: SplineCurve, resolution?: number): string;
    /**
     * Serialize an {@link EllipseCurve}
     *
     * @param {EllipseCurve} curve EllipseCurve to serialize
     * @returns {string}
     */
    static serializeEllipseCurve(curve: EllipseCurve): string;
    /**
     * Serialize an {@link ArcCurve}
     *
     * @param {ArcCurve} curve ArcCurve to serialize
     * @returns {string}
     */
    static serializeArcCurve(curve: ArcCurve): string;
    /**
     * Serialize an {@link Path}
     *
     * @param {Path} path Path to serialize
     * @param {PathSVGSerializationParameters} [params] Serialization parameters
     * @returns {string}
     */
    static serializePath(path: Path<Vector2>, params?: PathSVGSerializationParameters): string;
}
