/** @packageDocumentation
 * @module Curve
 */
import { GeometryHandler } from "../geometry3d/GeometryHandler";
import { IndexedXYZCollection } from "../geometry3d/IndexedXYZCollection";
import { Point3d } from "../geometry3d/Point3dVector3d";
import { CurveChain } from "./CurveCollection";
import { CurvePrimitive } from "./CurvePrimitive";
import { RecursiveCurveProcessor } from "./CurveProcessor";
import { GeometryQuery } from "./GeometryQuery";
import { StrokeOptions } from "./StrokeOptions";
/**
 * A `Loop` is a curve chain that is the boundary of a closed (planar) loop.
 * @see [Curve Collections]($docs/learning/geometry/CurveCollection.md) learning article.
 * @public
 */
export declare class Loop extends CurveChain {
    /** String name for schema properties */
    readonly curveCollectionType = "loop";
    /** Tag value that can be set to true for user code to mark inner and outer loops. */
    isInner: boolean;
    /** Test if `other` is a `Loop` */
    isSameGeometryClass(other: GeometryQuery): boolean;
    constructor();
    /**
     * Create a loop from a variable length list of [[CurvePrimitive]]s.
     * * A significant gap between the end of one curve and the start of the next, or between chain start and end,
     * is not bridged and may cause unexpected behavior.
     * @param curves array of individual curve primitives, assumed to form a closed planar loop.
     */
    static create(...curves: CurvePrimitive[]): Loop;
    /**
     * Create a loop from an array of [[CurvePrimitive]]s.
     * * A significant gap between the end of one curve and the start of the next, or between chain start and end,
     * is not bridged and may cause unexpected behavior.
     * @param curves array of individual curve primitives, assumed to form a closed planar loop.
     */
    static createArray(curves: CurvePrimitive[]): Loop;
    /**
     * Create a loop from an array of coplanar points.
     * @param points vertices of polygon, closure point optional.
    */
    static createPolygon(points: IndexedXYZCollection | Point3d[]): Loop;
    /** Create a loop with the stroked form of this loop. */
    cloneStroked(options?: StrokeOptions): Loop;
    /** Return the boundary type (2) of a corresponding  MicroStation CurveVector */
    dgnBoundaryType(): number;
    /** Invoke `processor.announceLoop(this, indexInParent)` */
    announceToCurveProcessor(processor: RecursiveCurveProcessor, indexInParent?: number): void;
    /** Create a new `Loop` with no children */
    cloneEmptyPeer(): Loop;
    /** Second step of double dispatch:  call `handler.handleLoop(this)` */
    dispatchToGeometryHandler(handler: GeometryHandler): any;
}
/**
 * Structure carrying a pair of loops with curve geometry.
 * @public
 */
export declare class LoopCurveLoopCurve {
    /** First loop */
    loopA?: Loop;
    /** A curve (typically an edge of loopA) */
    curveA?: CurvePrimitive;
    /** second loop */
    loopB?: Loop;
    /** A curve (typically an edge of loopB) */
    curveB?: CurvePrimitive;
    /** Constructor */
    constructor(loopA: Loop | undefined, curveA: CurvePrimitive | undefined, loopB: Loop | undefined, curveB: CurvePrimitive | undefined);
    /** Set the loopA and curveA members */
    setA(loop: Loop, curve: CurvePrimitive): void;
    /** Set the loopB and curveB members */
    setB(loop: Loop, curve: CurvePrimitive): void;
}
/**
 * Carrier object for loops characterized by area sign
 * @public
 */
export interface SignedLoops {
    /** Array of loops that have positive area sign (i.e. counterclockwise loops). */
    positiveAreaLoops: Loop[];
    /** Array of loops that have negative area sign (i.e. clockwise loops). */
    negativeAreaLoops: Loop[];
    /** Slivers where there are coincident sections of input curves. */
    slivers: Loop[];
    /** Array indicating edges between loops */
    edges?: LoopCurveLoopCurve[];
}
//# sourceMappingURL=Loop.d.ts.map