import { Point3d } from "../geometry3d/Point3dVector3d";
import { Ray3d } from "../geometry3d/Ray3d";
import { HalfEdge } from "./Graph";
import { HalfEdgePositionDetail } from "./HalfEdgePositionDetail";
/**
 * Return code from [PointSearchContext.reAimAroundFace]
 * @internal
 */
export declare enum RayClassification {
    NoHits = 0,
    TargetOnVertex = 1,
    TargetOnEdge = 2,
    Bracket = 3,
    TargetBefore = 4,
    TargetAfter = 5
}
/**
 * Context for searching for the location of an xy-point in a graph.
 * * Assumptions: interior faces of the graph are convex, no edge has length less than `tol`.
 * @internal
 */
export declare class PointSearchContext {
    private _tol;
    private constructor();
    static create(tol?: number): PointSearchContext;
    private panic;
    /**
     * Reposition `edgeHit` to an adjacent face or vertex, or another position on the edge, that is closer to the
     * target point.
     * @param edgeHit start position on a graph edge, updated and returned.
     * @param ray the ray to the target point. Origin is assumed to lie on the edge.
     * @param targetDistance distance along the ray to the target point.
     * @return detail closer to the target point.
     */
    reAimFromEdge(edgeHit: HalfEdgePositionDetail, ray: Ray3d, targetDistance: number): HalfEdgePositionDetail;
    /**
     * Reposition `vertexHit` to an adjacent face, edge, or vertex hit that is closer to the target point.
     * @param vertexHit start position at a graph vertex, updated and returned.
     * @param ray the ray to the target point, assumed to start exactly at the vertex.
     * @param targetDistance distance along the ray to the target point.
     * @return detail closer to the target point.
     */
    reAimFromVertex(vertexHit: HalfEdgePositionDetail, ray: Ray3d, targetDistance: number): HalfEdgePositionDetail;
    /**
     * Visit all edges around the face, updating `lastBefore` and `firstAfter` to ray-edge intersections that
     * lie directly before and/or after the target point on the ray, if at all.
     * @param faceNode starting node on a graph face.
     * @param ray the ray to the target point.
     * @param targetDistance distance along the ray to the target point.
     * @param lastBefore the detail to reset as the last hit on the ray before the target point (CALLER CREATED).
     * @param firstAfter the detail to reset as the first hit on the ray after the target point (CALLER CREATED).
     * @returns summary of the updated details:
     * * [[RayClassification.TargetOnVertex]] - target lies at a vertex of the face (details are identical).
     * * [[RayClassification.TargetOnEdge]] - target lies on an edge of the face (details are identical).
     * * [[RayClassification.TargetBefore]] - target lies before the face; the ray intersects the face beyond
     * the target point.
     * * [[RayClassification.TargetAfter]] - target lies after the face; the ray intersects the face before
     * the target point.
     * * [[RayClassification.Bracket]] - target lies between intersections of the ray and the face; if the face
     * is convex, this means the target lies inside the face.
     * * [[RayClassification.NoHits]] - the face does not intersect the ray.
     */
    reAimAroundFace(faceNode: HalfEdge, ray: Ray3d, targetDistance: number, lastBefore: HalfEdgePositionDetail, firstAfter: HalfEdgePositionDetail): RayClassification;
    /**
     * Initialize the input ray for topology search:
     * * `origin` is at `start`
     * * `direction` is the unit xy-vector from `start` towards `target`
     * * `a` is the xy-distance from `start` to `target`
     * @param start existing position
     * @param target target xy coordinates
     * @param ray updated in place
     * @returns false if target is reached.
     */
    setSearchRay(start: HalfEdgePositionDetail, target: Point3d, ray: Ray3d): boolean;
}
//# sourceMappingURL=HalfEdgePointInGraphSearch.d.ts.map