import { Point2d } from "../geometry3d/Point2dVector2d";
import { Point3d } from "../geometry3d/Point3dVector3d";
/**
 * CurveLocationDetail carries point and parameter data about a point evaluated on a curve.
 * * These are returned by a variety of queries.
 * * Particular contents can vary among the queries.
 * @public
 */
export class UVSurfaceLocationDetail {
    /** The surface being evaluated */
    surface;
    /** uv coordinates in the surface */
    uv;
    /** The point on the surface */
    point;
    /** A context-specific numeric value.  (E.g. a distance) */
    a;
    /** Construct with empty data. */
    constructor(surface, uv, point) {
        this.surface = surface;
        this.point = point ? point : Point3d.createZero();
        this.uv = uv ? uv : Point2d.createZero();
        this.a = 0.0;
    }
    /**
     * Create a new detail structure.
     * @param surface
     * @param uv coordinates to copy (not capture) into the `detail.uv`
     * @param point coordinates to copy (not capture) into the `detail.point`
     */
    static createSurfaceUVPoint(surface, uv, point) {
        const detail = new UVSurfaceLocationDetail(surface);
        if (uv)
            detail.uv.setFrom(uv);
        detail.point.setFromPoint3d(point);
        return detail;
    }
    /**
     * Create a new detail structure.
     * @param surface
     * @param uv coordinates to copy (not capture) into the `detail.uv`
     * @param point coordinates to copy (not capture) into the `detail.point`
     */
    static createSurfaceUVNumbersPoint(surface, u, v, point) {
        const detail = new UVSurfaceLocationDetail(surface);
        detail.uv.x = u;
        detail.uv.y = v;
        detail.point.setFromPoint3d(point);
        return detail;
    }
}
/**
 * Carrier for both curve and surface data, e.g. from intersection calculations.
 * @public
 */
export class CurveAndSurfaceLocationDetail {
    /** detailed location on the curve */
    curveDetail;
    /** detailed location on the surface */
    surfaceDetail;
    /** CAPTURE both details . . */
    constructor(curveDetail, surfaceDetail) {
        this.curveDetail = curveDetail;
        this.surfaceDetail = surfaceDetail;
    }
}
//# sourceMappingURL=SurfaceLocationDetail.js.map