/** @packageDocumentation
 * @module Topology
 */
import { Point3d } from "../geometry3d/Point3dVector3d";
import { HalfEdgeGraph } from "./Graph";
import { HalfEdgePositionDetail } from "./HalfEdgePositionDetail";
/**
 * Options for setting the z-coordinate of a vertex in the triangulation when a point with the same xy is inserted.
 * @internal
 */
export declare enum InsertedVertexZOptions {
    /** The point's z-coordinate is ignored, and the existing vertex's z-coordinate is unchanged. */
    Ignore = 0,
    /** The point's z-coordinate replaces the existing vertex's z-coordinate. */
    Replace = 1,
    /**
     * Like [[InsertedVertexZOptions.Replace]], but the existing vertex's z-coordinate is updated only if the
     * point's z-coordinate is larger.
     */
    ReplaceIfLarger = 2,
    /**
     * Like [[InsertedVertexZOptions.Replace]], but the existing vertex's z-coordinate is updated only if the
     * point's z-coordinate is smaller.
     */
    ReplaceIfSmaller = 3
}
/**
 * Context for repeated insertion of new points in a graph.
 * * Initial graph should have clean outer boundary (e.g., as typically marked with `HalfEdgeMask.EXTERIOR` and
 * `HalfEdgeMask.BOUNDARY_EDGE`).
 * * After each insertion, the current "position" within the graph is remembered so that each subsequent insertion
 * can reuse that position as start for walking to the new point.
 * @internal
 */
export declare class InsertAndRetriangulateContext {
    private _graph;
    private _edgeSet;
    private _searcher;
    private _tolerance;
    private constructor();
    /** Create a new context referencing the graph. */
    static create(graph: HalfEdgeGraph, tolerance?: number): InsertAndRetriangulateContext;
    /** Query the (pointer to) the graph in the context. */
    get graph(): HalfEdgeGraph;
    /**
     * Walk face from edgeNode. Insert new edges back to start node from all except immediate successor and predecessor.
     * Insert all new nodes and nodes of the existing face in edgeSet.
     */
    private retriangulateFromBaseVertex;
    /** Reset the "current" position to unknown state. */
    reset(): void;
    /** Return a (reference to!) the current position in the graph. */
    get currentPosition(): HalfEdgePositionDetail;
    /** Linear search for the nearest graph edge or vertex. */
    searchForNearestEdgeOrVertex(xyz: Point3d): HalfEdgePositionDetail;
    /** Linear search for the nearest graph vertex. */
    searchForNearestVertex(xyz: Point3d): HalfEdgePositionDetail;
    /**
     * Reset the "current" position to a vertex nearest the target point.
     * @param xyz target point
     * @param searchEdgesToo reset to nearest vertex or edge
    */
    resetSearch(xyz: Point3d, searchEdgesToo: boolean): void;
    /** Reclassify the current interior face hit if it is too close to an edge of the face. */
    private reclassifyFaceHit;
    /** Reclassify the current interior edge hit if it is too close to an edge of either adjacent face. */
    private reclassifyEdgeHit;
    /**
     * Given a point that was just inserted into the graph at the given node, apply the z-coordinate rule around
     * the vertex loop.
     */
    private updateZAroundVertex;
    /**
     * Insert a new point into the graph and retriangulate.
     * @param point the coordinates of the node to be inserted.
     * @param newZWins rule governing when `point.z` should override the z-coordinate of an existing vertex with the
     * same x and y.
     * @returns true if and only if the point didn't need to be inserted or was successfully inserted.
     */
    insertAndRetriangulate(point: Point3d, newZWins: InsertedVertexZOptions): boolean;
    /**
     * Advance movingPosition to a face, edge, or vertex position detail that contains `target`.
     * @param movingPosition input seed for search, updated on return.
     * @param target point to search for containing topology in the graph.
     * @param announcer optional callback invoked during search loop; return false to end search.
     * @returns true if search was successful.
     */
    moveToPoint(movingPosition: HalfEdgePositionDetail, target: Point3d, announcer?: (position: HalfEdgePositionDetail) => boolean): boolean;
}
//# sourceMappingURL=InsertAndRetriangulateContext.d.ts.map